From 1399d37827ef34a4eb7f7d4cbf8a57cec59a2511 Mon Sep 17 00:00:00 2001 From: luelista Date: Thu, 16 Jul 2026 12:59:29 +0200 Subject: [PATCH] UX improvement for enabling payment provider plugins (#6364) Make flow of enabling new payment plugin smoother by redirecting back to payment settings, and highlighting the newly enabled provider. --- .../pretixcontrol/event/payment.html | 4 +-- .../pretixcontrol/event/plugins.html | 1 + src/pretix/control/views/event.py | 26 +++++++++++++------ .../static/pretixcontrol/scss/main.scss | 5 +++- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/pretix/control/templates/pretixcontrol/event/payment.html b/src/pretix/control/templates/pretixcontrol/event/payment.html index 12e89a864..fef1ae359 100644 --- a/src/pretix/control/templates/pretixcontrol/event/payment.html +++ b/src/pretix/control/templates/pretixcontrol/event/payment.html @@ -12,7 +12,7 @@ {% for provider in providers %} - + @@ -56,7 +56,7 @@ diff --git a/src/pretix/control/templates/pretixcontrol/event/plugins.html b/src/pretix/control/templates/pretixcontrol/event/plugins.html index 2c3d6543d..54d7e7165 100644 --- a/src/pretix/control/templates/pretixcontrol/event/plugins.html +++ b/src/pretix/control/templates/pretixcontrol/event/plugins.html @@ -28,6 +28,7 @@ {% csrf_token %} +
diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 31395eb0e..90e685232 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -41,7 +41,7 @@ from collections import OrderedDict, defaultdict from decimal import Decimal from io import BytesIO from itertools import groupby -from urllib.parse import urlsplit +from urllib.parse import quote, urlsplit from zoneinfo import ZoneInfo import bleach @@ -82,7 +82,7 @@ from pretix.base.models import Event, LogEntry, Order, TaxRule, Voucher from pretix.base.models.event import EventMetaValue from pretix.base.services import tickets from pretix.base.services.invoices import build_preview_invoice_pdf -from pretix.base.signals import register_ticket_outputs +from pretix.base.signals import get_defining_app, register_ticket_outputs from pretix.base.templatetags.rich_text import markdown_compile_email from pretix.control.forms.event import ( CancelSettingsForm, CommentForm, ConfirmTextFormset, EventDeleteForm, @@ -441,6 +441,7 @@ class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, Templat plugins_available = { p.module: p for p in self.available_plugins(self.object) } + plugin_enabled = None with transaction.atomic(): save_organizer = False @@ -490,6 +491,7 @@ class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, Templat format_html(_('The plugin {} is now active.'), format_html("{}", pluginmeta.name)), ] + plugin_enabled = module messages.success(self.request, mark_safe("".join(info))) else: self.request.event.log_action('pretix.event.plugins.disabled', user=self.request.user, @@ -499,13 +501,19 @@ class EventPlugins(EventSettingsViewMixin, EventPermissionRequiredMixin, Templat self.object.save() if save_organizer: self.object.organizer.save() - return redirect(self.get_success_url()) + return redirect(self.get_success_url(plugin_enabled)) - def get_success_url(self) -> str: - return reverse('control:event.settings.plugins', kwargs={ - 'organizer': self.request.organizer.slug, - 'event': self.request.event.slug, - }) + def get_success_url(self, plugin_enabled) -> str: + if plugin_enabled and self.request.POST.get('go') == 'payment': + return reverse('control:event.settings.payment', kwargs={ + 'organizer': self.request.organizer.slug, + 'event': self.request.event.slug, + }) + '?highlight=' + quote(plugin_enabled) + '#' + else: + return reverse('control:event.settings.plugins', kwargs={ + 'organizer': self.request.organizer.slug, + 'event': self.request.event.slug, + }) class PaymentProviderSettings(EventSettingsViewMixin, EventPermissionRequiredMixin, TemplateView, SingleObjectMixin): @@ -671,6 +679,8 @@ class PaymentSettings(WritePermissionMixin, EventSettingsViewMixin, EventSetting p.sales_channels = [sales_channels[channel] for channel in p.settings.get('_restrict_to_sales_channels', as_type=list, default=['web'])] if p.is_meta: p.show_enabled = p.settings._enabled in (True, 'True') + if self.request.GET.get('highlight') and getattr(get_defining_app(p), 'name', None) == self.request.GET.get('highlight'): + p.highlight = True return context diff --git a/src/pretix/static/pretixcontrol/scss/main.scss b/src/pretix/static/pretixcontrol/scss/main.scss index 3941b3304..6832e9c84 100644 --- a/src/pretix/static/pretixcontrol/scss/main.scss +++ b/src/pretix/static/pretixcontrol/scss/main.scss @@ -646,7 +646,10 @@ ul.pagination { .table-payment-providers > tbody > tr > td { vertical-align: middle; } - +.success-left { + border-left: 3px solid $brand-success; + background: var(--pretix-brand-success-lighten-50); +} details { list-style: none;
{{ provider.verbose_name }}
{% url "control:event.settings.plugins" event=request.event.slug organizer=request.organizer.slug as plugin_settings_url %} - + {% trans "Enable additional payment plugins" %}