Skip to content

Commit bd9aa59

Browse files
authored
Merge pull request #55957 from nextcloud/backport/55952/stable31
2 parents a1f1d99 + 2045edb commit bd9aa59

File tree

1 file changed

+28
-15
lines changed

1 file changed

+28
-15
lines changed

lib/private/Group/Database.php

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -359,31 +359,44 @@ public function searchInGroup(string $gid, string $search = '', int $limit = -1,
359359
$this->fixDI();
360360

361361
$query = $this->dbConn->getQueryBuilder();
362-
$query->select('g.uid', 'u.displayname');
362+
$query->select('g.uid', 'dn.value AS displayname');
363363

364364
$query->from('group_user', 'g')
365365
->where($query->expr()->eq('gid', $query->createNamedParameter($gid)))
366366
->orderBy('g.uid', 'ASC');
367367

368-
$query->leftJoin('g', 'users', 'u', $query->expr()->eq('g.uid', 'u.uid'));
368+
// Join displayname and email from oc_accounts_data
369+
$query->leftJoin('g', 'accounts_data', 'dn',
370+
$query->expr()->andX(
371+
$query->expr()->eq('dn.uid', 'g.uid'),
372+
$query->expr()->eq('dn.name', $query->expr()->literal('displayname'))
373+
)
374+
);
375+
376+
$query->leftJoin('g', 'accounts_data', 'em',
377+
$query->expr()->andX(
378+
$query->expr()->eq('em.uid', 'g.uid'),
379+
$query->expr()->eq('em.name', $query->expr()->literal('email'))
380+
)
381+
);
369382

370383
if ($search !== '') {
371-
$query->leftJoin('u', 'preferences', 'p', $query->expr()->andX(
372-
$query->expr()->eq('p.userid', 'u.uid'),
373-
$query->expr()->eq('p.appid', $query->expr()->literal('settings')),
374-
$query->expr()->eq('p.configkey', $query->expr()->literal('email'))
375-
))
376-
// sqlite doesn't like re-using a single named parameter here
377-
->andWhere(
378-
$query->expr()->orX(
379-
$query->expr()->ilike('g.uid', $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')),
380-
$query->expr()->ilike('u.displayname', $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%')),
381-
$query->expr()->ilike('p.configvalue', $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%'))
382-
)
384+
// sqlite doesn't like re-using a single named parameter here
385+
$searchParam1 = $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%');
386+
$searchParam2 = $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%');
387+
$searchParam3 = $query->createNamedParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%');
388+
389+
$query->andWhere(
390+
$query->expr()->orX(
391+
$query->expr()->ilike('g.uid', $searchParam1),
392+
$query->expr()->ilike('dn.value', $searchParam2),
393+
$query->expr()->ilike('em.value', $searchParam3)
383394
)
384-
->orderBy('u.uid_lower', 'ASC');
395+
)
396+
->orderBy('g.uid', 'ASC');
385397
}
386398

399+
387400
if ($limit !== -1) {
388401
$query->setMaxResults($limit);
389402
}

0 commit comments

Comments
 (0)