UPD: improved email templates.
This commit is contained in:
@@ -32,5 +32,5 @@ class AppConfig(_AppConfig):
|
|||||||
default_settings = DEFAULT_SETTINGS
|
default_settings = DEFAULT_SETTINGS
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
signals.event_updated.connect(workflow.email_event_update)
|
signals.event_updated.connect(workflow.send_emails_on_event_update)
|
||||||
signals.event_status_updated.connect(workflow.email_event_status_update)
|
signals.event_status_updated.connect(workflow.send_emails_on_event_status_update)
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ class Event(models.Model):
|
|||||||
creating = True
|
creating = True
|
||||||
else:
|
else:
|
||||||
original = Event.objects.get(id=self.id)
|
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:
|
if not self.editor or not self.editor.is_authenticated:
|
||||||
self.editor = self.owner
|
self.editor = self.owner
|
||||||
@@ -302,15 +302,15 @@ class Event(models.Model):
|
|||||||
logger.info('Event created: %s', self)
|
logger.info('Event created: %s', self)
|
||||||
self.confirm_status('draft', self.editor)
|
self.confirm_status('draft', self.editor)
|
||||||
else:
|
else:
|
||||||
modified_text = self.render_as_text()
|
modified_text = self.render_as_text(show_internal_fields=True)
|
||||||
o_lines = original_text.split('\n')
|
o_lines = original_text.split('\n')
|
||||||
m_lines = modified_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_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_lines, user=self.editor)
|
||||||
signals.event_updated.send(sender=self.__class__, event=self, diff=diff_text, user=self.editor)
|
|
||||||
logger.info('Event updated: %s', self)
|
logger.info('Event updated: %s', self)
|
||||||
|
|
||||||
def _internal_update(self):
|
def _internal_update(self):
|
||||||
|
"""Safe changes on model instance without sending event_updated signal."""
|
||||||
if not self.id:
|
if not self.id:
|
||||||
logger.critical('Event._internal_update() was called before Event was saved properly.')
|
logger.critical('Event._internal_update() was called before Event was saved properly.')
|
||||||
raise Exception('Code is on fire!')
|
raise Exception('Code is on fire!')
|
||||||
@@ -603,7 +603,7 @@ class Event(models.Model):
|
|||||||
r.update(context)
|
r.update(context)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def render_as_text(self, format=None):
|
def render_as_text(self, format=None, show_internal_fields=False):
|
||||||
if format == 'ka-alpin':
|
if format == 'ka-alpin':
|
||||||
template_name = 'ka-alpin.txt'
|
template_name = 'ka-alpin.txt'
|
||||||
else:
|
else:
|
||||||
@@ -611,7 +611,7 @@ class Event(models.Model):
|
|||||||
|
|
||||||
template_path = os.path.join('dav_events', 'event', template_name)
|
template_path = os.path.join('dav_events', 'event', template_name)
|
||||||
template = get_template(template_path)
|
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):
|
def render_as_html(self):
|
||||||
template_name = os.path.join('dav_events', 'event', 'default.html')
|
template_name = os.path.join('dav_events', 'event', 'default.html')
|
||||||
|
|||||||
@@ -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 %}
|
Voraussichtliche Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}In wenigen Tagen{% endif %}
|
||||||
|
|
||||||
----------
|
Ausschreibung:
|
||||||
{{ event.render_as_text }}----------
|
==============
|
||||||
|
{{ event.render_as_text }}{% if internal_note %}
|
||||||
|
Bearbeitungshinweis:
|
||||||
|
====================
|
||||||
|
{{ internal_note }}{% endif %}
|
||||||
|
|||||||
@@ -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 %}
|
Voraussichtliche Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}In wenigen Tagen{% endif %}
|
||||||
|
|
||||||
----------
|
Ausschreibung:
|
||||||
{{ event.render_as_text }}----------
|
==============
|
||||||
{% if internal_note %}Bearbeitungshinweis:
|
{{ event.render_as_text }}{% if internal_note %}
|
||||||
|
Bearbeitungshinweis:
|
||||||
|
====================
|
||||||
{{ internal_note }}{% endif %}
|
{{ internal_note }}{% endif %}
|
||||||
@@ -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 %}
|
Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|date:'l, d. F Y' }}{% else %}sofort{% endif %}
|
||||||
{% if internal_note %}
|
{% if internal_note %}
|
||||||
Bearbeitungshinweis:
|
Bearbeitungshinweis:
|
||||||
|
====================
|
||||||
{{ internal_note }}
|
{{ internal_note }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
----------
|
Ausschreibung:
|
||||||
{{ event.render_as_text }}----------
|
==============
|
||||||
|
{{ event.render_as_text }}
|
||||||
|
|||||||
@@ -8,15 +8,23 @@ Der folgende Link führt zur Veranstaltung:
|
|||||||
Über den folgenden Link kannst du die Veröffentlichung unmittelbar bestätigen:
|
Über den folgenden Link kannst du die Veröffentlichung unmittelbar bestätigen:
|
||||||
{{ base_url }}{{ confirm_publication_url }}
|
{{ 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 %}
|
{% if internal_note %}
|
||||||
Bearbeitungshinweis:
|
Bearbeitungshinweis:
|
||||||
|
====================
|
||||||
{{ internal_note }}
|
{{ internal_note }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
---------- Plain Text ----------
|
Ausschreibung:
|
||||||
|
==============
|
||||||
{{ event.render_as_text }}
|
{{ event.render_as_text }}
|
||||||
|
|
||||||
---------- HTML Joomla ----------
|
Joomla HTML
|
||||||
|
===========
|
||||||
<h6>{{ normalized_long_date }}{% if alt_normalized_long_date %}<br />
|
<h6>{{ normalized_long_date }}{% if alt_normalized_long_date %}<br />
|
||||||
({% trans 'Ersatztermin' %}: {{ alt_normalized_long_date }})
|
({% trans 'Ersatztermin' %}: {{ alt_normalized_long_date }})
|
||||||
{% endif %}</h6>
|
{% endif %}</h6>
|
||||||
@@ -66,8 +74,3 @@ Bearbeitungshinweis:
|
|||||||
{% endif %}</p>
|
{% endif %}</p>
|
||||||
{% if registration_required and registration_howto %}<p>{{ registration_howto|urlize }}</p>
|
{% if registration_required and registration_howto %}<p>{{ registration_howto|urlize }}</p>
|
||||||
{% endif %}
|
{% 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 }}
|
|
||||||
@@ -6,9 +6,6 @@ Hallo {{ recipient.first_name }},
|
|||||||
Link zur Veranstaltung:
|
Link zur Veranstaltung:
|
||||||
{{ base_url }}{{ event.get_absolute_url }}
|
{{ 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 %}
|
Ausschreibung:
|
||||||
|
==============
|
||||||
----------
|
{{ diff }}
|
||||||
{{ diff }}----------
|
|
||||||
{% if internal_note %}Bearbeitungshinweis:
|
|
||||||
{{ internal_note }}{% endif %}
|
|
||||||
@@ -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 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 %}
|
{% endif %}{% if registration_required and registration_howto %}
|
||||||
{{ 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 %}
|
||||||
@@ -1,9 +1,12 @@
|
|||||||
|
import logging
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
|
|
||||||
from . import emails
|
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')
|
event = kwargs.get('event')
|
||||||
diff = kwargs.get('diff')
|
diff = kwargs.get('diff')
|
||||||
updater = kwargs.get('user')
|
updater = kwargs.get('user')
|
||||||
@@ -12,6 +15,11 @@ def email_event_update(sender, **kwargs):
|
|||||||
if not app_config.settings.enable_email_notifications:
|
if not app_config.settings.enable_email_notifications:
|
||||||
return
|
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?
|
# Who should be informed about the update?
|
||||||
recipients = [event.owner]
|
recipients = [event.owner]
|
||||||
if event.is_flagged('submitted'):
|
if event.is_flagged('submitted'):
|
||||||
@@ -25,11 +33,11 @@ def email_event_update(sender, **kwargs):
|
|||||||
|
|
||||||
for recipient in recipients:
|
for recipient in recipients:
|
||||||
if recipient.email and recipient.email != updater.email:
|
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()
|
email.send()
|
||||||
|
|
||||||
|
|
||||||
def email_event_status_update(sender, **kwargs):
|
def send_emails_on_event_status_update(sender, **kwargs):
|
||||||
event = kwargs.get('event')
|
event = kwargs.get('event')
|
||||||
flag = kwargs.get('flag')
|
flag = kwargs.get('flag')
|
||||||
updator = flag.user
|
updator = flag.user
|
||||||
|
|||||||
Reference in New Issue
Block a user