Fix #531 -- Make placeholders replace in subject (#594)

Placeholders in subject were not being replaced because there was
no `.format()` called on the subject.

This commit creates a context dict that is used for both the body
and the subject. It is then replaced using `.format_map()`

Fixes https://github.com/pretix/pretix/issues/531
This commit is contained in:
Sanket Dasgupta
2017-10-07 21:46:13 +05:30
committed by Raphael Michel
parent 96dd4e02f3
commit 58938fc07c
5 changed files with 55 additions and 14 deletions

View File

@@ -78,24 +78,33 @@ class SenderView(EventPermissionRequiredMixin, FormView):
if self.request.POST.get("action") == "preview":
for l in self.request.event.settings.locales:
with language(l):
self.output[l] = []
self.output[l].append(
_('Subject: {subject}').format(subject=form.cleaned_data['subject'].localize(l)))
message = form.cleaned_data['message'].localize(l)
preview_text = message.format(
code='ORDER1234',
event=self.request.event.name,
date=date_format(now(), 'SHORT_DATE_FORMAT'),
expire_date=date_format(now() + timedelta(days=7), 'SHORT_DATE_FORMAT'),
url=build_absolute_uri(self.request.event, 'presale:event.order', kwargs={
context_dict = {
'code': 'ORDER1234',
'event': self.request.event.name,
'date': date_format(now(), 'SHORT_DATE_FORMAT'),
'expire_date': date_format(now() + timedelta(days=7), 'SHORT_DATE_FORMAT'),
'url': build_absolute_uri(self.request.event, 'presale:event.order', kwargs={
'order': 'ORDER1234',
'secret': 'longrandomsecretabcdef123456'
}),
invoice_name=_('John Doe'),
invoice_company=_('Sample Company LLC'),
)
'invoice_name': _('John Doe'),
'invoice_company': _('Sample Company LLC')
}
self.output[l] = []
subject = form.cleaned_data['subject'].localize(l)
preview_subject = subject.format_map(context_dict)
self.output[l].append(
_('Subject: {subject}').format(subject=preview_subject))
message = form.cleaned_data['message'].localize(l)
preview_text = message.format_map(context_dict)
self.output[l].append(preview_text)
return self.get(self.request, *self.args, **self.kwargs)
for o in orders: