changeset 2699:4eef5eeb81a3 beta

fixed sorting by last_login in users admin page
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 07 Aug 2012 23:02:50 +0200
parents 4debfe3b50be
children 48fad3a6e2f8
files rhodecode/controllers/admin/users.py rhodecode/lib/utils2.py rhodecode/public/js/rhodecode.js rhodecode/templates/admin/users/users.html
diffstat 4 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/users.py	Tue Aug 07 22:10:44 2012 +0200
+++ b/rhodecode/controllers/admin/users.py	Tue Aug 07 23:02:50 2012 +0200
@@ -47,6 +47,7 @@
 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 @@
                 .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 @@
                 "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)),
--- a/rhodecode/lib/utils2.py	Tue Aug 07 22:10:44 2012 +0200
+++ b/rhodecode/lib/utils2.py	Tue Aug 07 23:02:50 2012 +0200
@@ -24,6 +24,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 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 @@
     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 @@
 
     return sorted(list(usrs), key=lambda k: k.lower())
 
+
 class AttributeDict(dict):
     def __getattr__(self, attr):
         return self.get(attr, None)
--- a/rhodecode/public/js/rhodecode.js	Tue Aug 07 22:10:44 2012 +0200
+++ b/rhodecode/public/js/rhodecode.js	Tue Aug 07 23:02:50 2012 +0200
@@ -1529,6 +1529,15 @@
     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));
--- a/rhodecode/templates/admin/users/users.html	Tue Aug 07 22:10:44 2012 +0200
+++ b/rhodecode/templates/admin/users/users.html	Tue Aug 07 23:02:50 2012 +0200
@@ -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,},