Add handling of mailinglist subscription

This commit is contained in:
Magnus Hagander
2009-12-28 18:57:01 +01:00
parent 770ef1689e
commit 77a5690dc8
4 changed files with 60 additions and 0 deletions

11
pgweb/lists/forms.py Normal file
View File

@ -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")

View File

@ -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"))