From 887be85b5590f55d8d216168dadc8eb91517e5b4 Mon Sep 17 00:00:00 2001 From: Marcin Grabias <mgrabias@ogtrading.eu> Date: Thu, 1 May 2025 13:27:18 +0200 Subject: [PATCH] Conditionally hide the roles selector; unset roles if hidden selector value leaks. --- src/Hook/CourseMembershipHooksBase.php | 15 +++++++++------ src/Hook/LmsCourseMembershipHooks.php | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Hook/CourseMembershipHooksBase.php b/src/Hook/CourseMembershipHooksBase.php index 750ff10..790e01f 100644 --- a/src/Hook/CourseMembershipHooksBase.php +++ b/src/Hook/CourseMembershipHooksBase.php @@ -42,17 +42,12 @@ abstract class CourseMembershipHooksBase { return; } - // Roles selected - don't do anything. - $roles = $form_state->getValue('group_roles'); - if (\is_array($roles) && \count(\array_filter($roles)) > 0) { - return; - } - $class_id = (string) $form_state->getValue('class'); if ($class_id === '' || $class_id === '0') { return; } + $form_state->setValue('group_roles', []); $user_id = $form_state->getValue(['entity_id', '0', 'target_id']); $potential_member = $this->entityTypeManager->getStorage('user')->load($user_id); if ($course->isClassMember($potential_member)) { @@ -89,6 +84,14 @@ abstract class CourseMembershipHooksBase { '#description' => $self_join ? $this->t('You will be added to the selected class.') : $this->t('Student will be added to the selected class.'), '#options' => $options, ]; + + if (\array_key_exists('group_roles', $form)) { + $form['group_roles']['#states'] = [ + 'visible' => [ + 'select[name=class]' => ['value' => '0'], + ], + ]; + } } /** diff --git a/src/Hook/LmsCourseMembershipHooks.php b/src/Hook/LmsCourseMembershipHooks.php index 62e956d..2ed04f1 100644 --- a/src/Hook/LmsCourseMembershipHooks.php +++ b/src/Hook/LmsCourseMembershipHooks.php @@ -55,10 +55,10 @@ final class LmsCourseMembershipHooks extends CourseMembershipHooksBase { if ($self_join) { $form['actions']['submit']['#value'] = $this->t('Join training'); } - $form['#validate'][] = [ + \array_unshift($form['#validate'], [ $this, 'membershipFormValidate', - ]; + ]); $this->addClassSelector($form, $course, $self_join); -- GitLab