--- /dev/null
+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")
+
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')
'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"))
+
(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'),