*
* 200: Users returned
*/
- public function getUsers(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
+ public function getUsers(string $search = '', ?int $limit = null, int $offset = 0, string $orderBy = 'last_login', string $sort = 'DESC'): DataResponse {
$user = $this->userSession->getUser();
$users = [];
$uid = $user->getUID();
$subAdminManager = $this->groupManager->getSubAdmin();
if ($this->groupManager->isAdmin($uid)) {
- $users = $this->userManager->search($search, $limit, $offset);
+ $users = $this->userManager->search($search, $limit, $offset, $orderBy, $sort);
} elseif ($subAdminManager->isSubAdmin($user)) {
$subAdminOfGroups = $subAdminManager->getSubAdminsGroups($user);
foreach ($subAdminOfGroups as $key => $group) {
* @param string $search Text to search for
* @param int|null $limit Limit the amount of groups returned
* @param int $offset Offset for searching for groups
+ * @param string $orderBy Field to order the results with
+ * @param string $sort ASC or DESC
* @return DataResponse<Http::STATUS_OK, array{users: array<string, Provisioning_APIUserDetails|array{id: string}>}, array{}>
*
* 200: Users details returned
*/
- public function getUsersDetails(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
+ public function getUsersDetails(string $search = '', ?int $limit = null, int $offset = 0, string $orderBy = 'displayName', string $sort = 'ASC'): DataResponse {
$currentUser = $this->userSession->getUser();
$users = [];
$uid = $currentUser->getUID();
$subAdminManager = $this->groupManager->getSubAdmin();
if ($this->groupManager->isAdmin($uid)) {
- $users = $this->userManager->search($search, $limit, $offset);
+ $users = $this->userManager->search($search, $limit, $offset, $orderBy, $sort);
$users = array_keys($users);
} elseif ($subAdminManager->isSubAdmin($currentUser)) {
$subAdminOfGroups = $subAdminManager->getSubAdminsGroups($currentUser);
$users = [];
foreach ($subAdminOfGroups as $group) {
- $users[] = array_keys($this->groupManager->displayNamesInGroup($group, $search, $limit, $offset));
+ $users[] = array_keys($this->groupManager->displayNamesInGroup($group, $search, $limit, $offset, $orderBy, $sort));
}
$users = array_merge(...$users);
}
* @param int $offset
* @return array an array of display names (value) and user ids (key)
*/
- public function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+ public function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0, $orderBy = 'uid', $sort = 'ASC') {
$group = $this->get($gid);
if (is_null($group)) {
return [];
}
do {
- $filteredUsers = $this->userManager->searchDisplayName($search, $searchLimit, $searchOffset);
+ $filteredUsers = $this->userManager->searchDisplayName($search, $searchLimit, $searchOffset, $orderBy, $sort);
foreach ($filteredUsers as $filteredUser) {
if ($group->inGroup($filteredUser)) {
$groupUsers[] = $filteredUser;
* @return IUser[]
* @deprecated since 27.0.0, use searchDisplayName instead
*/
- public function search($pattern, $limit = null, $offset = null) {
+ public function search($pattern, $limit = null, $offset = null, $orderBy = 'uid', $sort = 'ASC') {
$users = [];
foreach ($this->backends as $backend) {
$backendUsers = $backend->getUsers($pattern, $limit, $offset);
}
}
}
+ switch ($orderBy.' '.$sort) {
+ case 'uid DESC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($b->getUID(), $a->getUID());
+ });
+ break;
+ case 'last_login ASC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($a->getLastLogin(), $b->getLastLogin());
+ });
+ break;
+ case 'last_login DESC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($b->getLastLogin(), $a->getLastLogin());
+ });
+ break;
+ case 'displayName ASC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($a->getDisplayName(), $b->getDisplayName());
+ });
+ break;
+ case 'displayName DESC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($b->getDisplayName(), $a->getDisplayName());
+ });
+ break;
+ default:
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($a->getUID(), $b->getUID());
+ });
+ break;
+ }
- uasort($users, function (IUser $a, IUser $b) {
- return strcasecmp($a->getUID(), $b->getUID());
- });
return $users;
}
* @param int $offset
* @return IUser[]
*/
- public function searchDisplayName($pattern, $limit = null, $offset = null) {
+ public function searchDisplayName($pattern, $limit = null, $offset = null, $orderBy = 'displayName', $sort= 'ASC') {
$users = [];
foreach ($this->backends as $backend) {
$backendUsers = $backend->getDisplayNames($pattern, $limit, $offset);
}
}
- usort($users, function (IUser $a, IUser $b) {
- return strcasecmp($a->getDisplayName(), $b->getDisplayName());
- });
+ switch ($orderBy.' '.$sort) {
+ case 'uid ASC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($a->getUID(), $b->getUID());
+ });
+ break;
+ case 'uid DESC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($b->getUID(), $a->getUID());
+ });
+ break;
+ case 'last_login ASC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($a->getLastLogin(), $b->getLastLogin());
+ });
+ break;
+ case 'last_login DESC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($b->getLastLogin(), $a->getLastLogin());
+ });
+ break;
+ case 'displayName DESC':
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($b->getDisplayName(), $a->getDisplayName());
+ });
+ break;
+ default:
+ uasort($users, function (IUser $a, IUser $b) {
+ return strcasecmp($a->getDisplayName(), $b->getDisplayName());
+ });
+ break;
+ }
+
+
return $users;
}