diff rhodecode/controllers/admin/users.py @ 2658:80d837028c40 beta

implemented admin panel Users table with YUI datatable - much better handling of big amount of users - filtering by username - sorting by columns
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 25 Jul 2012 21:54:03 +0200
parents 94ae02ca5f00
children 91c442a489bb
line wrap: on
line diff
--- a/rhodecode/controllers/admin/users.py	Wed Jul 25 00:38:05 2012 +0200
+++ b/rhodecode/controllers/admin/users.py	Wed Jul 25 21:54:03 2012 +0200
@@ -26,6 +26,7 @@
 import logging
 import traceback
 import formencode
+from pylons import response
 
 from formencode import htmlfill
 from pylons import request, session, tmpl_context as c, url, config
@@ -35,7 +36,7 @@
 from rhodecode.lib.exceptions import DefaultUserException, \
     UserOwnsReposException
 from rhodecode.lib import helpers as h
-from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator,\
+from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
     AuthUser
 from rhodecode.lib.base import BaseController, render
 
@@ -44,6 +45,7 @@
 from rhodecode.model.user import UserModel
 from rhodecode.model.meta import Session
 from rhodecode.lib.utils import action_logger
+from rhodecode.lib.compat import json
 
 log = logging.getLogger(__name__)
 
@@ -66,7 +68,48 @@
         """GET /users: All items in the collection"""
         # url('users')
 
-        c.users_list = self.sa.query(User).all()
+        c.users_list = User.query().order_by(User.username).all()
+
+        users_data = []
+        total_records = len(c.users_list)
+        grav_tmpl = """<div class="gravatar"><img alt="gravatar" src="%s"/> </div>"""
+        usr_tmpl = """<a href="%s">%s</a>""" % (h.url('edit_user', id='__ID__'), '%s')
+        usr_tmpl = usr_tmpl.replace('__ID__', '%s')
+        edit_tmpl = '''
+            <form action="/_admin/users/%s" method="post">
+            <div style="display:none">
+            <input name="_method" type="hidden" value="%s">
+            </div>
+            <input class="delete_icon action_button" id="remove_user_%s" 
+            name="remove_" onclick="return confirm('%s');" 
+            type="submit" value="delete">
+            </form>
+        '''
+        for user in c.users_list:
+            users_data.append({
+                "gravatar": grav_tmpl % h.gravatar_url(user.email, 24),
+                "raw_username": user.username,
+                "username": usr_tmpl % (user.user_id, user.username),
+                "firstname": user.name,
+                "lastname": user.lastname,
+                "last_login": h.fmt_date(user.last_login),
+                "active": h.bool2icon(user.active),
+                "admin": h.bool2icon(user.admin),
+                "ldap": h.bool2icon(bool(user.ldap_dn)),
+                "action": edit_tmpl % (user.user_id, _('delete'),
+                    user.user_id,
+                    _('Confirm to delete this user: %s') % user.username
+                ),
+            })
+
+        c.data = json.dumps({
+            "totalRecords": total_records,
+            "startIndex": 0,
+            "sort": None,
+            "dir": "asc",
+            "records": users_data
+        })
+
         return render('admin/users/users.html')
 
     def create(self):