@@ -237,4 +237,36 @@ public function countUsers(): int {
237237
238238 return (int )$ count ;
239239 }
240+
241+ /**
242+ * @return array<string, string>
243+ */
244+ public function searchKnownUsersByDisplayName (string $ searcher , string $ pattern , ?int $ limit = null , ?int $ offset = null ): array {
245+ $ query = $ this ->db ->getQueryBuilder ();
246+
247+ $ query ->select ('u.user_id ' , 'u.display_name ' )
248+ ->from ($ this ->getTableName (), 'u ' )
249+ ->leftJoin ('u ' , 'known_users ' , 'k ' , $ query ->expr ()->andX (
250+ $ query ->expr ()->eq ('k.known_user ' , 'u.user_id ' ),
251+ $ query ->expr ()->eq ('k.known_to ' , $ query ->createNamedParameter ($ searcher ))
252+ ))
253+ ->where ($ query ->expr ()->eq ('k.known_to ' , $ query ->createNamedParameter ($ searcher )))
254+ ->andWhere ($ query ->expr ()->orX (
255+ $ query ->expr ()->iLike ('u.user_id ' , $ query ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ pattern ) . '% ' )),
256+ $ query ->expr ()->iLike ('u.display_name ' , $ query ->createNamedParameter ('% ' . $ this ->db ->escapeLikeParameter ($ pattern ) . '% ' ))
257+ ))
258+ ->orderBy ('u.display_name ' , 'ASC ' )
259+ ->addOrderBy ('u.user_id ' , 'ASC ' )
260+ ->setMaxResults ($ limit )
261+ ->setFirstResult ($ offset );
262+
263+ $ result = $ query ->executeQuery ();
264+ $ displayNames = [];
265+ while ($ row = $ result ->fetch ()) {
266+ $ displayNames [(string )$ row ['user_id ' ]] = (string )$ row ['display_name ' ];
267+ }
268+ $ result ->closeCursor ();
269+
270+ return $ displayNames ;
271+ }
240272}
0 commit comments