# -*- 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) class PasswordSetEmail(AbstractMail): _subject = u'[DAV Veranstaltungen] 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 = '{fullname} <{email}>'.format(fullname=self._user.get_full_name(), email=self._user.email) return [r] def _get_body(self): template_name = self._template_name template = get_template(template_name) context = { 'base_url': config.BASE_URL, 'fullname': self._user.get_full_name(), 'username': self._user.username, 'password': self._password } return template.render(context)