@@ -498,7 +498,7 @@ def get_users(self):
498
498
)
499
499
500
500
def get_users_paginate (
501
- self , start , limit , name = None , guests = True , deactivated = False
501
+ self , start , limit , user_id = None , name = None , guests = True , deactivated = False
502
502
):
503
503
"""Function to retrieve a paginated list of users from
504
504
users list. This will return a json list of users and the
@@ -507,7 +507,8 @@ def get_users_paginate(
507
507
Args:
508
508
start (int): start number to begin the query from
509
509
limit (int): number of rows to retrieve
510
- name (string): filter for user names
510
+ user_id (string): search for user_id
511
+ name (string): search for local part of user_id or display name
511
512
guests (bool): whether to in include guest users
512
513
deactivated (bool): whether to include deactivated users
513
514
Returns:
@@ -516,11 +517,14 @@ def get_users_paginate(
516
517
517
518
def get_users_paginate_txn (txn ):
518
519
filters = []
519
- args = []
520
+ args = [self . hs . config . server_name ]
520
521
521
522
if name :
523
+ filters .append ("(name LIKE ? OR displayname LIKE ?)" )
524
+ args .extend (["@%" + name + "%:%" , "%" + name + "%" ])
525
+ elif user_id :
522
526
filters .append ("name LIKE ?" )
523
- args .append ( "%" + name + "%" )
527
+ args .extend ([ "%" + user_id + "%" ] )
524
528
525
529
if not guests :
526
530
filters .append ("is_guest = 0" )
@@ -530,20 +534,23 @@ def get_users_paginate_txn(txn):
530
534
531
535
where_clause = "WHERE " + " AND " .join (filters ) if len (filters ) > 0 else ""
532
536
533
- sql = "SELECT COUNT(*) as total_users FROM users %s" % (where_clause )
534
- txn .execute (sql , args )
535
- count = txn .fetchone ()[0 ]
536
-
537
- args = [self .hs .config .server_name ] + args + [limit , start ]
538
- sql = """
539
- SELECT name, user_type, is_guest, admin, deactivated, displayname, avatar_url
537
+ sql_base = """
540
538
FROM users as u
541
539
LEFT JOIN profiles AS p ON u.name = '@' || p.user_id || ':' || ?
542
540
{}
543
- ORDER BY u.name LIMIT ? OFFSET ?
544
541
""" .format (
545
542
where_clause
546
543
)
544
+ sql = "SELECT COUNT(*) as total_users " + sql_base
545
+ txn .execute (sql , args )
546
+ count = txn .fetchone ()[0 ]
547
+
548
+ sql = (
549
+ "SELECT name, user_type, is_guest, admin, deactivated, displayname, avatar_url "
550
+ + sql_base
551
+ + " ORDER BY u.name LIMIT ? OFFSET ?"
552
+ )
553
+ args += [limit , start ]
547
554
txn .execute (sql , args )
548
555
users = self .db_pool .cursor_to_dict (txn )
549
556
return users , count
0 commit comments