# HG changeset patch # User Marcin Kuzminski # Date 2012-08-07 23:02:50 # Node ID 4eef5eeb81a399928fc85964d3494907defc1a01 # Parent 4debfe3b50be77e3eab7580f1d2654d5a9b71910 fixed sorting by last_login in users admin page diff --git a/rhodecode/controllers/admin/users.py b/rhodecode/controllers/admin/users.py --- a/rhodecode/controllers/admin/users.py +++ b/rhodecode/controllers/admin/users.py @@ -47,6 +47,7 @@ from rhodecode.model.user import UserMod from rhodecode.model.meta import Session from rhodecode.lib.utils import action_logger from rhodecode.lib.compat import json +from rhodecode.lib.utils2 import datetime_to_time log = logging.getLogger(__name__) @@ -89,6 +90,7 @@ class UsersController(BaseController): .render(user_id, username, _=_, h=h, c=c)) for user in c.users_list: + users_data.append({ "gravatar": grav_tmpl(user. email, 24), "raw_username": user.username, @@ -96,6 +98,7 @@ class UsersController(BaseController): "firstname": user.name, "lastname": user.lastname, "last_login": h.fmt_date(user.last_login), + "last_login_raw": datetime_to_time(user.last_login), "active": h.bool2icon(user.active), "admin": h.bool2icon(user.admin), "ldap": h.bool2icon(bool(user.ldap_dn)), diff --git a/rhodecode/lib/utils2.py b/rhodecode/lib/utils2.py --- a/rhodecode/lib/utils2.py +++ b/rhodecode/lib/utils2.py @@ -24,6 +24,7 @@ # along with this program. If not, see . import re +import time from datetime import datetime from pylons.i18n.translation import _, ungettext from rhodecode.lib.vcs.utils.lazy import LazyProperty @@ -429,6 +430,11 @@ def get_changeset_safe(repo, rev): return cs +def datetime_to_time(dt): + if dt: + return time.mktime(dt.timetuple()) + + MENTIONS_REGEX = r'(?:^@|\s@)([a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+)(?:\s{1})' @@ -444,6 +450,7 @@ def extract_mentioned_users(s): return sorted(list(usrs), key=lambda k: k.lower()) + class AttributeDict(dict): def __getattr__(self, attr): return self.get(attr, None) diff --git a/rhodecode/public/js/rhodecode.js b/rhodecode/public/js/rhodecode.js --- a/rhodecode/public/js/rhodecode.js +++ b/rhodecode/public/js/rhodecode.js @@ -1529,6 +1529,15 @@ var ageSort = function(a, b, desc, field return compState; }; +var lastLoginSort = function(a, b, desc, field) { + var a_ = a.getData('last_login_raw') || 0; + var b_ = b.getData('last_login_raw') || 0; + + var comp = YAHOO.util.Sort.compare; + var compState = comp(a_, b_, desc); + return compState; +}; + var nameSort = function(a, b, desc, field) { var a_ = fromHTML(a.getData(field)); var b_ = fromHTML(b.getData(field)); diff --git a/rhodecode/templates/admin/users/users.html b/rhodecode/templates/admin/users/users.html --- a/rhodecode/templates/admin/users/users.html +++ b/rhodecode/templates/admin/users/users.html @@ -44,6 +44,7 @@ {key: "firstname"}, {key: "lastname"}, {key: "last_login"}, + {key: "last_login_raw"}, {key: "active"}, {key: "admin"}, {key: "ldap"}, @@ -78,7 +79,8 @@ }, {key:"firstname",label:"${_('firstname')}",sortable:true,}, {key:"lastname",label:"${_('lastname')}",sortable:true,}, - {key:"last_login",label:"${_('last login')}",sortable:true,}, + {key:"last_login",label:"${_('last login')}",sortable:true, + sortOptions: { sortFunction: lastLoginSort }}, {key:"active",label:"${_('active')}",sortable:true,}, {key:"admin",label:"${_('admin')}",sortable:true,}, {key:"ldap",label:"${_('ldap')}",sortable:true,},