Added locale settings to event creation

This commit is contained in:
Raphael Michel
2016-05-04 18:29:40 +02:00
parent 1efdc1e44f
commit 3ae13ce0ed
4 changed files with 67 additions and 3 deletions

View File

@@ -162,7 +162,11 @@ class Event(LoggedModel):
""" """
Returns an object representing this event's settings Returns an object representing this event's settings
""" """
return SettingsProxy(self, type=EventSetting, parent=self.organizer) try:
return SettingsProxy(self, type=EventSetting, parent=self.organizer)
except Organizer.DoesNotExist:
# Should only happen when creating new events
return SettingsProxy(self, type=EventSetting)
@property @property
def presale_has_ended(self): def presale_has_ended(self):

View File

@@ -40,6 +40,29 @@ class EventCreateForm(I18nModelForm):
return slug return slug
class EventCreateSettingsForm(SettingsForm):
timezone = forms.ChoiceField(
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 language"),
)
def clean(self):
data = super().clean()
if data['locale'] not in data['locales']:
raise ValidationError({
'locale': _('Your default locale must also be enebled for your event (see box above).')
})
return data
class EventUpdateForm(I18nModelForm): class EventUpdateForm(I18nModelForm):
def clean_slug(self): def clean_slug(self):
return self.instance.slug return self.instance.slug

View File

@@ -15,6 +15,12 @@
{% bootstrap_field form.date_to layout="horizontal" %} {% bootstrap_field form.date_to layout="horizontal" %}
{% bootstrap_field form.currency layout="horizontal" %} {% bootstrap_field form.currency layout="horizontal" %}
</fieldset> </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" %}
</fieldset>
<fieldset> <fieldset>
<legend>{% trans "Timeline" %}</legend> <legend>{% trans "Timeline" %}</legend>
{% bootstrap_field form.presale_start layout="horizontal" %} {% bootstrap_field form.presale_start layout="horizontal" %}

View File

@@ -1,12 +1,15 @@
from django.conf import settings from django.conf import settings
from django.contrib import messages from django.contrib import messages
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.shortcuts import render from django.db import transaction
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, ListView, TemplateView from django.views.generic import CreateView, ListView, TemplateView
from pretix.base.models import Event, EventPermission, OrganizerPermission from pretix.base.models import Event, EventPermission, OrganizerPermission
from pretix.control.forms.event import EventCreateForm from pretix.control.forms.event import (
EventCreateForm, EventCreateSettingsForm, EventSettingsForm,
)
from pretix.control.permissions import OrganizerPermissionRequiredMixin from pretix.control.permissions import OrganizerPermissionRequiredMixin
@@ -44,7 +47,28 @@ class EventCreate(OrganizerPermissionRequiredMixin, CreateView):
context_object_name = 'event' context_object_name = 'event'
permission = 'can_create_events' permission = 'can_create_events'
@cached_property
def sform(self):
return EventCreateSettingsForm(
obj=Event(),
prefix='settings',
data=self.request.POST if self.request.method == 'POST' else None
)
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid() and self.sform.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def get_context_data(self, *args, **kwargs) -> dict:
context = super().get_context_data(*args, **kwargs)
context['sform'] = self.sform
return context
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
self.object = Event()
return super().dispatch(request, *args, **kwargs) return super().dispatch(request, *args, **kwargs)
def get_form_kwargs(self): def get_form_kwargs(self):
@@ -52,6 +76,7 @@ class EventCreate(OrganizerPermissionRequiredMixin, CreateView):
kwargs['organizer'] = self.request.organizer kwargs['organizer'] = self.request.organizer
return kwargs return kwargs
@transaction.atomic
def form_valid(self, form): def form_valid(self, form):
messages.success(self.request, _('The new event has been created.')) messages.success(self.request, _('The new event has been created.'))
form.instance.organizer = self.request.organizer form.instance.organizer = self.request.organizer
@@ -62,6 +87,12 @@ class EventCreate(OrganizerPermissionRequiredMixin, CreateView):
self.object = form.instance self.object = form.instance
self.object.plugins = settings.PRETIX_PLUGINS_DEFAULT self.object.plugins = settings.PRETIX_PLUGINS_DEFAULT
self.object.save() self.object.save()
self.sform.obj = form.instance
self.sform.save()
form.instance.log_action('pretix.event.settings', user=self.request.user, data={
k: form.instance.settings.get(k) for k in self.sform.changed_data
})
return ret return ret
def get_success_url(self) -> str: def get_success_url(self) -> str: