Mercurial > kallithea
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') |