diff -r 8444b4f67e45 -r 19220d52bce7 src/hdalab/signals.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hdalab/signals.py Sun Mar 08 14:53:52 2015 +0100 @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +''' +Created on Mar 8, 2015 + +@author: ymh +''' +import logging + +from django.conf import settings +from django.core.mail.message import EmailMultiAlternatives +from django.db.models.signals import post_save, pre_delete +from django.template.base import TemplateDoesNotExist +from django.template.loader import render_to_string +from django.utils.html import strip_tags + +from hdalab.models.renkan import HdalabRenkan, HdalabRenkanStateTransition +from renkanmanager.models import Renkan + + +logger = logging.getLogger(__name__) + +MAIL_TEMPLATES = { + (HdalabRenkan.MODERATED,HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"), + (HdalabRenkan.MODERATED,HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"), + (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"), +} + + +#TODO put into queue +def send_renkan_moderation_messages(sender, **kwargs): + renkan_state = kwargs.get('instance', None) + if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES: + return + + template_key = (renkan_state.from_state,renkan_state.to_state) + msg_txt = "" + msg_html = "" + subject = "" + try: + template_name, subject = MAIL_TEMPLATES[template_key] +# template = loader.get_template(template_name) + context = {'renkan_state': renkan_state, 'WEB_URL': settings.WEB_URL} + msg_html = render_to_string(template_name+".txt", context) + msg_txt = render_to_string(template_name+".html", context) + except TemplateDoesNotExist: + logger.error("Mail template %s for state %s not found", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state]) + return + except Exception as e: + logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e) + + if msg_txt and msg_html and renkan_state.renkan and renkan_state.renkan.renkan and renkan_state.renkan.renkan.owner and renkan_state.renkan.renkan.owner.email: + logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt) + emsg = EmailMultiAlternatives(subject, strip_tags(msg_txt), settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email]) + emsg.attach_alternative(msg_html, "text/html") + emsg.send(fail_silently=True) + + +def queue_renkan_rendering(sender, **kwargs): + renkan_state = kwargs.get('instance', None) + if not renkan_state: + return + + if renkan_state.from_state == HdalabRenkan.PUBLISHED and renkan_state.renkan.renkan.image != settings.DEFAULT_RENKAN_ICON: + if renkan_state.renkan.renkan.image: + renkan_state.renkan.renkan.image.delete(False) + renkan_state.renkan.renkan.image.delete_thumbnails() + renkan_state.renkan.renkan.image = settings.DEFAULT_RENKAN_ICON + renkan_state.renkan.renkan.save() + elif renkan_state.to_state == HdalabRenkan.PUBLISHED: + from hdalab.tasks import capture_preview + capture_preview.delay(renkan_state.renkan.renkan.rk_id) # @UndefinedVariable + +def renkan_delete_image(sender, **kwargs): + renkan = kwargs.get('instance', None) + if not renkan or not renkan.image or renkan.image == settings.DEFAULT_RENKAN_ICON: + return + renkan.image.delete(False) + renkan.image.delete_thumbnails() + + +RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b" +RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f" +RENKAN_DELETE_UUID = "09c23ca2-4d59-4c29-b94a-2c2672d5a89b" + +post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID) +post_save.connect(queue_renkan_rendering, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_RENDERING_UUID) +pre_delete.connect(renkan_delete_image, sender=Renkan, dispatch_uid=RENKAN_DELETE_UUID) +