4040use OCP \Group \Backend \IGetDisplayNameBackend ;
4141use OCP \Group \Backend \IGroupDetailsBackend ;
4242use OCP \Group \Backend \IRemoveFromGroupBackend ;
43+ use OCP \Group \Backend \ISearchableGroupBackend ;
4344use OCP \Group \Backend \ISetDisplayNameBackend ;
4445use OCP \Group \Backend \INamedBackend ;
4546use OCP \IDBConnection ;
4647use OCP \IUserManager ;
4748use OC \User \LazyUser ;
48- use OC \User \DisplayNameCache ;
4949
5050/**
5151 * Class for group management in a SQL Database (e.g. MySQL, SQLite)
@@ -60,6 +60,7 @@ class Database extends ABackend implements
6060 IGroupDetailsBackend,
6161 IRemoveFromGroupBackend,
6262 ISetDisplayNameBackend,
63+ ISearchableGroupBackend,
6364 INamedBackend {
6465
6566 /** @var string[] */
@@ -328,56 +329,15 @@ public function groupExists($gid) {
328329 }
329330
330331 /**
331- * get a list of all users in a group
332+ * Get a list of all users in a group
332333 * @param string $gid
333334 * @param string $search
334335 * @param int $limit
335336 * @param int $offset
336- * @return array an array of user ids
337+ * @return array<string> an array of user ids
337338 */
338- public function usersInGroup ($ gid , $ search = '' , $ limit = -1 , $ offset = 0 ) {
339- $ this ->fixDI ();
340-
341- $ query = $ this ->dbConn ->getQueryBuilder ();
342- $ query ->select ('g.uid ' )
343- ->from ('group_user ' , 'g ' )
344- ->where ($ query ->expr ()->eq ('gid ' , $ query ->createNamedParameter ($ gid )))
345- ->orderBy ('g.uid ' , 'ASC ' );
346-
347- if ($ search !== '' ) {
348- $ query ->leftJoin ('g ' , 'users ' , 'u ' , $ query ->expr ()->eq ('g.uid ' , 'u.uid ' ))
349- ->leftJoin ('u ' , 'preferences ' , 'p ' , $ query ->expr ()->andX (
350- $ query ->expr ()->eq ('p.userid ' , 'u.uid ' ),
351- $ query ->expr ()->eq ('p.appid ' , $ query ->expr ()->literal ('settings ' )),
352- $ query ->expr ()->eq ('p.configkey ' , $ query ->expr ()->literal ('email ' )))
353- )
354- // sqlite doesn't like re-using a single named parameter here
355- ->andWhere (
356- $ query ->expr ()->orX (
357- $ query ->expr ()->ilike ('g.uid ' , $ query ->createNamedParameter ('% ' . $ this ->dbConn ->escapeLikeParameter ($ search ) . '% ' )),
358- $ query ->expr ()->ilike ('u.displayname ' , $ query ->createNamedParameter ('% ' . $ this ->dbConn ->escapeLikeParameter ($ search ) . '% ' )),
359- $ query ->expr ()->ilike ('p.configvalue ' , $ query ->createNamedParameter ('% ' . $ this ->dbConn ->escapeLikeParameter ($ search ) . '% ' ))
360- )
361- )
362- ->orderBy ('u.uid_lower ' , 'ASC ' );
363- }
364-
365- if ($ limit !== -1 ) {
366- $ query ->setMaxResults ($ limit );
367- }
368- if ($ offset !== 0 ) {
369- $ query ->setFirstResult ($ offset );
370- }
371-
372- $ result = $ query ->execute ();
373-
374- $ users = [];
375- while ($ row = $ result ->fetch ()) {
376- $ users [] = $ row ['uid ' ];
377- }
378- $ result ->closeCursor ();
379-
380- return $ users ;
339+ public function usersInGroup ($ gid , $ search = '' , $ limit = -1 , $ offset = 0 ): array {
340+ return array_map (fn ($ user ) => $ user ->getUid (), $ this ->searchInGroup ($ gid , $ search , $ limit , $ offset ));
381341 }
382342
383343 public function searchInGroup (string $ gid , string $ search = '' , int $ limit = -1 , int $ offset = 0 ): array {
@@ -390,7 +350,7 @@ public function searchInGroup(string $gid, string $search = '', int $limit = -1,
390350 ->where ($ query ->expr ()->eq ('gid ' , $ query ->createNamedParameter ($ gid )))
391351 ->orderBy ('g.uid ' , 'ASC ' );
392352
393- $ query ->leftJoin ('g ' , 'users ' , 'u ' , $ query ->expr ()->eq ('g.uid ' , 'u.uid ' ))
353+ $ query ->leftJoin ('g ' , 'users ' , 'u ' , $ query ->expr ()->eq ('g.uid ' , 'u.uid ' ));
394354
395355 if ($ search !== '' ) {
396356 $ query ->leftJoin ('u ' , 'preferences ' , 'p ' , $ query ->expr ()->andX (
@@ -420,9 +380,8 @@ public function searchInGroup(string $gid, string $search = '', int $limit = -1,
420380
421381 $ users = [];
422382 $ userManager = \OCP \Server::get (IUserManager::class);
423- $ displayNameCache = \OCP \Server::get (DisplayNameCache::class);
424383 while ($ row = $ result ->fetch ()) {
425- $ users [$ row ['uid ' ]] = new LazyUser ($ row ['uid ' ], $ displayNameCache , $ userManager , $ row ['displayname ' ] ?? null );
384+ $ users [$ row ['uid ' ]] = new LazyUser ($ row ['uid ' ], $ userManager , $ row ['displayname ' ] ?? null );
426385 }
427386 $ result ->closeCursor ();
428387
0 commit comments