/** * get a list of all display names in a group * @param string $gid * @param string $search * @param int $limit * @param int $offset * @return array an array of display names (value) and user ids (key) */ public function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) { $group = $this->get($gid); if (is_null($group)) { return array(); } $search = trim($search); $groupUsers = array(); 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; } do { $filteredUsers = $this->userManager->searchDisplayName($search, $searchLimit, $searchOffset); foreach ($filteredUsers as $filteredUser) { if ($group->inGroup($filteredUser)) { $groupUsers[] = $filteredUser; } } $searchOffset += $searchLimit; } while (count($groupUsers) < $searchLimit + $offset && count($filteredUsers) >= $searchLimit); if ($limit === -1) { $groupUsers = array_slice($groupUsers, $offset); } else { $groupUsers = array_slice($groupUsers, $offset, $limit); } } else { $groupUsers = $group->searchUsers('', $limit, $offset); } $matchingUsers = array(); foreach ($groupUsers as $groupUser) { $matchingUsers[$groupUser->getUID()] = $groupUser->getDisplayName(); } return $matchingUsers; }