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:
Sunil Mohan Adapa 2018-02-13 12:06:40 +05:30 committed by James Valleroy
parent ef9e5c7a43
commit e644e5c86a
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
2 changed files with 29 additions and 21 deletions

View File

@ -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>

View File

@ -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):