diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index 14099b8c1..5212b1307 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -1655,7 +1655,7 @@ def clear_cart(self, event: Event, cart_id: str=None, locale='en', sales_channel @app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(CartError,)) -def extend_cart_reservation(self, event: Event, cart_id: str=None, locale='en', sales_channel='web', override_now_dt: datetime=None) -> None: +def extend_cart_reservation(self, event: Event, cart_id: str=None, locale='en', sales_channel='web', override_now_dt: datetime=None) -> dict: """ Resets the expiry time of a cart to the configured reservation time of this event. Limited to 11x the reservation time. @@ -1672,7 +1672,7 @@ def extend_cart_reservation(self, event: Event, cart_id: str=None, locale='en', try: cm = CartManager(event=event, cart_id=cart_id, sales_channel=sales_channel) cm.commit() - return cm.num_extended_positions + return {"success": cm.num_extended_positions, "expiry": cm._expiry, "max_expiry_extend": cm._max_expiry_extend} except LockTimeoutException: self.retry() except (MaxRetriesExceededError, LockTimeoutException): diff --git a/src/pretix/base/templatetags/dialog.py b/src/pretix/base/templatetags/dialog.py index 16805cecc..0cc422455 100644 --- a/src/pretix/base/templatetags/dialog.py +++ b/src/pretix/base/templatetags/dialog.py @@ -23,38 +23,39 @@ from django import template from django.utils.html import format_html from django.utils.safestring import mark_safe +from pretix.helpers.templatetags.simple_block_tag import ( + register_simple_block_tag, +) + from django.utils.translation import gettext_lazy as _ # NOQA + register = template.Library() -@register.simple_tag -def dialog(html_id, label, description, *args, **kwargs): +@register_simple_block_tag(register) +def dialog(content, html_id, title, description, *args, **kwargs): format_kwargs = { "id": html_id, - "label": label, + "title": title, "description": description, "icon": format_html('', kwargs["icon"]) if "icon" in kwargs else "", "alert": mark_safe('role="alertdialog"') if kwargs.get("alert", "False") != "False" else "", + "content": content, } result = """ - - """) + """ + return format_html(result, **format_kwargs) diff --git a/src/pretix/base/views/tasks.py b/src/pretix/base/views/tasks.py index 8a9e6e909..949cef639 100644 --- a/src/pretix/base/views/tasks.py +++ b/src/pretix/base/views/tasks.py @@ -68,7 +68,7 @@ class AsyncMixin: def get_check_url(self, task_id, ajax): return self.request.path + '?async_id=%s' % task_id + ('&ajax=1' if ajax else '') - def _ajax_response_data(self): + def _ajax_response_data(self, value): return {} def _return_ajax_result(self, res, timeout=.5): @@ -85,7 +85,7 @@ class AsyncMixin: logger.warning('Ignored ResponseError in AsyncResult.get()') except ConnectionError: # Redis probably just restarted, let's just report not ready and retry next time - data = self._ajax_response_data() + data = self._ajax_response_data(None) data.update({ 'async_id': res.id, 'ready': False @@ -93,7 +93,7 @@ class AsyncMixin: return data state, info = res.state, res.info - data = self._ajax_response_data() + data = self._ajax_response_data(info) data.update({ 'async_id': res.id, 'ready': ready, @@ -102,23 +102,21 @@ class AsyncMixin: if ready: if state == states.SUCCESS and not isinstance(info, Exception): smes = self.get_success_message(info) - if smes: + if smes and 'ajax_dont_redirect' not in self.request.GET and 'ajax_dont_redirect' not in self.request.POST: messages.success(self.request, smes) - # TODO: Do not store message if the ajax client states that it will not redirect - # but handle the message itself data.update({ 'redirect': self.get_success_url(info), 'success': True, - 'message': str(self.get_success_message(info)) + 'message': str(smes) }) else: - messages.error(self.request, self.get_error_message(info)) - # TODO: Do not store message if the ajax client states that it will not redirect - # but handle the message itself + smes = self.get_error_message(info) + if smes and 'ajax_dont_redirect' not in self.request.GET and 'ajax_dont_redirect' not in self.request.POST: + messages.error(self.request, smes) data.update({ 'redirect': self.get_error_url(), 'success': False, - 'message': str(self.get_error_message(info)) + 'message': str(smes) }) elif state == 'PROGRESS': data.update({ diff --git a/src/pretix/control/templates/pretixcontrol/base.html b/src/pretix/control/templates/pretixcontrol/base.html index 79d9c5f52..edd858c33 100644 --- a/src/pretix/control/templates/pretixcontrol/base.html +++ b/src/pretix/control/templates/pretixcontrol/base.html @@ -4,6 +4,8 @@ {% load statici18n %} {% load eventsignal %} {% load eventurl %} +{% load dialog %} +{% load icon %} @@ -463,25 +465,16 @@ -
+ -
-
-