130 lines
3.9 KiB
Python
130 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
import logging
|
|
from django.core.mail import EmailMessage
|
|
from django.template.loader import get_template
|
|
|
|
from . import config
|
|
from .utils import get_group_members
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_recipients(task, sport=None):
|
|
users = []
|
|
if task == 'accept':
|
|
group_var_name = 'MANAGE_ALL_GROUP'
|
|
group_name = getattr(config, group_var_name, None)
|
|
if group_name:
|
|
users.extend(get_group_members(group_name, ignore_missing=True))
|
|
|
|
if sport:
|
|
group_var_name = 'MANAGE_{}_GROUP'.format(sport)
|
|
group_name = getattr(config, group_var_name, None)
|
|
if group_name:
|
|
users.extend(get_group_members(group_name, ignore_missing=True))
|
|
|
|
elif task == 'publish':
|
|
group_var_name = 'INCREMENTAL_PUBLISHER_GROUP'
|
|
group_name = getattr(config, group_var_name, None)
|
|
if group_name:
|
|
users.extend(get_group_members(group_name, ignore_missing=True))
|
|
else:
|
|
raise ValueError('utils.get_recipients(): invalid value for task')
|
|
|
|
for u in users:
|
|
yield '{name} <{addr}>'.format(name=u.get_full_name(), addr=u.email)
|
|
|
|
|
|
class AbstractMail(object):
|
|
_sender = config.EMAIL_SENDER
|
|
_subject = 'Generic Mail'
|
|
|
|
def _get_subject(self, **kwargs):
|
|
return self._subject.format(**kwargs)
|
|
|
|
def _get_body(self):
|
|
raise NotImplementedError()
|
|
|
|
def _get_recipients(self):
|
|
raise NotImplementedError()
|
|
|
|
def send(self):
|
|
if not config.ENABLE_EMAIL_NOTIFICATIONS:
|
|
return None
|
|
subject = self._get_subject()
|
|
body = self._get_body()
|
|
sender = self._sender
|
|
recipients = self._get_recipients()
|
|
|
|
emo = EmailMessage(subject=subject, body=body, from_email=sender, to=recipients)
|
|
emo.send()
|
|
|
|
|
|
class AbstractEventMail(AbstractMail):
|
|
_subject = u'[DAV Veranstaltungen]'
|
|
_template_name = 'dav_events/emails/default.txt'
|
|
|
|
def __init__(self, event):
|
|
self._event = event
|
|
|
|
def _get_body(self):
|
|
template_name = self._template_name
|
|
template = get_template(template_name)
|
|
context = {
|
|
'base_url': config.BASE_URL,
|
|
}
|
|
context.update(self._event.get_template_context())
|
|
return template.render(context)
|
|
|
|
|
|
class NewEventMail(AbstractEventMail):
|
|
_template_name = 'dav_events/emails/new_event.txt'
|
|
|
|
def _get_subject(self, **kwargs):
|
|
s = super(NewEventMail, self)._get_subject(**kwargs)
|
|
s += u' Neue Veranstaltung angelegt'
|
|
return s
|
|
|
|
def _get_recipients(self):
|
|
r = '{fullname} <{email}>'.format(fullname=self._event.owner.get_full_name(),
|
|
email=self._event.owner.email)
|
|
return [r]
|
|
|
|
|
|
class EventToAcceptMail(AbstractEventMail):
|
|
_template_name = 'dav_events/emails/event_to_accept.txt'
|
|
|
|
def _get_subject(self, **kwargs):
|
|
s = super(EventToAcceptMail, self)._get_subject(**kwargs)
|
|
s += u' Neue Veranstaltung freigeben'
|
|
return s
|
|
|
|
def _get_recipients(self):
|
|
return get_recipients('accept', self._event.sport)
|
|
|
|
|
|
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
|
|
|
|
def _get_recipients(self):
|
|
r = '{fullname} <{email}>'.format(fullname=self._event.owner.get_full_name(),
|
|
email=self._event.owner.email)
|
|
return [r]
|
|
|
|
|
|
class EventToPublishMail(AbstractEventMail):
|
|
_template_name = 'dav_events/emails/event_to_publish.txt'
|
|
|
|
def _get_subject(self, **kwargs):
|
|
s = super(EventToPublishMail, self)._get_subject(**kwargs)
|
|
s += u' Veranstaltung veröffentlichen'
|
|
return s
|
|
|
|
def _get_recipients(self):
|
|
return get_recipients('publish', self._event.sport)
|