comparison rhodecode/controllers/admin/users_groups.py @ 2031:82a88013a3fd

merge 1.3 into stable
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 26 Feb 2012 17:25:09 +0200
parents 4a7de41dc22a
children d9ba58526712
comparison
equal deleted inserted replaced
2005:ab0e122b38a7 2031:82a88013a3fd
5 5
6 Users Groups crud controller for pylons 6 Users Groups crud controller for pylons
7 7
8 :created_on: Jan 25, 2011 8 :created_on: Jan 25, 2011
9 :author: marcink 9 :author: marcink
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> 10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details. 11 :license: GPLv3, see COPYING for more details.
12 """ 12 """
13 # This program is free software: you can redistribute it and/or modify 13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by 14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or 15 # the Free Software Foundation, either version 3 of the License, or
31 from pylons import request, session, tmpl_context as c, url, config 31 from pylons import request, session, tmpl_context as c, url, config
32 from pylons.controllers.util import abort, redirect 32 from pylons.controllers.util import abort, redirect
33 from pylons.i18n.translation import _ 33 from pylons.i18n.translation import _
34 34
35 from rhodecode.lib.exceptions import UsersGroupsAssignedException 35 from rhodecode.lib.exceptions import UsersGroupsAssignedException
36 from rhodecode.lib import helpers as h 36 from rhodecode.lib import helpers as h, safe_unicode
37 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator 37 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
38 from rhodecode.lib.base import BaseController, render 38 from rhodecode.lib.base import BaseController, render
39 39
40 from rhodecode.model.users_group import UsersGroupModel
41
40 from rhodecode.model.db import User, UsersGroup, Permission, UsersGroupToPerm 42 from rhodecode.model.db import User, UsersGroup, Permission, UsersGroupToPerm
41 from rhodecode.model.forms import UserForm, UsersGroupForm 43 from rhodecode.model.forms import UsersGroupForm
44 from rhodecode.model.meta import Session
42 45
43 log = logging.getLogger(__name__) 46 log = logging.getLogger(__name__)
44 47
45 48
46 class UsersGroupsController(BaseController): 49 class UsersGroupsController(BaseController):
68 # url('users_groups') 71 # url('users_groups')
69 72
70 users_group_form = UsersGroupForm()() 73 users_group_form = UsersGroupForm()()
71 try: 74 try:
72 form_result = users_group_form.to_python(dict(request.POST)) 75 form_result = users_group_form.to_python(dict(request.POST))
73 UsersGroup.create(form_result) 76 UsersGroupModel().create(name=form_result['users_group_name'],
77 active=form_result['users_group_active'])
74 h.flash(_('created users group %s') \ 78 h.flash(_('created users group %s') \
75 % form_result['users_group_name'], category='success') 79 % form_result['users_group_name'], category='success')
76 #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa) 80 #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
81 Session.commit()
77 except formencode.Invalid, errors: 82 except formencode.Invalid, errors:
78 return htmlfill.render( 83 return htmlfill.render(
79 render('admin/users_groups/users_group_add.html'), 84 render('admin/users_groups/users_group_add.html'),
80 defaults=errors.value, 85 defaults=errors.value,
81 errors=errors.error_dict or {}, 86 errors=errors.error_dict or {},
101 # h.form(url('users_group', id=ID), 106 # h.form(url('users_group', id=ID),
102 # method='put') 107 # method='put')
103 # url('users_group', id=ID) 108 # url('users_group', id=ID)
104 109
105 c.users_group = UsersGroup.get(id) 110 c.users_group = UsersGroup.get(id)
106 c.group_members = [(x.user_id, x.user.username) for x in 111 c.group_members_obj = [x.user for x in c.users_group.members]
107 c.users_group.members] 112 c.group_members = [(x.user_id, x.username) for x in
113 c.group_members_obj]
108 114
109 c.available_members = [(x.user_id, x.username) for x in 115 c.available_members = [(x.user_id, x.username) for x in
110 self.sa.query(User).all()] 116 self.sa.query(User).all()]
117
118 available_members = [safe_unicode(x[0]) for x in c.available_members]
119
111 users_group_form = UsersGroupForm(edit=True, 120 users_group_form = UsersGroupForm(edit=True,
112 old_data=c.users_group.get_dict(), 121 old_data=c.users_group.get_dict(),
113 available_members=[str(x[0]) for x 122 available_members=available_members)()
114 in c.available_members])()
115 123
116 try: 124 try:
117 form_result = users_group_form.to_python(request.POST) 125 form_result = users_group_form.to_python(request.POST)
118 UsersGroup.update(id, form_result) 126 UsersGroupModel().update(c.users_group, form_result)
119 h.flash(_('updated users group %s') \ 127 h.flash(_('updated users group %s') \
120 % form_result['users_group_name'], 128 % form_result['users_group_name'],
121 category='success') 129 category='success')
122 #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa) 130 #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa)
131 Session.commit()
123 except formencode.Invalid, errors: 132 except formencode.Invalid, errors:
124 e = errors.error_dict or {} 133 e = errors.error_dict or {}
125 134
126 perm = Permission.get_by_key('hg.create.repository') 135 perm = Permission.get_by_key('hg.create.repository')
127 e.update({'create_repo_perm': 136 e.update({'create_repo_perm':
128 UsersGroupToPerm.has_perm(id, perm)}) 137 UsersGroupModel().has_perm(id, perm)})
129 138
130 return htmlfill.render( 139 return htmlfill.render(
131 render('admin/users_groups/users_group_edit.html'), 140 render('admin/users_groups/users_group_edit.html'),
132 defaults=errors.value, 141 defaults=errors.value,
133 errors=e, 142 errors=e,
148 # h.form(url('users_group', id=ID), 157 # h.form(url('users_group', id=ID),
149 # method='delete') 158 # method='delete')
150 # url('users_group', id=ID) 159 # url('users_group', id=ID)
151 160
152 try: 161 try:
153 UsersGroup.delete(id) 162 UsersGroupModel().delete(id)
154 h.flash(_('successfully deleted users group'), category='success') 163 h.flash(_('successfully deleted users group'), category='success')
164 Session.commit()
155 except UsersGroupsAssignedException, e: 165 except UsersGroupsAssignedException, e:
156 h.flash(e, category='error') 166 h.flash(e, category='error')
157 except Exception: 167 except Exception:
158 h.flash(_('An error occurred during deletion of users group'), 168 h.flash(_('An error occurred during deletion of users group'),
159 category='error') 169 category='error')
170 c.users_group = self.sa.query(UsersGroup).get(id) 180 c.users_group = self.sa.query(UsersGroup).get(id)
171 if not c.users_group: 181 if not c.users_group:
172 return redirect(url('users_groups')) 182 return redirect(url('users_groups'))
173 183
174 c.users_group.permissions = {} 184 c.users_group.permissions = {}
175 c.group_members = [(x.user_id, x.user.username) for x in 185 c.group_members_obj = [x.user for x in c.users_group.members]
176 c.users_group.members] 186 c.group_members = [(x.user_id, x.username) for x in
187 c.group_members_obj]
177 c.available_members = [(x.user_id, x.username) for x in 188 c.available_members = [(x.user_id, x.username) for x in
178 self.sa.query(User).all()] 189 self.sa.query(User).all()]
179 defaults = c.users_group.get_dict() 190 defaults = c.users_group.get_dict()
180 perm = Permission.get_by_key('hg.create.repository') 191 perm = Permission.get_by_key('hg.create.repository')
181 defaults.update({'create_repo_perm': 192 defaults.update({'create_repo_perm':
182 UsersGroupToPerm.has_perm(id, perm)}) 193 UsersGroupModel().has_perm(c.users_group, perm)})
183 return htmlfill.render( 194 return htmlfill.render(
184 render('admin/users_groups/users_group_edit.html'), 195 render('admin/users_groups/users_group_edit.html'),
185 defaults=defaults, 196 defaults=defaults,
186 encoding="UTF-8", 197 encoding="UTF-8",
187 force_defaults=False 198 force_defaults=False
193 204
194 grant_perm = request.POST.get('create_repo_perm', False) 205 grant_perm = request.POST.get('create_repo_perm', False)
195 206
196 if grant_perm: 207 if grant_perm:
197 perm = Permission.get_by_key('hg.create.none') 208 perm = Permission.get_by_key('hg.create.none')
198 UsersGroupToPerm.revoke_perm(id, perm) 209 UsersGroupModel().revoke_perm(id, perm)
199 210
200 perm = Permission.get_by_key('hg.create.repository') 211 perm = Permission.get_by_key('hg.create.repository')
201 UsersGroupToPerm.grant_perm(id, perm) 212 UsersGroupModel().grant_perm(id, perm)
202 h.flash(_("Granted 'repository create' permission to user"), 213 h.flash(_("Granted 'repository create' permission to user"),
203 category='success') 214 category='success')
204 215
216 Session.commit()
205 else: 217 else:
206 perm = Permission.get_by_key('hg.create.repository') 218 perm = Permission.get_by_key('hg.create.repository')
207 UsersGroupToPerm.revoke_perm(id, perm) 219 UsersGroupModel().revoke_perm(id, perm)
208 220
209 perm = Permission.get_by_key('hg.create.none') 221 perm = Permission.get_by_key('hg.create.none')
210 UsersGroupToPerm.grant_perm(id, perm) 222 UsersGroupModel().grant_perm(id, perm)
211 h.flash(_("Revoked 'repository create' permission to user"), 223 h.flash(_("Revoked 'repository create' permission to user"),
212 category='success') 224 category='success')
213 225 Session.commit()
214 return redirect(url('edit_users_group', id=id)) 226 return redirect(url('edit_users_group', id=id))