diff --git a/public/main/admin/user_edit.php b/public/main/admin/user_edit.php index db1c4525741..eeb064d4fd4 100644 --- a/public/main/admin/user_edit.php +++ b/public/main/admin/user_edit.php @@ -264,7 +264,8 @@ function confirmation(name) { $display = 'none'; if (isset($_POST['roles']) && is_array($_POST['roles'])) { - $display = in_array('ROLE_TEACHER', $_POST['roles']) || in_array('ROLE_SESSION_MANAGER', $_POST['roles']) ? 'block' : 'none'; + $norm = array_map('api_normalize_role_code', $_POST['roles']); + $display = (in_array('ROLE_TEACHER', $norm, true) || in_array('ROLE_SESSION_MANAGER', $norm, true)) ? 'block' : 'none'; } // Platform admin @@ -398,9 +399,22 @@ function confirmation(name) { $user_data['expiration_date'] = api_get_local_time($expiration_date); } } -$availableRoles = array_keys(api_get_roles()); -$userRoles = array_intersect($userObj->getRoles(), $availableRoles); -$user_data['roles'] = $userRoles; + +$roleOptions = api_get_roles(); +$optionKeyByCanon = []; +foreach ($roleOptions as $optKey => $label) { + $optionKeyByCanon[api_normalize_role_code((string) $optKey)] = $optKey; +} + +$userCanonRoles = array_map('api_normalize_role_code', (array) $userObj->getRoles()); +$selectedOptionKeys = []; +foreach ($userCanonRoles as $canon) { + if (isset($optionKeyByCanon[$canon])) { + $selectedOptionKeys[] = $optionKeyByCanon[$canon]; + } +} + +$user_data['roles'] = array_values(array_unique($selectedOptionKeys)); $form->setDefaults($user_data); $error_drh = false; diff --git a/public/main/inc/lib/api.lib.php b/public/main/inc/lib/api.lib.php index 511c3407a47..fc4b95082c2 100644 --- a/public/main/inc/lib/api.lib.php +++ b/public/main/inc/lib/api.lib.php @@ -6499,8 +6499,6 @@ function api_normalize_role_code(string $code): string { 'QUESTION_MANAGER' => 'ROLE_QUESTION_MANAGER', 'ADMIN' => 'ROLE_ADMIN', 'GLOBAL_ADMIN' => 'ROLE_GLOBAL_ADMIN', - 'SUPER_ADMIN' => 'ROLE_GLOBAL_ADMIN', - 'ROLE_SUPER_ADMIN' => 'ROLE_GLOBAL_ADMIN', ]; if (!str_starts_with($c, 'ROLE_')) { return $map[$c] ?? ('ROLE_'.$c);