176 lines
6.0 KiB
Python
176 lines
6.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
import logging
|
|
from django.apps import apps
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
from django.core.mail import EmailMessage
|
|
from django.template.loader import get_template
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AbstractMail(object):
|
|
_subject = u''
|
|
_template_name = None
|
|
|
|
def _get_sender(self):
|
|
app_config = apps.get_containing_app_config(__package__)
|
|
return app_config.settings.email_sender
|
|
|
|
def _get_subject(self, **kwargs):
|
|
s = self._subject
|
|
app_config = apps.get_containing_app_config(__package__)
|
|
if app_config.settings.email_subject_prefix:
|
|
s = u'%s %s' % (app_config.settings.email_subject_prefix, s)
|
|
s = s.format(**kwargs)
|
|
return s
|
|
|
|
def _get_template(self):
|
|
if not self._template_name:
|
|
raise ImproperlyConfigured('%s._template_name ist not set.', self.__class__.__name__)
|
|
return get_template(self._template_name)
|
|
|
|
def _get_context_data(self, extra_context=None):
|
|
app_config = apps.get_containing_app_config(__package__)
|
|
context = {
|
|
'base_url': app_config.settings.email_base_url,
|
|
}
|
|
if extra_context:
|
|
context.update(extra_context)
|
|
return context
|
|
|
|
def _get_body(self, context=None):
|
|
template = self._get_template()
|
|
context = self._get_context_data(extra_context=context)
|
|
return template.render(context)
|
|
|
|
def _get_recipients(self):
|
|
raise NotImplementedError()
|
|
|
|
def send(self):
|
|
subject = self._get_subject()
|
|
body = self._get_body()
|
|
sender = self._get_sender()
|
|
recipients = self._get_recipients()
|
|
|
|
emo = EmailMessage(subject=subject, body=body, from_email=sender, to=recipients)
|
|
logger.info(u'Send %s to %s', self.__class__.__name__, recipients)
|
|
emo.send()
|
|
|
|
|
|
class AbstractEventMail(AbstractMail):
|
|
_template_name = 'dav_events/emails/default.txt'
|
|
|
|
def __init__(self, recipient, event):
|
|
self._recipient = recipient
|
|
self._event = event
|
|
|
|
def _get_subject(self, **kwargs):
|
|
if 'number' not in kwargs:
|
|
kwargs['number'] = self._event.get_number()
|
|
s = super(AbstractEventMail, self)._get_subject(**kwargs)
|
|
return s
|
|
|
|
def _get_recipients(self):
|
|
r = u'"{fullname}" <{email}>'.format(fullname=self._recipient.get_full_name(),
|
|
email=self._recipient.email)
|
|
return [r]
|
|
|
|
def _get_context_data(self, extra_context=None):
|
|
context = super(AbstractEventMail, self)._get_context_data(extra_context=extra_context)
|
|
context['recipient'] = self._recipient
|
|
context.update(self._event.get_template_context())
|
|
return context
|
|
|
|
|
|
class EventUpdatedMail(AbstractEventMail):
|
|
_subject = u'{number}: Veranstaltung geändert'
|
|
_template_name = 'dav_events/emails/event_updated.txt'
|
|
|
|
def __init__(self, diff=None, editor=None, *args, **kwargs):
|
|
self._diff = diff
|
|
self._editor = editor
|
|
super(EventUpdatedMail, self).__init__(*args, **kwargs)
|
|
|
|
def _get_context_data(self, extra_context=None):
|
|
context = super(EventUpdatedMail, self)._get_context_data(extra_context=extra_context)
|
|
context['diff'] = self._diff
|
|
context['editor'] = self._editor.get_full_name()
|
|
return context
|
|
|
|
|
|
class EventSubmittedMail(AbstractEventMail):
|
|
_template_name = 'dav_events/emails/event_submitted.txt'
|
|
|
|
def _get_subject(self, **kwargs):
|
|
s = super(EventSubmittedMail, self)._get_subject(**kwargs)
|
|
s += u'Neue Veranstaltung eingereicht'
|
|
return s
|
|
|
|
|
|
class EventToAcceptMail(AbstractEventMail):
|
|
_template_name = 'dav_events/emails/event_to_accept.txt'
|
|
|
|
def __init__(self, accept_action=None, *args, **kwargs):
|
|
self._accept_action = accept_action
|
|
super(EventToAcceptMail, self).__init__(*args, **kwargs)
|
|
|
|
def _get_context_data(self, extra_context=None):
|
|
context = super(EventToAcceptMail, self)._get_context_data(extra_context=extra_context)
|
|
context['accept_url'] = self._accept_action.get_absolute_url()
|
|
return context
|
|
|
|
def _get_subject(self, **kwargs):
|
|
s = super(EventToAcceptMail, self)._get_subject(**kwargs)
|
|
s += u'Neue Veranstaltung freigeben'
|
|
return s
|
|
|
|
|
|
class EventAcceptedMail(AbstractEventMail):
|
|
_template_name = 'dav_events/emails/event_accepted.txt'
|
|
|
|
def _get_subject(self, **kwargs):
|
|
s = super(EventAcceptedMail, self)._get_subject(**kwargs)
|
|
s += u'Veranstaltung wurde freigegeben'
|
|
return s
|
|
|
|
|
|
class EventToPublishMail(AbstractEventMail):
|
|
_template_name = 'dav_events/emails/event_to_publish.txt'
|
|
|
|
def __init__(self, confirm_publication_action=None, *args, **kwargs):
|
|
self._confirm_publication_action = confirm_publication_action
|
|
super(EventToPublishMail, self).__init__(*args, **kwargs)
|
|
|
|
def _get_context_data(self, extra_context=None):
|
|
context = super(EventToPublishMail, self)._get_context_data(extra_context=extra_context)
|
|
context['confirm_publication_url'] = self._confirm_publication_action.get_absolute_url()
|
|
return context
|
|
|
|
def _get_subject(self, **kwargs):
|
|
s = super(EventToPublishMail, self)._get_subject(**kwargs)
|
|
s += u'Veranstaltung veröffentlichen'
|
|
return s
|
|
|
|
|
|
class PasswordSetEmail(AbstractMail):
|
|
_subject = u'Zugangsdaten'
|
|
_template_name = 'dav_events/emails/password_set.txt'
|
|
|
|
def __init__(self, user, password):
|
|
self._user = user
|
|
self._password = password
|
|
|
|
def _get_recipients(self):
|
|
r = u'{fullname} <{email}>'.format(fullname=self._user.get_full_name(),
|
|
email=self._user.email)
|
|
return [r]
|
|
|
|
def _get_context_data(self, extra_context=None):
|
|
context = super(PasswordSetEmail, self)._get_context_data(extra_context=extra_context)
|
|
context.update({
|
|
'fullname': self._user.get_full_name(),
|
|
'username': self._user.username,
|
|
'password': self._password
|
|
})
|
|
return context
|