diff options
author | Aurélien Bompard <aurelien@bompard.org> | 2013-04-24 15:31:39 +0200 |
---|---|---|
committer | Aurélien Bompard <aurelien@bompard.org> | 2013-04-24 15:31:39 +0200 |
commit | f4cf3aa93f23e04b20ef783fcdb0b3c0388e6d34 (patch) | |
tree | fb11750ec86521de64044b43dd4b77998122af5b | |
parent | 16497ae38af476515e1d28b6047affa0c5639743 (diff) | |
download | hyperkitty-f4cf3aa93f23e04b20ef783fcdb0b3c0388e6d34.tar.gz hyperkitty-f4cf3aa93f23e04b20ef783fcdb0b3c0388e6d34.tar.xz hyperkitty-f4cf3aa93f23e04b20ef783fcdb0b3c0388e6d34.zip |
Subscribe the user when replying or posting
-rw-r--r-- | hyperkitty/lib/__init__.py | 33 | ||||
-rw-r--r-- | hyperkitty/views/message.py | 24 | ||||
-rw-r--r-- | hyperkitty/views/pages.py | 3 |
3 files changed, 36 insertions, 24 deletions
diff --git a/hyperkitty/lib/__init__.py b/hyperkitty/lib/__init__.py index 3aa73fa..017a0b6 100644 --- a/hyperkitty/lib/__init__.py +++ b/hyperkitty/lib/__init__.py @@ -24,6 +24,9 @@ from hashlib import md5 import datetime from django.conf import settings +from django.core.exceptions import SuspiciousOperation +from django.core.mail import EmailMessage +from mailmanclient import Client @@ -92,3 +95,33 @@ def get_display_dates(year, month, day): def daterange(start_date, end_date): for n in range(int((end_date - start_date).days)): yield start_date + datetime.timedelta(n) + + +def post_to_list(request, mlist, subject, message, headers={}): + if not mlist: + # Make sure the list exists to avoid posting to any email addess + raise SuspiciousOperation("I don't know this mailing-list") + # Check that the user is subscribed + client = Client('%s/3.0' % settings.MAILMAN_REST_SERVER, + settings.MAILMAN_API_USER, settings.MAILMAN_API_PASS) + rest_list = client.get_list(mlist.name) + try: + member = rest_list.get_member(request.user.email) + except ValueError: + # not subscribed yet, subscribe the user without email delivery + member = rest_list.subscribe(request.user.email, + "%s %s" % (request.user.first_name, request.user.last_name)) + member.preferences["delivery_status"] = "by_user" + member.preferences.save() + # send the message + headers["User-Agent"] = "HyperKitty on %s" % request.build_absolute_uri("/") + msg = EmailMessage( + subject=subject, + body=message, + from_email='"%s %s" <%s>' % + (request.user.first_name, request.user.last_name, + request.user.email), + to=[mlist.name], + headers=headers, + ) + msg.send() diff --git a/hyperkitty/views/message.py b/hyperkitty/views/message.py index 32467f9..0cc6134 100644 --- a/hyperkitty/views/message.py +++ b/hyperkitty/views/message.py @@ -29,12 +29,11 @@ from django.http import HttpResponse, Http404 from django.shortcuts import redirect, render from django.conf import settings from django.core.urlresolvers import reverse -from django.core.mail import EmailMessage from django.core.exceptions import SuspiciousOperation from django.template import RequestContext, loader from django.contrib.auth.decorators import login_required -from hyperkitty.lib import get_store, get_months +from hyperkitty.lib import get_store, get_months, post_to_list from hyperkitty.lib.voting import set_message_votes from hyperkitty.models import Rating from forms import SearchForm, ReplyForm, PostForm @@ -162,7 +161,7 @@ def reply(request, mlist_fqdn, message_id_hash): subject = message.subject if not message.subject.lower().startswith("re:"): subject = "Re: %s" % subject - _send_email(request, mlist, subject, form.cleaned_data["message"], { + post_to_list(request, mlist, subject, form.cleaned_data["message"], { "In-Reply-To": "<%s>" % message.message_id, "References": "<%s>" % message.message_id, }) @@ -180,7 +179,7 @@ def new_message(request, mlist_fqdn): if request.method == 'POST': form = PostForm(request.POST) if form.is_valid(): - _send_email(request, mlist, form.cleaned_data['subject'], + post_to_list(request, mlist, form.cleaned_data['subject'], form.cleaned_data["message"]) today = datetime.date.today() redirect_url = reverse( @@ -198,20 +197,3 @@ def new_message(request, mlist_fqdn): 'months_list': get_months(store, mlist.name), } return render(request, "message_new.html", context) - - -def _send_email(request, mlist, subject, message, headers={}): - if not mlist: - # Make sure the list exists to avoid posting to any email addess - raise SuspiciousOperation("I don't know this mailing-list") - headers["User-Agent"] = "HyperKitty on %s" % request.build_absolute_uri("/") - msg = EmailMessage( - subject=subject, - body=message, - from_email='"%s %s" <%s>' % - (request.user.first_name, request.user.last_name, - request.user.email), - to=[mlist.name], - headers=headers, - ) - msg.send() diff --git a/hyperkitty/views/pages.py b/hyperkitty/views/pages.py index 92a41c7..d3f2b0b 100644 --- a/hyperkitty/views/pages.py +++ b/hyperkitty/views/pages.py @@ -27,9 +27,6 @@ from forms import SearchForm def index(request): - base_url = settings.MAILMAN_API_URL % { - 'username': settings.MAILMAN_USER, 'password': settings.MAILMAN_PASS} - store = get_store(request) lists = store.get_lists() |