diff options
author | Côme Chilliet <come.chilliet@nextcloud.com> | 2025-02-27 16:21:30 +0100 |
---|---|---|
committer | Côme Chilliet <come.chilliet@nextcloud.com> | 2025-03-31 15:39:05 +0200 |
commit | d3bc8b771c78ca881c127b6f614eb3fc9c4107ef (patch) | |
tree | e7a95b8ac17088de88eece881bafdcbb2a9756ab /lib | |
parent | dde95a77184a0eef65aec51d8f2e71c7ecdb51df (diff) | |
download | nextcloud-server-d3bc8b771c78ca881c127b6f614eb3fc9c4107ef.tar.gz nextcloud-server-d3bc8b771c78ca881c127b6f614eb3fc9c4107ef.zip |
fix: Correctly count disabled users for SAML groups subadmins
If too many users return -1 as for LDAP so that link is shown
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/User/Manager.php | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php index 501f13e98c6..9324810e907 100644 --- a/lib/private/User/Manager.php +++ b/lib/private/User/Manager.php @@ -492,8 +492,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 = []; @@ -507,6 +506,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. * |