src/hdalab/signals.py
changeset 492 19220d52bce7
child 530 5d3b4e1e5b34
equal deleted inserted replaced
491:8444b4f67e45 492:19220d52bce7
       
     1 # -*- coding: utf-8 -*-
       
     2 '''
       
     3 Created on Mar 8, 2015
       
     4 
       
     5 @author: ymh
       
     6 '''
       
     7 import logging
       
     8 
       
     9 from django.conf import settings
       
    10 from django.core.mail.message import EmailMultiAlternatives
       
    11 from django.db.models.signals import post_save, pre_delete
       
    12 from django.template.base import TemplateDoesNotExist
       
    13 from django.template.loader import render_to_string
       
    14 from django.utils.html import strip_tags
       
    15 
       
    16 from hdalab.models.renkan import HdalabRenkan, HdalabRenkanStateTransition
       
    17 from renkanmanager.models import Renkan
       
    18 
       
    19 
       
    20 logger = logging.getLogger(__name__)
       
    21 
       
    22 MAIL_TEMPLATES = {
       
    23     (HdalabRenkan.MODERATED,HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"),
       
    24     (HdalabRenkan.MODERATED,HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"),
       
    25     (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"),
       
    26 }
       
    27 
       
    28 
       
    29 #TODO put into queue
       
    30 def send_renkan_moderation_messages(sender, **kwargs):
       
    31     renkan_state = kwargs.get('instance', None)
       
    32     if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES:
       
    33         return
       
    34 
       
    35     template_key = (renkan_state.from_state,renkan_state.to_state)
       
    36     msg_txt = ""
       
    37     msg_html = ""
       
    38     subject = ""
       
    39     try:
       
    40         template_name, subject = MAIL_TEMPLATES[template_key]
       
    41 #        template = loader.get_template(template_name)
       
    42         context = {'renkan_state': renkan_state, 'WEB_URL': settings.WEB_URL}
       
    43         msg_html = render_to_string(template_name+".txt", context)
       
    44         msg_txt = render_to_string(template_name+".html", context)
       
    45     except TemplateDoesNotExist:
       
    46         logger.error("Mail template %s for state %s not found", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state])
       
    47         return
       
    48     except Exception as e:
       
    49         logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e)
       
    50     
       
    51     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:
       
    52         logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt)
       
    53         emsg = EmailMultiAlternatives(subject, strip_tags(msg_txt), settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email])
       
    54         emsg.attach_alternative(msg_html, "text/html")
       
    55         emsg.send(fail_silently=True)
       
    56 
       
    57 
       
    58 def queue_renkan_rendering(sender, **kwargs):
       
    59     renkan_state = kwargs.get('instance', None)
       
    60     if not renkan_state:
       
    61         return
       
    62     
       
    63     if renkan_state.from_state == HdalabRenkan.PUBLISHED and renkan_state.renkan.renkan.image != settings.DEFAULT_RENKAN_ICON:
       
    64         if renkan_state.renkan.renkan.image:
       
    65             renkan_state.renkan.renkan.image.delete(False)
       
    66             renkan_state.renkan.renkan.image.delete_thumbnails()
       
    67         renkan_state.renkan.renkan.image = settings.DEFAULT_RENKAN_ICON
       
    68         renkan_state.renkan.renkan.save()
       
    69     elif renkan_state.to_state == HdalabRenkan.PUBLISHED:
       
    70         from hdalab.tasks import capture_preview
       
    71         capture_preview.delay(renkan_state.renkan.renkan.rk_id)  # @UndefinedVariable
       
    72 
       
    73 def renkan_delete_image(sender, **kwargs):
       
    74     renkan = kwargs.get('instance', None)
       
    75     if not renkan or not renkan.image or renkan.image == settings.DEFAULT_RENKAN_ICON:
       
    76         return
       
    77     renkan.image.delete(False)
       
    78     renkan.image.delete_thumbnails()
       
    79 
       
    80     
       
    81 RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b"
       
    82 RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f"
       
    83 RENKAN_DELETE_UUID = "09c23ca2-4d59-4c29-b94a-2c2672d5a89b"
       
    84 
       
    85 post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID)
       
    86 post_save.connect(queue_renkan_rendering, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_RENDERING_UUID)
       
    87 pre_delete.connect(renkan_delete_image, sender=Renkan, dispatch_uid=RENKAN_DELETE_UUID)
       
    88