# HG changeset patch # User ymh # Date 1425102048 -3600 # Node ID df8b3b49e81ce4a43f4d1edf892ab213a809029b # Parent 65fc0c646d7488494b5e7b7bee93b4cf2391559b correct bug and add email sending diff -r 65fc0c646d74 -r df8b3b49e81c .settings/org.eclipse.core.resources.prefs --- a/.settings/org.eclipse.core.resources.prefs Fri Feb 27 02:27:31 2015 +0100 +++ b/.settings/org.eclipse.core.resources.prefs Sat Feb 28 06:40:48 2015 +0100 @@ -61,6 +61,7 @@ encoding//src/hdalab/migrations/0013_auto__chg_field_dbpediafields_tag__add_unique_tagyears_tag.py=utf-8 encoding//src/hdalab/migrations/0014_auto__add_hdalabrenkanstatetransition__chg_field_dbpediafields_tag.py=utf-8 encoding//src/hdalab/models/dataviz.py=utf-8 +encoding//src/hdalab/models/renkan.py=utf-8 encoding//src/hdalab/services.py=utf-8 encoding//src/hdalab/settings.py=utf-8 encoding//src/hdalab/urls.py=utf-8 diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/models/renkan.py --- a/src/hdalab/models/renkan.py Fri Feb 27 02:27:31 2015 +0100 +++ b/src/hdalab/models/renkan.py Sat Feb 28 06:40:48 2015 +0100 @@ -1,15 +1,27 @@ +# -*- coding: utf-8 -*- ''' Created on Jul 17, 2014 @author: tc ''' +import logging from renkanmanager.models import Renkan from django.conf import settings +from django.core.mail import send_mail from django.db import models +from django.db.models.signals import post_save +from django.template import loader +from django.template.base import TemplateDoesNotExist +from django.template.context import Context from django.utils.translation import ugettext as _ +from django.template.loader import render_to_string +from django.core.mail.message import EmailMultiAlternatives +from django.utils.html import strip_tags +logger = logging.getLogger(__name__) + class HdalabRenkan(models.Model): EDITION = 1 @@ -49,3 +61,48 @@ class Meta: app_label = 'hdalab' + +MAIL_TEMPLATES = { + HdalabRenkan.PUBLISHED: ("mails/published_renkan", "Renkan publié"), + HdalabRenkan.REJECTED: ("mails/rejected_renkan", "Renkan rejeté") +} + + +#TODO put into queue +def send_renkan_moderation_messages(sender, **kwargs): + renkan_state = kwargs.get('instance', None) + if not renkan_state or renkan_state.to_state not in MAIL_TEMPLATES: + return + + msg_txt = "" + msg_html = "" + subject = "" + try: + template_name, subject = MAIL_TEMPLATES[renkan_state.to_state] +# 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[renkan_state.to_state], 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[renkan_state.to_state], 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.ADMINS[0][1], [renkan_state.renkan.renkan.owner.email]) + emsg.attach_alternative(msg_html, "text/html") + emsg.send(fail_silently=True) + + +def queue_renkan_rendering(sender, **kwargs): + pass + #check state + #queue renkan for endering + + +RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b" +RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f" + +post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID) diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/services.py --- a/src/hdalab/services.py Fri Feb 27 02:27:31 2015 +0100 +++ b/src/hdalab/services.py Sat Feb 28 06:40:48 2015 +0100 @@ -4,9 +4,15 @@ @author: ymh ''' +import logging + from django.db import transaction + from hdalab.models.renkan import HdalabRenkanStateTransition + +logger = logging.getLogger(__name__) + @transaction.atomic def change_renkan_state(hda_renkan, state, message=None, author=None): @@ -14,4 +20,5 @@ HdalabRenkanStateTransition.objects.create(renkan=hda_renkan, from_state=hda_renkan.state, to_state=state, message=message, author=author) hda_renkan.state = state - hda_renkan.save() \ No newline at end of file + hda_renkan.save() + diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/templates/editorial/manage_renkans.html --- a/src/hdalab/templates/editorial/manage_renkans.html Fri Feb 27 02:27:31 2015 +0100 +++ b/src/hdalab/templates/editorial/manage_renkans.html Sat Feb 28 06:40:48 2015 +0100 @@ -76,7 +76,7 @@ {% if hr.state == 2 or hr.state == 4 %} {% else %}{% endif %} - {% if hr.state != 4 %}{% endif %} + {% if hr.state != 4 %}{% endif %} diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/templates/mails/published_renkan.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hdalab/templates/mails/published_renkan.html Sat Feb 28 06:40:48 2015 +0100 @@ -0,0 +1,210 @@ + + + + + + +Renkan publié + + + + + + + + + + + + +
+ + +
+ + + + +
+

Bonjour,

+

Votre Renkan intitulé {{ renkan_state.renkan.renkan.title}} a été publié.

+

Vous pouvez le retrouver à l'url suivante: {{WEB_URL}}{% url 'renkan_view' %}?rk_id={{ renkan_state.renkan.renkan.rk_id }}.

+
+
+ + +
+ + + + \ No newline at end of file diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/templates/mails/published_renkan.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hdalab/templates/mails/published_renkan.txt Sat Feb 28 06:40:48 2015 +0100 @@ -0,0 +1,4 @@ +Bonjour, + +Votre Renkan intitulé {{ renkan_state.renkan.renkan.title}} a été publié. +Vous pouvez le retrouver à l'url suivante: {{WEB_URL}}{% url 'renkan_view' %}?rk_id={{ renkan_state.renkan.renkan.rk_id }} diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/templates/mails/rejected_renkan.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hdalab/templates/mails/rejected_renkan.html Sat Feb 28 06:40:48 2015 +0100 @@ -0,0 +1,213 @@ + + + + + + +Renkan rejeté + + + + + + + + + + + + +
+ + +
+ + + + +
+

Bonjour,

+

Votre Renkan intitulé {{ renkan_state.renkan.renkan.title}} a été rejeté.

+ {% if renkan_state.message %} +

Avec le message suivant : {{ renkan_state.message }}

+ {% endif %} +

+
+
+ + +
+ + + + \ No newline at end of file diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/templates/mails/rejected_renkan.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hdalab/templates/mails/rejected_renkan.txt Sat Feb 28 06:40:48 2015 +0100 @@ -0,0 +1,5 @@ +Bonjour, +Votre Renkan intitulé {{ renkan_state.renkan.renkan.title}} a été rejeté. +{% if renkan_state.message %} +Avec le message suivant : {{ renkan_state.message }} +{% endif %} \ No newline at end of file diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/utils.py --- a/src/hdalab/utils.py Fri Feb 27 02:27:31 2015 +0100 +++ b/src/hdalab/utils.py Sat Feb 28 06:40:48 2015 +0100 @@ -20,4 +20,13 @@ cache_key = cache_key[:(250-(2+len(cache.key_prefix)+len(str(cache.version)))-33)] + '-' + hashlib.md5(cache_key).hexdigest() return cache_key - \ No newline at end of file +# +# from : http://cs.stackexchange.com/a/10321 +# +def toDigits(n, b): + """Convert a positive number n to its digit representation in base b.""" + digits = [] + while n > 0: + digits.insert(0, n % b) + n = n // b + return digits \ No newline at end of file diff -r 65fc0c646d74 -r df8b3b49e81c src/hdalab/views/editorial.py --- a/src/hdalab/views/editorial.py Fri Feb 27 02:27:31 2015 +0100 +++ b/src/hdalab/views/editorial.py Sat Feb 28 06:40:48 2015 +0100 @@ -17,7 +17,7 @@ template_name = "editorial/manage_renkans.html" def get_context_data(self, **kwargs): - return self.update_context(super(ManageRenkans, self).get_context_data(**kwargs), HdalabRenkan.objects.exclude(state=HdalabRenkan.EDITION).select_related("renkan", "renkan__owner")) + return self.update_context(super(ManageRenkans, self).get_context_data(**kwargs), HdalabRenkan.objects.exclude(state=HdalabRenkan.EDITION).exclude(state=HdalabRenkan.REJECTED).select_related("renkan", "renkan__owner")) class HdalabFolders(Folders):