mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
* Add context variables to sendmail plugin #173 * fixed date format * add context variables to sendmail plugin * timezone adjustment #173 * partial preview * preview raw message * preview not formatted * Add context variables to sendmail plugin. Add email preview #173 * Add context variables to sendmail plugin. Add email preview for multiple locales #173 * add context variables to sendmail plugin, and email preview for multiple locales #173 * add context variables to sendmail plugin, and email preview for multiple locales * order url link update #173
This commit is contained in:
committed by
Raphael Michel
parent
c9d38d7f23
commit
e059b14d1c
@@ -19,7 +19,8 @@ class MailForm(forms.Form):
|
||||
)
|
||||
self.fields['message'] = I18nFormField(
|
||||
widget=I18nTextarea, required=True,
|
||||
langcodes=event.settings.get('locales')
|
||||
langcodes=event.settings.get('locales'),
|
||||
help_text=_("Available placeholders: {due_date}, {event}, {order}, {order_date}, {order_url}")
|
||||
)
|
||||
choices = list(Order.STATUS_CHOICE)
|
||||
if not event.settings.get('payment_term_expire_automatically', as_type=bool):
|
||||
|
||||
@@ -10,7 +10,28 @@
|
||||
{% bootstrap_field form.sendto layout='horizontal' %}
|
||||
{% bootstrap_field form.subject layout='horizontal' %}
|
||||
{% bootstrap_field form.message layout='horizontal' %}
|
||||
{% if request.method == "POST" %}
|
||||
<fieldset>
|
||||
<legend>{% trans "E-mail preview" %}</legend>
|
||||
|
||||
<div class="panel-body">
|
||||
{% for locale, segments in output.items %}
|
||||
<p>
|
||||
<strong>{% blocktrans %}For locale: {{ locale }}{% endblocktrans %}</strong>
|
||||
</p>
|
||||
{% for value in segments %}
|
||||
<p>
|
||||
{{ value|linebreaksbr }}
|
||||
</p>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</fieldset>
|
||||
{% endif %}
|
||||
<div class="form-group submit-group">
|
||||
<button type="submit" class="btn btn-default btn-save pull-left" name="action" value="preview">
|
||||
{% trans "Preview email" %}
|
||||
</button>
|
||||
<button type="submit" class="btn btn-primary btn-save">
|
||||
{% trans "Send" %}
|
||||
</button>
|
||||
@@ -18,4 +39,3 @@
|
||||
</form>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
import logging
|
||||
from datetime import timedelta
|
||||
import pytz
|
||||
|
||||
from django.contrib import messages
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import redirect
|
||||
from django.utils.formats import date_format
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.generic import FormView
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.base.models import Order
|
||||
from pretix.base.services.mail import SendMailException, mail
|
||||
from pretix.control.permissions import EventPermissionRequiredMixin
|
||||
from pretix.multidomain.urlreverse import build_absolute_uri
|
||||
|
||||
from . import forms
|
||||
|
||||
@@ -36,13 +41,44 @@ class SenderView(EventPermissionRequiredMixin, FormView):
|
||||
self.request.event.log_action('pretix.plugins.sendmail.sent', user=self.request.user, data=dict(
|
||||
form.cleaned_data))
|
||||
|
||||
tz = pytz.timezone(self.request.event.settings.timezone)
|
||||
|
||||
failures = []
|
||||
self.output = {}
|
||||
for o in orders:
|
||||
try:
|
||||
mail(o.email, form.cleaned_data['subject'], form.cleaned_data['message'],
|
||||
None, self.request.event, locale=o.locale, order=o)
|
||||
except SendMailException:
|
||||
failures.append(o.email)
|
||||
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'
|
||||
}))
|
||||
self.output[l].append(preview_text)
|
||||
return self.get(self.request, *self.args, **self.kwargs)
|
||||
else:
|
||||
try:
|
||||
with language(o.locale):
|
||||
mail(o.email, form.cleaned_data['subject'], form.cleaned_data['message'],
|
||||
{
|
||||
'event': o.event,
|
||||
'order': o.code,
|
||||
'order_date': date_format(o.datetime.astimezone(tz), 'SHORT_DATETIME_FORMAT'),
|
||||
'due_date': date_format(o.expires, 'SHORT_DATE_FORMAT'),
|
||||
'order_url': build_absolute_uri(o.event, 'presale:event.order', kwargs={
|
||||
'order': 'ORDER1234',
|
||||
'secret': 'longrandomsecretabcdef123456'
|
||||
})},
|
||||
self.request.event, locale=o.locale, order=o)
|
||||
except SendMailException:
|
||||
failures.append(o.email)
|
||||
|
||||
if failures:
|
||||
messages.error(self.request, _('Failed to send mails to the following users: {}'.format(' '.join(failures))))
|
||||
@@ -54,3 +90,8 @@ class SenderView(EventPermissionRequiredMixin, FormView):
|
||||
event=self.request.event.slug,
|
||||
organizer=self.request.event.organizer.slug
|
||||
)
|
||||
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
ctx = super().get_context_data(*args, **kwargs)
|
||||
ctx['output'] = getattr(self, 'output', None)
|
||||
return ctx
|
||||
|
||||
Reference in New Issue
Block a user