Make available languages configurable

This commit is contained in:
Raphael Michel
2015-04-06 00:14:59 +02:00
parent 95c31ec3f6
commit febfea68f7
8 changed files with 160 additions and 25 deletions

View File

@@ -19,6 +19,7 @@
</fieldset>
<fieldset>
<legend>{% trans "Display settings" %}</legend>
{% bootstrap_field sform.locales layout="horizontal" %}
{% bootstrap_field sform.locale layout="horizontal" %}
{% bootstrap_field sform.timezone layout="horizontal" %}
{% bootstrap_field sform.show_date_to layout="horizontal" %}

View File

@@ -0,0 +1,28 @@
from django.views.generic import edit
class EventBasedFormMixin:
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
if hasattr(self.request, 'event'):
kwargs['event'] = self.request.event
return kwargs
class CreateView(EventBasedFormMixin, edit.CreateView):
"""
Like Django's default CreateView, but passes the optional event
argument to the form. This is necessary for I18nModelForms to work
properly.
"""
pass
class UpdateView(EventBasedFormMixin, edit.UpdateView):
"""
Like Django's default UpdateView, but passes the optional event
argument to the form. This is necessary for I18nModelForms to work
properly.
"""
pass

View File

@@ -2,7 +2,6 @@ from collections import OrderedDict
from django.conf import settings
from django.shortcuts import render, redirect
from django.utils.functional import cached_property
from django.views.generic.edit import UpdateView
from django.views.generic.base import TemplateView
from django.views.generic.detail import SingleObjectMixin
from django import forms
@@ -15,6 +14,7 @@ from pretix.base.forms import VersionedModelForm, SettingsForm
from pretix.base.models import Event
from pretix.base.signals import register_payment_providers
from pretix.control.permissions import EventPermissionRequiredMixin
from . import UpdateView
class EventUpdateForm(VersionedModelForm):
@@ -71,9 +71,13 @@ class EventSettingsForm(SettingsForm):
choices=((a, a) for a in common_timezones),
label=_("Default timezone"),
)
locales = forms.MultipleChoiceField(
choices=settings.LANGUAGES,
label=_("Available langauges"),
)
locale = forms.ChoiceField(
choices=settings.LANGUAGES,
label=_("Default locale"),
label=_("Default language"),
)
user_mail_required = forms.BooleanField(
label=_("Require e-mail adresses"),

View File

@@ -3,6 +3,7 @@ from itertools import product
from django import forms
from django.core.exceptions import ValidationError
from django.db import transaction
from django.forms import BaseInlineFormSet
from django.forms.widgets import flatatt
from django.utils.encoding import force_text
from django.utils.html import format_html
@@ -13,6 +14,20 @@ from pretix.base.forms import VersionedModelForm
from pretix.base.models import ItemVariation, Item
class I18nInlineFormSet(BaseInlineFormSet):
"""
This is equivalent to a normal BaseInlineFormset, but cares for the special needs
of I18nForms (see there for more information).
"""
def __init__(self, *args, **kwargs):
self.event = kwargs.pop('event', None)
super().__init__(*args, **kwargs)
def _construct_form(self, i, **kwargs):
kwargs['event'] = self.event
return super()._construct_form(i, **kwargs)
class TolerantFormsetModelForm(VersionedModelForm):
"""
This is equivalent to a normal VersionedModelForm, but works around a problem that

View File

@@ -4,7 +4,7 @@ from django.forms import BooleanField, ModelForm
from django.utils.functional import cached_property
from django.views.generic import ListView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic.edit import DeleteView
from django.views.generic.base import TemplateView
from django.views.generic.detail import SingleObjectMixin
from django.core.urlresolvers import resolve, reverse
@@ -12,14 +12,15 @@ from django.http import HttpResponseRedirect, HttpResponseForbidden
from django.shortcuts import redirect
from django.forms.models import inlineformset_factory
from django.utils.translation import ugettext_lazy as _
from pretix.base.forms import VersionedModelForm
from pretix.base.forms import VersionedModelForm, I18nModelForm
from pretix.base.models import (
Item, ItemCategory, Property, ItemVariation, PropertyValue, Question, Quota,
Versionable)
from pretix.control.permissions import EventPermissionRequiredMixin, event_permission_required
from pretix.control.views.forms import TolerantFormsetModelForm, VariationsField
from pretix.control.views.forms import TolerantFormsetModelForm, VariationsField, I18nInlineFormSet
from pretix.control.signals import restriction_formset
from . import UpdateView, CreateView
class ItemList(ListView):
@@ -215,6 +216,7 @@ class PropertyUpdate(EventPermissionRequiredMixin, UpdateView):
formsetclass = inlineformset_factory(
Property, PropertyValue,
form=PropertyValueForm,
formset=I18nInlineFormSet,
can_order=True,
extra=0,
)
@@ -269,6 +271,7 @@ class PropertyCreate(EventPermissionRequiredMixin, CreateView):
formsetclass = inlineformset_factory(
Property, PropertyValue,
form=PropertyValueForm,
formset=I18nInlineFormSet,
can_order=True,
extra=3,
)
@@ -440,7 +443,7 @@ class QuotaList(ListView):
).prefetch_related("items")
class QuotaForm(ModelForm):
class QuotaForm(I18nModelForm):
def __init__(self, **kwargs):
items = kwargs['items']