From 6566f35deb1a03b36ce8be650a46c7b2c7b8938a Mon Sep 17 00:00:00 2001 From: Mike Bonnet Date: Mon, 30 Apr 2007 13:52:38 -0400 Subject: [PATCH] enable filtering of the users list by first character --- hub/kojihub.py | 8 +++++--- www/kojiweb/index.py | 10 ++++++++-- www/kojiweb/users.chtml | 33 +++++++++++++++++++++++++-------- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/hub/kojihub.py b/hub/kojihub.py index 353dcd48..6c99d6a2 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -4382,7 +4382,7 @@ class RootExports(object): else: clauses.append('build.task_id = %(taskID)i') if prefix: - clauses.append("package.name ~* ('^' || %(prefix)s || '.*')") + clauses.append("package.name ilike %(prefix)s || '%%'") if state != None: clauses.append('build.state = %(state)i') if completeBefore: @@ -4759,7 +4759,7 @@ class RootExports(object): dropGroupMember = staticmethod(drop_group_member) getGroupMembers = staticmethod(get_group_members) - def listUsers(self, userType=koji.USERTYPES['NORMAL'], queryOpts=None): + def listUsers(self, userType=koji.USERTYPES['NORMAL'], prefix=None, queryOpts=None): """List all users in the system. type can be either koji.USERTYPES['NORMAL'] or koji.USERTYPES['HOST']. Returns a list of maps with the @@ -4774,7 +4774,9 @@ class RootExports(object): If no users of the specified type exist, return an empty list.""" fields = ('id', 'name', 'status', 'usertype', 'krb_principal') - clauses = ('usertype = %(userType)i',) + clauses = ['usertype = %(userType)i'] + if prefix: + clauses.append("name ilike %(prefix)s || '%%'") query = QueryProcessor(columns=fields, tables=('users',), clauses=clauses, values=locals(), opts=queryOpts) return query.execute() diff --git a/www/kojiweb/index.py b/www/kojiweb/index.py index dc83d865..0f7c44e1 100644 --- a/www/kojiweb/index.py +++ b/www/kojiweb/index.py @@ -875,15 +875,21 @@ def builds(req, userID=None, tagID=None, state=None, order='-completion_time', s return _genHTML(req, 'builds.chtml') -def users(req, order='name', start=None): +def users(req, order='name', start=None, prefix=None): values = _initValues(req, 'Users', 'users') server = _getServer(req) + if prefix: + prefix = prefix.lower() + values['prefix'] = prefix + values['order'] = order - users = kojiweb.util.paginateMethod(server, values, 'listUsers', + users = kojiweb.util.paginateMethod(server, values, 'listUsers', kw={'prefix': prefix}, start=start, dataName='users', prefix='user', order=order) + values['chars'] = [chr(char) for char in range(48, 58) + range(97, 123)] + return _genHTML(req, 'users.chtml') def userinfo(req, userID, packageOrder='package_name', packageStart=None, buildOrder='-completion_time', buildStart=None): diff --git a/www/kojiweb/users.chtml b/www/kojiweb/users.chtml index 93e4709d..fdb32aad 100644 --- a/www/kojiweb/users.chtml +++ b/www/kojiweb/users.chtml @@ -4,12 +4,29 @@

Users

+ + + - - + + @@ -54,7 +71,7 @@ #if $len($userPages) > 1 Page: - #for $pageNum in $userPages #end for @@ -62,13 +79,13 @@ #end if #if $userStart > 0 - <<< + <<< #end if #if $totalUsers != 0 Users #echo $userStart + 1 # through #echo $userStart + $userCount # of $totalUsers #end if #if $userStart + $userCount < $totalUsers - >>> + >>> #end if
+ #for $char in $chars + #if $prefix == $char + $char + #else + $char + #end if + | + #end for + #if $prefix + all + #else + all + #end if +
#if $len($userPages) > 1
Page: - #for $pageNum in $userPages #end for @@ -17,19 +34,19 @@
#end if #if $userStart > 0 - <<< + <<< #end if #if $totalUsers != 0 Users #echo $userStart + 1 # through #echo $userStart + $userCount # of $totalUsers #end if #if $userStart + $userCount < $totalUsers - >>> + >>> #end if
ID $util.sortImage($self, 'id')Name $util.sortImage($self, 'name')ID $util.sortImage($self, 'id')Name $util.sortImage($self, 'name') Packages Builds Tasks