Move timemachine controls into presale, implement session transfer for multidomain time machine support

This commit is contained in:
Mira Weller
2024-04-30 21:49:58 +02:00
parent 5b1175ff05
commit 64358be4ae
12 changed files with 139 additions and 65 deletions
+8 -28
View File
@@ -46,8 +46,6 @@ from zoneinfo import ZoneInfo
import bleach
import qrcode
import qrcode.image.svg
from dateutil import parser
from django import forms
from django.apps import apps
from django.conf import settings
from django.contrib import messages
@@ -65,7 +63,7 @@ from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.http import url_has_allowed_host_and_scheme
from django.utils.timezone import get_current_timezone, now
from django.utils.timezone import now
from django.utils.translation import gettext, gettext_lazy as _, gettext_noop
from django.views.generic import FormView, ListView
from django.views.generic.base import TemplateView, View
@@ -94,12 +92,11 @@ from pretix.control.views.mailsetup import MailSettingsSetupView
from pretix.control.views.user import RecentAuthenticationRequiredMixin
from pretix.helpers.database import rolledback_transaction
from pretix.multidomain.urlreverse import (
build_absolute_uri, eventreverse, get_event_domain,
build_absolute_uri, get_event_domain,
)
from pretix.plugins.stripe.payment import StripeSettingsHolder
from pretix.presale.style import regenerate_css
from ...base.forms.widgets import SplitDateTimePickerWidget
from ...base.i18n import language
from ...base.models.items import (
Item, ItemCategory, ItemMetaProperty, Question, Quota,
@@ -955,43 +952,21 @@ class EventPermissions(EventSettingsViewMixin, EventPermissionRequiredMixin, Tem
template_name = 'pretixcontrol/event/permissions.html'
class TimemachineForm(forms.Form):
now_dt = forms.SplitDateTimeField(
label=_('Fake date time'),
widget=SplitDateTimePickerWidget(),
initial=lambda: now().astimezone(get_current_timezone())
)
class EventLive(EventPermissionRequiredMixin, TemplateView):
permission = 'can_change_event_settings'
template_name = 'pretixcontrol/event/live.html'
def setup(self, request, *args, **kwargs):
super().setup(request, *args, **kwargs)
self.timemachine_form = TimemachineForm(
data=request.method == 'POST' and request.POST or None,
initial=(
{'now_dt': parser.parse(request.session.get('timemachine_now_dt', None))}
if request.session.get('timemachine_now_dt', None) else {}
)
)
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['issues'] = self.request.event.live_issues
ctx['actual_orders'] = self.request.event.orders.filter(testmode=False).exists()
ctx['timemachine_form'] = self.timemachine_form
return ctx
def post(self, request, *args, **kwargs):
if request.POST.get("timemachine_disable"):
del request.session['timemachine_now_dt']
messages.success(self.request, _('Time machine disabled!'))
elif self.timemachine_form.is_valid():
request.session['timemachine_now_dt'] = str(self.timemachine_form.cleaned_data['now_dt'])
return redirect(eventreverse(request.event, "presale:event.index"))
elif request.POST.get("live") == "true" and not self.request.event.live_issues:
if request.POST.get("live") == "true" and not self.request.event.live_issues:
with transaction.atomic():
request.event.live = True
request.event.save()
@@ -1047,6 +1022,11 @@ class EventLive(EventPermissionRequiredMixin, TemplateView):
})
class EventTransferSession(EventPermissionRequiredMixin, TemplateView):
permission = 'can_change_event_settings'
template_name = 'pretixcontrol/event/transfer_session.html'
class EventDelete(RecentAuthenticationRequiredMixin, EventPermissionRequiredMixin, FormView):
permission = 'can_change_event_settings'
template_name = 'pretixcontrol/event/delete.html'