mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-08-26 12:46:08 +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>
|
</li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{% url 'language-selection' %}" title="{% trans "Select Language" %}">
|
<a href="{% url 'language-selection' %}?next={{ request.path|iriencode }}"
|
||||||
<i class="glyphicon glyphicon-globe nav-icon"></i>
|
title="{% trans "Select language" %}">
|
||||||
|
<i class="glyphicon glyphicon-globe nav-icon"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@ -23,11 +23,10 @@ from django.core.exceptions import ImproperlyConfigured
|
|||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
from django.views.generic.edit import FormView
|
from django.views.generic.edit import FormView
|
||||||
from django.http import HttpResponseRedirect
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.shortcuts import render
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
|
from django.utils.http import is_safe_url
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from stronghold.decorators import public
|
from stronghold.decorators import public
|
||||||
import time
|
import time
|
||||||
@ -37,6 +36,8 @@ import plinth
|
|||||||
from plinth import package
|
from plinth import package
|
||||||
from plinth.modules.storage import views as disk_views
|
from plinth.modules.storage import views as disk_views
|
||||||
|
|
||||||
|
REDIRECT_FIELD_NAME = 'next'
|
||||||
|
|
||||||
|
|
||||||
@public
|
@public
|
||||||
def index(request):
|
def index(request):
|
||||||
@ -73,26 +74,32 @@ class LanguageSelectionView(FormView):
|
|||||||
form_class = forms.LanguageSelectionForm
|
form_class = forms.LanguageSelectionForm
|
||||||
template_name = 'language-selection.html'
|
template_name = 'language-selection.html'
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get_initial(self):
|
||||||
current_values = {'language': translation.get_language()}
|
"""Return the initial values for the form."""
|
||||||
form = self.form_class(initial=current_values)
|
return {'language': translation.get_language()}
|
||||||
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 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)
|
translation.activate(selected_language)
|
||||||
response = HttpResponseRedirect(reverse('language-selection'))
|
|
||||||
# send a cookie for selected language
|
# send a cookie for selected language
|
||||||
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, selected_language)
|
response.set_cookie(settings.LANGUAGE_COOKIE_NAME,
|
||||||
return response
|
selected_language)
|
||||||
return render(request, self.template_name, {'form': form})
|
|
||||||
|
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):
|
class ServiceView(FormView):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user