diff options
author | Julius Härtl <jus@bitgrid.net> | 2021-06-16 14:47:36 +0200 |
---|---|---|
committer | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2024-02-27 18:44:09 +0100 |
commit | 78970ce58f8215ed371a55071acb4b5d32b3f227 (patch) | |
tree | 58a288554f7da781a55f57c0ca413f4d36b200ad | |
parent | 455a209b9c4f3b95a016ce1c0bcd1bcfa3fc86bf (diff) | |
download | nextcloud-server-enh/displayname-group-search.tar.gz nextcloud-server-enh/displayname-group-search.zip |
Manually search for displayname by iterating over group membersenh/displayname-group-search
Signed-off-by: Julius Härtl <jus@bitgrid.net>
-rw-r--r-- | lib/private/Group/Manager.php | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/lib/private/Group/Manager.php b/lib/private/Group/Manager.php index dafbe4295a4..baa1a5c2542 100644 --- a/lib/private/Group/Manager.php +++ b/lib/private/Group/Manager.php @@ -443,21 +443,17 @@ class Manager extends PublicEmitter implements IGroupManager { if (!empty($search)) { // only user backends have the capability to do a complex search for users - $searchOffset = 0; - $searchLimit = $limit * 100; - if ($limit === -1) { - $searchLimit = 500; - } - + $chunkOffset = 0; + $chunkLimit = 500; do { - $filteredUsers = $this->userManager->searchDisplayName($search, $searchLimit, $searchOffset); - foreach ($filteredUsers as $filteredUser) { - if ($group->inGroup($filteredUser)) { - $groupUsers[] = $filteredUser; + $userChunk = $group->searchUsers('', $chunkLimit, $chunkOffset); + foreach ($userChunk as $user) { + if (mb_stripos($user->getDisplayName(), $search) > -1) { + $groupUsers[] = $user; } } - $searchOffset += $searchLimit; - } while (count($groupUsers) < $searchLimit + $offset && count($filteredUsers) >= $searchLimit); + $chunkOffset += $chunkLimit; + } while (count($userChunk) !== 0); if ($limit === -1) { $groupUsers = array_slice($groupUsers, $offset); |