From 473290b88d86cf6626f6328cec5264cc305311a2 Mon Sep 17 00:00:00 2001 From: Phin Wolkwitz Date: Wed, 23 Sep 2026 12:48:54 +0200 Subject: [PATCH] [wip] Add rule disabling to migration, add uninstall hook --- src/pretix/plugins/sendmail/apps.py | 3 +++ ...activate_plugin_for_events_with_scheduled_mails.py | 11 ++++++++++- src/pretix/plugins/sendmail/signals.py | 2 -- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/pretix/plugins/sendmail/apps.py b/src/pretix/plugins/sendmail/apps.py index 7942559cb8..d680067c89 100644 --- a/src/pretix/plugins/sendmail/apps.py +++ b/src/pretix/plugins/sendmail/apps.py @@ -40,3 +40,6 @@ class SendMailApp(AppConfig): def ready(self): from . import signals # NOQA from . import tasks # NOQA + + def uninstalled(self, event): + event.sendmail_rules.update(enabled=False) diff --git a/src/pretix/plugins/sendmail/migrations/0013_activate_plugin_for_events_with_scheduled_mails.py b/src/pretix/plugins/sendmail/migrations/0013_activate_plugin_for_events_with_scheduled_mails.py index 7a62e643fe..712e4c5281 100644 --- a/src/pretix/plugins/sendmail/migrations/0013_activate_plugin_for_events_with_scheduled_mails.py +++ b/src/pretix/plugins/sendmail/migrations/0013_activate_plugin_for_events_with_scheduled_mails.py @@ -5,15 +5,24 @@ from django.db.models import Exists, OuterRef def activate_plugin(apps, schema_editor): Event = apps.get_model("pretixbase", "Event") ScheduledMail = apps.get_model("sendmail", "ScheduledMail") + Rule = apps.get_model("sendmail", "Rule") + events = ( Event.objects .exclude(plugins__icontains="pretix.plugins.sendmail") .filter( Exists( - ScheduledMail.objects.filter(event=OuterRef('pk')).exclude(state=ScheduledMail.STATE_COMPLETED) + ScheduledMail.objects.filter(event=OuterRef('pk'), rule__enabled=True).exclude(state='completed') ) ) ) + + only_completed_rules = Rule.objects.exclude(event__plugins__icontains="pretix.plugins.sendmail", + enabled=False).filter( + ~Exists(ScheduledMail.objects.filter(rule=OuterRef('pk')).exclude(state='completed')) + ) + only_completed_rules.update(enabled=False) + for event in events: event.enable_plugin('pretix.plugins.sendmail') event.save(update_fields=['plugins']) diff --git a/src/pretix/plugins/sendmail/signals.py b/src/pretix/plugins/sendmail/signals.py index bdc512a282..76626097fe 100644 --- a/src/pretix/plugins/sendmail/signals.py +++ b/src/pretix/plugins/sendmail/signals.py @@ -150,8 +150,6 @@ class SendmailPluginRuleLogEntryType(EventLogEntryType): @receiver(periodic_task) def sendmail_run_rules(sender, **kwargs): - if "pretix.plugins.sendmail" not in sender.get_plugins(): - return # do not send scheduled mails if this plugin is disabled with scopes_disabled(): mails = ScheduledMail.objects.all()