diff --git a/src/pretalx/cfp/views/user.py b/src/pretalx/cfp/views/user.py index 4b1a68d165..f97dd0a193 100644 --- a/src/pretalx/cfp/views/user.py +++ b/src/pretalx/cfp/views/user.py @@ -79,8 +79,12 @@ def post(self, request, *args, **kwargs): event=self.request.event )[0] profile.log_action('pretalx.user.profile.update', person=request.user) + if self.profile_form.has_changed(): + self.request.event.cache.set('rebuild_schedule_export', True, None) elif self.questions_form.is_bound and self.questions_form.is_valid(): self.questions_form.save() + if self.questions_form.has_changed(): + self.request.event.cache.set('rebuild_schedule_export', True, None) else: messages.error(self.request, phrases.base.error_saving_changes) return super().get(request, *args, **kwargs) @@ -321,6 +325,7 @@ def form_valid(self, form): form.instance.log_action( 'pretalx.submission.update', person=self.request.user ) + self.request.event.cache.set('rebuild_schedule_export', True, None) messages.success(self.request, phrases.base.saved) else: messages.error(self.request, phrases.cfp.submission_uneditable) diff --git a/src/pretalx/event/services.py b/src/pretalx/event/services.py index c6d661081b..7d8453940c 100644 --- a/src/pretalx/event/services.py +++ b/src/pretalx/event/services.py @@ -65,13 +65,11 @@ def task_periodic_schedule_export(event_slug): zip_path = get_export_zip_path(event) last_time = event.cache.get('last_schedule_rebuild') _now = now() - should_rebuild_schedule = ( - event.cache.get('rebuild_schedule_export') or ( - event.settings.export_html_on_schedule_release and not zip_path.exists() and ( - not last_time or now() - last_time > timedelta(days=1) - ) - ) - ) + if not event.settings.export_html_on_schedule_release: + return + if last_time and _now - last_time < timedelta(hours=1): + return + should_rebuild_schedule = event.cache.get('rebuild_schedule_export') or not zip_path.exists() if should_rebuild_schedule: event.cache.delete('rebuild_schedule_export') event.cache.set('last_schedule_rebuild', _now, None) diff --git a/src/pretalx/orga/views/speaker.py b/src/pretalx/orga/views/speaker.py index 66e5575c27..6a61a77613 100644 --- a/src/pretalx/orga/views/speaker.py +++ b/src/pretalx/orga/views/speaker.py @@ -129,6 +129,8 @@ def form_valid(self, form): self.get_object().event_profile(self.request.event).log_action( 'pretalx.user.profile.update', person=self.request.user, orga=True ) + if form.has_changed() or self.questions_form.has_changed(): + self.request.event.cache.set('rebuild_schedule_export', True, None) messages.success(self.request, 'The speaker profile has been updated.') return result diff --git a/src/pretalx/orga/views/submission.py b/src/pretalx/orga/views/submission.py index ff2bf899b3..96e12b65db 100644 --- a/src/pretalx/orga/views/submission.py +++ b/src/pretalx/orga/views/submission.py @@ -354,12 +354,12 @@ def get_success_url(self) -> str: @transaction.atomic() def form_valid(self, form): created = not self.object - form.instance.event = self.request.event - form.save() self.object = form.instance self._questions_form.submission = self.object if not self._questions_form.is_valid(): return self.get(self.request, *self.args, **self.kwargs) + form.instance.event = self.request.event + form.save() self._questions_form.save() if created: @@ -394,6 +394,7 @@ def form_valid(self, form): if form.has_changed(): action = 'pretalx.submission.' + ('create' if created else 'update') form.instance.log_action(action, person=self.request.user, orga=True) + self.request.event.cache.set('rebuild_schedule_export', True, None) return redirect(self.get_success_url()) def get_form_kwargs(self):