forked from CGM_Public/pretix_original
Make PDF ticket cover more extensible
This commit is contained in:
@@ -162,7 +162,7 @@ var editor = {
|
|||||||
if (key.startsWith('meta:')) {
|
if (key.startsWith('meta:')) {
|
||||||
return key.substr(5);
|
return key.substr(5);
|
||||||
}
|
}
|
||||||
return $('#toolbox-content option[value='+key+']').attr('data-sample');
|
return $('#toolbox-content option[value='+key+']').attr('data-sample') || '';
|
||||||
},
|
},
|
||||||
|
|
||||||
_load_pdf: function (dump) {
|
_load_pdf: function (dump) {
|
||||||
|
|||||||
@@ -281,6 +281,9 @@ class PdfTicketOutput(BaseTicketOutput):
|
|||||||
self._register_fonts()
|
self._register_fonts()
|
||||||
return canvas.Canvas(buffer, pagesize=pagesize)
|
return canvas.Canvas(buffer, pagesize=pagesize)
|
||||||
|
|
||||||
|
def _get_default_background(self):
|
||||||
|
return open(finders.find('pretixpresale/pdf/ticket_default_a4.pdf'), "rb")
|
||||||
|
|
||||||
def _render_with_background(self, buffer, title=_('Ticket')):
|
def _render_with_background(self, buffer, title=_('Ticket')):
|
||||||
from PyPDF2 import PdfFileWriter, PdfFileReader
|
from PyPDF2 import PdfFileWriter, PdfFileReader
|
||||||
buffer.seek(0)
|
buffer.seek(0)
|
||||||
@@ -292,7 +295,7 @@ class PdfTicketOutput(BaseTicketOutput):
|
|||||||
elif isinstance(bg_file, File):
|
elif isinstance(bg_file, File):
|
||||||
bgf = default_storage.open(bg_file.name, "rb")
|
bgf = default_storage.open(bg_file.name, "rb")
|
||||||
else:
|
else:
|
||||||
bgf = open(finders.find('pretixpresale/pdf/ticket_default_a4.pdf'), "rb")
|
bgf = self._get_default_background()
|
||||||
bg_pdf = PdfFileReader(bgf)
|
bg_pdf = PdfFileReader(bgf)
|
||||||
|
|
||||||
for page in new_pdf.pages:
|
for page in new_pdf.pages:
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ class EditorView(EventPermissionRequiredMixin, TemplateView):
|
|||||||
minfilesize = 10
|
minfilesize = 10
|
||||||
identifier = 'pdf'
|
identifier = 'pdf'
|
||||||
|
|
||||||
|
def get_output(self, *args, **kwargs):
|
||||||
|
return PdfTicketOutput(self.request.event, *args, **kwargs)
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
resp = super().get(request, *args, **kwargs)
|
resp = super().get(request, *args, **kwargs)
|
||||||
resp['Content-Security-Policy'] = "script-src 'unsafe-eval'; style-src 'unsafe-inline'; img-src blob:; font-src data: blob:"
|
resp['Content-Security-Policy'] = "script-src 'unsafe-eval'; style-src 'unsafe-inline'; img-src blob:; font-src data: blob:"
|
||||||
@@ -58,6 +61,23 @@ class EditorView(EventPermissionRequiredMixin, TemplateView):
|
|||||||
return error, None
|
return error, None
|
||||||
return None, f
|
return None, f
|
||||||
|
|
||||||
|
def _get_preview_position(self):
|
||||||
|
item = self.request.event.items.create(name=_("Sample product"), default_price=42.23,
|
||||||
|
description=_("Sample product description"))
|
||||||
|
item2 = self.request.event.items.create(name=_("Sample workshop"), default_price=23.40)
|
||||||
|
|
||||||
|
from pretix.base.models import Order
|
||||||
|
order = self.request.event.orders.create(status=Order.STATUS_PENDING, datetime=now(),
|
||||||
|
email='sample@pretix.eu',
|
||||||
|
expires=now(), code="PREVIEW1234", total=119)
|
||||||
|
|
||||||
|
p = order.positions.create(item=item, attendee_name=_("John Doe"), price=item.default_price)
|
||||||
|
order.positions.create(item=item2, attendee_name=_("John Doe"), price=item.default_price, addon_to=p)
|
||||||
|
order.positions.create(item=item2, attendee_name=_("John Doe"), price=item.default_price, addon_to=p)
|
||||||
|
|
||||||
|
InvoiceAddress.objects.create(order=order, name=_("John Doe"), company=_("Sample company"))
|
||||||
|
return p
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
if "background" in request.FILES:
|
if "background" in request.FILES:
|
||||||
error, fileobj = self.process_upload()
|
error, fileobj = self.process_upload()
|
||||||
@@ -93,25 +113,13 @@ class EditorView(EventPermissionRequiredMixin, TemplateView):
|
|||||||
|
|
||||||
if "preview" in request.POST:
|
if "preview" in request.POST:
|
||||||
with rolledback_transaction(), language(request.event.settings.locale):
|
with rolledback_transaction(), language(request.event.settings.locale):
|
||||||
item = request.event.items.create(name=_("Sample product"), default_price=42.23,
|
p = self._get_preview_position()
|
||||||
description=_("Sample product description"))
|
|
||||||
item2 = request.event.items.create(name=_("Sample workshop"), default_price=23.40)
|
|
||||||
|
|
||||||
from pretix.base.models import Order
|
prov = self.get_output(
|
||||||
order = request.event.orders.create(status=Order.STATUS_PENDING, datetime=now(),
|
override_layout=(json.loads(request.POST.get("data"))
|
||||||
email='sample@pretix.eu',
|
if request.POST.get("data") else None),
|
||||||
expires=now(), code="PREVIEW1234", total=119)
|
override_background=cf.file if cf else None
|
||||||
|
)
|
||||||
p = order.positions.create(item=item, attendee_name=_("John Doe"), price=item.default_price)
|
|
||||||
order.positions.create(item=item2, attendee_name=_("John Doe"), price=item.default_price, addon_to=p)
|
|
||||||
order.positions.create(item=item2, attendee_name=_("John Doe"), price=item.default_price, addon_to=p)
|
|
||||||
|
|
||||||
InvoiceAddress.objects.create(order=order, name=_("John Doe"), company=_("Sample company"))
|
|
||||||
|
|
||||||
prov = PdfTicketOutput(request.event,
|
|
||||||
override_layout=(json.loads(request.POST.get("data"))
|
|
||||||
if request.POST.get("data") else None),
|
|
||||||
override_background=cf.file if cf else None)
|
|
||||||
fname, mimet, data = prov.generate(p)
|
fname, mimet, data = prov.generate(p)
|
||||||
|
|
||||||
resp = HttpResponse(data, content_type=mimet)
|
resp = HttpResponse(data, content_type=mimet)
|
||||||
@@ -149,7 +157,7 @@ class EditorView(EventPermissionRequiredMixin, TemplateView):
|
|||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
prov = PdfTicketOutput(self.request.event)
|
prov = self.get_output()
|
||||||
ctx['fonts'] = get_fonts()
|
ctx['fonts'] = get_fonts()
|
||||||
ctx['pdf'] = (
|
ctx['pdf'] = (
|
||||||
self.request.event.settings.get('ticketoutput_{}_background'.format(self.identifier)).url
|
self.request.event.settings.get('ticketoutput_{}_background'.format(self.identifier)).url
|
||||||
|
|||||||
Reference in New Issue
Block a user