mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-06-03 10:50:20 +00:00
locale: Refactor language selection form
- Use properly base class overrides - Implement feature to go back to the page user was on before language selection. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
ef9e5c7a43
commit
e644e5c86a
@ -173,8 +173,9 @@
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a href="{% url 'language-selection' %}" title="{% trans "Select Language" %}">
|
||||
<i class="glyphicon glyphicon-globe nav-icon"></i>
|
||||
<a href="{% url 'language-selection' %}?next={{ request.path|iriencode }}"
|
||||
title="{% trans "Select language" %}">
|
||||
<i class="glyphicon glyphicon-globe nav-icon"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
@ -23,11 +23,10 @@ from django.core.exceptions import ImproperlyConfigured
|
||||
from django.template.response import TemplateResponse
|
||||
from django.views.generic import TemplateView
|
||||
from django.views.generic.edit import FormView
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.conf import settings
|
||||
from django.shortcuts import render
|
||||
from django.urls import reverse
|
||||
from django.utils import translation
|
||||
from django.utils.http import is_safe_url
|
||||
from django.utils.translation import ugettext as _
|
||||
from stronghold.decorators import public
|
||||
import time
|
||||
@ -37,6 +36,8 @@ import plinth
|
||||
from plinth import package
|
||||
from plinth.modules.storage import views as disk_views
|
||||
|
||||
REDIRECT_FIELD_NAME = 'next'
|
||||
|
||||
|
||||
@public
|
||||
def index(request):
|
||||
@ -73,26 +74,32 @@ class LanguageSelectionView(FormView):
|
||||
form_class = forms.LanguageSelectionForm
|
||||
template_name = 'language-selection.html'
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
current_values = {'language': translation.get_language()}
|
||||
form = self.form_class(initial=current_values)
|
||||
return render(request, self.template_name, {'form': form})
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
form = self.form_class(request.POST)
|
||||
if form.is_valid():
|
||||
selected_language = form.cleaned_data['language']
|
||||
if not selected_language:
|
||||
response = HttpResponseRedirect(reverse('language-selection'))
|
||||
response.delete_cookie(settings.LANGUAGE_COOKIE_NAME)
|
||||
return response
|
||||
def get_initial(self):
|
||||
"""Return the initial values for the form."""
|
||||
return {'language': translation.get_language()}
|
||||
|
||||
def form_valid(self, form):
|
||||
"""Set or reset the current language."""
|
||||
selected_language = form.cleaned_data['language']
|
||||
response = super().form_valid(form)
|
||||
if not selected_language:
|
||||
response.delete_cookie(settings.LANGUAGE_COOKIE_NAME)
|
||||
else:
|
||||
translation.activate(selected_language)
|
||||
response = HttpResponseRedirect(reverse('language-selection'))
|
||||
# send a cookie for selected language
|
||||
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, selected_language)
|
||||
return response
|
||||
return render(request, self.template_name, {'form': form})
|
||||
response.set_cookie(settings.LANGUAGE_COOKIE_NAME,
|
||||
selected_language)
|
||||
|
||||
return response
|
||||
|
||||
def get_success_url(self):
|
||||
"""Return the URL in the next parameter or home page."""
|
||||
redirect_to = self.request.GET.get(REDIRECT_FIELD_NAME, '')
|
||||
redirect_to = self.request.POST.get(REDIRECT_FIELD_NAME, redirect_to)
|
||||
if is_safe_url(url=redirect_to, host=self.request.get_host()):
|
||||
return redirect_to
|
||||
|
||||
return reverse('index')
|
||||
|
||||
|
||||
class ServiceView(FormView):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user