Mercurial > kallithea
changeset 5292:6245435fd8d7
repogroups: use AvailableRepoGroupChoices
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Thu, 23 Jul 2015 00:52:29 +0200 |
parents | 9d4c4d4d9e16 |
children | 8e87c16ac58e |
files | kallithea/controllers/admin/repo_groups.py |
diffstat | 1 files changed, 18 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/controllers/admin/repo_groups.py Thu Jul 23 00:52:29 2015 +0200 +++ b/kallithea/controllers/admin/repo_groups.py Thu Jul 23 00:52:29 2015 +0200 @@ -44,7 +44,7 @@ HasPermissionAll from kallithea.lib.base import BaseController, render from kallithea.model.db import RepoGroup, Repository -from kallithea.model.scm import RepoGroupList +from kallithea.model.scm import RepoGroupList, AvailableRepoGroupChoices from kallithea.model.repo_group import RepoGroupModel from kallithea.model.forms import RepoGroupForm, RepoGroupPermsForm from kallithea.model.meta import Session @@ -63,21 +63,17 @@ def __before__(self): super(RepoGroupsController, self).__before__() - def __load_defaults(self, allow_empty_group=False, exclude_group_ids=[]): - if HasPermissionAll('hg.admin')('group edit'): - #we're global admin, we're ok and we can create TOP level groups - allow_empty_group = True + def __load_defaults(self, extras=(), exclude=()): + """extras is used for keeping current parent ignoring permissions + exclude is used for not moving group to itself TODO: also exclude descendants + Note: only admin can create top level groups + """ + repo_groups = AvailableRepoGroupChoices([], ['group.admin'], extras) + exclude_group_ids = set(rg.group_id for rg in exclude) + c.repo_groups = [rg for rg in repo_groups + if rg[0] not in exclude_group_ids] + c.repo_groups_choices = [rg[0] for rg in c.repo_groups] - #override the choices for this form, we need to filter choices - #and display only those we have ADMIN right - groups_with_admin_rights = RepoGroupList(RepoGroup.query().all(), - perm_set=['group.admin']) - c.repo_groups = RepoGroup.groups_choices(groups=groups_with_admin_rights, - show_empty_group=allow_empty_group) - # exclude filtered ids - c.repo_groups = filter(lambda x: x[0] not in exclude_group_ids, - c.repo_groups) - c.repo_groups_choices = map(lambda k: k[0], c.repo_groups) repo_model = RepoModel() c.users_array = repo_model.get_users_js() c.user_groups_array = repo_model.get_user_groups_js() @@ -168,8 +164,7 @@ # permissions for can create group based on parent_id are checked # here in the Form - repo_group_form = RepoGroupForm(available_groups= - map(lambda k: k[0], c.repo_groups))() + repo_group_form = RepoGroupForm(available_groups=c.repo_groups_choices) try: form_result = repo_group_form.to_python(dict(request.POST)) gr = RepoGroupModel().create( @@ -231,6 +226,10 @@ # url('repos_group', group_name=GROUP_NAME) c.repo_group = RepoGroupModel()._get_repo_group(group_name) + self.__load_defaults(extras=[c.repo_group.parent_group], + exclude=[c.repo_group]) + + # TODO: kill allow_empty_group - it is only used for redundant form validation! if HasPermissionAll('hg.admin')('group edit'): #we're global admin, we're ok and we can create TOP level groups allow_empty_group = True @@ -238,9 +237,6 @@ allow_empty_group = True else: allow_empty_group = False - self.__load_defaults(allow_empty_group=allow_empty_group, - exclude_group_ids=[c.repo_group.group_id]) - repo_group_form = RepoGroupForm( edit=True, old_data=c.repo_group.get_dict(), @@ -358,18 +354,8 @@ c.active = 'settings' c.repo_group = RepoGroupModel()._get_repo_group(group_name) - #we can only allow moving empty group if it's already a top-level - #group, ie has no parents, or we're admin - if HasPermissionAll('hg.admin')('group edit'): - #we're global admin, we're ok and we can create TOP level groups - allow_empty_group = True - elif not c.repo_group.parent_group: - allow_empty_group = True - else: - allow_empty_group = False - - self.__load_defaults(allow_empty_group=allow_empty_group, - exclude_group_ids=[c.repo_group.group_id]) + self.__load_defaults(extras=[c.repo_group.parent_group], + exclude=[c.repo_group]) defaults = self.__load_data(c.repo_group.group_id) return htmlfill.render(