comparison 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
comparison
equal deleted inserted replaced
2657:001c7e2ae986 2658:80d837028c40
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26 import logging 26 import logging
27 import traceback 27 import traceback
28 import formencode 28 import formencode
29 from pylons import response
29 30
30 from formencode import htmlfill 31 from formencode import htmlfill
31 from pylons import request, session, tmpl_context as c, url, config 32 from pylons import request, session, tmpl_context as c, url, config
32 from pylons.controllers.util import redirect 33 from pylons.controllers.util import redirect
33 from pylons.i18n.translation import _ 34 from pylons.i18n.translation import _
34 35
35 from rhodecode.lib.exceptions import DefaultUserException, \ 36 from rhodecode.lib.exceptions import DefaultUserException, \
36 UserOwnsReposException 37 UserOwnsReposException
37 from rhodecode.lib import helpers as h 38 from rhodecode.lib import helpers as h
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator,\ 39 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
39 AuthUser 40 AuthUser
40 from rhodecode.lib.base import BaseController, render 41 from rhodecode.lib.base import BaseController, render
41 42
42 from rhodecode.model.db import User, Permission, UserEmailMap 43 from rhodecode.model.db import User, Permission, UserEmailMap
43 from rhodecode.model.forms import UserForm 44 from rhodecode.model.forms import UserForm
44 from rhodecode.model.user import UserModel 45 from rhodecode.model.user import UserModel
45 from rhodecode.model.meta import Session 46 from rhodecode.model.meta import Session
46 from rhodecode.lib.utils import action_logger 47 from rhodecode.lib.utils import action_logger
48 from rhodecode.lib.compat import json
47 49
48 log = logging.getLogger(__name__) 50 log = logging.getLogger(__name__)
49 51
50 52
51 class UsersController(BaseController): 53 class UsersController(BaseController):
64 66
65 def index(self, format='html'): 67 def index(self, format='html'):
66 """GET /users: All items in the collection""" 68 """GET /users: All items in the collection"""
67 # url('users') 69 # url('users')
68 70
69 c.users_list = self.sa.query(User).all() 71 c.users_list = User.query().order_by(User.username).all()
72
73 users_data = []
74 total_records = len(c.users_list)
75 grav_tmpl = """<div class="gravatar"><img alt="gravatar" src="%s"/> </div>"""
76 usr_tmpl = """<a href="%s">%s</a>""" % (h.url('edit_user', id='__ID__'), '%s')
77 usr_tmpl = usr_tmpl.replace('__ID__', '%s')
78 edit_tmpl = '''
79 <form action="/_admin/users/%s" method="post">
80 <div style="display:none">
81 <input name="_method" type="hidden" value="%s">
82 </div>
83 <input class="delete_icon action_button" id="remove_user_%s"
84 name="remove_" onclick="return confirm('%s');"
85 type="submit" value="delete">
86 </form>
87 '''
88 for user in c.users_list:
89 users_data.append({
90 "gravatar": grav_tmpl % h.gravatar_url(user.email, 24),
91 "raw_username": user.username,
92 "username": usr_tmpl % (user.user_id, user.username),
93 "firstname": user.name,
94 "lastname": user.lastname,
95 "last_login": h.fmt_date(user.last_login),
96 "active": h.bool2icon(user.active),
97 "admin": h.bool2icon(user.admin),
98 "ldap": h.bool2icon(bool(user.ldap_dn)),
99 "action": edit_tmpl % (user.user_id, _('delete'),
100 user.user_id,
101 _('Confirm to delete this user: %s') % user.username
102 ),
103 })
104
105 c.data = json.dumps({
106 "totalRecords": total_records,
107 "startIndex": 0,
108 "sort": None,
109 "dir": "asc",
110 "records": users_data
111 })
112
70 return render('admin/users/users.html') 113 return render('admin/users/users.html')
71 114
72 def create(self): 115 def create(self):
73 """POST /users: Create a new item""" 116 """POST /users: Create a new item"""
74 # url('users') 117 # url('users')