Mercurial > kallithea
changeset 5430:b36da33275a0
users: fix missing c.readonly in UsersController.update error rendering
The c.readonly attribute, while correctly set in UsersControllers.edit,
was not assigned in UsersControllers.update, causing a template error
if the form validation failed. This commit unifies template rendering
in separate method to fix this and avoid future problems.
author | Søren Løvborg <sorenl@unity3d.com> |
---|---|
date | Mon, 24 Aug 2015 12:25:56 +0200 |
parents | f865477ae919 |
children | 7b780f5f5cab |
files | kallithea/controllers/admin/users.py |
diffstat | 1 files changed, 16 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/controllers/admin/users.py Tue Aug 25 12:05:09 2015 +0200 +++ b/kallithea/controllers/admin/users.py Mon Aug 24 12:25:56 2015 +0200 @@ -164,18 +164,15 @@ # h.form(url('update_user', id=ID), # method='put') # url('user', id=ID) - c.active = 'profile' user_model = UserModel() - c.user = user_model.get(id) - c.perm_user = AuthUser(user_id=id) - c.ip_addr = self.ip_addr + user = user_model.get(id) _form = UserForm(edit=True, old_data={'user_id': id, - 'email': c.user.email})() + 'email': user.email})() form_result = {} try: form_result = _form.to_python(dict(request.POST)) skip_attrs = ['extern_type', 'extern_name', - ] + auth_modules.get_managed_fields(c.user) + ] + auth_modules.get_managed_fields(user) user_model.update(id, form_result, skip_attrs=skip_attrs) usr = form_result['username'] @@ -193,7 +190,7 @@ '_method': 'put' }) return htmlfill.render( - render('admin/users/user_edit.html'), + self._render_edit_profile(user), defaults=defaults, errors=e, prefix_error=False, @@ -238,19 +235,23 @@ h.flash(_("The default user cannot be edited"), category='warning') raise HTTPNotFound + def _render_edit_profile(self, user): + c.user = user + c.active = 'profile' + c.perm_user = AuthUser(dbuser=user) + c.ip_addr = self.ip_addr + managed_fields = auth_modules.get_managed_fields(user) + c.readonly = lambda n: 'readonly' if n in managed_fields else None + return render('admin/users/user_edit.html') + def edit(self, id, format='html'): """GET /users/id/edit: Form to edit an existing item""" # url('edit_user', id=ID) - c.user = self._get_user_or_raise_if_default(id) - c.active = 'profile' - c.perm_user = AuthUser(user_id=id) - c.ip_addr = self.ip_addr - managed_fields = auth_modules.get_managed_fields(c.user) - c.readonly = lambda n: 'readonly' if n in managed_fields else None + user = self._get_user_or_raise_if_default(id) + defaults = user.get_dict() - defaults = c.user.get_dict() return htmlfill.render( - render('admin/users/user_edit.html'), + self._render_edit_profile(user), defaults=defaults, encoding="UTF-8", force_defaults=False)