diff options
author | Julius Härtl <jus@bitgrid.net> | 2021-06-16 15:47:36 +0300 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2022-10-14 15:11:20 +0300 |
commit | e0ef68037a8cfec3752e0e8962621b0ac1201739 (patch) | |
tree | c8713b512aaeec2ba92157974127ba8882a4e4ea | |
parent | 0ac2a9036d8cc88b5f882aa8e3e2f10f472a588a (diff) |
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 28f7a400b41..0b8032a52b3 100644 --- a/lib/private/Group/Manager.php +++ b/lib/private/Group/Manager.php @@ -370,21 +370,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); |