From 77a5690dc8f1c90d6392a6938d46f4ff7f57d62f Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Mon, 28 Dec 2009 18:57:01 +0100 Subject: [PATCH] Add handling of mailinglist subscription --- pgweb/lists/forms.py | 11 ++++++++++ pgweb/lists/views.py | 37 +++++++++++++++++++++++++++++++++ pgweb/urls.py | 1 + templates/lists/subscribed.html | 11 ++++++++++ 4 files changed, 60 insertions(+) create mode 100644 pgweb/lists/forms.py create mode 100644 templates/lists/subscribed.html diff --git a/pgweb/lists/forms.py b/pgweb/lists/forms.py new file mode 100644 index 00000000..7648b85d --- /dev/null +++ b/pgweb/lists/forms.py @@ -0,0 +1,11 @@ +from django import forms + +from models import MailingList + +class SubscribeForm(forms.Form): + email = forms.EmailField(max_length=100,required=True,label="Email address") + action = forms.ChoiceField(required=True, choices=(('subscribe','Subscribe'),('unsubscribe','Unsubscribe'))) + receive = forms.BooleanField(required=False, label="Receive mail", initial=True) + digest = forms.BooleanField(required=False, label="Digest only") + lists = forms.ModelChoiceField(required=True, queryset=MailingList.objects.filter(active=True), label="Mailinglist") + diff --git a/pgweb/lists/views.py b/pgweb/lists/views.py index eee529b3..ae97d802 100644 --- a/pgweb/lists/views.py +++ b/pgweb/lists/views.py @@ -2,10 +2,15 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.http import HttpResponse, Http404, HttpResponseRedirect from django.template import TemplateDoesNotExist, loader, Context from django.contrib.auth.decorators import login_required +from django.conf import settings + +from email.mime.text import MIMEText from pgweb.util.contexts import NavContext +from pgweb.util.misc import sendmail from models import MailingList, MailingListGroup +from forms import SubscribeForm def root(request): lists = MailingList.objects.all().order_by('group__sortkey', 'listname') @@ -14,3 +19,35 @@ def root(request): 'lists': lists, }, NavContext(request, 'community')) +def subscribe(request): + if request.POST: + form = SubscribeForm(request.POST) + if form.is_valid(): + mailtxt = "" + if form.cleaned_data['action'] == 'subscribe': + mailtxt += "subscribe %s\n" % form.cleaned_data['lists'] + if not form.cleaned_data['receive']: + mailtxt += "set nomail\n" + if form.cleaned_data['digest']: + mailtxt += "set digest\n" + else: + mailtxt += "unsubscribe %s\n" % form.cleaned_data['lists'] + msg = MIMEText(mailtxt, _charset='utf-8') + msg['Subject'] = '' + msg['To'] = settings.LISTSERVER_EMAIL + msg['From'] = form.cleaned_data['email'] + sendmail(msg) + return render_to_response('lists/subscribed.html', { + }, NavContext(request, "community")) + else: + # GET, so render up the form + form = SubscribeForm() + + return render_to_response('base/form.html', { + 'form': form, + 'form_intro': """ +Please do not subscribe to mailing lists using e-mail accounts protected by +mail-back anti-spam systems. These are extremely annoying to the list maintainers +and other members, and you may be automatically unsubscribed.""" + }, NavContext(request, "community")) + diff --git a/pgweb/urls.py b/pgweb/urls.py index e0b630cd..67f58ffb 100644 --- a/pgweb/urls.py +++ b/pgweb/urls.py @@ -37,6 +37,7 @@ urlpatterns = patterns('', (r'^community/$', 'core.views.community'), (r'^community/contributors/$', 'contributors.views.completelist'), (r'^community/lists/$', 'lists.views.root'), + (r'^community/lists/subscribe/$', 'lists.views.subscribe'), (r'^community/survey/vote/(\d+)/$', 'survey.views.vote'), (r'^community/survey[/\.](\d+)(-.*)?/$', 'survey.views.results'), diff --git a/templates/lists/subscribed.html b/templates/lists/subscribed.html new file mode 100644 index 00000000..37f38b27 --- /dev/null +++ b/templates/lists/subscribed.html @@ -0,0 +1,11 @@ +{%extends "base/page.html"%} +{%block title%}Subscribed{%endblock%} +{%block contents%} + +

Subscribed

+ +

Your subscription request has been sent to the mailinglist server. You +will receive a confirmation email shortly.

+ +{%endblock%} +