From 85b9e4eb94b6947afa4864e0ab26a259aa3411f3 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 31 May 2021 13:24:18 +0200 Subject: [PATCH] Prevent missing stylesheets in cloned events --- src/pretix/base/models/event.py | 9 +++++++++ src/pretix/presale/style.py | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pretix/base/models/event.py b/src/pretix/base/models/event.py index 4196b1d729..fc94d5fc1b 100644 --- a/src/pretix/base/models/event.py +++ b/src/pretix/base/models/event.py @@ -640,6 +640,7 @@ class Event(EventMixin, LoggedModel): ), tz) def copy_data_from(self, other): + from pretix.presale.style import regenerate_css from ..signals import event_copy_data from . import ( Item, ItemAddOn, ItemBundle, ItemCategory, ItemMetaValue, Question, @@ -819,9 +820,14 @@ class Event(EventMixin, LoggedModel): s.product = item_map[s.product_id] s.save() + has_custom_style = other.settings.presale_css_file or other.settings.presale_widget_css_file skip_settings = ( 'ticket_secrets_pretix_sig1_pubkey', 'ticket_secrets_pretix_sig1_privkey', + 'presale_css_file', + 'presale_css_checksum', + 'presale_widget_css_file', + 'presale_widget_css_checksum', ) for s in other.settings._objects.all(): if s.key in skip_settings: @@ -856,6 +862,9 @@ class Event(EventMixin, LoggedModel): question_map=question_map, checkin_list_map=checkin_list_map ) + if has_custom_style: + regenerate_css.apply_async(args=(self.pk,)) + def get_payment_providers(self, cached=False) -> dict: """ Returns a dictionary of initialized payment providers mapped by their identifiers. diff --git a/src/pretix/presale/style.py b/src/pretix/presale/style.py index d15e070c0e..fe14cd68a4 100644 --- a/src/pretix/presale/style.py +++ b/src/pretix/presale/style.py @@ -144,7 +144,7 @@ def regenerate_css(event): newname = default_storage.save(fname, ContentFile(css.encode('utf-8'))) event.settings.set('presale_css_file', newname) event.settings.set('presale_css_checksum', checksum) - if old_fname and old_fname != newname: + if old_fname and old_fname != newname and f'/{event.slug}/' in old_fname: delete_old_file(old_fname) # widget.scss @@ -156,7 +156,7 @@ def regenerate_css(event): newname = default_storage.save(fname, ContentFile(css.encode('utf-8'))) event.settings.set('presale_widget_css_file', newname) event.settings.set('presale_widget_css_checksum', checksum) - if old_fname and old_fname != newname: + if old_fname and old_fname != newname and f'/{event.slug}/' in old_fname: delete_old_file(old_fname)