19 |
19 |
20 |
20 |
21 logger = logging.getLogger(__name__) |
21 logger = logging.getLogger(__name__) |
22 |
22 |
23 MAIL_TEMPLATES = { |
23 MAIL_TEMPLATES = { |
24 (HdalabRenkan.MODERATED,HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"), |
24 (HdalabRenkan.MODERATED, HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"), |
25 (HdalabRenkan.MODERATED,HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"), |
25 (HdalabRenkan.MODERATED, HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"), |
26 (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"), |
26 (HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"), |
27 (HdalabRenkan.PUBLISHED, HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"), |
27 (HdalabRenkan.PUBLISHED, HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"), |
28 } |
28 } |
29 |
29 |
30 |
30 |
31 #TODO put into queue |
31 #TODO put into queue |
32 def send_renkan_moderation_messages(sender, **kwargs): |
32 def send_renkan_moderation_messages(sender, **kwargs): |
|
33 """ |
|
34 Envoie un email suite au changement de status d'un renkan. |
|
35 Le template à utiliser pour l'email est donné par la constante `MAIL_TEMPLATES` et est fonction du statut de dépard et du status d'arrivé. |
|
36 Si aucun template est trouvé, aucun mail n'est envoyé. |
|
37 |
|
38 :param:instance: l'objet :class:`hdalab.models.renkan.HdalabRenkanStateTransition` venant d'être créé. |
|
39 |
|
40 """ |
|
41 |
33 renkan_state = kwargs.get('instance', None) |
42 renkan_state = kwargs.get('instance', None) |
34 if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES: |
43 if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES: |
35 return |
44 return |
36 |
45 |
37 template_key = (renkan_state.from_state,renkan_state.to_state) |
46 template_key = (renkan_state.from_state,renkan_state.to_state) |
49 return |
58 return |
50 # except Exception as e: |
59 # except Exception as e: |
51 # logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e) |
60 # logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e) |
52 # return |
61 # return |
53 # raise e |
62 # raise e |
54 |
63 |
55 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: |
64 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: |
56 logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt) |
65 logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt) |
57 emsg = EmailMultiAlternatives(subject, msg_txt, settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email]) |
66 emsg = EmailMultiAlternatives(subject, msg_txt, settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email]) |
58 emsg.attach_alternative(msg_html, "text/html") |
67 emsg.attach_alternative(msg_html, "text/html") |
59 emsg.send(fail_silently=True) |
68 emsg.send(fail_silently=True) |
60 |
69 |
61 |
70 |
62 def queue_renkan_rendering(sender, **kwargs): |
71 def queue_renkan_rendering(sender, **kwargs): |
|
72 """ |
|
73 Gère le calcul et l'effacement de la miniature d'un renkan en fonction de sont statut. |
|
74 - Si un renkan était publié et change d'état, la miniature est effacée. |
|
75 - Si un renkan devient publié, une demande de calcul de miniature est mise en file d'attente (c.f. :func:`hdalab.tasks.capture_preview`). |
|
76 |
|
77 :param:instance: l'objet :class:`hdalab.models.renkan.HdalabRenkanStateTransition` venant d'être créé. |
|
78 """ |
63 renkan_state = kwargs.get('instance', None) |
79 renkan_state = kwargs.get('instance', None) |
64 if not renkan_state: |
80 if not renkan_state: |
65 return |
81 return |
66 |
82 |
67 if renkan_state.from_state == HdalabRenkan.PUBLISHED and renkan_state.renkan.renkan.image != settings.DEFAULT_RENKAN_ICON: |
83 if renkan_state.from_state == HdalabRenkan.PUBLISHED and renkan_state.renkan.renkan.image != settings.DEFAULT_RENKAN_ICON: |
68 if renkan_state.renkan.renkan.image: |
84 if renkan_state.renkan.renkan.image: |
69 renkan_state.renkan.renkan.image.delete(False) |
85 renkan_state.renkan.renkan.image.delete(False) |
70 renkan_state.renkan.renkan.image.delete_thumbnails() |
86 renkan_state.renkan.renkan.image.delete_thumbnails() |
71 renkan_state.renkan.renkan.image = settings.DEFAULT_RENKAN_ICON |
87 renkan_state.renkan.renkan.image = settings.DEFAULT_RENKAN_ICON |
73 elif renkan_state.to_state == HdalabRenkan.PUBLISHED: |
89 elif renkan_state.to_state == HdalabRenkan.PUBLISHED: |
74 from hdalab.tasks import capture_preview |
90 from hdalab.tasks import capture_preview |
75 capture_preview.delay(renkan_state.renkan.renkan.rk_id) # @UndefinedVariable |
91 capture_preview.delay(renkan_state.renkan.renkan.rk_id) # @UndefinedVariable |
76 |
92 |
77 def renkan_delete_image(sender, **kwargs): |
93 def renkan_delete_image(sender, **kwargs): |
|
94 """ |
|
95 Efface la miniature d'un renkan si celui-ci est effacé. |
|
96 |
|
97 :param:instance: l'objet :class:`renkanmanager.models.Renkan` qui va être effacé. |
|
98 |
|
99 """ |
78 renkan = kwargs.get('instance', None) |
100 renkan = kwargs.get('instance', None) |
79 if not renkan or not renkan.image or renkan.image == settings.DEFAULT_RENKAN_ICON: |
101 if not renkan or not renkan.image or renkan.image == settings.DEFAULT_RENKAN_ICON: |
80 return |
102 return |
81 renkan.image.delete(False) |
103 renkan.image.delete(False) |
82 renkan.image.delete_thumbnails() |
104 renkan.image.delete_thumbnails() |
83 |
105 |
84 |
106 |
85 RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b" |
107 RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b" |
86 RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f" |
108 RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f" |
87 RENKAN_DELETE_UUID = "09c23ca2-4d59-4c29-b94a-2c2672d5a89b" |
109 RENKAN_DELETE_UUID = "09c23ca2-4d59-4c29-b94a-2c2672d5a89b" |
88 |
110 |
89 post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID) |
111 post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID) |