diff --git a/src/pretix/plugins/badges/templates/pretixplugins/badges/index.html b/src/pretix/plugins/badges/templates/pretixplugins/badges/index.html
index 1e87ff456..38d28cb71 100644
--- a/src/pretix/plugins/badges/templates/pretixplugins/badges/index.html
+++ b/src/pretix/plugins/badges/templates/pretixplugins/badges/index.html
@@ -68,6 +68,8 @@
{% if "can_change_event_settings" in request.eventpermset %}
+
{% endif %}
|
diff --git a/src/pretix/plugins/badges/views.py b/src/pretix/plugins/badges/views.py
index bb79670fc..325bd5edb 100644
--- a/src/pretix/plugins/badges/views.py
+++ b/src/pretix/plugins/badges/views.py
@@ -24,6 +24,7 @@ from pretix.base.pdf import Renderer
from pretix.base.views.tasks import AsyncAction
from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.control.views.pdf import BaseEditorView
+from pretix.helpers.models import modelcopy
from pretix.plugins.badges.forms import BadgeLayoutForm
from pretix.plugins.badges.tasks import badges_create_pdf
@@ -55,6 +56,8 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
form.instance.default = True
messages.success(self.request, _('The new badge layout has been created.'))
super().form_valid(form)
+ if form.instance.background and form.instance.background.name:
+ form.instance.background.save('background.pdf', form.instance.background)
form.instance.log_action('pretix.plugins.badges.layout.added', user=self.request.user,
data=dict(form.cleaned_data))
return redirect(reverse('plugins:badges:edit', kwargs={
@@ -70,6 +73,24 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
def get_context_data(self, **kwargs):
return super().get_context_data(**kwargs)
+ @cached_property
+ def copy_from(self):
+ if self.request.GET.get("copy_from") and not getattr(self, 'object', None):
+ try:
+ return self.request.event.badge_layouts.get(pk=self.request.GET.get("copy_from"))
+ except BadgeLayout.DoesNotExist:
+ pass
+
+ def get_form_kwargs(self):
+ kwargs = super().get_form_kwargs()
+
+ if self.copy_from:
+ i = modelcopy(self.copy_from)
+ i.pk = None
+ kwargs['instance'] = i
+ kwargs.setdefault('initial', {})
+ return kwargs
+
class LayoutSetDefault(EventPermissionRequiredMixin, DetailView):
model = BadgeLayout
diff --git a/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html b/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html
index 79affe071..a2db4f765 100644
--- a/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html
+++ b/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html
@@ -65,6 +65,8 @@
{% if "can_change_event_settings" in request.eventpermset %}
+
{% endif %}
|
diff --git a/src/pretix/plugins/ticketoutputpdf/views.py b/src/pretix/plugins/ticketoutputpdf/views.py
index 2f0e1520a..66da58206 100644
--- a/src/pretix/plugins/ticketoutputpdf/views.py
+++ b/src/pretix/plugins/ticketoutputpdf/views.py
@@ -23,6 +23,7 @@ from pretix.base.pdf import Renderer
from pretix.base.services.tickets import invalidate_cache
from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.control.views.pdf import BaseEditorView
+from pretix.helpers.models import modelcopy
from pretix.plugins.ticketoutputpdf.forms import TicketLayoutForm
from pretix.plugins.ticketoutputpdf.ticketoutput import PdfTicketOutput
@@ -91,6 +92,8 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
form.instance.default = True
messages.success(self.request, _('The new ticket layout has been created.'))
super().form_valid(form)
+ if form.instance.background and form.instance.background.name:
+ form.instance.background.save('background.pdf', form.instance.background)
form.instance.log_action('pretix.plugins.ticketoutputpdf.layout.added', user=self.request.user,
data=dict(form.cleaned_data))
return redirect(reverse('plugins:ticketoutputpdf:edit', kwargs={
@@ -106,6 +109,24 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
def get_context_data(self, **kwargs):
return super().get_context_data(**kwargs)
+ @cached_property
+ def copy_from(self):
+ if self.request.GET.get("copy_from") and not getattr(self, 'object', None):
+ try:
+ return self.request.event.ticket_layouts.get(pk=self.request.GET.get("copy_from"))
+ except TicketLayout.DoesNotExist:
+ pass
+
+ def get_form_kwargs(self):
+ kwargs = super().get_form_kwargs()
+
+ if self.copy_from:
+ i = modelcopy(self.copy_from)
+ i.pk = None
+ kwargs['instance'] = i
+ kwargs.setdefault('initial', {})
+ return kwargs
+
class LayoutSetDefault(EventPermissionRequiredMixin, DetailView):
model = TicketLayout