diff --git a/apps/acls/forms.py b/apps/acls/forms.py index f4b7b0b4b7..3f2c048320 100644 --- a/apps/acls/forms.py +++ b/apps/acls/forms.py @@ -9,13 +9,14 @@ from common.utils import get_object_name from common.models import AnonymousUserSingleton from .classes import AccessHolder +from .models import CreatorSingleton def _as_choice_list(holders): return sorted([(AccessHolder.encapsulate(holder).gid, get_object_name(holder, display_object_type=False)) for holder in holders], key=lambda x: x[1]) -class HolderSelectionForm(forms.Form): +class BaseHolderSelectionForm(forms.Form): holder_gid = forms.ChoiceField( label=_(u'New holder') ) @@ -30,6 +31,7 @@ class HolderSelectionForm(forms.Form): users = set(User.objects.filter(is_active=True)) - set(staff_users) - set(super_users) - set(current_holders) roles = set(Role.objects.all()) - set(current_holders) groups = set(Group.objects.all()) - set(current_holders) + special = set(self.special_holders) - set(current_holders) non_holder_list = [] if users: @@ -41,11 +43,16 @@ class HolderSelectionForm(forms.Form): if roles: non_holder_list.append((_(u'Roles'), _as_choice_list(list(roles)))) - non_holder_list.append((_(u'Special'), _as_choice_list([AnonymousUserSingleton.objects.get()]))) + if special: + non_holder_list.append((_(u'Special'), _as_choice_list(list(special)))) - super(HolderSelectionForm, self).__init__(*args, **kwargs) + super(BaseHolderSelectionForm, self).__init__(*args, **kwargs) self.fields['holder_gid'].choices = non_holder_list + +class HolderSelectionForm(BaseHolderSelectionForm): + special_holders = [AnonymousUserSingleton.objects.get()] + -class ClassHolderSelectionForm(HolderSelectionForm): - pass +class ClassHolderSelectionForm(BaseHolderSelectionForm): + special_holders = [AnonymousUserSingleton.objects.get(), CreatorSingleton.objects.get()]