diff --git a/doc/development/api/general.rst b/doc/development/api/general.rst index 1b23ffd240..15cda410c6 100644 --- a/doc/development/api/general.rst +++ b/doc/development/api/general.rst @@ -11,7 +11,7 @@ Core ---- .. automodule:: pretix.base.signals - :members: periodic_task + :members: periodic_task, event_live_issues Order events """""""""""" diff --git a/src/pretix/base/signals.py b/src/pretix/base/signals.py index 715751fa09..10f12f6769 100644 --- a/src/pretix/base/signals.py +++ b/src/pretix/base/signals.py @@ -52,6 +52,18 @@ class EventPluginSignal(django.dispatch.Signal): return responses +event_live_issues = EventPluginSignal( + providing_args=[] +) +""" +This signal is sent out to determine whether an event can be taken live. If you want to +prevent the event from going live, return a string that will be displayed to the user +as the error message. If you don't, your receiver should return ``None``. + +As with all event-plugin signals, the ``sender`` keyword argument will contain the event. +""" + + register_payment_providers = EventPluginSignal( providing_args=[] ) diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index e9896abdb5..cf3967f303 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -24,7 +24,7 @@ from pretix.base.services import tickets from pretix.base.services.invoices import build_preview_invoice_pdf from pretix.base.services.mail import SendMailException, mail from pretix.base.signals import ( - register_payment_providers, register_ticket_outputs, + event_live_issues, register_payment_providers, register_ticket_outputs, ) from pretix.control.forms.event import ( DisplaySettingsForm, EventSettingsForm, EventUpdateForm, @@ -668,6 +668,11 @@ class EventLive(EventPermissionRequiredMixin, TemplateView): if not self.request.event.quotas.exists(): issues.append(_('You need to configure at least one quota to sell anything.')) + responses = event_live_issues.send(self.request.event) + for receiver, response in responses: + if response: + issues.append(response) + return issues def post(self, request, *args, **kwargs):