UPD: improved email templates.

This commit is contained in:
2018-11-22 11:47:30 +01:00
parent 401ca9641a
commit 43af31232e
9 changed files with 61 additions and 33 deletions

View File

@@ -32,5 +32,5 @@ class AppConfig(_AppConfig):
default_settings = DEFAULT_SETTINGS
def ready(self):
signals.event_updated.connect(workflow.email_event_update)
signals.event_status_updated.connect(workflow.email_event_status_update)
signals.event_updated.connect(workflow.send_emails_on_event_update)
signals.event_status_updated.connect(workflow.send_emails_on_event_status_update)

View File

@@ -291,7 +291,7 @@ class Event(models.Model):
creating = True
else:
original = Event.objects.get(id=self.id)
original_text = original.render_as_text()
original_text = original.render_as_text(show_internal_fields=True)
if not self.editor or not self.editor.is_authenticated:
self.editor = self.owner
@@ -302,15 +302,15 @@ class Event(models.Model):
logger.info('Event created: %s', self)
self.confirm_status('draft', self.editor)
else:
modified_text = self.render_as_text()
modified_text = self.render_as_text(show_internal_fields=True)
o_lines = original_text.split('\n')
m_lines = modified_text.split('\n')
diff_lines = list(difflib.unified_diff(o_lines, m_lines, n=len(m_lines), lineterm=''))
diff_text = '\n'.join(diff_lines[3:])
signals.event_updated.send(sender=self.__class__, event=self, diff=diff_text, user=self.editor)
signals.event_updated.send(sender=self.__class__, event=self, diff=diff_lines, user=self.editor)
logger.info('Event updated: %s', self)
def _internal_update(self):
"""Safe changes on model instance without sending event_updated signal."""
if not self.id:
logger.critical('Event._internal_update() was called before Event was saved properly.')
raise Exception('Code is on fire!')
@@ -603,7 +603,7 @@ class Event(models.Model):
r.update(context)
return r
def render_as_text(self, format=None):
def render_as_text(self, format=None, show_internal_fields=False):
if format == 'ka-alpin':
template_name = 'ka-alpin.txt'
else:
@@ -611,7 +611,7 @@ class Event(models.Model):
template_path = os.path.join('dav_events', 'event', template_name)
template = get_template(template_path)
return template.render(self.get_template_context())
return template.render(self.get_template_context({'show_internal_fields': show_internal_fields}))
def render_as_html(self):
template_name = os.path.join('dav_events', 'event', 'default.html')

View File

@@ -8,5 +8,9 @@ Link zur Veranstaltung:
Voraussichtliche Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}In wenigen Tagen{% endif %}
----------
{{ event.render_as_text }}----------
Ausschreibung:
==============
{{ event.render_as_text }}{% if internal_note %}
Bearbeitungshinweis:
====================
{{ internal_note }}{% endif %}

View File

@@ -8,7 +8,9 @@ Link zur Veranstaltung:
Voraussichtliche Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}In wenigen Tagen{% endif %}
----------
{{ event.render_as_text }}----------
{% if internal_note %}Bearbeitungshinweis:
Ausschreibung:
==============
{{ event.render_as_text }}{% if internal_note %}
Bearbeitungshinweis:
====================
{{ internal_note }}{% endif %}

View File

@@ -10,7 +10,9 @@ Der folgende Link führt zur Veranstaltung:
Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}sofort{% endif %}
{% if internal_note %}
Bearbeitungshinweis:
====================
{{ internal_note }}
{% endif %}
----------
{{ event.render_as_text }}----------
Ausschreibung:
==============
{{ event.render_as_text }}

View File

@@ -8,15 +8,23 @@ Der folgende Link führt zur Veranstaltung:
Über den folgenden Link kannst du die Veröffentlichung unmittelbar bestätigen:
{{ base_url }}{{ confirm_publication_url }}
Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}sofort{% endif %}
Veröffentlichung: ({% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}sofort{% endif %})
=================
{% if planned_publication_date %}Veröffentlichung starten: {{ planned_publication_date|date:'d.m.Y' }} 00:00:00
{% endif %}Veröffentlichung beenden: {{ day_after|date:'d.m.Y' }} 00:00:00
Erstellungsdatum: {{ first_day|date:'d.m.Y' }} 00:00:00
Titel: {{ number }} - {{ title }}
{% if internal_note %}
Bearbeitungshinweis:
====================
{{ internal_note }}
{% endif %}
---------- Plain Text ----------
Ausschreibung:
==============
{{ event.render_as_text }}
---------- HTML Joomla ----------
Joomla HTML
===========
<h6>{{ normalized_long_date }}{% if alt_normalized_long_date %}<br />
({% trans 'Ersatztermin' %}: {{ alt_normalized_long_date }})
{% endif %}</h6>
@@ -66,8 +74,3 @@ Bearbeitungshinweis:
{% endif %}</p>
{% if registration_required and registration_howto %}<p>{{ registration_howto|urlize }}</p>
{% endif %}
---------- Veröffentlichung ----------
{% if planned_publication_date %}Veröffentlichung starten: {{ planned_publication_date|date:'d.m.Y' }} 00:00:00
{% endif %}Veröffentlichung beenden: {{ day_after|date:'d.m.Y' }} 00:00:00
Erstellungsdatum: {{ first_day|date:'d.m.Y' }} 00:00:00
Titel: {{ number }} - {{ title }}

View File

@@ -6,9 +6,6 @@ Hallo {{ recipient.first_name }},
Link zur Veranstaltung:
{{ base_url }}{{ event.get_absolute_url }}
Voraussichtliche Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}In wenigen Tagen{% endif %}
----------
{{ diff }}----------
{% if internal_note %}Bearbeitungshinweis:
{{ internal_note }}{% endif %}
Ausschreibung:
==============
{{ diff }}

View File

@@ -47,4 +47,16 @@
{% endif %}{% if trainer_familyname %}{% trans 'Leitung' %}: {{ trainer_firstname }} {{ trainer_familyname }}{% if trainer_email or trainer_phone %} ({% if trainer_email %}{{ trainer_email }}{% endif %}{% if trainer_email and trainer_phone %}, {% endif %}{% if trainer_phone %}{{ trainer_phone }}{% endif %}){% endif %}
{% endif %}{% if registration_required and registration_howto %}
{{ registration_howto }}
{% endif %}
{% endif %}{% if show_internal_fields %}
{% trans 'Nichtöffentliche Daten' %}:
=======================
{% trans 'Veranstaltungsart' %}: {{ event.get_mode_display }}
{% trans 'Schwierigkeitsnivau' %}: {{ event.get_level_display }}
{% if event.sport == 'S' %}{% trans 'Skiliftbenutzung' %}: {% if event.ski_list %}{% trans 'Ja' %}{% else %}{% trans 'Nein' %}{% endif %}
{% endif %}{% trans 'Gelände' %}: {{ event.get_terrain_display }}
{% trans 'Anreise des Kurs-/Tourenleiters am Vortag' %}: {% if event.arrival_previous_day %}{% trans 'Ja' %}{% else %}{% trans 'Nein' %}{% endif %}
{% trans 'Veröffentlichung' %}: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}{% trans 'sofort' %}{% endif %}
{% if internal_note %}
{% trans 'Bearbeitungshinweis' %}:
====================
{{ internal_note }}{% endif %}{% endif %}

View File

@@ -1,9 +1,12 @@
import logging
from django.apps import apps
from . import emails
logger = logging.getLogger(__name__)
def email_event_update(sender, **kwargs):
def send_emails_on_event_update(sender, **kwargs):
event = kwargs.get('event')
diff = kwargs.get('diff')
updater = kwargs.get('user')
@@ -12,6 +15,11 @@ def email_event_update(sender, **kwargs):
if not app_config.settings.enable_email_notifications:
return
if len(diff) < 1:
logger.debug('send_emails_on_event_update(): No diff data -> Skip sending mails.')
return
diff_text = '\n'.join(diff[3:])
# Who should be informed about the update?
recipients = [event.owner]
if event.is_flagged('submitted'):
@@ -25,11 +33,11 @@ def email_event_update(sender, **kwargs):
for recipient in recipients:
if recipient.email and recipient.email != updater.email:
email = emails.EventUpdatedMail(recipient=recipient, event=event, editor=updater, diff=diff)
email = emails.EventUpdatedMail(recipient=recipient, event=event, editor=updater, diff=diff_text)
email.send()
def email_event_status_update(sender, **kwargs):
def send_emails_on_event_status_update(sender, **kwargs):
event = kwargs.get('event')
flag = kwargs.get('flag')
updator = flag.user