add time machine form to live.html

This commit is contained in:
Mira Weller
2024-04-30 21:49:57 +02:00
parent 297bf566ad
commit 3dca6c232e
4 changed files with 60 additions and 9 deletions
@@ -124,6 +124,28 @@
<div class="clear"></div>
</div>
</div>
<div class="panel {% if request.session.timemachine_now_dt %}panel-success{% else %}panel-default{% endif %}">
<div class="panel-heading">
{% trans "Time machine" %}
</div>
<div class="panel-body">
<form action="" method="post" class="">
{% csrf_token %}
{% bootstrap_form_errors timemachine_form %}
<p>{% trans "Test your shop as if it were a different date and time." %}</p>
{% bootstrap_field timemachine_form.now_dt layout="control" show_label=False field_class="col-md-6" %}
<div class="text-right">
<button type="submit" class="btn btn-default btn-lg btn-save">
{% trans "Enable time machine" %}
</button>
</div>
</form>
<div class="clear"></div>
</div>
</div>
<div class="text-right">
<a href="{% url "control:event.dangerzone" organizer=request.organizer.slug event=request.event.slug %}"
class="btn btn-default btn-lg">
+28 -3
View File
@@ -46,6 +46,8 @@ 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
@@ -63,7 +65,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 now
from django.utils.timezone import now, get_current_timezone
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
@@ -91,9 +93,10 @@ from pretix.control.permissions import EventPermissionRequiredMixin
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, get_event_domain
from pretix.multidomain.urlreverse import build_absolute_uri, get_event_domain, eventreverse
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 (
@@ -950,18 +953,40 @@ 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("live") == "true" and not self.request.event.live_issues:
if 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("timemachine_disable"):
request.session['timemachine_now_dt'] = None
messages.success(self.request, _('Time machine disabled!'))
elif request.POST.get("live") == "true" and not self.request.event.live_issues:
with transaction.atomic():
request.event.live = True
request.event.save()
@@ -36,11 +36,15 @@
{% if request.now_dt_is_fake %}
<div class="offline-banner">
<div class="container">
<span class="fa fa-user-secret" aria-hidden="true"></span>
<span class="fa fa-clock-o" aria-hidden="true"></span>
{% trans "You are currently using the time machine. The ticket shop is rendered as if it were" %} {{ request.now_dt }}
<a href="#">
{% trans "Go back to current time" %}
<a href="{{ site_url }}{% url "control:event.live" event=event.slug organizer=event.organizer.slug %}">
{% trans "Change" %}
</a>
<form action="{{ site_url }}{% url "control:event.live" event=event.slug organizer=event.organizer.slug %}" method="post" class="download-btn-form">
{% csrf_token %}
<input type="submit" class="btn btn-link" value="{% trans "Go back to current time" %}" name="timemachine_disable">
</form>
</div>
</div>
{% endif %}
+3 -3
View File
@@ -46,16 +46,16 @@ class TimeMachineMiddleware:
def __call__(self, request):
if hasattr(request, 'event') and hasattr(request, '_namespace') and request._namespace == 'presale' and \
'time_machine' in request.COOKIES and \
'timemachine_now_dt' in request.session and \
request.user.has_event_permission(request.organizer, request.event, 'can_change_event_settings', request):
print("setting now_dt from cookie")
request.now_dt = parse(request.COOKIES['time_machine'])
request.now_dt = parse(request.session['timemachine_now_dt'])
request.now_dt_is_fake = True
else:
print("setting now_dt to now",
"hasevent?",hasattr(request, 'event') ,
"namespace?",hasattr(request, '_namespace') and request._namespace,
"cookies?",request.COOKIES)
"cookies?",request.session)
request.now_dt = now()
request.now_dt_is_fake = False