diff --git a/src/pretix/plugins/wallet/models.py b/src/pretix/plugins/wallet/models.py index b19efaaf2..b9cdd0784 100644 --- a/src/pretix/plugins/wallet/models.py +++ b/src/pretix/plugins/wallet/models.py @@ -37,7 +37,7 @@ class WalletLayout(LoggedModel): ) platform = models.CharField(max_length=10) style = models.CharField(max_length=255) - layout = models.TextField() + layout = models.JSONField() class Meta: ordering = ("name",) diff --git a/src/pretix/plugins/wallet/styles.py b/src/pretix/plugins/wallet/styles.py index 42a1146d9..681326466 100644 --- a/src/pretix/plugins/wallet/styles.py +++ b/src/pretix/plugins/wallet/styles.py @@ -10,15 +10,12 @@ class WalletPlatform: identifier: str name: str - def get_layout_qs(self): - return WalletLayout.objects.filter(platform=self.identifier) - class ApplePlatform(WalletPlatform): identifier = "apple" name = _("Apple") class GooglePlatform(WalletPlatform): - identifier = "apple" + identifier = "google" name = _("Google") class PlaceholderFieldType(enum.Enum): diff --git a/src/pretix/plugins/wallet/templates/pretixplugins/wallet/layout_list.html b/src/pretix/plugins/wallet/templates/pretixplugins/wallet/layout_list.html index 07e52663a..cfe685a56 100644 --- a/src/pretix/plugins/wallet/templates/pretixplugins/wallet/layout_list.html +++ b/src/pretix/plugins/wallet/templates/pretixplugins/wallet/layout_list.html @@ -1,6 +1,7 @@ {% extends "pretixcontrol/event/base.html" %} {% load i18n %} {% load money %} +{% load wallet %} {% block title %}{% trans "Wallet layouts" %}{% endblock %} {% block content %}

{% trans "Wallet layouts" %}

@@ -8,7 +9,8 @@ {% for platform in platforms.values %}
{{platform.name}} - {% if platforms.get_layout_qs|length == 0 %} + {% with platform_layouts=platform|platform_layouts:request.event %} + {% if platform_layouts|length == 0 %}

{% blocktrans trimmed %} @@ -33,7 +35,7 @@ - {% for l in platforms.get_layout_qs %} + {% for l in platform_layouts %} {% if "can_change_event_settings" in request.eventpermset %} @@ -74,6 +76,7 @@

{% endif %} + {% endwith %}
{% endfor %} diff --git a/src/pretix/plugins/wallet/views.py b/src/pretix/plugins/wallet/views.py index 8e2b6eceb..596c4f424 100644 --- a/src/pretix/plugins/wallet/views.py +++ b/src/pretix/plugins/wallet/views.py @@ -34,7 +34,6 @@ class LayoutListView(EventPermissionRequiredMixin, ListView): class LayoutEditForm(forms.ModelForm): style = forms.TypedChoiceField() - layout = forms.JSONField(initial={}) def __init__(self, **kwargs): self.platform = kwargs.pop('platform') @@ -70,12 +69,13 @@ class LayoutEditForm(forms.ModelForm): ) layout.validate() return self.cleaned_data - -class LayoutCreateView(EventPermissionRequiredMixin, FormView): + +class LayoutEditorView(EventPermissionRequiredMixin, UpdateView): template_name = "pretixplugins/wallet/edit.html" form_class = LayoutEditForm model = WalletLayout permission = "can_change_event_settings" # TODO: new permission name + pk_url_kwarg = "layout" @property def platform(self): @@ -106,57 +106,18 @@ class LayoutCreateView(EventPermissionRequiredMixin, FormView): } return context - def form_valid(self, form): - self.object = WalletLayout.objects.create( - event=self.request.event, - name=form.cleaned_data["name"], - platform=self.platform, - style=form.cleaned_data["style"], - layout=form.cleaned_data["layout"], - ) - return redirect( - reverse( - "plugins:wallet:edit", - kwargs={ - "organizer": self.request.event.organizer.slug, - "event": self.request.event.slug, - "platform": self.platform, - "layout": self.object.pk, - }, - ) + def get_success_url(self) -> str: + return reverse( + "plugins:wallet:edit", + kwargs={ + "organizer": self.request.event.organizer.slug, + "event": self.request.event.slug, + "platform": self.platform, + "layout": self.object.pk, + }, ) -class LayoutEditorView(EventPermissionRequiredMixin, UpdateView): - template_name = "pretixplugins/wallet/edit.html" - form_class = LayoutEditForm - success_url = "" - permission = "can_change_event_settings" - @property - def platform(self): - return self.kwargs["platform"] - - def get_form_kwargs(self) -> dict[str, Any]: - kwargs = super().get_form_kwargs() - kwargs["platform"] = self.platform - return kwargs - - def get_platform_styles(self): - if self.platform not in get_platforms(): - raise Http404( - _("Unknown platform '{platform}'").format(platform=self.platform) - ) - return get_platform_styles(self.platform) - - def get_context_data(self, **kwargs) -> dict[str, Any]: - context = super().get_context_data(**kwargs) - context["styles"] = { - id: style.asdict() for id, style in self.get_platform_styles().items() - } - context["variables"] = { - "text": { - varname: {"label": var["label"], "editor_sample": var["editor_sample"]} - for varname, var in get_variables(self.request.event).items() - } - } - return context \ No newline at end of file +class LayoutCreateView(LayoutEditorView): + def get_object(self, queryset=None): + return WalletLayout(event=self.request.event, platform=self.platform) \ No newline at end of file