def admin_permissions(request, current_directory, template, context): content_type = get_permission_contenttype() permission_queryset = content_type.permission_set.exclude(codename__in=['add_directory', 'change_directory', 'delete_directory']) project = context.get('project', None) language = context.get('language', None) base_queryset = PootleProfile.objects.filter(user__is_active=1).exclude(id__in=current_directory.permission_sets.values_list('profile_id', flat=True)) querysets = [(None, base_queryset.filter(user__username__in=('nobody', 'default')))] if project is not None: if language is not None: querysets.append((_('Project Members'), base_queryset.filter(projects=project, languages=language).order_by('user__username'))) else: querysets.append((_('Project Members'), base_queryset.filter(projects=project).order_by('user__username'))) if language is not None: querysets.append((_('Language Members'), base_queryset.filter(languages=language).order_by('user__username'))) querysets.append((_('All Users'), base_queryset.exclude(user__username__in=('nobody', 'default')).order_by('user__username'))) class PermissionSetForm(forms.ModelForm): class Meta: model = PermissionSet directory = forms.ModelChoiceField(queryset=Directory.objects.filter(pk=current_directory.pk), initial=current_directory.pk, widget=forms.HiddenInput) profile = GroupedModelChoiceField(querysets=querysets, queryset=PootleProfile.objects.all(), required=True) positive_permissions = PermissionFormField(label=_('Permissions'), queryset=permission_queryset, required=False) link = lambda instance: unicode(instance.profile) return util.edit(request, template, PermissionSet, context, link, linkfield='profile', queryset=current_directory.permission_sets.order_by('profile').all(), can_delete=True, form=PermissionSetForm)
def admin_permissions(request, current_directory, template, context): project = context.get('project', None) language = context.get('language', None) # FIXME: Shouldn't we just remove unused permissions from the DB? excluded_permissions = [ 'add_directory', 'change_directory', 'delete_directory', ] # Don't provide means to add `view` permissions under /<lang_code>/* # In other words: only allow setting `view` permissions for the root # and the `/projects/<code>/` directories if language is not None: excluded_permissions.append('view') content_type = get_permission_contenttype() permission_queryset = content_type.permission_set.exclude( codename__in=excluded_permissions, ) base_queryset = PootleProfile.objects.filter(user__is_active=1).exclude( id__in=current_directory.permission_sets \ .values_list('profile_id', flat=True), ) querysets = [ (None, base_queryset.filter(user__username__in=('nobody', 'default'))) ] if project is not None: if language is not None: group_label = _('Translation Project Contributors') tp_path = '/%s/%s/' % (language.code, project.code) contributions = Submission.objects.filter( translation_project__pootle_path=tp_path, ) else: group_label = _('Project Contributors') contributions = Submission.objects.filter( translation_project__project__code=project.code, ) querysets.append(( group_label, base_queryset.filter(submission__in=contributions).distinct(). order_by('user__username'), )) if language is not None: contributions = Submission.objects.filter( translation_project__language__code=language.code, ) querysets.append(( _('Language Contributors'), base_queryset.filter(submission__in=contributions).distinct(). order_by('user__username'), )) querysets.append(( _('All Users'), base_queryset.exclude( user__username__in=('nobody', 'default')).order_by('user__username'), )) class PermissionSetForm(forms.ModelForm): class Meta: model = PermissionSet directory = forms.ModelChoiceField( queryset=Directory.objects.filter(pk=current_directory.pk), initial=current_directory.pk, widget=forms.HiddenInput, ) profile = GroupedModelChoiceField( label=_('Username'), querysets=querysets, queryset=PootleProfile.objects.all(), required=True, widget=forms.Select(attrs={ 'class': 'js-select2 select2-username', }), ) positive_permissions = PermissionFormField( label=_('Permissions'), queryset=permission_queryset, required=False, widget=forms.SelectMultiple( attrs={ 'class': 'js-select2 select2-multiple', 'data-placeholder': _('Select one or more permissions'), }), ) link = lambda instance: unicode(instance.profile) directory_permissions = current_directory.permission_sets \ .order_by('profile').all() return util.edit(request, template, PermissionSet, context, link, linkfield='profile', queryset=directory_permissions, can_delete=True, form=PermissionSetForm)
def admin_permissions(request, current_directory, template, context): content_type = get_permission_contenttype() permission_queryset = content_type.permission_set.exclude( codename__in=['add_directory', 'change_directory', 'delete_directory']) project = context.get('project', None) language = context.get('language', None) base_queryset = PootleProfile.objects.filter(user__is_active=1).exclude( id__in=current_directory.permission_sets.values_list('profile_id', flat=True)) querysets = [ (None, base_queryset.filter(user__username__in=('nobody', 'default'))) ] if project is not None: if language is not None: querysets.append( (_('Project Members'), base_queryset.filter( projects=project, languages=language).order_by('user__username'))) else: querysets.append( (_('Project Members'), base_queryset.filter( projects=project).order_by('user__username'))) if language is not None: querysets.append( (_('Language Members'), base_queryset.filter( languages=language).order_by('user__username'))) querysets.append( (_('All Users'), base_queryset.exclude( user__username__in=('nobody', 'default')).order_by('user__username'))) class PermissionSetForm(forms.ModelForm): class Meta: model = PermissionSet directory = forms.ModelChoiceField( queryset=Directory.objects.filter(pk=current_directory.pk), initial=current_directory.pk, widget=forms.HiddenInput) profile = GroupedModelChoiceField(querysets=querysets, queryset=PootleProfile.objects.all(), required=True) positive_permissions = PermissionFormField( label=_('Permissions'), queryset=permission_queryset, required=False) link = lambda instance: unicode(instance.profile) return util.edit( request, template, PermissionSet, context, link, linkfield='profile', queryset=current_directory.permission_sets.order_by('profile').all(), can_delete=True, form=PermissionSetForm)
def admin_permissions(request, current_directory, template, ctx): language = ctx.get('language', None) negative_permissions_excl = list(PERMISSIONS['negative']) positive_permissions_excl = list(PERMISSIONS['positive']) # Don't provide means to alter access permissions under /<lang_code>/* # In other words: only allow setting access permissions for the root # and the `/projects/<code>/` directories if language is not None: access_permissions = ['view', 'hide'] negative_permissions_excl.extend(access_permissions) positive_permissions_excl.extend(access_permissions) content_type = get_permission_contenttype() positive_permissions_qs = content_type.permission_set.exclude( codename__in=negative_permissions_excl, ) negative_permissions_qs = content_type.permission_set.exclude( codename__in=positive_permissions_excl, ) base_queryset = User.objects.filter(is_active=1).exclude( id__in=current_directory.permission_sets.values_list('user_id', flat=True),) querysets = [(None, base_queryset.filter( username__in=('nobody', 'default') ))] querysets.append(( _('All Users'), base_queryset.exclude(username__in=('nobody', 'default')).order_by('username'), )) class PermissionSetForm(forms.ModelForm): class Meta(object): model = PermissionSet fields = ('user', 'directory', 'positive_permissions', 'negative_permissions') directory = forms.ModelChoiceField( queryset=Directory.objects.filter(pk=current_directory.pk), initial=current_directory.pk, widget=forms.HiddenInput, ) user = GroupedModelChoiceField( label=_('Username'), querysets=querysets, queryset=User.objects.all(), required=True, widget=forms.Select(attrs={ 'class': 'js-select2 select2-username', }), ) positive_permissions = PermissionFormField( label=_('Add Permissions'), queryset=positive_permissions_qs, required=False, widget=forms.SelectMultiple(attrs={ 'class': 'js-select2 select2-multiple', 'data-placeholder': _('Select one or more permissions'), }), ) negative_permissions = PermissionFormField( label=_('Revoke Permissions'), queryset=negative_permissions_qs, required=False, widget=forms.SelectMultiple(attrs={ 'class': 'js-select2 select2-multiple', 'data-placeholder': _('Select one or more permissions'), }), ) def __init__(self, *args, **kwargs): super(PermissionSetForm, self).__init__(*args, **kwargs) # Don't display extra negative permissions field where they # are not applicable if language is not None: del self.fields['negative_permissions'] link = lambda instance: unicode(instance.user) directory_permissions = current_directory.permission_sets \ .order_by('user').all() return util.edit(request, template, PermissionSet, ctx, link, linkfield='user', queryset=directory_permissions, can_delete=True, form=PermissionSetForm)
def admin_permissions(request, current_directory, template, ctx): language = ctx.get("language", None) negative_permissions_excl = list(PERMISSIONS["negative"]) positive_permissions_excl = list(PERMISSIONS["positive"]) # Don't provide means to alter access permissions under /<lang_code>/* # In other words: only allow setting access permissions for the root # and the `/projects/<code>/` directories if language is not None: access_permissions = ["view", "hide"] negative_permissions_excl.extend(access_permissions) positive_permissions_excl.extend(access_permissions) content_type = get_permission_contenttype() positive_permissions_qs = content_type.permission_set.exclude( codename__in=negative_permissions_excl, ) negative_permissions_qs = content_type.permission_set.exclude( codename__in=positive_permissions_excl, ) base_queryset = User.objects.filter(is_active=1).exclude( id__in=current_directory.permission_sets.values_list("user_id", flat=True), ) choice_groups = [ (None, base_queryset.filter(username__in=("nobody", "default"))) ] choice_groups.append(( _("All Users"), base_queryset.exclude(username__in=("nobody", "default")).order_by("username"), )) class PermissionSetForm(forms.ModelForm): class Meta(object): model = PermissionSet fields = ( "user", "directory", "positive_permissions", "negative_permissions", ) directory = forms.ModelChoiceField( queryset=Directory.objects.filter(pk=current_directory.pk), initial=current_directory.pk, widget=forms.HiddenInput, ) user = GroupedModelChoiceField( label=_("Username"), choice_groups=choice_groups, queryset=User.objects.all(), required=True, widget=forms.Select( attrs={"class": "js-select2 select2-username"}), ) positive_permissions = PermissionFormField( label=_("Add Permissions"), queryset=positive_permissions_qs, required=False, widget=forms.SelectMultiple( attrs={ "class": "js-select2 select2-multiple", "data-placeholder": _("Select one or more permissions"), }), ) negative_permissions = PermissionFormField( label=_("Revoke Permissions"), queryset=negative_permissions_qs, required=False, widget=forms.SelectMultiple( attrs={ "class": "js-select2 select2-multiple", "data-placeholder": _("Select one or more permissions"), }), ) def __init__(self, *args, **kwargs): super(PermissionSetForm, self).__init__(*args, **kwargs) # Don't display extra negative permissions field where they # are not applicable if language is not None: del self.fields["negative_permissions"] def link(instance): return str(instance.user) directory_permissions = current_directory.permission_sets.order_by( "user").all() return util.edit( request, template, PermissionSet, ctx, link, linkfield="user", queryset=directory_permissions, can_delete=True, form=PermissionSetForm, )
def admin_permissions(request, current_directory, template, context): content_type = get_permission_contenttype() permission_queryset = content_type.permission_set.exclude( codename__in=[ 'add_directory', 'change_directory', 'delete_directory', ], ) project = context.get('project', None) language = context.get('language', None) base_queryset = PootleProfile.objects.filter(user__is_active=1).exclude( id__in=current_directory.permission_sets \ .values_list('profile_id', flat=True), ) querysets = [(None, base_queryset.filter( user__username__in=('nobody', 'default') ))] if project is not None: if language is not None: group_label = _('Translation Project Contributors') tp_path = '/%s/%s/' % (language.code, project.code) contributions = Submission.objects.filter( translation_project__pootle_path=tp_path, ) else: group_label = _('Project Contributors') contributions = Submission.objects.filter( translation_project__project__code=project.code, ) querysets.append(( group_label, base_queryset.filter(submission__in=contributions) .distinct() .order_by('user__username'), )) if language is not None: contributions = Submission.objects.filter( translation_project__language__code=language.code, ) querysets.append(( _('Language Contributors'), base_queryset.filter(submission__in=contributions) .distinct() .order_by('user__username'), )) querysets.append(( _('All Users'), base_queryset.exclude(user__username__in=('nobody', 'default')) .order_by('user__username'), )) class PermissionSetForm(forms.ModelForm): class Meta: model = PermissionSet directory = forms.ModelChoiceField( queryset=Directory.objects.filter(pk=current_directory.pk), initial=current_directory.pk, widget=forms.HiddenInput, ) profile = GroupedModelChoiceField( label=_('Username'), querysets=querysets, queryset=PootleProfile.objects.all(), required=True, widget=forms.Select(attrs={ 'class': 'js-select2 select2-username', }), ) positive_permissions = PermissionFormField( label=_('Permissions'), queryset=permission_queryset, required=False, widget=forms.SelectMultiple(attrs={ 'class': 'js-select2 select2-multiple', 'data-placeholder': _('Select one or more permissions'), }), ) link = lambda instance: unicode(instance.profile) directory_permissions = current_directory.permission_sets \ .order_by('profile').all() return util.edit(request, template, PermissionSet, context, link, linkfield='profile', queryset=directory_permissions, can_delete=True, form=PermissionSetForm)
def admin_permissions(request, current_directory, template, ctx): language = ctx.get('language', None) negative_permissions_excl = list(PERMISSIONS['negative']) positive_permissions_excl = list(PERMISSIONS['positive']) # Don't provide means to alter access permissions under /<lang_code>/* # In other words: only allow setting access permissions for the root # and the `/projects/<code>/` directories if language is not None: access_permissions = ['view', 'hide'] negative_permissions_excl.extend(access_permissions) positive_permissions_excl.extend(access_permissions) content_type = get_permission_contenttype() positive_permissions_qs = content_type.permission_set.exclude( codename__in=negative_permissions_excl, ) negative_permissions_qs = content_type.permission_set.exclude( codename__in=positive_permissions_excl, ) base_queryset = User.objects.filter(is_active=1).exclude( id__in=current_directory.permission_sets.values_list('user_id', flat=True), ) querysets = [(None, base_queryset.filter(username__in=('nobody', 'default')))] querysets.append(( _('All Users'), base_queryset.exclude(username__in=('nobody', 'default')).order_by('username'), )) class PermissionSetForm(forms.ModelForm): class Meta(object): model = PermissionSet fields = ('user', 'directory', 'positive_permissions', 'negative_permissions') directory = forms.ModelChoiceField( queryset=Directory.objects.filter(pk=current_directory.pk), initial=current_directory.pk, widget=forms.HiddenInput, ) user = GroupedModelChoiceField( label=_('Username'), querysets=querysets, queryset=User.objects.all(), required=True, widget=forms.Select(attrs={ 'class': 'js-select2 select2-username', }), ) positive_permissions = PermissionFormField( label=_('Add Permissions'), queryset=positive_permissions_qs, required=False, widget=forms.SelectMultiple( attrs={ 'class': 'js-select2 select2-multiple', 'data-placeholder': _('Select one or more permissions'), }), ) negative_permissions = PermissionFormField( label=_('Revoke Permissions'), queryset=negative_permissions_qs, required=False, widget=forms.SelectMultiple( attrs={ 'class': 'js-select2 select2-multiple', 'data-placeholder': _('Select one or more permissions'), }), ) def __init__(self, *args, **kwargs): super(PermissionSetForm, self).__init__(*args, **kwargs) # Don't display extra negative permissions field where they # are not applicable if language is not None: del self.fields['negative_permissions'] link = lambda instance: unicode(instance.user) directory_permissions = current_directory.permission_sets \ .order_by('user').all() return util.edit(request, template, PermissionSet, ctx, link, linkfield='user', queryset=directory_permissions, can_delete=True, form=PermissionSetForm)
def admin_permissions(request, current_directory, template, context): User = get_user_model() project = context.get('project', None) language = context.get('language', None) # FIXME: Shouldn't we just remove unused permissions from the DB? excluded_permissions = [ 'add_directory', 'change_directory', 'delete_directory', ] # Don't provide means to add `view` permissions under /<lang_code>/* # In other words: only allow setting `view` permissions for the root # and the `/projects/<code>/` directories if language is not None: excluded_permissions.append('view') content_type = get_permission_contenttype() permission_queryset = content_type.permission_set.exclude( codename__in=excluded_permissions, ) excluded = current_directory.permission_sets.values_list("user_id", flat=True) base_queryset = User.objects.filter(is_active=True).exclude(excluded) querysets = [(None, base_queryset.filter(username__in=("nobody", "default")))] if project is not None: if language is not None: group_label = _('Translation Project Contributors') tp_path = '/%s/%s/' % (language.code, project.code) contributions = Submission.objects.filter( translation_project__pootle_path=tp_path, ) else: group_label = _('Project Contributors') contributions = Submission.objects.filter( translation_project__project__code=project.code, ) querysets.append(( group_label, base_queryset.filter(submission__in=contributions) .distinct().order_by("username"), )) if language is not None: contributions = Submission.objects.filter( translation_project__language__code=language.code, ) querysets.append(( _('Language Contributors'), base_queryset.filter(submission__in=contributions) .distinct().order_by("username"), )) querysets.append(( _('All Users'), base_queryset.exclude(username__in=("nobody", "default")) .order_by("username"), )) class PermissionSetForm(forms.ModelForm): class Meta: model = PermissionSet directory = forms.ModelChoiceField( queryset=Directory.objects.filter(pk=current_directory.pk), initial=current_directory.pk, widget=forms.HiddenInput, ) user = GroupedModelChoiceField( label=_('Username'), querysets=querysets, queryset=User.objects.all(), required=True, widget=forms.Select(attrs={ 'class': 'js-select2 select2-username', }), ) positive_permissions = PermissionFormField( label=_('Permissions'), queryset=permission_queryset, required=False, widget=forms.SelectMultiple(attrs={ 'class': 'js-select2 select2-multiple', 'data-placeholder': _('Select one or more permissions'), }), ) link = lambda instance: unicode(instance.user) queryset = current_directory.permission_sets.order_by("user").all() return util.edit(request, template, PermissionSet, context, link, linkfield="user", queryset=queryset, can_delete=True, form=PermissionSetForm)