mirror of
https://github.com/pretix/pretix.git
synced 2026-05-15 16:54:00 +00:00
* setup vite and integrate fully with django - vite starts with `python manage.py runserver` - add templatetags to simply load vite hmr and entry points - add eslint (recheck rules) - enable non-strict ts * better syntax for cors header setting * migrate checkin rules editor to vue3 - move constants to a module - move reading from and writing to non-vue html to django interop module - switch to composition api and script setup sfc with pug - use optional chaining operators a lot to simplify code * migrate webcheckin plugin to vite+vue3 - migrate vue sfcs to script setup and pug - move fetch calls into a api.ts module - move common formatting and i18n strings into module * fix migration error * first draft migrating widget to vue3/vite * first couple widget e2e tests courtesy of claude most of the tests don't work yet * test file is not actually used * drop widget_ prefix from e2e test fixtures * add test for complete widget journey for simple event * switch timezone in e2e tests to Europe/Berlin * make dates in e2e tests relative * migrate widget bugfix #5886 * start testing event series widget * working vite widget setup for prod (untested), local dev (with or without dev server) and pytests, with flags for running the old version or the vite version * simplify e2e test iframe check * less flaky e2e tests * top level await in iife build mode is not supported, so let's do import.meta.glob instead (we just need the build step not to see await, the code doesn't actually ever get loaded because it's DEV only) * fix inconsistencies from automatic migration * Allow gradual rollout of new vite-based widget by adding urls to an allowlist that gets checked against the "Origin" http header of request fetching the widget js * add e2e tests for widget button, testing empty cart, adding specific items, and subevents * remove janky claude testts again * resolve migration TODOs: properly refocus parent on navigations * use `npm run dev:control` for the vite dev server for admin components * upgrade npm dependencies * fix js linter errors * fix python linter errors * build all control vue components * add new js config files to check-manifest ignore * working prod build acutal serving of built assets not tested yet * fix templatetag paths to match what's in the vite mantifest * add missing quotes around 'unsafe-eval' cors value * remove now unused old vue2 tooling * try fixing e2e test ci * fix flake8 error * check if vite build artefacts are in the wheel * add license headers * remove dom manipilation code necessary for `div.pretix-widget-compat` to work. No longer needed for vue3 * remove superfluous `createElement` calls They might have been there because of IE, which is no longer relevant * make widget dev mode parametizable through query params and document the usage and those params * fix rst syntax * remove migration todos file Co-authored-by: luelista <mira@teamwiki.de> * rearrange dockerfile commands for smaller image, thanks @luelista * Update .gitignore, adding .vite Co-authored-by: luelista <mira@teamwiki.de> * add eslint CI * make vue dev work in plugins * fix docker build * rebuild vite setup to support static prod plugins and dynamic hmr plugin development * use toml for vite plugin config instead of standalone json file * Add widget changes from #6047, #6149 * Allow buttons to reuse cart (Z#23226853) * Always keep cart of buttons with items set * widget: handle cart if not same-site (#6149) --------- Co-authored-by: luelista <mira@teamwiki.de> Co-authored-by: Kara Engelhardt <engelhardt@pretix.eu>
484 lines
30 KiB
HTML
484 lines
30 KiB
HTML
{% load compress %}
|
|
{% load static %}
|
|
{% load i18n %}
|
|
{% load statici18n %}
|
|
{% load vite %}
|
|
{% load eventsignal %}
|
|
{% load eventurl %}
|
|
{% load dialog %}
|
|
{% load icon %}
|
|
<!DOCTYPE html>
|
|
<html{% if rtl %} dir="rtl" class="rtl"{% endif %}>
|
|
<head>
|
|
<title>{% block title %}{% endblock %}{% if url_name != "index" %} :: {% endif %}
|
|
{{ settings.PRETIX_INSTANCE_NAME }}</title>
|
|
{% compress css %}
|
|
<link rel="stylesheet" type="text/x-scss" href="{% static "pretixcontrol/scss/main.scss" %}" />
|
|
<link rel="stylesheet" type="text/x-scss" href="{% static "lightbox/css/lightbox.scss" %}" />
|
|
{% endcompress %}
|
|
{% if DEBUG %}
|
|
<script type="text/javascript" src="{% url 'javascript-catalog' lang=request.LANGUAGE_CODE %}"></script>
|
|
{% else %}
|
|
<script src="{% statici18n request.LANGUAGE_CODE %}"></script>
|
|
{% endif %}
|
|
{% compress js %}
|
|
<script type="text/javascript" src="{% static "jquery/js/jquery-3.6.4.min.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "js/jquery.formset.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "typeahead/typeahead.bundle.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "bootstrap/js/bootstrap.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "moment/moment-with-locales.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "datetimepicker/bootstrap-datetimepicker.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "select2/select2.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "select2/i18n/de.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "select2/i18n/en.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "charts/raphael-min.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "charts/morris.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "clipboard/clipboard.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "cropper/cropper.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "rrule/rrule.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixbase/js/gettextstub.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixpresale/js/ui/questions.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/jquery.qrcode.min.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/clipboard.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/menu.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/sb-admin-2.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/main.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/quota.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/rrule.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/subevent.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/question.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/variations.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/dragndroplist.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/mail.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/orderchange.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/typeahead.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/quicksetup.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/dashboard.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/tabs.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "leaflet/leaflet.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/geo.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixbase/js/details.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixbase/js/asynctask.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "sortable/Sortable.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "colorpicker/bootstrap-colorpicker.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "fileupload/jquery.ui.widget.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "fileupload/jquery.fileupload.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "lightbox/js/lightbox.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "are-you-sure/jquery.are-you-sure.js" %}"></script>
|
|
<script type="text/javascript" src="{% static "pretixbase/js/addressform.js" %}"></script>
|
|
{% endcompress %}
|
|
{{ html_head|safe }}
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
{% if development_warning or debug_warning %}
|
|
<link rel="shortcut icon" href="{% static "pretixbase/img/favicon-debug.ico" %}">
|
|
{% else %}
|
|
<link rel="shortcut icon" href="{% static "pretixbase/img/favicon.ico" %}">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="{% static "pretixbase/img/icons/favicon-32x32.png" %}">
|
|
<link rel="icon" type="image/png" sizes="194x194" href="{% static "pretixbase/img/icons/favicon-194x194.png" %}">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="{% static "pretixbase/img/icons/favicon-16x16.png" %}">
|
|
{% endif %}
|
|
<link rel="apple-touch-icon" sizes="180x180" href="{% static "pretixbase/img/icons/apple-touch-icon.png" %}">
|
|
<link rel="icon" type="image/png" sizes="192x192" href="{% static "pretixbase/img/icons/android-chrome-192x192.png" %}">
|
|
<link rel="manifest" href="{% url "site.webmanifest" %}">
|
|
<link rel="mask-icon" href="{% static "pretixbase/img/icons/safari-pinned-tab.svg" %}" color="#3b1c4a">
|
|
<meta name="theme-color" content="#3b1c4a">
|
|
<meta name="referrer" content="origin">
|
|
|
|
{% vite_importmap %}
|
|
{% block custom_header %}{% endblock %}
|
|
</head>
|
|
<body data-datetimeformat="{{ js_datetime_format }}" data-timeformat="{{ js_time_format }}"
|
|
data-dateformat="{{ js_date_format }}" data-datetimelocale="{{ js_locale }}"
|
|
data-pretixlocale="{{ request.LANGUAGE_CODE }}"
|
|
data-payment-weekdays-disabled="{{ js_payment_weekdays_disabled }}"
|
|
{% if request.organizer %}data-organizer="{{ request.organizer.slug }}"{% endif %}
|
|
{% if request.event %}data-event="{{ request.event.slug }}"{% endif %}
|
|
data-select2-locale="{{ select2locale }}" data-longdateformat="{{ js_long_date_format }}" class="nojs">
|
|
<div id="wrapper">
|
|
<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
|
|
<div class="navbar-header">
|
|
<button type="button" class="navbar-toggle"
|
|
data-toggle="collapse" data-target=".navbar-nav-collapse">
|
|
<span class="sr-only">{% trans "Toggle navigation" %}</span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</button>
|
|
{% if request.event %}
|
|
{% if has_domain and not request.event.live %}
|
|
<form action="{% eventurl request.event "presale:event.auth" %}" method="post"
|
|
target="_blank" class="mobile-navbar-view-form visible-xs-block">
|
|
<input type="hidden" value="{{ new_session }}" name="session">
|
|
<button type="submit" class="btn btn-link navbar-toggle">
|
|
<i class="fa fa-eye"></i>
|
|
</button>
|
|
</form>
|
|
{% else %}
|
|
<a href="{% eventurl request.event "presale:event.index" %}" title="{% trans "Go to shop" %}"
|
|
target="_blank" class="navbar-toggle mobile-navbar-view-link">
|
|
<i class="fa fa-eye"></i>
|
|
</a>
|
|
{% endif %}
|
|
{% elif request.organizer %}
|
|
<a href="{% eventurl request.organizer "presale:organizer.index" %}" title="{% trans "Public profile" %}" target="_blank"
|
|
class="navbar-toggle mobile-navbar-view-link">
|
|
<i class="fa fa-eye"></i>
|
|
</a>
|
|
{% endif %}
|
|
<a class="navbar-brand" href="{% url "control:index" %}">
|
|
<img src="{% static "pretixbase/img/pretix-icon-white-mini.svg" %}" />
|
|
<span>
|
|
{{ settings.PRETIX_INSTANCE_NAME }}
|
|
</span>
|
|
</a>
|
|
</div>
|
|
<ul class="nav navbar-nav navbar-top-links navbar-left flip hidden-xs">
|
|
{% if request.event %}
|
|
<li>
|
|
{% if has_domain and not request.event.live %}
|
|
<form action="{% eventurl request.event "presale:event.auth" %}" method="post" target="_blank">
|
|
<input type="hidden" value="{{ new_session }}" name="session">
|
|
<button type="submit" class="btn btn-link" id="button-shop">
|
|
<i class="fa fa-eye"></i> {% trans "Go to shop" %}
|
|
</button>
|
|
</form>
|
|
{% else %}
|
|
<a href="{% eventurl request.event "presale:event.index" %}" title="{% trans "Go to shop" %}" target="_blank">
|
|
<i class="fa fa-eye"></i> {% trans "Go to shop" %}
|
|
</a>
|
|
{% endif %}
|
|
</li>
|
|
{% elif request.organizer %}
|
|
<li>
|
|
<a href="{% eventurl request.organizer "presale:organizer.index" %}" title="{% trans "Public profile" %}" target="_blank">
|
|
<i class="fa fa-eye"></i> {% trans "Public profile" %}
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
<ul class="nav navbar-nav navbar-top-links navbar-right flip">
|
|
{% for nav in nav_topbar %}
|
|
<li {% if nav.children %}class="dropdown"{% endif %}>
|
|
<a href="{{ nav.url }}" title="{{ nav.title }}" {% if nav.active %}class="active"{% endif %}
|
|
{% if nav.children %}class="dropdown-toggle" data-toggle="dropdown"{% endif %}>
|
|
{% if nav.icon %}
|
|
{% if "<svg" in nav.icon %}
|
|
{{ nav.icon|safe }}
|
|
{% else %}
|
|
<span class="fa fa-{{ nav.icon }}"></span>
|
|
{% endif %}
|
|
<span class="visible-xs-inline">{{ nav.label }}</span>
|
|
{% else %}
|
|
{{ nav.label }}
|
|
{% endif %}
|
|
</a>
|
|
{% if nav.children %}
|
|
<ul class="dropdown-menu" role="menu">
|
|
{% for item in nav.children %}
|
|
<li>
|
|
<a {% if item.url %}href="{{ item.url }}"{% endif %}
|
|
{% if item.external %}target="_blank"{% endif %}
|
|
{% if item.active %}class="active"{% endif %}>
|
|
{% if item.icon %}
|
|
<span class="fa fa-fw fa-{{ item.icon }}"></span>
|
|
{% endif %}
|
|
{{ item.label|safe }}</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% endif %}
|
|
</li>
|
|
{% endfor %}
|
|
|
|
{% if request.user.is_staff and not staff_session %}
|
|
<li>
|
|
<form action="{% url 'control:user.sudo' %}?next={{ request.path|add:"?"|add:request.GET.urlencode|urlencode }}" method="post">
|
|
{% csrf_token %}
|
|
<button type="submit" class="btn btn-link" id="button-sudo">
|
|
<i class="fa fa-id-card"></i> {% trans "Admin mode" %}
|
|
</button>
|
|
</form>
|
|
</li>
|
|
{% elif request.user.is_staff and staff_session %}
|
|
<li>
|
|
<a href="{% url 'control:user.sudo.stop' %}" class="danger admin-only">
|
|
<i class="fa fa-id-card"></i> {% trans "End admin session" %}
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
{% if warning_update_available %}
|
|
<li>
|
|
<a href="{% url 'control:global.update' %}" class="danger">
|
|
<i class="fa fa-bell"></i>
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
<li>
|
|
<a href="{% url 'control:user.settings' %}" title="{% trans "Account Settings" %}" >
|
|
<i class="fa fa-user"></i> {{ request.user.get_full_name }}
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="{% url 'control:auth.logout' %}" title="{% trans "Log out" %}">
|
|
<i class="fa fa-sign-out"></i>
|
|
<span class="visible-xs-inline">{% trans "Log out" %}</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
<div class="navbar-default sidebar" role="navigation">
|
|
<div class="sidebar-nav navbar-nav-collapse navbar-collapse">
|
|
<div class="dropdown context-selector">
|
|
{% if request.event %}
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
|
<span class="fa-stack fa-lg">
|
|
<i class="fa fa-circle fa-stack-2x"></i>
|
|
<i class="fa fa-calendar fa-stack-1x fa-inverse"></i>
|
|
</span>
|
|
<div class="context-indicator">
|
|
<span class="context-name">{{ request.event }}</span>
|
|
<span class="context-meta">{{ request.event.get_date_range_display }}</span>
|
|
</div>
|
|
<span class="caret"></span></a>
|
|
{% elif request.organizer %}
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
|
<span class="fa-stack fa-lg">
|
|
<i class="fa fa-circle fa-stack-2x"></i>
|
|
<i class="fa fa-group fa-stack-1x fa-inverse"></i>
|
|
</span>
|
|
<div class="context-indicator">
|
|
<span class="context-name">{{ request.organizer }}</span>
|
|
<span class="context-meta">{% trans "Organizer account" %}</span>
|
|
</div>
|
|
<span class="caret"></span></a>
|
|
{% else %}
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
|
<span class="fa-stack fa-lg">
|
|
<i class="fa fa-circle fa-stack-2x"></i>
|
|
<i class="fa fa-user fa-stack-1x fa-inverse"></i>
|
|
</span>
|
|
|
|
<div class="context-indicator">
|
|
<span class="context-name">{{ request.user }}</span>
|
|
</div>
|
|
<span class="caret"></span></a>
|
|
{% endif %}
|
|
<ul class="dropdown-menu event-dropdown" role="menu" data-event-typeahead
|
|
data-source="{% url "control:nav.typeahead" %}"
|
|
{% if request.event %}
|
|
data-organizer="{{ request.organizer.id }}"
|
|
{% endif %}>
|
|
<li class="query-holder">
|
|
<div class="form-box">
|
|
<input type="text" class="form-control" id="event-dropdown-field"
|
|
placeholder="{% trans "Search for events" %}"
|
|
data-typeahead-query autocomplete="off">
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<ul class="nav" id="side-menu">
|
|
{% if request.event and request.event.testmode %}
|
|
<li class="testmode">
|
|
<a href="{% url "control:event.live" event=request.event.slug organizer=request.organizer.slug %}">
|
|
<i class="fa fa-warning fa-fw"></i>
|
|
{% trans "TEST MODE" %}
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
{% block nav %}
|
|
{% for nav in nav_items %}
|
|
<li>
|
|
<a href="{{ nav.url }}" {% if nav.active %}class="active"{% endif %}
|
|
{% if nav.external %}target="_blank"{% endif %}
|
|
{% if nav.children %}class="has-children"{% endif %}>
|
|
{% if nav.icon %}
|
|
{% if "<svg" in nav.icon %}
|
|
{{ nav.icon|safe }}
|
|
{% else %}
|
|
<span class="fa fa-fw fa-{{ nav.icon }}"></span>
|
|
{% endif %}
|
|
{% endif %}
|
|
{{ nav.label }}
|
|
</a>
|
|
{% if nav.children %}
|
|
<a href="#" class="arrow">
|
|
<span class="fa arrow"></span>
|
|
</a>
|
|
<ul class="nav nav-second-level">
|
|
{% for item in nav.children %}
|
|
<li>
|
|
<a href="{{ item.url }}"
|
|
{% if item.external %}target="_blank"{% endif %}
|
|
{% if item.active %}class="active"{% endif %}>
|
|
{{ item.label }}
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% endif %}
|
|
</li>
|
|
{% endfor %}
|
|
{% endblock %}
|
|
</ul>
|
|
{% include "pretixcontrol/base_after_nav.html" %}
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
{% if ie_deprecation_warning %}
|
|
<div class="old-browser-warning">
|
|
<span class="fa fa-internet-explorer"></span>
|
|
{% blocktrans trimmed %}
|
|
We've detected that you are using <strong>Microsoft Internet Explorer</strong>.
|
|
{% endblocktrans %}
|
|
{% blocktrans trimmed %}
|
|
Internet Explorer is an old browser that does not support lots of recent web-based
|
|
technologies and is no longer supported by this website.
|
|
{% endblocktrans %}
|
|
{% blocktrans trimmed %}
|
|
We kindly ask you to move to one of our supported browsers, such as Microsoft Edge,
|
|
Mozilla Firefox, Google Chrome, or Safari.
|
|
{% endblocktrans %}
|
|
</div>
|
|
{% endif %}
|
|
{% if staff_need_to_explain %}
|
|
<div class="impersonate-warning">
|
|
<span class="fa fa-id-card"></span>
|
|
{% blocktrans trimmed %}
|
|
Please leave a short comment on what you did in the following admin sessions:
|
|
{% endblocktrans %}
|
|
<ul>
|
|
{% for s in staff_need_to_explain %}
|
|
<li>
|
|
<a href="{% url "control:user.sudo.edit" id=s.pk %}">#{{ s.pk }}</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
{% endif %}
|
|
{% if request.user.is_hijacked %}
|
|
<div class="impersonate-warning">
|
|
<span class="fa fa-user-secret"></span>
|
|
{% blocktrans with user=request.user%}You are currently working on behalf of {{ user }}.{% endblocktrans %}
|
|
|
|
<form action="{% url 'control:users.impersonate.stop' %}" method="post" class="helper-display-inline">
|
|
{% csrf_token %}
|
|
<button class="btn btn-default btn-sm">
|
|
{% trans "Stop impersonating" %}
|
|
</button>
|
|
</form>
|
|
</div>
|
|
{% endif %}
|
|
{% if global_settings.banner_message %}
|
|
<div class="impersonate-warning">
|
|
<span class="fa fa-bell"></span>
|
|
{{ global_settings.banner_message }}
|
|
{% if global_settings.banner_message_detail %}
|
|
<a href="{% url 'control:global.message' %}">
|
|
{% trans "Read more" %}
|
|
</a>
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
<div id="page-wrapper">
|
|
<div class="container-fluid">
|
|
{% signal "pretix.control.signals.html_page_start" request %}
|
|
{% if messages %}
|
|
{% for message in messages %}
|
|
<div class="alert {{ message.tags }}">
|
|
{{ message|linebreaksbr }}
|
|
</div>
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% if complain_testmode_orders %}
|
|
<div class="alert alert-warning">
|
|
{% blocktrans trimmed %}
|
|
Your event contains <strong>test mode orders</strong> even though <strong>test mode has been disabled</strong>.
|
|
You should delete those orders to make sure they do not show up in your reports and statistics and block people from
|
|
actually buying tickets.
|
|
{% endblocktrans %}
|
|
<strong>
|
|
<a href="{% url "control:event.orders" event=request.event.slug organizer=request.organizer.slug %}?status=testmode">
|
|
{% trans "Show all test mode orders" %}
|
|
</a>
|
|
</strong>
|
|
</div>
|
|
{% endif %}
|
|
{% if warning_update_check_active %}
|
|
<div class="alert alert-info">
|
|
<a href="{% url "control:global.update" %}">
|
|
{% blocktrans trimmed %}
|
|
Starting with version 1.2.0, pretix automatically checks for updates in the background.
|
|
During this check, anonymous data is transmitted to servers operated by pretix'
|
|
developers. Click on this message to find out more, disable this feature or enter your
|
|
email address to get notified via email if a new update arrives. This message will
|
|
disappear once you clicked it.
|
|
{% endblocktrans %}
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
{% if warning_license_compliance_check_required %}
|
|
<div class="alert alert-legal">
|
|
<a href="{% url "control:global.license" %}">
|
|
{% blocktrans trimmed %}
|
|
Click here to do a license compliance check to make sure your usage of pretix is in
|
|
line with pretix' license.
|
|
{% endblocktrans %}
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
{% if warning_cronjob %}
|
|
<div class="alert alert-warning">
|
|
{% blocktrans trimmed %}
|
|
The cronjob component of pretix was not executed in the last hours. Please check that
|
|
you have completed all installation steps and your cronjob is executed correctly.
|
|
{% endblocktrans %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if debug_warning %}
|
|
<div class="alert alert-danger">
|
|
{% trans "pretix is running in debug mode. For security reasons, please never run debug mode on a production instance." %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if request.user.needs_password_change %}
|
|
<div class="alert alert-warning">
|
|
{% blocktrans trimmed %}
|
|
For security reasons, please change your password before you continue. Afterwards you
|
|
will be redirected to your original destination.
|
|
{% endblocktrans %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% block content %}
|
|
{% endblock %}
|
|
<footer>
|
|
{% if request.timezone %}
|
|
<span class="fa fa-globe"></span>
|
|
{% blocktrans trimmed with tz=request.timezone %}
|
|
Times displayed in {{ tz }}
|
|
{% endblocktrans %} ·
|
|
{% endif %}
|
|
{{ poweredby }} {# removing or hiding this might be in violation of pretix' license #}
|
|
{% if development_warning %}
|
|
<span class="text-warning">· {% trans "running in development mode" %}</span>
|
|
{% endif %}
|
|
</footer>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="ajaxerr" class="modal-wrapper" hidden>
|
|
</div>
|
|
{% dialog "loadingmodal" "" "" icon="cog rotating" %}
|
|
<p class="status">{% trans "If this takes longer than a few minutes, please contact us." %}</p>
|
|
<div class="progress">
|
|
<div class="progress-bar progress-bar-success">
|
|
</div>
|
|
</div>
|
|
<div class="steps">
|
|
</div>
|
|
{% enddialog %}
|
|
</body>
|
|
</html>
|