submit form
[prawokultury.git] / migdal / forms.py
diff --git a/migdal/forms.py b/migdal/forms.py
new file mode 100755 (executable)
index 0000000..5a9d5d0
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# This file is part of PrawoKultury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from django import forms
+from django.utils.translation import ugettext_lazy as _, get_language
+from migdal.models import Entry
+from migdal.settings import TYPE_SUBMIT
+from slughifi import slughifi
+from django.core.mail import mail_managers
+from django import template
+
+
+def get_submit_form(*args, **kwargs):
+    lang = get_language()
+
+    class SubmitForm(forms.ModelForm):
+        class Meta:
+            model = Entry
+            fields = ['title_%s' % lang, 'lead_%s' % lang,
+                'author', 'author_email', 'categories']
+            required = ['title_%s' % lang]
+
+        def __init__(self, *args, **kwargs):
+            super(SubmitForm, self).__init__(*args, **kwargs)
+            self.fields['title_%s' % lang].required = True
+            self.fields['lead_%s' % lang].required = True
+
+        def clean(self):
+            data = super(SubmitForm, self).clean()
+            data['type'] = TYPE_SUBMIT
+            orig_slug = slughifi(data.get('title_%s' % lang, ''))
+            slug = orig_slug
+            number = 2
+            while Entry.objects.filter(**{'slug_%s' % lang: slug}).exists():
+                slug = "%s-%s" % (orig_slug, number)
+                number += 1
+            data['slug_%s' % lang] = slug
+            self.cleaned_data = data
+            return data
+
+        def save(self, *args, **kwargs):
+            entry = super(SubmitForm, self).save(commit=False)
+            # Something's wrong with markup fields, they choke on None here.
+            for f in 'lead_en', 'lead_pl', 'body_en', 'body_pl':
+                if getattr(entry, f) is None:
+                    setattr(entry, f, '')
+            for f in 'slug_%s' % lang, 'type':
+                setattr(entry, f, self.cleaned_data[f])
+            entry.save()
+            entry = super(SubmitForm, self).save(*args, **kwargs)
+            mail_managers(u"Nowy wpis",
+                template.loader.get_template(
+                    'migdal/mail/manager_new_entry.txt').render(
+                        template.Context({'object': entry})))
+
+    return SubmitForm(*args, **kwargs)
\ No newline at end of file