feat: Add back searching in disabled user list

When disabled users where moved to their own endpoint we overlooked
 search, so adding it back.
The search is done case-insensitive in uid and display name.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
pull/45370/head
Côme Chilliet 6 months ago
parent 474cbda59a
commit 6d56f3557d
No known key found for this signature in database
GPG Key ID: A3E2F658B28C760A
  1. 7
      apps/provisioning_api/lib/Controller/UsersController.php
  2. 1
      apps/settings/src/components/UserList.vue
  3. 4
      apps/settings/src/store/users.js
  4. 2
      apps/user_ldap/lib/User_LDAP.php
  5. 14
      apps/user_ldap/lib/User_Proxy.php
  6. 12
      lib/private/User/Manager.php
  7. 3
      lib/public/IUserManager.php
  8. 3
      lib/public/User/Backend/IProvideEnabledStateBackend.php

@ -225,13 +225,14 @@ class UsersController extends AUserData {
*
* Get the list of disabled users and their details
*
* @param string $search Text to search for
* @param ?int $limit Limit the amount of users returned
* @param int $offset Offset
* @return DataResponse<Http::STATUS_OK, array{users: array<string, Provisioning_APIUserDetails|array{id: string}>}, array{}>
*
* 200: Disabled users details returned
*/
public function getDisabledUsersDetails(?int $limit = null, int $offset = 0): DataResponse {
public function getDisabledUsersDetails(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$currentUser = $this->userSession->getUser();
if ($currentUser === null) {
return new DataResponse(['users' => []]);
@ -249,7 +250,7 @@ class UsersController extends AUserData {
$uid = $currentUser->getUID();
$subAdminManager = $this->groupManager->getSubAdmin();
if ($this->groupManager->isAdmin($uid)) {
$users = $this->userManager->getDisabledUsers($limit, $offset);
$users = $this->userManager->getDisabledUsers($limit, $offset, $search);
$users = array_map(fn (IUser $user): string => $user->getUID(), $users);
} elseif ($subAdminManager->isSubAdmin($currentUser)) {
$subAdminOfGroups = $subAdminManager->getSubAdminsGroups($currentUser);
@ -263,7 +264,7 @@ class UsersController extends AUserData {
array_map(
fn (IUser $user): string => $user->getUID(),
array_filter(
$group->searchUsers('', ($tempLimit === null ? null : $tempLimit - count($users))),
$group->searchUsers($search, ($tempLimit === null ? null : $tempLimit - count($users))),
fn (IUser $user): bool => !$user->isEnabled()
)
)

@ -313,6 +313,7 @@ export default {
await this.$store.dispatch('getDisabledUsers', {
offset: this.disabledUsersOffset,
limit: this.disabledUsersLimit,
search: this.searchQuery,
})
} else {
await this.$store.dispatch('getUsers', {

@ -416,8 +416,8 @@ const actions = {
* @param {number} options.limit List number to return from offset
* @return {Promise<number>}
*/
async getDisabledUsers(context, { offset, limit }) {
const url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}', { offset, limit })
async getDisabledUsers(context, { offset, limit, search }) {
const url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}&search={search}', { offset, limit, search })
try {
const response = await api.get(url)
const usersCount = Object.keys(response.data.ocs.data.users).length

@ -682,7 +682,7 @@ class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, I
return $enabled;
}
public function getDisabledUserList(?int $limit = null, int $offset = 0): array {
public function getDisabledUserList(?int $limit = null, int $offset = 0, string $search = ''): array {
throw new \Exception('This is implemented directly in User_Proxy');
}
}

@ -463,11 +463,21 @@ class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP
return $this->handleRequest($uid, 'setUserEnabled', [$uid, $enabled, $queryDatabaseValue, $setDatabaseValue]);
}
public function getDisabledUserList(?int $limit = null, int $offset = 0): array {
public function getDisabledUserList(?int $limit = null, int $offset = 0, string $search = ''): array {
$disabledUsers = $this->deletedUsersIndex->getUsers();
if ($search !== '') {
$disabledUsers = array_filter(
$disabledUsers,
fn (OfflineUser $user): bool =>
mb_stripos($user->getOCName(), $search) !== false ||
mb_stripos($user->getUID(), $search) !== false ||
mb_stripos($user->getDisplayName(), $search) !== false,
);
}
return array_map(
fn (OfflineUser $user) => $user->getOCName(),
array_slice(
$this->deletedUsersIndex->getUsers(),
$disabledUsers,
$offset,
$limit
)

@ -333,7 +333,7 @@ class Manager extends PublicEmitter implements IUserManager {
/**
* @return IUser[]
*/
public function getDisabledUsers(?int $limit = null, int $offset = 0): array {
public function getDisabledUsers(?int $limit = null, int $offset = 0, string $search = ''): array {
$users = $this->config->getUsersForUserValue('core', 'enabled', 'false');
$users = array_combine(
$users,
@ -342,6 +342,14 @@ class Manager extends PublicEmitter implements IUserManager {
$users
)
);
if ($search !== '') {
$users = array_filter(
$users,
fn (IUser $user): bool =>
mb_stripos($user->getUID(), $search) !== false ||
mb_stripos($user->getDisplayName(), $search) !== false,
);
}
$tempLimit = ($limit === null ? null : $limit + $offset);
foreach ($this->backends as $backend) {
@ -349,7 +357,7 @@ class Manager extends PublicEmitter implements IUserManager {
break;
}
if ($backend instanceof IProvideEnabledStateBackend) {
$backendUsers = $backend->getDisabledUserList(($tempLimit === null ? null : $tempLimit - count($users)));
$backendUsers = $backend->getDisabledUserList(($tempLimit === null ? null : $tempLimit - count($users)), 0, $search);
foreach ($backendUsers as $uid) {
$users[$uid] = new LazyUser($uid, $this, null, $backend);
}

@ -142,8 +142,9 @@ interface IUserManager {
/**
* @return IUser[]
* @since 28.0.0
* @since 30.0.0 $search parameter added
*/
public function getDisabledUsers(?int $limit = null, int $offset = 0): array;
public function getDisabledUsers(?int $limit = null, int $offset = 0, string $search = ''): array;
/**
* Search known users (from phonebook sync) by displayName

@ -49,8 +49,9 @@ interface IProvideEnabledStateBackend {
* Get the list of disabled users, to merge with the ones disabled in database
*
* @since 28.0.0
* @since 30.0.0 $search parameter added
*
* @return string[]
*/
public function getDisabledUserList(?int $limit = null, int $offset = 0): array;
public function getDisabledUserList(?int $limit = null, int $offset = 0, string $search = ''): array;
}

Loading…
Cancel
Save