summaryrefslogtreecommitdiffstats
path: root/group_messaging
diff options
context:
space:
mode:
Diffstat (limited to 'group_messaging')
-rw-r--r--group_messaging/models.py46
-rw-r--r--group_messaging/tests.py12
2 files changed, 52 insertions, 6 deletions
diff --git a/group_messaging/models.py b/group_messaging/models.py
index a34e4690..91e4a52e 100644
--- a/group_messaging/models.py
+++ b/group_messaging/models.py
@@ -1,11 +1,17 @@
"""models for the ``group_messaging`` app
"""
+import copy
import datetime
+import urllib
+from askbot.mail import send_mail #todo: remove dependency?
from coffin.template.loader import get_template
from django.db import models
from django.db.models import signals
+from django.conf import settings as django_settings
from django.contrib.auth.models import Group
from django.contrib.auth.models import User
+from django.contrib.sites.models import Site
+from django.utils.importlib import import_module
from django.utils.translation import ugettext as _
MAX_HEADLINE_LENGTH = 80
@@ -321,6 +327,24 @@ class Message(models.Model):
sender_list, created = SenderList.objects.get_or_create(recipient=recipient)
sender_list.senders.add(self.sender)
+ def get_absolute_url(self, user=None, include_domain_name=False):
+ """returns absolute url to the thread"""
+ assert(user != None)
+ settings = django_settings.GROUP_MESSAGING
+ func_path = settings['base_url_getter_function']
+ path_bits = func_path.split('.')
+ url_getter = getattr(
+ import_module('.'.join(path_bits[:-1])),
+ path_bits[-1]
+ )
+ params = copy.copy(settings['base_url_params'])
+ params['thread_id'] = self.id
+ url = url_getter(user) + '?' + urllib.urlencode(params)
+ if include_domain_name:
+ site = Site.objects.get_current()
+ url = 'http://' + site.domain + url
+ return url
+
def get_email_subject_line(self):
"""forms subject line based on the root message
and prepends 'Re': if message is non-root
@@ -355,13 +379,25 @@ class Message(models.Model):
def send_email_alert(self):
"""signal handler for the message post-save"""
- subject = self.get_email_subject_line()
- template = get_template('group_messaging/email_alert.html')
+ root_message = self.get_root_message()
data = {'messages': self.get_timeline()}
+ template = get_template('group_messaging/email_alert.html')
body_text = template.render(data)
- recipients = map(lambda v: v.email, self.get_recipients_users())
- from askbot.mail import send_mail
- send_mail(recipient_list=recipients, subject_line=subject, body_text=body_text)
+ subject = self.get_email_subject_line()
+ for user in self.get_recipients_users():
+ #todo change url scheme so that all users have the same
+ #urls within their personal areas of the user profile
+ #so that we don't need to have loops like this one
+ thread_url = root_message.get_absolute_url(
+ user, include_domain_name=True
+ ).replace('&', '&')
+ #in the template we have a placeholder to be replaced like this:
+ body_text = body_text.replace('THREAD_URL_HOLE', thread_url)
+ send_mail(
+ recipient_list=[user.email,],
+ subject_line=subject,
+ body_text=body_text
+ )
def update_senders_info(self):
diff --git a/group_messaging/tests.py b/group_messaging/tests.py
index f0a2dc5c..61b2dbbf 100644
--- a/group_messaging/tests.py
+++ b/group_messaging/tests.py
@@ -1,3 +1,6 @@
+import time
+import urlparse
+from bs4 import BeautifulSoup
from django.test import TestCase
from django.contrib.auth.models import User, Group
from group_messaging.models import Message
@@ -8,7 +11,6 @@ from group_messaging.models import get_personal_group
from group_messaging.models import create_personal_group
from group_messaging.views import ThreadsList
from mock import Mock
-import time
MESSAGE_TEXT = 'test message text'
@@ -282,6 +284,14 @@ class ModelsTests(GroupMessagingTests):
self.assertEqual(len(outbox), 1)
self.assertEqual(len(outbox[0].recipients()), 1)
self.assertEqual(outbox[0].recipients()[0], self.recipient.email)
+ html_message = outbox[0].alternatives[0][0]
+ self.assertTrue(root.text in html_message)
+ soup = BeautifulSoup(html_message)
+ links = soup.find_all('a', attrs={'class': 'thread-link'})
+ self.assertEqual(len(links), 1)
+ parse_result = urlparse.urlparse(links[0]['href'])
+ query = urlparse.parse_qs(parse_result.query.replace('&', '&'))
+ self.assertEqual(query['thread_id'][0], str(root.id))
def test_get_sent_threads(self):
root1, re11, re12 = self.setup_three_message_thread()