diff --git a/src/pretix/multidomain/utils.py b/src/pretix/multidomain/utils.py new file mode 100644 index 000000000..dfea69d5e --- /dev/null +++ b/src/pretix/multidomain/utils.py @@ -0,0 +1,47 @@ +# +# This file is part of pretix (Community Edition). +# +# Copyright (C) 2014-2020 Raphael Michel and contributors +# Copyright (C) 2020-2021 rami.io GmbH and contributors +# +# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General +# Public License as published by the Free Software Foundation in version 3 of the License. +# +# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are +# applicable granting you additional permissions and placing additional restrictions on your usage of this software. +# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive +# this file, see . +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. +# +# You should have received a copy of the GNU Affero General Public License along with this program. If not, see +# . +# +from urllib.parse import urljoin, urlsplit + +from django.conf import settings +from django.templatetags.static import static + +from pretix.base.models import Event +from pretix.multidomain.urlreverse import ( + get_event_domain, get_organizer_domain, +) + + +def static_absolute(object, path): + sp = static(path) + if sp.startswith("/"): + if isinstance(object, Event): + domain = get_event_domain(object, fallback=True) + else: + domain = get_organizer_domain(object) + if domain: + siteurlsplit = urlsplit(settings.SITE_URL) + if siteurlsplit.port and siteurlsplit.port not in (80, 443): + domain = '%s:%d' % (domain, siteurlsplit.port) + sp = urljoin('%s://%s' % (siteurlsplit.scheme, domain), sp) + else: + sp = urljoin(settings.SITE_URL, sp) + return sp diff --git a/src/pretix/plugins/badges/api.py b/src/pretix/plugins/badges/api.py index 30ab2fcfa..e385b7a11 100644 --- a/src/pretix/plugins/badges/api.py +++ b/src/pretix/plugins/badges/api.py @@ -24,6 +24,7 @@ from rest_framework import viewsets from pretix.api.serializers.i18n import I18nAwareModelSerializer from pretix.api.serializers.order import CompatibleJSONField +from ...multidomain.utils import static_absolute from .models import BadgeItem, BadgeLayout @@ -47,6 +48,12 @@ class BadgeLayoutSerializer(I18nAwareModelSerializer): model = BadgeLayout fields = ('id', 'name', 'default', 'layout', 'background', 'item_assignments') + def to_representation(self, instance): + d = super().to_representation(instance) + if not d['background']: + d['background'] = static_absolute(instance.event, "pretixplugins/badges/badge_default_a6l.pdf") + return d + class BadgeLayoutViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = BadgeLayoutSerializer diff --git a/src/pretix/plugins/ticketoutputpdf/api.py b/src/pretix/plugins/ticketoutputpdf/api.py index dfcbc1479..7420e05a0 100644 --- a/src/pretix/plugins/ticketoutputpdf/api.py +++ b/src/pretix/plugins/ticketoutputpdf/api.py @@ -24,6 +24,7 @@ from rest_framework import viewsets from pretix.api.serializers.i18n import I18nAwareModelSerializer from pretix.api.serializers.order import CompatibleJSONField +from ...multidomain.utils import static_absolute from .models import TicketLayout, TicketLayoutItem @@ -49,6 +50,12 @@ class TicketLayoutSerializer(I18nAwareModelSerializer): model = TicketLayout fields = ('id', 'name', 'default', 'layout', 'background', 'item_assignments') + def to_representation(self, instance): + d = super().to_representation(instance) + if not d['background']: + d['background'] = static_absolute(instance.event, "pretixpresale/pdf/ticket_default_a4.pdf") + return d + class TicketLayoutViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = TicketLayoutSerializer diff --git a/src/pretix/plugins/ticketoutputpdf/apps.py b/src/pretix/plugins/ticketoutputpdf/apps.py index b69b8fda4..9adfbefa5 100644 --- a/src/pretix/plugins/ticketoutputpdf/apps.py +++ b/src/pretix/plugins/ticketoutputpdf/apps.py @@ -34,7 +34,7 @@ from django.apps import AppConfig from django.utils.functional import cached_property -from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext, gettext_lazy as _ from pretix import __version__ as version @@ -63,3 +63,11 @@ class TicketOutputPdfApp(AppConfig): except ImportError: errs.append("Python package 'reportlab' is not installed.") return errs + + def installed(self, event): + event.ticket_layouts.get_or_create( + default=True, + defaults={ + 'name': gettext('Default layout'), + } + ) diff --git a/src/tests/plugins/badges/test_api.py b/src/tests/plugins/badges/test_api.py index 4c02a82c4..0bb854f3b 100644 --- a/src/tests/plugins/badges/test_api.py +++ b/src/tests/plugins/badges/test_api.py @@ -52,7 +52,7 @@ RES_LAYOUT = { 'default': True, 'item_assignments': [{'item': 1}], 'layout': [{'a': 2}], - 'background': None + 'background': 'http://example.com/static/pretixplugins/badges/badge_default_a6l.pdf' } diff --git a/src/tests/plugins/ticketoutputpdf/test_api.py b/src/tests/plugins/ticketoutputpdf/test_api.py index 8d1ff81fb..9eea0b7b3 100644 --- a/src/tests/plugins/ticketoutputpdf/test_api.py +++ b/src/tests/plugins/ticketoutputpdf/test_api.py @@ -52,7 +52,7 @@ RES_LAYOUT = { 'default': True, 'item_assignments': [{'item': 1, 'sales_channel': 'web'}], 'layout': [{'a': 2}], - 'background': None + 'background': 'http://example.com/static/pretixpresale/pdf/ticket_default_a4.pdf' }