Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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,
    )
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)