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 ;
47+ use OCP \IUser ;
4648use OCP \IUserManager ;
4749use OC \User \LazyUser ;
48- use OC \User \DisplayNameCache ;
4950
5051/**
5152 * Class for group management in a SQL Database (e.g. MySQL, SQLite)
@@ -60,6 +61,7 @@ class Database extends ABackend implements
6061 IGroupDetailsBackend,
6162 IRemoveFromGroupBackend,
6263 ISetDisplayNameBackend,
64+ ISearchableGroupBackend,
6365 INamedBackend {
6466
6567 /** @var string[] */
@@ -328,56 +330,15 @@ public function groupExists($gid) {
328330 }
329331
330332 /**
331- * get a list of all users in a group
333+ * Get a list of all users in a group
332334 * @param string $gid
333335 * @param string $search
334336 * @param int $limit
335337 * @param int $offset
336- * @return array an array of user ids
338+ * @return array<string> an array of user ids
337339 */
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 ;
340+ public function usersInGroup ($ gid , $ search = '' , $ limit = -1 , $ offset = 0 ): array {
341+ return array_map (fn ($ user ) => $ user ->getUid (), $ this ->searchInGroup ($ gid , $ search , $ limit , $ offset ));
381342 }
382343
383344 public function searchInGroup (string $ gid , string $ search = '' , int $ limit = -1 , int $ offset = 0 ): array {
@@ -390,7 +351,7 @@ public function searchInGroup(string $gid, string $search = '', int $limit = -1,
390351 ->where ($ query ->expr ()->eq ('gid ' , $ query ->createNamedParameter ($ gid )))
391352 ->orderBy ('g.uid ' , 'ASC ' );
392353
393- $ query ->leftJoin ('g ' , 'users ' , 'u ' , $ query ->expr ()->eq ('g.uid ' , 'u.uid ' ))
354+ $ query ->leftJoin ('g ' , 'users ' , 'u ' , $ query ->expr ()->eq ('g.uid ' , 'u.uid ' ));
394355
395356 if ($ search !== '' ) {
396357 $ query ->leftJoin ('u ' , 'preferences ' , 'p ' , $ query ->expr ()->andX (
@@ -420,9 +381,8 @@ public function searchInGroup(string $gid, string $search = '', int $limit = -1,
420381
421382 $ users = [];
422383 $ userManager = \OCP \Server::get (IUserManager::class);
423- $ displayNameCache = \OCP \Server::get (DisplayNameCache::class);
424384 while ($ row = $ result ->fetch ()) {
425- $ users [$ row ['uid ' ]] = new LazyUser ($ row ['uid ' ], $ displayNameCache , $ userManager , $ row ['displayname ' ] ?? null );
385+ $ users [$ row ['uid ' ]] = new LazyUser ($ row ['uid ' ], $ userManager , $ row ['displayname ' ] ?? null );
426386 }
427387 $ result ->closeCursor ();
428388
0 commit comments