diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 39d12fcf4..473ccd393 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -98,6 +98,7 @@ class EventUpdate(EventPermissionRequiredMixin, UpdateView): event.presale_end = self.reset_timezone(zone, event.presale_end) return self.form_valid(form) else: + messages.error(self.request, _('We could not save your changes. See below for details.')) return self.form_invalid(form) @staticmethod @@ -455,6 +456,10 @@ class TicketSettings(EventPermissionRequiredMixin, FormView): form.prepare_fields() return form + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + @transaction.atomic def post(self, request, *args, **kwargs): success = True @@ -487,7 +492,7 @@ class TicketSettings(EventPermissionRequiredMixin, FormView): messages.success(self.request, _('Your changes have been saved.')) return redirect(self.get_success_url()) else: - return self.get(request) + return self.form_invalid(form) @cached_property def provider_forms(self) -> list: diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py index c0453cefa..6b692e378 100644 --- a/src/pretix/control/views/item.py +++ b/src/pretix/control/views/item.py @@ -156,6 +156,10 @@ class CategoryUpdate(EventPermissionRequiredMixin, UpdateView): 'event': self.request.event.slug, }) + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + class CategoryCreate(EventPermissionRequiredMixin, CreateView): model = ItemCategory @@ -178,6 +182,10 @@ class CategoryCreate(EventPermissionRequiredMixin, CreateView): form.instance.log_action('pretix.event.category.added', data=dict(form.cleaned_data), user=self.request.user) return ret + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + class CategoryList(ListView): model = ItemCategory @@ -479,6 +487,10 @@ class QuestionUpdate(EventPermissionRequiredMixin, QuestionMixin, UpdateView): 'event': self.request.event.slug, }) + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + class QuestionCreate(EventPermissionRequiredMixin, QuestionMixin, CreateView): model = Question @@ -501,6 +513,10 @@ class QuestionCreate(EventPermissionRequiredMixin, QuestionMixin, CreateView): def get_object(self, **kwargs): return None + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + @transaction.atomic def form_valid(self, form): if form.cleaned_data.get('type') in ('M', 'C'): @@ -592,6 +608,10 @@ class QuotaCreate(EventPermissionRequiredMixin, QuotaEditorMixin, CreateView): form.instance.log_action('pretix.event.quota.added', user=self.request.user, data=dict(form.cleaned_data)) return ret + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + class QuotaView(ChartContainingView, DetailView): model = Quota @@ -699,6 +719,10 @@ class QuotaUpdate(EventPermissionRequiredMixin, QuotaEditorMixin, UpdateView): 'quota': self.object.pk }) + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + class QuotaDelete(EventPermissionRequiredMixin, DeleteView): model = Quota @@ -794,6 +818,10 @@ class ItemCreate(EventPermissionRequiredMixin, CreateView): kwargs.update({'instance': newinst}) return kwargs + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + class ItemUpdateGeneral(ItemDetailMixin, EventPermissionRequiredMixin, UpdateView): form_class = ItemUpdateForm @@ -822,6 +850,10 @@ class ItemUpdateGeneral(ItemDetailMixin, EventPermissionRequiredMixin, UpdateVie CachedTicket.objects.filter(order_position__item=self.item).delete() return super().form_valid(form) + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + class ItemVariations(ItemDetailMixin, EventPermissionRequiredMixin, TemplateView): permission = 'can_change_items' @@ -878,6 +910,7 @@ class ItemVariations(ItemDetailMixin, EventPermissionRequiredMixin, TemplateView messages.success(self.request, _('Your changes have been saved.')) return redirect(self.get_success_url()) + messages.error(self.request, _('We could not save your changes. See below for details.')) return self.get(request, *args, **kwargs) def get_success_url(self) -> str: diff --git a/src/pretix/control/views/user.py b/src/pretix/control/views/user.py index ec6a38b1a..ff81d2fb6 100644 --- a/src/pretix/control/views/user.py +++ b/src/pretix/control/views/user.py @@ -155,6 +155,10 @@ class User2FADeviceAddView(RecentAuthenticationRequiredMixin, FormView): 'device': dev.pk })) + def form_invalid(self, form): + messages.error(self.request, _('We could not save your changes. See below for details.')) + return super().form_invalid(form) + class User2FADeviceDeleteView(RecentAuthenticationRequiredMixin, TemplateView): template_name = 'pretixcontrol/user/2fa_delete.html' diff --git a/src/pretix/plugins/sendmail/views.py b/src/pretix/plugins/sendmail/views.py index 9febb73d6..0e2512559 100644 --- a/src/pretix/plugins/sendmail/views.py +++ b/src/pretix/plugins/sendmail/views.py @@ -31,6 +31,10 @@ class SenderView(EventPermissionRequiredMixin, FormView): kwargs['event'] = self.request.event return kwargs + def form_invalid(self, form): + messages.error(self.request, _('We could not send the email. See below for details.')) + return super().form_invalid(form) + def form_valid(self, form): qs = Order.objects.filter(event=self.request.event) statusq = Q(status__in=form.cleaned_data['sendto'])