forked from CGM_Public/pretix_original
111 lines
3.5 KiB
Python
111 lines
3.5 KiB
Python
from django.shortcuts import render, redirect
|
|
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
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from pytz import common_timezones
|
|
from tixlbase.forms import VersionedModelForm
|
|
|
|
from tixlbase.models import Event
|
|
from tixlcontrol.permissions import EventPermissionRequiredMixin
|
|
|
|
|
|
class EventUpdateForm(VersionedModelForm):
|
|
|
|
timezone = forms.ChoiceField(
|
|
choices=((a, a) for a in common_timezones),
|
|
label=_("Default timezone"),
|
|
)
|
|
|
|
def clean_slug(self):
|
|
return self.instance.slug
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.fields['slug'].widget.attrs['readonly'] = 'readonly'
|
|
|
|
class Meta:
|
|
model = Event
|
|
localized_fields = '__all__'
|
|
fields = [
|
|
'name',
|
|
'slug',
|
|
'locale',
|
|
'timezone',
|
|
'currency',
|
|
'date_from',
|
|
'date_to',
|
|
'show_date_to',
|
|
'show_times',
|
|
'presale_start',
|
|
'presale_end',
|
|
'payment_term_days',
|
|
'payment_term_last',
|
|
]
|
|
|
|
|
|
class EventUpdate(EventPermissionRequiredMixin, UpdateView):
|
|
model = Event
|
|
form_class = EventUpdateForm
|
|
template_name = 'tixlcontrol/event/settings.html'
|
|
permission = 'can_change_settings'
|
|
|
|
def get_object(self, queryset=None) -> Event:
|
|
return self.request.event
|
|
|
|
def get_success_url(self) -> str:
|
|
return reverse('control:event.settings', kwargs={
|
|
'organizer': self.get_object().organizer.slug,
|
|
'event': self.get_object().slug,
|
|
}) + '?success=true'
|
|
|
|
|
|
class EventPlugins(EventPermissionRequiredMixin, TemplateView, SingleObjectMixin):
|
|
|
|
model = Event
|
|
context_object_name = 'event'
|
|
permission = 'can_change_settings'
|
|
template_name = 'tixlcontrol/event/plugins.html'
|
|
|
|
def get_object(self, queryset=None) -> Event:
|
|
return self.request.event
|
|
|
|
def get_context_data(self, *args, **kwargs) -> dict:
|
|
from tixlbase.plugins import get_all_plugins
|
|
context = super().get_context_data(*args, **kwargs)
|
|
context['plugins'] = [p for p in get_all_plugins() if not p.name.startswith('.')]
|
|
context['plugins_active'] = self.object.get_plugins()
|
|
return context
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
self.object = self.get_object()
|
|
context = self.get_context_data(object=self.object)
|
|
return self.render_to_response(context)
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
self.object = self.get_object()
|
|
plugins_active = self.object.get_plugins()
|
|
for key, value in request.POST.items():
|
|
if key.startswith("plugin:"):
|
|
module = key.split(":")[1]
|
|
if value == "enable":
|
|
plugins_active.append(module)
|
|
else:
|
|
plugins_active.remove(module)
|
|
self.object.plugins = ",".join(plugins_active)
|
|
self.object.save()
|
|
return redirect(self.get_success_url())
|
|
|
|
def get_success_url(self) -> str:
|
|
return reverse('control:event.settings.plugins', kwargs={
|
|
'organizer': self.get_object().organizer.slug,
|
|
'event': self.get_object().slug,
|
|
}) + '?success=true'
|
|
|
|
|
|
def index(request, organizer, event):
|
|
return render(request, 'tixlcontrol/event/index.html', {})
|