Fix missing placeholders and reformat the sendmail view

This commit is contained in:
Raphael Michel
2017-05-10 15:14:23 +02:00
parent 8c457c057e
commit 90d14c004f

View File

@@ -12,11 +12,10 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView, ListView from django.views.generic import FormView, ListView
from pretix.base.i18n import LazyI18nString, language from pretix.base.i18n import LazyI18nString, language
from pretix.base.models import LogEntry, Order from pretix.base.models import InvoiceAddress, LogEntry, Order
from pretix.base.services.mail import SendMailException, mail from pretix.base.services.mail import SendMailException, mail
from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.multidomain.urlreverse import build_absolute_uri from pretix.multidomain.urlreverse import build_absolute_uri
from . import forms from . import forms
logger = logging.getLogger('pretix.plugins.sendmail') logger = logging.getLogger('pretix.plugins.sendmail')
@@ -65,54 +64,71 @@ class SenderView(EventPermissionRequiredMixin, FormView):
if not orders: if not orders:
messages.error(self.request, _('There are no orders matching this selection.')) messages.error(self.request, _('There are no orders matching this selection.'))
return self.get(self.request, *self.args, **self.kwargs) return self.get(self.request, *self.args, **self.kwargs)
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(
order='ORDER1234',
event=self.request.event.name,
order_date=date_format(now(), 'SHORT_DATE_FORMAT'),
due_date=date_format(now() + timedelta(days=7), 'SHORT_DATE_FORMAT'),
order_url=build_absolute_uri(self.request.event, 'presale:event.order', kwargs={
'order': 'ORDER1234',
'secret': 'longrandomsecretabcdef123456'
}),
invoice_name=_('John Doe'),
invoice_company=_('Sample Company LLC'),
)
self.output[l].append(preview_text)
return self.get(self.request, *self.args, **self.kwargs)
for o in orders: for o in orders:
if self.request.POST.get("action") == "preview": try:
for l in self.request.event.settings.locales: invoice_name = o.invoice_address.name
with language(l): invoice_company = o.invoice_address.company
self.output[l] = [] except InvoiceAddress.DoesNotExist:
self.output[l].append(_('Subject: {subject}').format(subject=form.cleaned_data['subject'].localize(l))) invoice_name = ""
message = form.cleaned_data['message'].localize(l) invoice_company = ""
preview_text = message.format(
order='ORDER1234', try:
event=self.request.event.name, with language(o.locale):
order_date=date_format(now(), 'SHORT_DATE_FORMAT'), mail(
due_date=date_format(now() + timedelta(days=7), 'SHORT_DATE_FORMAT'), o.email, form.cleaned_data['subject'], form.cleaned_data['message'],
order_url=build_absolute_uri(self.request.event, 'presale:event.order', kwargs={ {
'order': 'ORDER1234', 'event': o.event,
'secret': 'longrandomsecretabcdef123456' 'order': o.code,
})) 'order_date': date_format(o.datetime.astimezone(tz), 'SHORT_DATETIME_FORMAT'),
self.output[l].append(preview_text) 'due_date': date_format(o.expires, 'SHORT_DATE_FORMAT'),
return self.get(self.request, *self.args, **self.kwargs) 'order_url': build_absolute_uri(o.event, 'presale:event.order', kwargs={
else: 'order': o.code,
try: 'secret': o.secret
with language(o.locale): }),
mail(o.email, form.cleaned_data['subject'], form.cleaned_data['message'], 'invoice_name': invoice_name,
{ 'invoice_company': invoice_company,
'event': o.event, },
'order': o.code, self.request.event, locale=o.locale, order=o)
'order_date': date_format(o.datetime.astimezone(tz), 'SHORT_DATETIME_FORMAT'), o.log_action(
'due_date': date_format(o.expires, 'SHORT_DATE_FORMAT'), 'pretix.plugins.sendmail.order.email.sent',
'order_url': build_absolute_uri(o.event, 'presale:event.order', kwargs={ user=self.request.user,
'order': o.code, data={
'secret': o.secret 'subject': form.cleaned_data['subject'],
})}, 'message': form.cleaned_data['message'],
self.request.event, locale=o.locale, order=o) 'recipient': o.email
o.log_action( }
'pretix.plugins.sendmail.order.email.sent', )
user=self.request.user, except SendMailException:
data={ failures.append(o.email)
'subject': form.cleaned_data['subject'],
'message': form.cleaned_data['message'],
'recipient': o.email
}
)
except SendMailException:
failures.append(o.email)
self.request.event.log_action('pretix.plugins.sendmail.sent', self.request.event.log_action('pretix.plugins.sendmail.sent',
user=self.request.user, user=self.request.user,
data=dict(form.cleaned_data)) data=dict(form.cleaned_data))
if failures: if failures:
messages.error(self.request, _('Failed to send mails to the following users: {}'.format(' '.join(failures)))) messages.error(self.request,
_('Failed to send mails to the following users: {}'.format(' '.join(failures))))
else: else:
messages.success(self.request, _('Your message has been queued and will be sent to the selected users.')) messages.success(self.request, _('Your message has been queued and will be sent to the selected users.'))