newsletter by mailchimp
[wolnelektury.git] / src / newsletter / forms.py
1 # -*- coding: utf-8 -*-
2 from django.core.exceptions import ValidationError
3 from django.core.validators import validate_email
4 from django.forms import Form, BooleanField
5 from django.forms.fields import EmailField
6 from django.template.loader import render_to_string
7 from django.utils.translation import ugettext_lazy as _, ugettext
8
9 from contact import mailing
10 from newsletter.models import Subscription
11 from wolnelektury.utils import send_noreply_mail
12
13
14 class NewsletterForm(Form):
15     email_field = 'email'
16     agree_newsletter = BooleanField(
17         required=False, initial=False, label=_(u'I want to receive Wolne Lektury\'s newsletter.'), help_text='''\
18 Oświadczam, że wyrażam zgodę na przetwarzanie moich danych osobowych zawartych \
19 w niniejszym formularzu zgłoszeniowym przez Fundację Nowoczesna Polska (administratora danych) z siedzibą \
20 w Warszawie (00-514) przy ul. Marszałkowskiej 84/92 lok. 125 w celu otrzymywania newslettera Wolnych Lektur. \
21 Jednocześnie oświadczam, że zostałam/em poinformowana/y o tym, że mam prawo wglądu w treść swoich danych i \
22 możliwość ich poprawiania oraz że ich podanie jest dobrowolne, ale niezbędne do dokonania zgłoszenia.''')
23
24     def save(self):
25         try:
26             # multiple inheritance mode
27             super(NewsletterForm, self).save()
28         except AttributeError:
29             pass
30         if not self.cleaned_data.get('agree_newsletter'):
31             return
32         email = self.cleaned_data[self.email_field]
33         try:
34             validate_email(email)
35         except ValidationError:
36             pass
37         else:
38             # subscription, created = Subscription.objects.get_or_create(email=email, defaults={'active': False})
39             # send_noreply_mail(
40             #     ugettext(u'Confirm your subscription to Wolne Lektury newsletter'),
41             #     render_to_string('newsletter/subscribe_email.html', {'subscription': subscription}), [email])
42             mailing.subscribe(email)
43
44
45 class SubscribeForm(NewsletterForm):
46     email = EmailField(label=_('email address'))
47
48     def __init__(self, *args, **kwargs):
49         super(SubscribeForm, self).__init__(*args, **kwargs)
50         self.fields['agree_newsletter'].required = True
51
52
53 class UnsubscribeForm(Form):
54     email = EmailField(label=_('email address'))
55
56     def clean(self):
57         email = self.cleaned_data.get('email')
58         try:
59             subscription = Subscription.objects.get(email=email)
60         except Subscription.DoesNotExist:
61             raise ValidationError(ugettext(u'Email address not found.'))
62         self.cleaned_data['subscription'] = subscription
63
64     def save(self):
65         subscription = self.cleaned_data['subscription']
66         subscription.active = False
67         subscription.save()
68
69         context = {'subscription': subscription}
70         # refactor to send_noreply_mail
71         send_noreply_mail(
72             ugettext(u'Unsubscribe from Wolne Lektury\'s newsletter.'),
73             render_to_string('newsletter/unsubscribe_email.html', context),
74             [subscription.email], fail_silently=True)