src/hdalab/models/renkan.py
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--
Correct activation email
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
462
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
     1
# -*- coding: utf-8 -*-
295
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
     2
'''
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
     3
Created on Jul 17, 2014
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
     4
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
     5
@author: tc
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
     6
'''
462
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
     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
b1b5bc392a45 correct from email
ymh <ymh.work@gmail.com>
parents: 462
diff changeset
    11
from django.core.mail.message import EmailMultiAlternatives
295
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    12
from django.db import models
462
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    13
from django.db.models.signals import post_save
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    14
from django.template.base import TemplateDoesNotExist
466
b1b5bc392a45 correct from email
ymh <ymh.work@gmail.com>
parents: 462
diff changeset
    15
from django.template.loader import render_to_string
b1b5bc392a45 correct from email
ymh <ymh.work@gmail.com>
parents: 462
diff changeset
    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
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    18
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    19
462
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    20
logger = logging.getLogger(__name__)
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    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
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    23
    
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    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
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    27
    REJECTED = 4
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    28
      
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    29
    STATE_CHOICES = (
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    30
    (EDITION, 'edition'),
329
ea6268cf8c83 renkan state management for staff members : publish, unpublish, reject.
cavaliet
parents: 299
diff changeset
    31
    (MODERATED, 'moderated'),
295
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    32
    (PUBLISHED, 'published'),
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    33
    (REJECTED, 'rejected'),
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    34
    )
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    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
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    44
    state = models.IntegerField(choices=STATE_CHOICES, default=1)
473
f469ab22542d add favorite management
ymh <ymh.work@gmail.com>
parents: 466
diff changeset
    45
    favorite = models.BooleanField(null=False, blank=False, default=False)
295
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    46
    
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    47
    class Meta:
af29252631ac renkan object with thumbnail
cavaliet
parents:
diff changeset
    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
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    62
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    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
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    67
}
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    68
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    69
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    70
#TODO put into queue
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    71
def send_renkan_moderation_messages(sender, **kwargs):
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    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
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    74
        return
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    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
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    77
    msg_txt = ""
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    78
    msg_html = ""
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    79
    subject = ""
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    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
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    82
#        template = loader.get_template(template_name)
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    83
        context = {'renkan_state': renkan_state, 'WEB_URL': settings.WEB_URL}
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    84
        msg_html = render_to_string(template_name+".txt", context)
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    85
        msg_txt = render_to_string(template_name+".html", context)
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    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
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    88
        return
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    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
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    91
    
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    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:
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    93
        logger.debug("Sending following mail to %s : %s", renkan_state.renkan.renkan.owner.email, msg_txt)
466
b1b5bc392a45 correct from email
ymh <ymh.work@gmail.com>
parents: 462
diff changeset
    94
        emsg = EmailMultiAlternatives(subject, strip_tags(msg_txt), settings.DEFAULT_FROM_EMAIL, [renkan_state.renkan.renkan.owner.email])
462
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    95
        emsg.attach_alternative(msg_html, "text/html")
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    96
        emsg.send(fail_silently=True)
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    97
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    98
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
    99
def queue_renkan_rendering(sender, **kwargs):
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   100
    pass
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   101
    #check state
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   102
    #queue renkan for endering
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   103
    
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   104
    
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   105
RENKAN_MODERATION_UUID = "e2f84503-609b-4efa-819d-908e2efe7b1b"
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   106
RENKAN_RENDERING_UUID = "b8830748-be2b-479a-8aef-c8d952437b2f"
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   107
df8b3b49e81c correct bug and add email sending
ymh <ymh.work@gmail.com>
parents: 458
diff changeset
   108
post_save.connect(send_renkan_moderation_messages, sender=HdalabRenkanStateTransition, dispatch_uid=RENKAN_MODERATION_UUID)