@@ -6376,9 +6376,8 @@ function api_get_roles(): array
63766376
63776377 $ codes = Container::$ container
63786378 ->get (\Chamilo \CoreBundle \Helpers \PermissionHelper::class)
6379- ->getUserRoles (); // list of role codes from DB
6379+ ->getUserRoles ();
63806380
6381- // Built-in labels fallbacks. DB codes are used as keys.
63826381 $ labels = [
63836382 'ROLE_STUDENT ' => get_lang ('Learner ' ),
63846383 'STUDENT ' => get_lang ('Learner ' ),
@@ -6398,8 +6397,6 @@ function api_get_roles(): array
63986397 'ADMIN ' => get_lang ('Admin ' ),
63996398 'ROLE_PLATFORM_ADMIN ' => get_lang ('Administrator ' ),
64006399 'PLATFORM_ADMIN ' => get_lang ('Administrator ' ),
6401- 'ROLE_SUPER_ADMIN ' => get_lang ('Super admin ' ),
6402- 'SUPER_ADMIN ' => get_lang ('Super admin ' ),
64036400 'ROLE_GLOBAL_ADMIN ' => get_lang ('Global admin ' ),
64046401 'GLOBAL_ADMIN ' => get_lang ('Global admin ' ),
64056402 'ROLE_ANONYMOUS ' => 'Anonymous ' ,
@@ -6795,7 +6792,6 @@ function api_drh_can_access_all_session_content()
67956792function api_can_login_as ($ loginAsUserId , $ userId = null )
67966793{
67976794 $ loginAsUserId = (int ) $ loginAsUserId ;
6798-
67996795 if (empty ($ loginAsUserId )) {
68006796 return false ;
68016797 }
@@ -6808,9 +6804,8 @@ function api_can_login_as($loginAsUserId, $userId = null)
68086804 return false ;
68096805 }
68106806
6811- // Check if the user to login is an admin
6807+ // If target is an admin, only global admins can login to admin accounts
68126808 if (api_is_platform_admin_by_id ($ loginAsUserId )) {
6813- // Only super admins can login to admin accounts
68146809 if (!api_global_admin_can_edit_admin ($ loginAsUserId )) {
68156810 return false ;
68166811 }
@@ -6821,25 +6816,18 @@ function api_can_login_as($loginAsUserId, $userId = null)
68216816 $ isDrh = function () use ($ loginAsUserId ) {
68226817 if (api_is_drh ()) {
68236818 if (api_drh_can_access_all_session_content ()) {
6824- $ users = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus (
6825- 'drh_all ' ,
6826- api_get_user_id ()
6827- );
6828- $ userList = [];
6819+ $ users = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus ('drh_all ' , api_get_user_id ());
6820+ $ userIds = [];
68296821 if (is_array ($ users )) {
68306822 foreach ($ users as $ user ) {
6831- $ userList [] = $ user ['id ' ];
6823+ $ userIds [] = $ user ['id ' ];
68326824 }
68336825 }
6834- if (in_array ($ loginAsUserId , $ userList )) {
6835- return true ;
6836- }
6837- } else {
6838- if (api_is_drh () &&
6839- UserManager::is_user_followed_by_drh ($ loginAsUserId , api_get_user_id ())
6840- ) {
6841- return true ;
6842- }
6826+ return in_array ($ loginAsUserId , $ userIds );
6827+ }
6828+
6829+ if (UserManager::is_user_followed_by_drh ($ loginAsUserId , api_get_user_id ())) {
6830+ return true ;
68436831 }
68446832 }
68456833
@@ -6852,9 +6840,9 @@ function api_can_login_as($loginAsUserId, $userId = null)
68526840 $ loginAsStatusForSessionAdmins [] = COURSEMANAGER ;
68536841 }
68546842
6855- return api_is_platform_admin () ||
6856- (api_is_session_admin () && in_array ($ userInfo ['status ' ], $ loginAsStatusForSessionAdmins )) ||
6857- $ isDrh ();
6843+ return api_is_platform_admin () // local admins can login as (except into other admins unless allowed above)
6844+ || (api_is_session_admin () && in_array ($ userInfo ['status ' ], $ loginAsStatusForSessionAdmins ))
6845+ || $ isDrh ();
68586846}
68596847
68606848/**
0 commit comments