def settings()

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


def settings(request):
    """View and edit user settings."""
    profile = request.user.profile
    if request.method == "POST":
        locales_form = forms.UserLocalesOrderForm(
            request.POST,
            instance=profile,
        )
        user_form = forms.UserForm(
            request.POST,
            instance=request.user,
        )
        user_profile_form = forms.UserProfileForm(
            request.POST,
            instance=profile,
        )

        if (
            locales_form.is_valid()
            and user_form.is_valid()
            and user_profile_form.is_valid()
        ):
            locales_form.save()
            user_form.save()
            user_profile_form.save()

            if "contact_email" in user_profile_form.changed_data:
                profile.contact_email_verified = False
                profile.save(update_fields=["contact_email_verified"])

                token = utils.generate_verification_token(request.user)
                link = request.build_absolute_uri(
                    reverse("pontoon.contributors.verify.email", args=(token,))
                )
                send_verification_email(request.user, link)

            messages.success(request, "Settings saved.")
    else:
        user_form = forms.UserForm(instance=request.user)
        user_profile_form = forms.UserProfileForm(instance=profile)

    selected_locales = list(profile.sorted_locales)
    available_locales = Locale.objects.exclude(
        pk__in=[loc.pk for loc in selected_locales]
    )

    default_homepage_locale = Locale(name="Default homepage", code="")
    all_locales = list(Locale.objects.all())
    all_locales.insert(0, default_homepage_locale)

    custom_homepage_locale = default_homepage_locale

    # Set default for custom homepage locale based on code
    if profile.custom_homepage:
        try:
            custom_homepage_locale = get_locale_or_redirect(profile.custom_homepage)
        except Http404:
            messages.info(
                request,
                "Your previously selected custom homepage locale is no longer available. Please pick a different one.",
            )

    # Similar logic for preferred source locale
    default_preferred_source_locale = Locale(name="Default project locale", code="")
    preferred_locales = list(Locale.objects.all())
    preferred_locales.insert(0, default_preferred_source_locale)

    preferred_source_locale = default_preferred_source_locale

    # Set preferred source locale based on code
    if profile.preferred_source_locale:
        try:
            preferred_source_locale = get_locale_or_redirect(
                profile.preferred_source_locale
            )
        except Http404:
            messages.info(
                request,
                "Your previously selected preferred source locale is no longer available. Please pick a different one.",
            )

    return render(
        request,
        "contributors/settings.html",
        {
            "selected_locales": selected_locales,
            "available_locales": available_locales,
            "locales": all_locales,
            "locale": custom_homepage_locale,
            "preferred_locales": preferred_locales,
            "preferred_locale": preferred_source_locale,
            "user_form": user_form,
            "user_profile_form": user_profile_form,
            "user_profile_toggle_form": forms.UserProfileToggleForm(instance=profile),
        },
    )