diff options
-rw-r--r-- | apps/settings/lib/Controller/UsersController.php | 16 | ||||
-rw-r--r-- | lib/private/User/Manager.php | 27 |
2 files changed, 29 insertions, 14 deletions
diff --git a/apps/settings/lib/Controller/UsersController.php b/apps/settings/lib/Controller/UsersController.php index 36b8683e781..d0e1cc2ba3d 100644 --- a/apps/settings/lib/Controller/UsersController.php +++ b/apps/settings/lib/Controller/UsersController.php @@ -152,20 +152,12 @@ class UsersController extends Controller { }, 0); } else { // User is subadmin ! - // Map group list to ids to retrieve the countDisabledUsersOfGroups - $userGroups = $this->groupManager->getUserGroups($user); - $groupsIds = []; - - foreach ($groups as $key => $group) { - // $userCount += (int)$group['usercount']; - $groupsIds[] = $group['id']; - } - - $userCount += $this->userManager->countUsersOfGroups($groupsInfo->getGroups()); - $disabledUsers = $this->userManager->countDisabledUsersOfGroups($groupsIds); + [$userCount,$disabledUsers] = $this->userManager->countUsersAndDisabledUsersOfGroups($groupsInfo->getGroups(), 999); } - $userCount -= $disabledUsers; + if ($disabledUsers > 0) { + $userCount -= $disabledUsers; + } } $recentUsersGroup = [ diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php index aa2acb55782..85e0adf15d8 100644 --- a/lib/private/User/Manager.php +++ b/lib/private/User/Manager.php @@ -524,8 +524,7 @@ class Manager extends PublicEmitter implements IUserManager { * returns how many users per backend exist in the requested groups (if supported by backend) * * @param IGroup[] $groups an array of gid to search in - * @return array|int an array of backend class as key and count number as value - * if $hasLoggedIn is true only an int is returned + * @return int */ public function countUsersOfGroups(array $groups) { $users = []; @@ -539,6 +538,30 @@ class Manager extends PublicEmitter implements IUserManager { } /** + * returns how many users per backend exist in the requested groups (if supported by backend) + * + * @param IGroup[] $groups an array of groups to search in + * @param int $limit limit to stop counting + * @return array{int,int} total number of users, and number of disabled users in the given groups, below $limit. If limit is reached, -1 is returned for number of disabled users + */ + public function countUsersAndDisabledUsersOfGroups(array $groups, int $limit): array { + $users = []; + $disabled = []; + foreach ($groups as $group) { + foreach ($group->getUsers() as $user) { + $users[$user->getUID()] = 1; + if (!$user->isEnabled()) { + $disabled[$user->getUID()] = 1; + } + if (count($users) >= $limit) { + return [count($users),-1]; + } + } + } + return [count($users),count($disabled)]; + } + + /** * The callback is executed for each user on each backend. * If the callback returns false no further users will be retrieved. * |