diff --git a/src/pretix/base/services/placeholders.py b/src/pretix/base/services/placeholders.py index 65d4530b73..4c80fcecfd 100644 --- a/src/pretix/base/services/placeholders.py +++ b/src/pretix/base/services/placeholders.py @@ -215,7 +215,11 @@ def base_placeholders(sender, **kwargs): ), SimpleFunctionalTextPlaceholder( 'event', ['event_or_subevent'], lambda event_or_subevent: event_or_subevent.name, - lambda event_or_subevent: event_or_subevent.name + lambda event: event.subevents.first().name if event.has_subevents else event.name, + ), + SimpleFunctionalTextPlaceholder( + 'event_series_name', ['event', 'event_or_subevent'], lambda event, event_or_subevent: event.name, + lambda event: event.name ), SimpleFunctionalTextPlaceholder( 'event_slug', ['event'], lambda event: event.slug, lambda event: event.slug diff --git a/src/pretix/plugins/sendmail/forms.py b/src/pretix/plugins/sendmail/forms.py index c10028d317..7dd3c54a0b 100644 --- a/src/pretix/plugins/sendmail/forms.py +++ b/src/pretix/plugins/sendmail/forms.py @@ -381,8 +381,8 @@ class RuleForm(FormPlaceholderMixin, I18nModelForm): ] ) - self._set_field_placeholders('subject', ['event', 'order']) - self._set_field_placeholders('template', ['event', 'order']) + self._set_field_placeholders('subject', ['event', 'order', 'event_or_subevent']) + self._set_field_placeholders('template', ['event', 'order', 'event_or_subevent']) choices = [(e, l) for e, l in Order.STATUS_CHOICE if e != 'n'] choices.insert(0, ('n__valid_if_pending', _('payment pending but already confirmed'))) diff --git a/src/pretix/plugins/sendmail/migrations/0009_auto_20241113_1343.py b/src/pretix/plugins/sendmail/migrations/0009_auto_20241113_1343.py new file mode 100644 index 0000000000..d44ba54883 --- /dev/null +++ b/src/pretix/plugins/sendmail/migrations/0009_auto_20241113_1343.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.16 on 2024-11-13 13:43 + +from django.db import migrations +from django.db.models import Q +from i18nfield.strings import LazyI18nString + + +def migrate_placeholders(apps, schema_editor): + Rule = apps.get_model("sendmail", "Rule") + for r in Rule.objects.filter( + Q(template__contains="{event}") | Q(subject__contains="{event}"), + event__has_subevents=True + ): + r.template = LazyI18nString({ + k: v.replace("{event}", "{event_series_name}") for k, v in r.template.data.items() + }) + r.subject = LazyI18nString({ + k: v.replace("{event}", "{event_series_name}") for k, v in r.subject.data.items() + }) + r.save(update_fields=["template", "subject"]) + + +class Migration(migrations.Migration): + dependencies = [ + ("sendmail", "008_remove_scheduled_mails"), + ] + + operations = [ + migrations.RunPython( + migrate_placeholders, + migrations.RunPython.noop, + ) + ] diff --git a/src/pretix/plugins/sendmail/models.py b/src/pretix/plugins/sendmail/models.py index ce7c9c5d05..432e486317 100644 --- a/src/pretix/plugins/sendmail/models.py +++ b/src/pretix/plugins/sendmail/models.py @@ -174,7 +174,12 @@ class ScheduledMail(models.Model): ia = InvoiceAddress(order=o) if send_to_orders and o.email: - email_ctx = get_email_context(event=e, order=o, invoice_address=ia) + email_ctx = get_email_context( + event=e, + order=o, + invoice_address=ia, + event_or_subevent=self.subevent or e, + ) try: o.send_mail(self.rule.subject, self.rule.template, email_ctx, attach_ical=self.rule.attach_ical, @@ -192,12 +197,23 @@ class ScheduledMail(models.Model): for p in positions: try: if p.attendee_email and (p.attendee_email != o.email or not o_sent): - email_ctx = get_email_context(event=e, order=o, invoice_address=ia, position=p) + email_ctx = get_email_context( + event=e, + order=o, + invoice_address=ia, + position=p, + event_or_subevent=self.subevent or e, + ) p.send_mail(self.rule.subject, self.rule.template, email_ctx, attach_ical=self.rule.attach_ical, log_entry_type='pretix.plugins.sendmail.rule.order.position.email.sent') elif not o_sent and o.email: - email_ctx = get_email_context(event=e, order=o, invoice_address=ia) + email_ctx = get_email_context( + event=e, + order=o, + invoice_address=ia, + event_or_subevent=self.subevent or e, + ) o.send_mail(self.rule.subject, self.rule.template, email_ctx, attach_ical=self.rule.attach_ical, log_entry_type='pretix.plugins.sendmail.rule.order.email.sent')