aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2024-05-16 16:13:31 +0200
committerCôme Chilliet <come.chilliet@nextcloud.com>2024-05-23 09:08:31 +0200
commit6d56f3557d3eba4f41d0381c6f8fc8fda036a3b4 (patch)
tree92a5389dd0f90945b8429104e34550540be83fd1
parent474cbda59a4c5c4a225918724a871451a0f49a7f (diff)
downloadnextcloud-server-6d56f3557d3eba4f41d0381c6f8fc8fda036a3b4.tar.gz
nextcloud-server-6d56f3557d3eba4f41d0381c6f8fc8fda036a3b4.zip
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>
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php7
-rw-r--r--apps/settings/src/components/UserList.vue1
-rw-r--r--apps/settings/src/store/users.js4
-rw-r--r--apps/user_ldap/lib/User_LDAP.php2
-rw-r--r--apps/user_ldap/lib/User_Proxy.php14
-rw-r--r--lib/private/User/Manager.php12
-rw-r--r--lib/public/IUserManager.php3
-rw-r--r--lib/public/User/Backend/IProvideEnabledStateBackend.php3
8 files changed, 34 insertions, 12 deletions
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index 2e27d875ab4..5770ca39bda 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.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()
)
)
diff --git a/apps/settings/src/components/UserList.vue b/apps/settings/src/components/UserList.vue
index 3ddb617dda5..00289c6f84a 100644
--- a/apps/settings/src/components/UserList.vue
+++ b/apps/settings/src/components/UserList.vue
@@ -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', {
diff --git a/apps/settings/src/store/users.js b/apps/settings/src/store/users.js
index bfc0f4e119f..96f761a8814 100644
--- a/apps/settings/src/store/users.js
+++ b/apps/settings/src/store/users.js
@@ -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
diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php
index 7d5562f0ee0..6b12ef0ace3 100644
--- a/apps/user_ldap/lib/User_LDAP.php
+++ b/apps/user_ldap/lib/User_LDAP.php
@@ -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');
}
}
diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php
index 3df1990359a..5f17548fac7 100644
--- a/apps/user_ldap/lib/User_Proxy.php
+++ b/apps/user_ldap/lib/User_Proxy.php
@@ -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
)
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php
index c7611da382d..8234f505a47 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -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);
}
diff --git a/lib/public/IUserManager.php b/lib/public/IUserManager.php
index 0a94c5ad928..94ab487d318 100644
--- a/lib/public/IUserManager.php
+++ b/lib/public/IUserManager.php
@@ -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
diff --git a/lib/public/User/Backend/IProvideEnabledStateBackend.php b/lib/public/User/Backend/IProvideEnabledStateBackend.php
index f12d99fd1a6..3fd517048fb 100644
--- a/lib/public/User/Backend/IProvideEnabledStateBackend.php
+++ b/lib/public/User/Backend/IProvideEnabledStateBackend.php
@@ -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;
}