src/cm/utils/mail.py
author Simon Descarpentries <sid@sopinspace.com>
Mon, 21 Oct 2013 16:37:07 +0200
changeset 553 bf26fb47a14c
parent 76 f35d85b2c760
permissions -rw-r--r--
To allow scrolling in Safari mobile, we set the content of text_view_comments frame in a jQuery UI layout. So the automated scrolling operations in c_sync.js must be adjustable to the right part to scroll. Also, if a comment have to be shown outside of the current viewport, we scroll the correct part to that viewport and then set the comment top Y offset to juste what it needs to avoid the "Add comment" button after scrolling operation. If not in Safari mobile, we add an offset here to avoid comment to display under the "Add comment" button.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
"""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Simple extension of django's EmailMessage to store emails in db
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
"""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
from cm.cm_settings import CM_EMAIL_SUBJECT_PREFIX
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
from cm.models import Email
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
from cm.utils.i18n import translate_to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
from django.conf import settings
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
from django.contrib.auth.models import User
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
from django.core.mail import EmailMessage as BaseEmailMessage
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
from django.template.loader import render_to_string
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
LIST_SEP = ' '
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
class EmailMessage(BaseEmailMessage):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
    def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
            connection=None, attachments=None, headers=None):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
        if CM_EMAIL_SUBJECT_PREFIX:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
            subject = CM_EMAIL_SUBJECT_PREFIX + subject
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
        BaseEmailMessage.__init__(self, subject, body, from_email, to, bcc, connection, attachments, headers)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
    def send(self, fail_silently=False):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
        # store in db
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
        Email.objects.create(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
                             from_email = self.from_email,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
                             to = LIST_SEP.join(self.to),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
                             bcc = LIST_SEP.join(self.bcc),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
                             body = self.body,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
                             subject = self.subject,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
                             message = self.message().as_string() 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
                             )
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        # then send for real
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        BaseEmailMessage.send(self,fail_silently)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
def send_mail(subject, message, from_email, recipient_list,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
              fail_silently=False, auth_user=None, auth_password=None):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
    Easy wrapper for django replacing of send_mail in django.core.mail
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
    # Email subject *must not* contain newlines
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
    subject = ''.join(subject.splitlines())
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
    msg = EmailMessage(subject=subject, body=message, from_email=from_email, to = recipient_list)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
    msg.send(fail_silently)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
def send_mail_in_language(subject, subject_vars, message_template, message_vars, from_email, recipient_list):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
    If obj in recipient_list is user: used preferred_language in profile to send the email
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
    for user_recipient in recipient_list:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        if type(user_recipient) == User:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
            lang_code = User.get_profile().preferred_language
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
            recipient = User.email
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
            lang_code = settings.LANGUAGE_CODE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
            recipient = user_recipient
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        processed_subject = translate_to(subject, lang_code) %subject_vars
76
f35d85b2c760 fix (not yet used) send_mail_in_language
raph
parents: 0
diff changeset
    58
        processed_message = translate_to(message_template, lang_code) %message_vars
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        send_mail(processed_subject, processed_message, from_email, recipient)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62