From a5fca292393192434b1b8aa4e0c611801166d961 Mon Sep 17 00:00:00 2001 From: Jannis Portmann Date: Sat, 29 Jul 2023 12:16:00 +0200 Subject: [PATCH 1/5] Fix captcha theming --- .../pflaenzli/static/bootstrap-color-toggler.js | 17 ++++++++++++++++- pflaenzli/pflaenzli/templates/base.html | 4 ++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pflaenzli/pflaenzli/static/bootstrap-color-toggler.js b/pflaenzli/pflaenzli/static/bootstrap-color-toggler.js index 9915265..897efc7 100644 --- a/pflaenzli/pflaenzli/static/bootstrap-color-toggler.js +++ b/pflaenzli/pflaenzli/static/bootstrap-color-toggler.js @@ -20,8 +20,10 @@ const setTheme = function(theme) { if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) { document.documentElement.setAttribute('data-bs-theme', 'dark') + set_captcha_theme('dark', 0) } else { document.documentElement.setAttribute('data-bs-theme', theme) + set_captcha_theme(theme, 0) } } @@ -59,4 +61,17 @@ }) }) }) -})() \ No newline at end of file +})() + +function set_captcha_theme(theme, set_try) { + var captchaDiv = document.getElementById("id_captcha"); + + if (captchaDiv) { + console.log("Set the theme on try" + set_try) + if (theme == 'dark') { + captchaDiv.classList.add("dark"); + } else { + captchaDiv.classList.remove("dark"); + } + } +}; \ No newline at end of file diff --git a/pflaenzli/pflaenzli/templates/base.html b/pflaenzli/pflaenzli/templates/base.html index cf44b72..60ca085 100644 --- a/pflaenzli/pflaenzli/templates/base.html +++ b/pflaenzli/pflaenzli/templates/base.html @@ -46,7 +46,6 @@ - {% block head %}{% endblock %} @@ -93,7 +92,7 @@ {% get_language_info_list for LANGUAGES as languages %} {% for language in languages %}
  • -
    + {% csrf_token %} diff --git a/pflaenzli/pflaenzli/urls.py b/pflaenzli/pflaenzli/urls.py index ce5e57b..371d8cc 100644 --- a/pflaenzli/pflaenzli/urls.py +++ b/pflaenzli/pflaenzli/urls.py @@ -24,7 +24,7 @@ urlpatterns = [ path("accounts/", views.user_detail, name="user_detail"), path("accounts//wishlist/", views.wishlist, name="wishlist"), path('accounts/login/', auth_views.LoginView.as_view(template_name='registration/login.html')), - path('accounts/profile/', auth_views.LoginView.as_view(template_name='user/detail.html'), name='user_profile'), + path('accounts/profile/', TemplateView.as_view(template_name='user/detail.html'), name='user_profile'), path('accounts/profile/edit', views.user_edit, name='user_edit'), path('accounts/register/', views.register_user, name='register_user'), path('accounts/password_reset/', auth_views.PasswordResetView.as_view(template_name='registration/verify_email.html', @@ -39,6 +39,8 @@ urlpatterns = [ path("faq/", TemplateView.as_view(template_name='app/faq.html'), name="faq"), path("imprint/", TemplateView.as_view(template_name='app/imprint.html'), name="imprint"), path("wish/delete/", views.delete_wish, name='delete_wish'), + path("save_language/", views.save_language, name="save_language"), + path("load_language/", views.load_language, name="load_language"), path("i18n/", include("django.conf.urls.i18n")), path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'), diff --git a/pflaenzli/pflaenzli/views.py b/pflaenzli/pflaenzli/views.py index 83d5ab5..028df6b 100644 --- a/pflaenzli/pflaenzli/views.py +++ b/pflaenzli/pflaenzli/views.py @@ -1,21 +1,20 @@ -from django.shortcuts import render, get_object_or_404, redirect, reverse -from django.utils import timezone +from django.conf import settings from django.contrib import messages from django.contrib.auth import login from django.contrib.auth.decorators import login_required +from django.http import HttpResponseForbidden +from django.shortcuts import get_object_or_404, redirect, render +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import activate, get_language from django.views.decorators.csrf import csrf_protect from django.views.decorators.http import require_POST -from django.http import HttpResponseForbidden -from django.utils.translation import gettext_lazy as _ - -from .forms import CreateOfferForm, RegistrationForm, FilterForm, WishForm - -from .models import PflaenzliUser, Offer, Wish +from .forms import CreateOfferForm, FilterForm, RegistrationForm, WishForm from .mail import send_offer_email +from .models import Offer, PflaenzliUser, Wish from .upload import generate_unique_filename -from .utils.distance import calculate_distance, filter_by_distance from .utils.compress_image import compress_image +from .utils.distance import calculate_distance, filter_by_distance def list_offers(request, filters=None): @@ -184,6 +183,7 @@ def register_user(request): form = RegistrationForm(request.POST) if form.is_valid(): user = form.save() + user.language_code = get_language() login(request, user) return redirect("index") else: @@ -192,6 +192,34 @@ def register_user(request): return render(request, "basic_form.html", {"form": form, "button_label": _("Register"), "title": _("Registeration"), "umami_event": "User registration"}) +def save_language(request): + referer_url = request.META.get('HTTP_REFERER') + response = redirect(referer_url) + + if request.method == 'POST': + if language_code := request.POST.get('language'): + if request.user.is_authenticated: + user = request.user + user.language_code = language_code + user.save() + + activate(language_code) + response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language_code) + + return response + + +@login_required +def load_language(request): + response = redirect('user_profile') + language_code = request.user.language_code + + activate(language_code) + response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language_code) + + return response + + def error_404(request, exception): return render(request, '404.html') diff --git a/pflaenzli/pflaenzli_django/settings.py b/pflaenzli/pflaenzli_django/settings.py index c7efcf5..ea9fc1e 100644 --- a/pflaenzli/pflaenzli_django/settings.py +++ b/pflaenzli/pflaenzli_django/settings.py @@ -56,12 +56,12 @@ INSTALLED_APPS = [ MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", - "django.middleware.common.CommonMiddleware", + 'django.middleware.locale.LocaleMiddleware', "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", - 'django.middleware.locale.LocaleMiddleware', + "django.middleware.common.CommonMiddleware", ] ROOT_URLCONF = "pflaenzli_django.urls" @@ -126,6 +126,7 @@ AUTH_PASSWORD_VALIDATORS = [ ] AUTH_USER_MODEL = 'pflaenzli.PflaenzliUser' +LOGIN_REDIRECT_URL = "/load_language" LOGOUT_REDIRECT_URL = "/" # Internationalization