aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/settings/lib/Controller/UsersController.php16
-rw-r--r--lib/private/User/Manager.php27
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.
*