spam filter for publishing suggestions
[wolnelektury.git] / src / suggest / forms.py
1 # -*- coding: utf-8 -*-
2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
4 #
5 from django import forms
6 from django.contrib.sites.models import Site
7 from django.core.exceptions import ValidationError
8 from django.core.mail import send_mail, mail_managers
9 from django.core.urlresolvers import reverse
10 from django.core.validators import validate_email
11 from django.utils.translation import ugettext_lazy as _
12 from django.utils.translation import ugettext
13 from suggest.models import PublishingSuggestion, Suggestion
14
15
16 class SuggestForm(forms.Form):
17     contact = forms.CharField(label=_('Contact'), max_length=120, required=False)
18     description = forms.CharField(label=_('Description'), widget=forms.Textarea, required=True)
19
20     def save(self, request):
21         contact = self.cleaned_data['contact']
22         description = self.cleaned_data['description']
23
24         suggestion = Suggestion(contact=contact, description=description, ip=request.META['REMOTE_ADDR'])
25         if request.user.is_authenticated():
26             suggestion.user = request.user
27         suggestion.save()
28
29         mail_managers(u'Nowa sugestia na stronie WolneLektury.pl', u'''\
30 Zgłoszono nową sugestię w serwisie WolneLektury.pl.
31 http://%(site)s%(url)s
32
33 Użytkownik: %(user)s
34 Kontakt: %(contact)s
35
36 %(description)s''' % {
37             'site': Site.objects.get_current().domain,
38             'url': reverse('admin:suggest_suggestion_change', args=[suggestion.id]),
39             'user': str(request.user) if request.user.is_authenticated() else '',
40             'contact': contact,
41             'description': description,
42             }, fail_silently=True)
43
44         try:
45             validate_email(contact)
46         except ValidationError:
47             pass
48         else:
49             send_mail(u'[WolneLektury] ' + ugettext(u'Thank you for your suggestion.'),
50                       ugettext(u"""\
51 Thank you for your comment on WolneLektury.pl.
52 The suggestion has been referred to the project coordinator.""") +
53                       u'\n\n-- \n' + ugettext(u'''Message sent automatically. Please do not reply.'''),
54                       'no-reply@wolnelektury.pl', [contact], fail_silently=True)
55
56
57 class PublishingSuggestForm(forms.Form):
58     contact = forms.CharField(label=_('Contact'), max_length=120, required=False)
59     books = forms.CharField(label=_('books'), widget=forms.Textarea, required=True)
60     ebook = forms.BooleanField(label=_('ebook'), required=False, initial=True)
61     audiobook = forms.BooleanField(label=_('audiobook'), required=False)
62
63     def clean(self):
64         if not self.cleaned_data['ebook'] and not self.cleaned_data['audiobook']:
65             msg = ugettext(u"One of these options is required.")
66             self._errors['ebook'] = self.error_class([msg])
67             self._errors['audiobook'] = self.error_class([msg])
68         return super(PublishingSuggestForm, self).clean()
69
70     def save(self, request):
71         contact = self.cleaned_data['contact']
72         suggestion_text = self.cleaned_data['books'].strip(', \n\r')
73
74         books = suggestion_text if self.cleaned_data['ebook'] else ''
75         audiobooks = suggestion_text if self.cleaned_data['audiobook'] else ''
76
77         suggestion = PublishingSuggestion(
78             contact=contact, books=books,
79             audiobooks=audiobooks, ip=request.META['REMOTE_ADDR'])
80         if request.user.is_authenticated():
81             suggestion.user = request.user
82         suggestion.save()
83
84         if not suggestion.is_spam():
85             mail_managers(u'Konsultacja planu wydawniczego na WolneLektury.pl', u'''\
86     Zgłoszono nową sugestię nt. planu wydawniczego w serwisie WolneLektury.pl.
87     %(url)s
88
89     Użytkownik: %(user)s
90     Kontakt: %(contact)s
91
92     Książki:
93     %(books)s
94
95     Audiobooki:
96     %(audiobooks)s''' % {
97                 'url': request.build_absolute_uri(reverse('admin:suggest_suggestion_change', args=[suggestion.id])),
98                 'user': str(request.user) if request.user.is_authenticated() else '',
99                 'contact': contact,
100                 'books': books,
101                 'audiobooks': audiobooks,
102             }, fail_silently=True)
103
104             try:
105                 validate_email(contact)
106             except ValidationError:
107                 pass
108             else:
109                 send_mail(
110                     u'[WolneLektury] ' + ugettext(u'Thank you for your suggestion.'),
111                     ugettext(u"""\
112     Thank you for your comment on WolneLektury.pl.
113     The suggestion has been referred to the project coordinator.""") +
114                     u"\n\n-- \n" + ugettext(u'''Message sent automatically. Please do not reply.'''),
115                     'no-reply@wolnelektury.pl', [contact], fail_silently=True)