Mercurial > kallithea
diff rhodecode/model/validators.py @ 2759:c61c2ccea2b4 beta
#538 form for permissions can handle multiple users at once
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 29 Aug 2012 01:07:21 +0200 |
parents | 2e7f7568ea92 |
children | c0cc8f8a71b0 |
line wrap: on
line diff
--- a/rhodecode/model/validators.py Wed Aug 29 00:56:00 2012 +0200 +++ b/rhodecode/model/validators.py Wed Aug 29 01:07:21 2012 +0200 @@ -5,6 +5,7 @@ import re import formencode import logging +from collections import defaultdict from pylons.i18n.translation import _ from webhelpers.pylonslib.secure_form import authentication_token @@ -12,6 +13,7 @@ UnicodeString, OneOf, Int, Number, Regex, Email, Bool, StringBoolean, Set, NotEmpty ) +from rhodecode.lib.compat import OrderedSet from rhodecode.lib.utils import repo_name_slug from rhodecode.model.db import RepoGroup, Repository, UsersGroup, User,\ ChangesetStatus @@ -477,20 +479,34 @@ } def to_python(self, value, state): - perms_update = [] - perms_new = [] + perms_update = OrderedSet() + perms_new = OrderedSet() # build a list of permission to update and new permission to create - for k, v in value.items(): - # means new added member to permissions + + #CLEAN OUT ORG VALUE FROM NEW MEMBERS, and group them using + new_perms_group = defaultdict(dict) + for k, v in value.copy().iteritems(): if k.startswith('perm_new_member'): - new_perm = value.get('perm_new_member', False) - new_member = value.get('perm_new_member_name', False) - new_type = value.get('perm_new_member_type') + del value[k] + _type, part = k.split('perm_new_member_') + args = part.split('_') + if len(args) == 1: + new_perms_group[args[0]]['perm'] = v + elif len(args) == 2: + _key, pos = args + new_perms_group[pos][_key] = v - if new_member and new_perm: - if (new_member, new_perm, new_type) not in perms_new: - perms_new.append((new_member, new_perm, new_type)) - elif k.startswith('u_perm_') or k.startswith('g_perm_'): + # fill new permissions in order of how they were added + for k in sorted(map(int, new_perms_group.keys())): + perm_dict = new_perms_group[str(k)] + new_member = perm_dict['name'] + new_perm = perm_dict['perm'] + new_type = perm_dict['type'] + if new_member and new_perm and new_type: + perms_new.add((new_member, new_perm, new_type)) + + for k, v in value.iteritems(): + if k.startswith('u_perm_') or k.startswith('g_perm_'): member = k[7:] t = {'u': 'user', 'g': 'users_group' @@ -500,10 +516,10 @@ # set none for default when updating to # private repo v = EMPTY_PERM - perms_update.append((member, v, t)) + perms_update.add((member, v, t)) - value['perms_updates'] = perms_update - value['perms_new'] = perms_new + value['perms_updates'] = list(perms_update) + value['perms_new'] = list(perms_new) # update permissions for k, v, t in perms_new: