From: hernani Date: Tue, 1 Jun 2010 14:42:17 +0000 (+0000) Subject: Converted the new question notification template. X-Git-Tag: live~781 X-Git-Url: https://git.openstreetmap.org./osqa.git/commitdiff_plain/5f47561def34f5a8a807e6e0cca5ccc4ca6a87a2 Converted the new question notification template. git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@351 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- diff --git a/forum/models/user.py b/forum/models/user.py index 62eeac3..339c02d 100644 --- a/forum/models/user.py +++ b/forum/models/user.py @@ -158,7 +158,7 @@ class User(BaseModel, DjangoUser): def get_vote_count_today(self): today = datetime.date.today() return self.actions.filter(canceled=False, action_type__in=("voteup", "votedown"), - action_date__range=(today - datetime.timedelta(days=1), today)).count() + action_date__gte=(today - datetime.timedelta(days=1))).count() def get_reputation_by_upvoted_today(self): today = datetime.datetime.now() @@ -170,7 +170,7 @@ class User(BaseModel, DjangoUser): def get_flagged_items_count_today(self): today = datetime.date.today() return self.actions.filter(canceled=False, action_type="flag", - action_date__range=(today - datetime.timedelta(days=1), today)).count() + action_date__gte=(today - datetime.timedelta(days=1))).count() @true_if_is_super_or_staff def can_view_deleted_post(self, post): diff --git a/forum/skins/default/templates/notifications/base.html b/forum/skins/default/templates/notifications/base.html new file mode 100644 index 0000000..9783bc7 --- /dev/null +++ b/forum/skins/default/templates/notifications/base.html @@ -0,0 +1,49 @@ +{% load extra_filters extra_tags i18n email_tags %} + +{% declare %} + logo_location := os.path.join(str(settings.UPFILES_FOLDER), os.path.basename(str(settings.APP_LOGO))) +{% enddeclare %} +{% embedmedia logo_location as logo %} + + + + + + + + {{settings.APP_TITLE}} logo + +
+

{{ settings.APP_TITLE }}

+

+
+
+
+ {% block content%} + {% endblock%} +
+
+
+
+ + \ No newline at end of file diff --git a/forum/skins/default/templates/notifications/newquestion.html b/forum/skins/default/templates/notifications/newquestion.html index a549716..b0ee0f0 100644 --- a/forum/skins/default/templates/notifications/newquestion.html +++ b/forum/skins/default/templates/notifications/newquestion.html @@ -1,27 +1,54 @@ -{% extends "email_base.html" %} -{% load i18n %} -{% load extra_tags %} +{% load i18n extra_tags email_tags %} -{% block content %} -

{% trans "Hello" %} {% user_var username %},

+{% declare %} + prefix = settings.EMAIL_SUBJECT_PREFIX + app_name = settings.APP_SHORT_NAME + question_author = question.author.username + app_url = settings.APP_URL + question_url = question.get_absolute_url() + question_title = question.title + question_tags = question.tagnames +{% enddeclare %} -

- {% blocktrans with question.author.username as author_name and settings.APP_SHORT_NAME as app_title and settings.APP_URL as app_url and question.get_absolute_url as question_url and question.title as question_title and question.tagnames as question_tags %} - {{ author_name }} has just posted a new question on {{ app_title }}, with title - {{ question_title }} and tagged {{ question_tags }}: +{% email %} + {% subject %}{% blocktrans %}{{ prefix }} New question on {{ app_name }}{% endblocktrans %}{% endsubject %} + + {% htmlcontent notifications/base.html %} +

{% trans "Hello" %} {{ recipient.username }},

+ +

+ {% blocktrans %} + {{ question_author }} has just posted a new question on {{ app_name }}, with title + {{ question_title }} and tagged {{ question_tags }}: + {% endblocktrans %} +

+ +
+ {{ question.html|safe }} +
+ +

{% trans "Don't forget to come over and cast your vote." %}

+ +

{% blocktrans %}Sincerely,
+ Forum Administrator{% endblocktrans %}

+ {% endhtmlcontent %} + + {% textcontent %} + {% trans "Hello" %} {{ recipient.username }} + + {% blocktrans %} + {{ question_author }} has just posted a new question on {{ app_name }}, with title + "{{ question_title }}" and tagged {{ question_tags }}: {% endblocktrans %} -

-
- {{ question.html|safe }} -
-

- {% blocktrans %} - Don't forget to come over and cast your vote. - {% endblocktrans %} -

+ {{ question.body|safe }} + + + {% trans "Don't forget to come over and cast your vote." %} + + {% blocktrans %}Sincerely, + Forum Administrator{% endblocktrans %} + {% endtextcontent %} +{% endemail %} -

{% blocktrans %}Sincerely,
- Forum Administrator{% endblocktrans %}

-{% endblock %} diff --git a/forum/subscriptions.py b/forum/subscriptions.py index 1ee99e3..c808ce9 100644 --- a/forum/subscriptions.py +++ b/forum/subscriptions.py @@ -2,7 +2,7 @@ import os import re import datetime from forum.models import User, Question, Comment, QuestionSubscription, SubscriptionSettings, Answer -from forum.utils.mail import send_email +from forum.utils.mail import send_email, send_template_email from django.utils.translation import ugettext as _ from forum.actions import AskAction, AnswerAction, CommentAction, AcceptAnswerAction, UserJoinsAction, QuestionViewAction from forum import settings @@ -24,19 +24,21 @@ def create_recipients_dict(usr_list): def question_posted(action, new): question = action.node - subscribers = User.objects.values('email', 'username').filter( + subscribers = User.objects.filter( Q(subscription_settings__enable_notifications=True, subscription_settings__new_question='i') | (Q(subscription_settings__new_question_watched_tags='i') & Q(marked_tags__name__in=question.tagnames.split(' ')) & Q(tag_selections__reason='good')) ).exclude(id=question.author.id).distinct() - recipients = create_recipients_dict(subscribers) + #recipients = create_recipients_dict(subscribers) - send_email(settings.EMAIL_SUBJECT_PREFIX + _("New question on %(app_name)s") % dict(app_name=settings.APP_SHORT_NAME), - recipients, "notifications/newquestion.html", { - 'question': question, - }) + send_template_email(subscribers, "notifications/newquestion.html", {'question': question}) + + #send_email(settings.EMAIL_SUBJECT_PREFIX + _("New question on %(app_name)s") % dict(app_name=settings.APP_SHORT_NAME), + # recipients, "notifications/newquestion.html", { + # 'question': question, + #}) if question.author.subscription_settings.questions_asked: subscription = QuestionSubscription(question=question, user=question.author) diff --git a/forum/templatetags/email_tags.py b/forum/templatetags/email_tags.py index bb21973..b289837 100644 --- a/forum/templatetags/email_tags.py +++ b/forum/templatetags/email_tags.py @@ -1,5 +1,6 @@ from django import template from forum import settings +from forum.utils.mail import create_and_send_mail_messages register = template.Library() @@ -17,7 +18,7 @@ class MultiUserMailMessage(template.Node): self.nodelist.render(context) messages.append((recipient, context['subject'], context['htmlcontent'], context['textcontent'], context['embeddedmedia'])) - create_mail_messages(messages) + create_and_send_mail_messages(messages) @register.tag def email(parser, token): @@ -90,65 +91,9 @@ def embedmedia(parser, token): return EmbedMediaNode(location, alias) -from email.mime.multipart import MIMEMultipart -from email.mime.text import MIMEText -from email.mime.image import MIMEImage -from django.core.mail import DNS_NAME -from smtplib import SMTP -import email.Charset -import socket -def create_mail_messages(messages): - sender = '%s <%s>' % (unicode(settings.APP_SHORT_NAME), unicode(settings.DEFAULT_FROM_EMAIL)) - - connection = SMTP(str(settings.EMAIL_HOST), str(settings.EMAIL_PORT), - local_hostname=DNS_NAME.get_fqdn()) - - try: - if (bool(settings.EMAIL_USE_TLS)): - connection.ehlo() - connection.starttls() - connection.ehlo() - - if settings.EMAIL_HOST_USER and settings.EMAIL_HOST_PASSWORD: - connection.login(str(settings.EMAIL_HOST_USER), str(settings.EMAIL_HOST_PASSWORD)) - - if sender is None: - sender = str(settings.DEFAULT_FROM_EMAIL) - - for recipient, subject, html, text, media in messages: - msgRoot = MIMEMultipart('related') - msgRoot['Subject'] = subject - msgRoot['From'] = sender - msgRoot['To'] = '%s <%s>' % (recipient.username, recipient.email) - msgRoot.preamble = 'This is a multi-part message from %s.' % unicode(settings.APP_SHORT_NAME).encode('utf8') - - msgAlternative = MIMEMultipart('alternative') - msgRoot.attach(msgAlternative) - - msgAlternative.attach(MIMEText(text, _charset='utf-8')) - msgAlternative.attach(MIMEText(html, 'html', _charset='utf-8')) - - for alias, location in media.items(): - fp = open(location, 'rb') - msgImage = MIMEImage(fp.read()) - fp.close() - msgImage.add_header('Content-ID', '<'+alias+'>') - msgRoot.attach(msgImage) - - try: - connection.sendmail(sender, [recipient.email], msgRoot.as_string()) - except Exception, e: - pass - - try: - connection.quit() - except socket.sslerror: - connection.close() - except Exception, e: - print e diff --git a/forum/utils/mail.py b/forum/utils/mail.py index 4d11f85..8c80f53 100644 --- a/forum/utils/mail.py +++ b/forum/utils/mail.py @@ -2,9 +2,9 @@ import email import socket import os -from email.MIMEMultipart import MIMEMultipart -from email.MIMEText import MIMEText -from email.MIMEImage import MIMEImage +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.mime.image import MIMEImage from django.core.mail import DNS_NAME from smtplib import SMTP @@ -130,4 +130,60 @@ def send_email(subject, recipients, template, context={}, sender=None, images=[] thread.setDaemon(True) thread.start() else: - send_msg_list(msgs) \ No newline at end of file + send_msg_list(msgs) + + +def send_template_email(recipients, template, context): + t = loader.get_template(template) + context.update(dict(recipients=recipients, settings=settings)) + t.render(Context(context)) + +def create_and_send_mail_messages(messages): + sender = '%s <%s>' % (unicode(settings.APP_SHORT_NAME), unicode(settings.DEFAULT_FROM_EMAIL)) + + connection = SMTP(str(settings.EMAIL_HOST), str(settings.EMAIL_PORT), + local_hostname=DNS_NAME.get_fqdn()) + + try: + if (bool(settings.EMAIL_USE_TLS)): + connection.ehlo() + connection.starttls() + connection.ehlo() + + if settings.EMAIL_HOST_USER and settings.EMAIL_HOST_PASSWORD: + connection.login(str(settings.EMAIL_HOST_USER), str(settings.EMAIL_HOST_PASSWORD)) + + if sender is None: + sender = str(settings.DEFAULT_FROM_EMAIL) + + for recipient, subject, html, text, media in messages: + msgRoot = MIMEMultipart('related') + msgRoot['Subject'] = subject + msgRoot['From'] = sender + msgRoot['To'] = '%s <%s>' % (recipient.username, recipient.email) + msgRoot.preamble = 'This is a multi-part message from %s.' % unicode(settings.APP_SHORT_NAME).encode('utf8') + + msgAlternative = MIMEMultipart('alternative') + msgRoot.attach(msgAlternative) + + msgAlternative.attach(MIMEText(text, _charset='utf-8')) + msgAlternative.attach(MIMEText(html, 'html', _charset='utf-8')) + + for alias, location in media.items(): + fp = open(location, 'rb') + msgImage = MIMEImage(fp.read()) + fp.close() + msgImage.add_header('Content-ID', '<'+alias+'>') + msgRoot.attach(msgImage) + + try: + connection.sendmail(sender, [recipient.email], msgRoot.as_string()) + except Exception, e: + pass + + try: + connection.quit() + except socket.sslerror: + connection.close() + except Exception, e: + print e