diff --git a/lib/private/AllConfig.php b/lib/private/AllConfig.php index f39182683f5..398ac9a6567 100644 --- a/lib/private/AllConfig.php +++ b/lib/private/AllConfig.php @@ -505,29 +505,31 @@ class AllConfig implements IConfig { $query = $this->connection->getQueryBuilder(); - $query->select('uid', 'displayname') + $query->selectDistinct('uid') ->from('users', 'u') ->leftJoin('u', 'preferences', 'p', $query->expr()->andX( - $query->expr()->eq('userid', 'uid'), - $query->expr()->eq('appid', $query->expr()->literal('login')), - $query->expr()->eq('configkey', $query->expr()->literal('lastLogin'))) + $query->expr()->eq('p.userid', 'uid'), + $query->expr()->eq('p.appid', $query->expr()->literal('login')), + $query->expr()->eq('p.configkey', $query->expr()->literal('lastLogin'))) + )->leftJoin('u', 'preferences', 'p1', $query->expr()->andX( + $query->expr()->eq('p1.userid', 'uid'), + $query->expr()->eq('p1.appid', $query->expr()->literal('settings')), + $query->expr()->eq('p1.configkey', $query->expr()->literal('email'))) ) // sqlite doesn't like re-using a single named parameter here ->where($query->expr()->iLike('uid', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%'))) ->orWhere($query->expr()->iLike('displayname', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%'))) - ->orWhere($query->expr()->iLike('configvalue', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%'))) - ->orderBy($query->func()->lower('configvalue'), 'DESC') + ->orWhere($query->expr()->iLike('p1.configvalue', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%'))) + ->orderBy($query->func()->lower('p.configvalue'), 'DESC') ->addOrderBy('uid_lower', 'ASC') ->setFirstResult($offset) ->setMaxResults($limit); $result = $query->executeQuery(); - $displayNames = []; - while ($row = $result->fetch()) { - $displayNames[(string)$row['uid']] = (string)$row['uid']; - } + $uids = $result->fetchAll(\PDO::FETCH_COLUMN); + $result->closeCursor(); - return $displayNames; + return $uids; } /** diff --git a/lib/public/IConfig.php b/lib/public/IConfig.php index 92dcfe7f8bc..175f0e90c49 100644 --- a/lib/public/IConfig.php +++ b/lib/public/IConfig.php @@ -256,7 +256,7 @@ interface IConfig { * @param int|null $limit how many records to fetch * @param int $offset from which offset to fetch * @param string $search search users based on search params - * @return array of user IDs + * @return list list of user IDs * @since 30.0.0 */ public function getLastLoggedInUsers(?int $limit = null, int $offset = 0, string $search = ''): array;