admin support for newsletter
[wolnelektury.git] / src / suggest / forms.py
index b98e0ae..4521805 100644 (file)
@@ -10,19 +10,22 @@ from django.core.urlresolvers import reverse
 from django.core.validators import validate_email
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext
+
+from newsletter.forms import NewsletterForm
 from suggest.models import PublishingSuggestion, Suggestion
 
 
-class SuggestForm(forms.Form):
+class SuggestForm(NewsletterForm):
+    email_field = 'contact'
     contact = forms.CharField(label=_('Contact'), max_length=120, required=False)
     description = forms.CharField(label=_('Description'), widget=forms.Textarea, required=True)
 
     def save(self, request):
+        super(SuggestForm, self).save()
         contact = self.cleaned_data['contact']
         description = self.cleaned_data['description']
 
-        suggestion = Suggestion(contact=contact,
-            description=description, ip=request.META['REMOTE_ADDR'])
+        suggestion = Suggestion(contact=contact, description=description, ip=request.META['REMOTE_ADDR'])
         if request.user.is_authenticated():
             suggestion.user = request.user
         suggestion.save()
@@ -47,72 +50,72 @@ Kontakt: %(contact)s
         except ValidationError:
             pass
         else:
-            send_mail(u'[WolneLektury] ' +
-                    ugettext(u'Thank you for your suggestion.'),
-                    ugettext(u"""\
+            send_mail(u'[WolneLektury] ' + ugettext(u'Thank you for your suggestion.'),
+                      ugettext(u"""\
 Thank you for your comment on WolneLektury.pl.
 The suggestion has been referred to the project coordinator.""") +
-u"""
-
--- 
-""" + ugettext(u'''Message sent automatically. Please do not reply.'''),
-                    'no-reply@wolnelektury.pl', [contact], fail_silently=True)
+                      u'\n\n-- \n' + ugettext(u'''Message sent automatically. Please do not reply.'''),
+                      'no-reply@wolnelektury.pl', [contact], fail_silently=True)
 
 
-class PublishingSuggestForm(forms.Form):
+class PublishingSuggestForm(NewsletterForm):
+    email_field = 'contact'
     contact = forms.CharField(label=_('Contact'), max_length=120, required=False)
-    books = forms.CharField(label=_('books'), widget=forms.Textarea, required=False)
-    audiobooks = forms.CharField(label=_('audiobooks'), widget=forms.Textarea, required=False)
+    books = forms.CharField(label=_('books'), widget=forms.Textarea, required=True)
+    ebook = forms.BooleanField(label=_('ebook'), required=False, initial=True)
+    audiobook = forms.BooleanField(label=_('audiobook'), required=False)
 
-    def clean(self, *args, **kwargs):
-        if not self.cleaned_data['books'] and not self.cleaned_data['audiobooks']:
-            msg = ugettext(u"One of these fields is required.")
-            self._errors["books"] = self.error_class([msg])
-            self._errors["audiobooks"] = self.error_class([msg])
-        return super(PublishingSuggestForm, self).clean(*args, **kwargs)
+    def clean(self):
+        if not self.cleaned_data['ebook'] and not self.cleaned_data['audiobook']:
+            msg = ugettext(u"One of these options is required.")
+            self._errors['ebook'] = self.error_class([msg])
+            self._errors['audiobook'] = self.error_class([msg])
+        return super(PublishingSuggestForm, self).clean()
 
     def save(self, request):
+        super(PublishingSuggestForm, self).save()
         contact = self.cleaned_data['contact']
-        books = self.cleaned_data['books']
-        audiobooks = self.cleaned_data['audiobooks']
+        suggestion_text = self.cleaned_data['books'].strip(', \n\r')
 
-        suggestion = PublishingSuggestion(contact=contact, books=books,
+        books = suggestion_text if self.cleaned_data['ebook'] else ''
+        audiobooks = suggestion_text if self.cleaned_data['audiobook'] else ''
+
+        suggestion = PublishingSuggestion(
+            contact=contact, books=books,
             audiobooks=audiobooks, ip=request.META['REMOTE_ADDR'])
         if request.user.is_authenticated():
             suggestion.user = request.user
         suggestion.save()
 
-        mail_managers(u'Konsultacja planu wydawniczego na WolneLektury.pl', u'''\
-Zgłoszono nową sugestię nt. planu wydawniczego w serwisie WolneLektury.pl.
-%(url)s
+        if not suggestion.is_spam():
+            mail_managers(u'Konsultacja planu wydawniczego na WolneLektury.pl', u'''\
+    Zgłoszono nową sugestię nt. planu wydawniczego w serwisie WolneLektury.pl.
+    %(url)s
 
-Użytkownik: %(user)s
-Kontakt: %(contact)s
+    Użytkownik: %(user)s
+    Kontakt: %(contact)s
 
-Książki:
-%(books)s
+    Książki:
+    %(books)s
 
-Audiobooki:
-%(audiobooks)s''' % {
-            'url': request.build_absolute_uri(reverse('admin:suggest_suggestion_change', args=[suggestion.id])),
-            'user': str(request.user) if request.user.is_authenticated() else '',
-            'contact': contact,
-            'books': books,
-            'audiobooks': audiobooks,
+    Audiobooki:
+    %(audiobooks)s''' % {
+                'url': request.build_absolute_uri(reverse('admin:suggest_suggestion_change', args=[suggestion.id])),
+                'user': str(request.user) if request.user.is_authenticated() else '',
+                'contact': contact,
+                'books': books,
+                'audiobooks': audiobooks,
             }, fail_silently=True)
 
-        try:
-            validate_email(contact)
-        except ValidationError:
-            pass
-        else:
-            send_mail(u'[WolneLektury] ' +
-                    ugettext(u'Thank you for your suggestion.'),
+            try:
+                validate_email(contact)
+            except ValidationError:
+                pass
+            else:
+                send_mail(
+                    u'[WolneLektury] ' + ugettext(u'Thank you for your suggestion.'),
                     ugettext(u"""\
 Thank you for your comment on WolneLektury.pl.
 The suggestion has been referred to the project coordinator.""") +
-u"""
-
--- 
-""" + ugettext(u'''Message sent automatically. Please do not reply.'''),
+                    u"\n\n-- \n" + ugettext(u'''Message sent automatically. Please do not reply.'''),
                     'no-reply@wolnelektury.pl', [contact], fail_silently=True)