def ajax_permissions()

in pontoon/teams/views.py [0:0]


def ajax_permissions(request, locale):
    locale = get_object_or_404(Locale, code=locale)
    project_locales = locale.project_locale.visible().visible_for(request.user)

    community_builder_level_reached = 0
    if request.method == "POST":
        locale_form = forms.LocalePermsForm(
            request.POST, instance=locale, prefix="general", user=request.user
        )
        project_locale_form = forms.ProjectLocalePermsFormsSet(
            request.POST,
            prefix="project-locale",
            queryset=project_locales,
            form_kwargs={"user": request.user},
        )

        if locale_form.is_valid() and project_locale_form.is_valid():
            community_builder_level_reached = locale_form.save()
            project_locale_form.save()

        else:
            errors = locale_form.errors
            errors.update(project_locale_form.errors_dict)
            error_msg = bleach.clean(json.dumps(errors))
            return HttpResponseBadRequest(error_msg)

    else:
        project_locale_form = forms.ProjectLocalePermsFormsSet(
            prefix="project-locale",
            queryset=project_locales,
            form_kwargs={"user": request.user},
        )

    managers = locale.managers_group.user_set.order_by("email")
    translators = locale.translators_group.user_set.exclude(pk__in=managers).order_by(
        "email"
    )

    locale_contributors = (
        User.objects.filter(
            translation__locale=locale, profile__system_user=False, is_active=True
        )
        .distinct()
        .order_by("email")
    )
    contributors = [
        contributor
        for contributor in locale_contributors
        if contributor not in managers and contributor not in translators
    ]

    project_locales = project_locales.prefetch_related(
        "project",
        Prefetch(
            "translators_group__user_set",
            queryset=User.objects.order_by("email"),
            to_attr="fetched_translators",
        ),
    ).order_by("project__name")

    for project_locale in project_locales:
        if not project_locale.has_custom_translators:
            continue

        project_locale.translators = (
            project_locale.translators_group.fetched_translators
        )
        project_locale.contributors = [
            contributor
            for contributor in locale_contributors
            if contributor not in project_locale.translators
        ]

    hide_project_selector = all([pl.has_custom_translators for pl in project_locales])

    return render(
        request,
        "teams/includes/permissions.html",
        {
            "locale": locale,
            "contributors": contributors,
            "translators": translators,
            "managers": managers,
            "project_locale_form": project_locale_form,
            "project_locales": project_locales,
            "hide_project_selector": hide_project_selector,
            "community_builder_level_reached": community_builder_level_reached,
        },
    )