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,
},
)