| author | ymh <ymh.work@gmail.com> |
| Fri, 06 Mar 2015 14:11:11 +0100 | |
| changeset 483 | b38e19b06ff6 |
| parent 474 | 7ec378cc1f8a |
| child 492 | 19220d52bce7 |
| permissions | -rw-r--r-- |
| 462 | 1 |
# -*- coding: utf-8 -*- |
| 295 | 2 |
''' |
3 |
Created on Jul 17, 2014 |
|
4 |
||
5 |
@author: tc |
|
6 |
''' |
|
| 462 | 7 |
import logging |
|
458
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
8 |
from renkanmanager.models import Renkan |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
9 |
|
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
10 |
from django.conf import settings |
| 466 | 11 |
from django.core.mail.message import EmailMultiAlternatives |
| 295 | 12 |
from django.db import models |
| 462 | 13 |
from django.db.models.signals import post_save |
14 |
from django.template.base import TemplateDoesNotExist |
|
| 466 | 15 |
from django.template.loader import render_to_string |
16 |
from django.utils.html import strip_tags |
|
|
329
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
17 |
from django.utils.translation import ugettext as _ |
| 295 | 18 |
|
19 |
||
| 462 | 20 |
logger = logging.getLogger(__name__) |
21 |
||
|
299
8e00641076e7
remove renkan management to an other django app (see renkan hg repo)
cavaliet
parents:
295
diff
changeset
|
22 |
class HdalabRenkan(models.Model): |
| 295 | 23 |
|
24 |
EDITION = 1 |
|
|
329
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
25 |
MODERATED = 2 |
|
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
26 |
PUBLISHED = 3 |
| 295 | 27 |
REJECTED = 4 |
28 |
||
29 |
STATE_CHOICES = ( |
|
30 |
(EDITION, 'edition'), |
|
|
329
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
31 |
(MODERATED, 'moderated'), |
| 295 | 32 |
(PUBLISHED, 'published'), |
33 |
(REJECTED, 'rejected'), |
|
34 |
) |
|
35 |
||
|
329
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
36 |
STATE_CHOICES_DICT = { |
|
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
37 |
EDITION: _('edition_state'), |
|
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
38 |
MODERATED: _('moderated_state'), |
|
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
39 |
PUBLISHED: _('published_state'), |
|
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
40 |
REJECTED: _('rejected_state') |
|
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
41 |
} |
|
ea6268cf8c83
renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents:
299
diff
changeset
|
42 |
|
|
299
8e00641076e7
remove renkan management to an other django app (see renkan hg repo)
cavaliet
parents:
295
diff
changeset
|
43 |
renkan = models.ForeignKey(Renkan, blank=False, null=False) |
| 295 | 44 |
state = models.IntegerField(choices=STATE_CHOICES, default=1) |
| 473 | 45 |
favorite = models.BooleanField(null=False, blank=False, default=False) |
| 295 | 46 |
|
47 |
class Meta: |
|
48 |
app_label = 'hdalab' |
|
|
458
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
49 |
|
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
50 |
|
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
51 |
class HdalabRenkanStateTransition(models.Model): |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
52 |
|
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
53 |
renkan = models.ForeignKey(HdalabRenkan, blank=False, null=False) |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
54 |
from_state = models.IntegerField(choices=HdalabRenkan.STATE_CHOICES, default=1, blank=False, null=False) |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
55 |
to_state = models.IntegerField(choices=HdalabRenkan.STATE_CHOICES, default=1, blank=False, null=False) |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
56 |
ts = models.DateTimeField(auto_now_add=True, blank=False, null=False) |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
57 |
message = models.TextField(blank=True, null=True) |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
58 |
author = models.ForeignKey(settings.AUTH_USER_MODEL, blank=False, null=False) |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
59 |
|
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
60 |
class Meta: |
|
604b887e70c3
add state history to renkan, correct get into post, generally prepare ground for mail management
ymh <ymh.work@gmail.com>
parents:
329
diff
changeset
|
61 |
app_label = 'hdalab' |
| 462 | 62 |
|
63 |
MAIL_TEMPLATES = { |
|
|
474
7ec378cc1f8a
add message to moderation for reject and unpublish
ymh <ymh.work@gmail.com>
parents:
473
diff
changeset
|
64 |
(HdalabRenkan.MODERATED,HdalabRenkan.PUBLISHED): ("mails/published_renkan", "Renkan publié"), |
|
7ec378cc1f8a
add message to moderation for reject and unpublish
ymh <ymh.work@gmail.com>
parents:
473
diff
changeset
|
65 |
(HdalabRenkan.MODERATED,HdalabRenkan.REJECTED): ("mails/rejected_renkan", "Renkan rejeté"), |
|
7ec378cc1f8a
add message to moderation for reject and unpublish
ymh <ymh.work@gmail.com>
parents:
473
diff
changeset
|
66 |
(HdalabRenkan.PUBLISHED, HdalabRenkan.EDITION): ("mails/unpublished_renkan", "Renkan dépublié"), |
| 462 | 67 |
} |
68 |
||
69 |
||
70 |
#TODO put into queue |
|
71 |
def send_renkan_moderation_messages(sender, **kwargs): |
|
72 |
renkan_state = kwargs.get('instance', None) |
|
|
474
7ec378cc1f8a
add message to moderation for reject and unpublish
ymh <ymh.work@gmail.com>
parents:
473
diff
changeset
|
73 |
if not renkan_state or (renkan_state.from_state,renkan_state.to_state) not in MAIL_TEMPLATES: |
| 462 | 74 |
return |
75 |
||
|
474
7ec378cc1f8a
add message to moderation for reject and unpublish
ymh <ymh.work@gmail.com>
parents:
473
diff
changeset
|
76 |
template_key = (renkan_state.from_state,renkan_state.to_state) |
| 462 | 77 |
msg_txt = "" |
78 |
msg_html = "" |
|
79 |
subject = "" |
|
80 |
try: |
|
|
474
7ec378cc1f8a
add message to moderation for reject and unpublish
ymh <ymh.work@gmail.com>
parents:
473
diff
changeset
|
81 |
template_name, subject = MAIL_TEMPLATES[template_key] |
| 462 | 82 |
# template = loader.get_template(template_name) |
83 |
context = {'renkan_state': renkan_state, 'WEB_URL': settings.WEB_URL} |
|
84 |
msg_html = render_to_string(template_name+".txt", context) |
|
85 |
msg_txt = render_to_string(template_name+".html", context) |
|
86 |
except TemplateDoesNotExist: |
|
|
474
7ec378cc1f8a
add message to moderation for reject and unpublish
ymh <ymh.work@gmail.com>
parents:
473
diff
changeset
|
87 |
logger.error("Mail template %s for state %s not found", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state]) |
| 462 | 88 |
return |
89 |
except Exception as e: |
|
|
474
7ec378cc1f8a
add message to moderation for reject and unpublish
ymh <ymh.work@gmail.com>
parents:
473
diff
changeset
|
90 |
logger.error("Error rendering template %s for state %s : %r", MAIL_TEMPLATES[template_key], HdalabRenkan.STATE_CHOICES_DICT[renkan_state.to_state], e) |
| 462 | 91 |
|
92 |
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: |
|
93 |
logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt) |
|
| 466 | 94 |
emsg = EmailMultiAlternatives(subject, strip_tags(msg_txt), settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email]) |
| 462 | 95 |
emsg.attach_alternative(msg_html, "text/html") |
96 |
emsg.send(fail_silently=True) |
|
97 |
||
98 |
||
99 |
def queue_renkan_rendering(sender, **kwargs): |
|
100 |
pass |
|
101 |
#check state |
|
102 |
#queue renkan for endering |
|
103 |
||
104 |
||
105 |
RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b" |
|
106 |
RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f" |
|
107 |
||
108 |
post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID) |