From 43af31232ef68408e1bb38f70c0210ecab174f74 Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Thu, 22 Nov 2018 11:47:30 +0100 Subject: [PATCH] UPD: improved email templates. --- dav_events/apps.py | 4 ++-- dav_events/models/event.py | 12 ++++++------ .../dav_events/emails/event_accepted.txt | 8 ++++++-- .../dav_events/emails/event_submitted.txt | 8 +++++--- .../dav_events/emails/event_to_accept.txt | 6 ++++-- .../dav_events/emails/event_to_publish.txt | 19 +++++++++++-------- .../dav_events/emails/event_updated.txt | 9 +++------ .../templates/dav_events/event/default.txt | 14 +++++++++++++- dav_events/workflow.py | 14 +++++++++++--- 9 files changed, 61 insertions(+), 33 deletions(-) diff --git a/dav_events/apps.py b/dav_events/apps.py index af30b48..e30a866 100644 --- a/dav_events/apps.py +++ b/dav_events/apps.py @@ -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) \ No newline at end of file + signals.event_updated.connect(workflow.send_emails_on_event_update) + signals.event_status_updated.connect(workflow.send_emails_on_event_status_update) diff --git a/dav_events/models/event.py b/dav_events/models/event.py index 3d7afc3..c0fd23b 100644 --- a/dav_events/models/event.py +++ b/dav_events/models/event.py @@ -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') diff --git a/dav_events/templates/dav_events/emails/event_accepted.txt b/dav_events/templates/dav_events/emails/event_accepted.txt index 2dd33f7..372a5f3 100644 --- a/dav_events/templates/dav_events/emails/event_accepted.txt +++ b/dav_events/templates/dav_events/emails/event_accepted.txt @@ -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 %} diff --git a/dav_events/templates/dav_events/emails/event_submitted.txt b/dav_events/templates/dav_events/emails/event_submitted.txt index 4347f52..4db6686 100644 --- a/dav_events/templates/dav_events/emails/event_submitted.txt +++ b/dav_events/templates/dav_events/emails/event_submitted.txt @@ -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 %} \ No newline at end of file diff --git a/dav_events/templates/dav_events/emails/event_to_accept.txt b/dav_events/templates/dav_events/emails/event_to_accept.txt index 68d79f0..e3d5da1 100644 --- a/dav_events/templates/dav_events/emails/event_to_accept.txt +++ b/dav_events/templates/dav_events/emails/event_to_accept.txt @@ -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 }} diff --git a/dav_events/templates/dav_events/emails/event_to_publish.txt b/dav_events/templates/dav_events/emails/event_to_publish.txt index 07f0c54..2fe5d38 100644 --- a/dav_events/templates/dav_events/emails/event_to_publish.txt +++ b/dav_events/templates/dav_events/emails/event_to_publish.txt @@ -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 +===========
{{ normalized_long_date }}{% if alt_normalized_long_date %}
({% trans 'Ersatztermin' %}: {{ alt_normalized_long_date }}) {% endif %}
@@ -66,8 +74,3 @@ Bearbeitungshinweis: {% endif %}

{% if registration_required and registration_howto %}

{{ registration_howto|urlize }}

{% 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 }} \ No newline at end of file diff --git a/dav_events/templates/dav_events/emails/event_updated.txt b/dav_events/templates/dav_events/emails/event_updated.txt index 7359a22..1b93a0a 100644 --- a/dav_events/templates/dav_events/emails/event_updated.txt +++ b/dav_events/templates/dav_events/emails/event_updated.txt @@ -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 %} \ No newline at end of file + Ausschreibung: + ============== +{{ diff }} \ No newline at end of file diff --git a/dav_events/templates/dav_events/event/default.txt b/dav_events/templates/dav_events/event/default.txt index 85efcae..b563404 100644 --- a/dav_events/templates/dav_events/event/default.txt +++ b/dav_events/templates/dav_events/event/default.txt @@ -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 %} \ No newline at end of file +{% 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 %} \ No newline at end of file diff --git a/dav_events/workflow.py b/dav_events/workflow.py index 2cf5a89..6ea085b 100644 --- a/dav_events/workflow.py +++ b/dav_events/workflow.py @@ -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