forked from CGM_Public/pretix_original
Presale: Add a language switch to the UI
This commit is contained in:
@@ -20,4 +20,13 @@ footer {
|
||||
}
|
||||
.js-only {
|
||||
display: none;
|
||||
}
|
||||
.locales {
|
||||
display: inline;
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
img {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,17 @@
|
||||
<div class="container event">
|
||||
<div class="page-header">
|
||||
<div class="pull-right loginbox">
|
||||
{% if request.event.settings.locales|length > 1 %}
|
||||
<div class="locales">
|
||||
{% for l in request.event.settings.locales %}
|
||||
{% if l != request.LANGUAGE_CODE %}
|
||||
<a href="{% url "presale:locale.set" %}?locale={{ l }}&next={{ request.path }}%3F{{ request.META.QUERY_STRING|urlencode }}">
|
||||
<img src="{% static "pretixbase/img/flags" %}/{{ l }}.png" />
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div> ·
|
||||
{% endif %}
|
||||
{% if request.user.is_authenticated %}
|
||||
{% blocktrans trimmed with name=request.user.identifier %}
|
||||
Hello, {{ name }}!
|
||||
|
||||
@@ -4,6 +4,7 @@ import pretix.presale.views.event
|
||||
import pretix.presale.views.cart
|
||||
import pretix.presale.views.checkout
|
||||
import pretix.presale.views.order
|
||||
import pretix.presale.views.locale
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
@@ -30,4 +31,5 @@ urlpatterns = [
|
||||
url(r'^logout$', pretix.presale.views.event.EventLogout.as_view(), name='event.logout'),
|
||||
url(r'^orders$', pretix.presale.views.event.EventOrders.as_view(), name='event.orders'),
|
||||
])),
|
||||
url(r'^locale/set$', pretix.presale.views.locale.LocaleSet.as_view(), name='locale.set'),
|
||||
]
|
||||
|
||||
@@ -253,7 +253,9 @@ class EventLogin(EventViewMixin, TemplateView):
|
||||
if form.is_valid():
|
||||
user = User.objects.create_local_user(
|
||||
request.event, form.cleaned_data['username'], form.cleaned_data['password'],
|
||||
email=form.cleaned_data['email'] if form.cleaned_data['email'] != '' else None
|
||||
email=form.cleaned_data['email'] if form.cleaned_data['email'] != '' else None,
|
||||
locale=request.LANGUAGE_CODE,
|
||||
timezone=request.timezone if hasattr(request, 'timezone') else None
|
||||
)
|
||||
user = authenticate(identifier=user.identifier, password=form.cleaned_data['password'])
|
||||
login(request, user)
|
||||
@@ -263,7 +265,9 @@ class EventLogin(EventViewMixin, TemplateView):
|
||||
if form.is_valid():
|
||||
user = User.objects.create_global_user(
|
||||
form.cleaned_data['email'], form.cleaned_data['password'],
|
||||
)
|
||||
locale=request.LANGUAGE_CODE,
|
||||
timezone=request.timezone if hasattr(request, 'timezone') else None
|
||||
)
|
||||
user = authenticate(identifier=user.identifier, password=form.cleaned_data['password'])
|
||||
login(request, user)
|
||||
return self.redirect_to_next()
|
||||
|
||||
22
src/pretix/presale/views/locale.py
Normal file
22
src/pretix/presale/views/locale.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from datetime import datetime, timedelta
|
||||
from django.conf import settings
|
||||
from django.shortcuts import redirect
|
||||
from django.views.generic import View
|
||||
|
||||
|
||||
class LocaleSet(View):
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
locale = request.GET.get('locale')
|
||||
resp = redirect(request.GET.get('next', request.META.get('HTTP_REFERER', '/')))
|
||||
if locale in [lc for lc, ll in settings.LANGUAGES]:
|
||||
if request.user.is_authenticated():
|
||||
request.user.locale = locale
|
||||
request.user.save()
|
||||
|
||||
max_age = 10 * 365 * 24 * 60 * 60
|
||||
resp.set_cookie(settings.LANGUAGE_COOKIE_NAME, locale, max_age=max_age,
|
||||
expires=(datetime.utcnow() + timedelta(seconds=max_age)).strftime(
|
||||
'%a, %d-%b-%Y %H:%M:%S GMT'),
|
||||
domain=settings.SESSION_COOKIE_DOMAIN)
|
||||
return resp
|
||||
Reference in New Issue
Block a user