summaryrefslogtreecommitdiffstats
path: root/hyperkitty/views
diff options
context:
space:
mode:
authorAurélien Bompard <aurelien@bompard.org>2013-02-04 17:27:40 +0100
committerAurélien Bompard <aurelien@bompard.org>2013-02-04 17:27:40 +0100
commitcec92b8f26a8149b8eb1fe831a036704cb20d5d6 (patch)
tree5f2049c3124c0d1b91374fd669b0c1b32ab34f8d /hyperkitty/views
parent0746b9db3c828b90885d81ce64bbd33fe03c8a26 (diff)
parentf6a642a52e05f44f7131dfd182e707d6f1fe6e7e (diff)
downloadhyperkitty-cec92b8f26a8149b8eb1fe831a036704cb20d5d6.tar.gz
hyperkitty-cec92b8f26a8149b8eb1fe831a036704cb20d5d6.tar.xz
hyperkitty-cec92b8f26a8149b8eb1fe831a036704cb20d5d6.zip
Merge branch 'posting'
Diffstat (limited to 'hyperkitty/views')
-rw-r--r--hyperkitty/views/accounts.py1
-rw-r--r--hyperkitty/views/forms.py2
-rw-r--r--hyperkitty/views/message.py35
-rw-r--r--hyperkitty/views/thread.py1
4 files changed, 37 insertions, 2 deletions
diff --git a/hyperkitty/views/accounts.py b/hyperkitty/views/accounts.py
index 85b6a9a..2ee36da 100644
--- a/hyperkitty/views/accounts.py
+++ b/hyperkitty/views/accounts.py
@@ -33,7 +33,6 @@ from django.contrib.auth.decorators import (login_required,
user_passes_test)
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.models import User
-from django.core.urlresolvers import reverse
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response, redirect
from django.template import Context, loader, RequestContext
diff --git a/hyperkitty/views/forms.py b/hyperkitty/views/forms.py
index d52eaea..90c288f 100644
--- a/hyperkitty/views/forms.py
+++ b/hyperkitty/views/forms.py
@@ -101,3 +101,5 @@ class SearchForm(forms.Form):
)
+class ReplyForm(forms.Form):
+ message = forms.CharField(widget=forms.Textarea, label="")
diff --git a/hyperkitty/views/message.py b/hyperkitty/views/message.py
index 15aee66..509205c 100644
--- a/hyperkitty/views/message.py
+++ b/hyperkitty/views/message.py
@@ -26,10 +26,12 @@ import urllib
import django.utils.simplejson as simplejson
from django.http import HttpResponse, HttpResponseRedirect, Http404
-from django.shortcuts import redirect
+from django.shortcuts import redirect, render
from django.template import RequestContext, loader
from django.conf import settings
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger, InvalidPage
+from django.core.urlresolvers import reverse
+from django.core.mail import EmailMessage
from django.contrib.auth.decorators import (login_required,
permission_required,
user_passes_test)
@@ -92,6 +94,7 @@ def index(request, mlist_fqdn, hashid):
'hashid' : hashid,
'archives_length': get_months(store, mlist_fqdn),
'use_mockups': settings.USE_MOCKUPS,
+ 'reply_form': ReplyForm(),
})
return HttpResponse(t.render(c))
@@ -153,3 +156,33 @@ def vote(request, mlist_fqdn, hashid):
return HttpResponse(simplejson.dumps(status),
mimetype='application/javascript')
+
+
+@login_required
+def reply(request, mlist_fqdn, message_id):
+ """ Sends a reply to the list.
+ TODO: unit tests
+ """
+ if request.method != 'POST':
+ return HttpResponse("Something went wrong", content_type="text/plain", status=500)
+ form = ReplyForm(request.POST)
+ if not form.is_valid():
+ return HttpResponse(form.errors.as_text(), content_type="text/plain", status=400)
+ store = get_store(request)
+ message = store.get_message_by_hash_from_list(mlist_fqdn, message_id)
+ subject = message.subject
+ if not message.subject.lower().startswith("re:"):
+ subject = "Re: %s" % subject
+ reply = EmailMessage(
+ subject=subject,
+ body=form.cleaned_data["message"],
+ from_email='"%s %s" <%s>' %
+ (request.user.first_name, request.user.last_name,
+ request.user.email),
+ to=[mlist_fqdn],
+ cc=['aurelien@bompard.org'],
+ headers={
+ "In-Reply-To": message.message_id,
+ })
+ reply.send()
+ return HttpResponse("The reply has been sent successfully.", mimetype="text/plain")
diff --git a/hyperkitty/views/thread.py b/hyperkitty/views/thread.py
index 6769034..549dfe0 100644
--- a/hyperkitty/views/thread.py
+++ b/hyperkitty/views/thread.py
@@ -144,6 +144,7 @@ def thread_index(request, mlist_fqdn, threadid, month=None, year=None):
'use_mockups': settings.USE_MOCKUPS,
'sort_mode': sort_mode,
'fav_action': fav_action,
+ 'reply_form': ReplyForm(),
})
return HttpResponse(t.render(c))