option to make publish date editable
[django-migdal.git] / migdal / forms.py
1 # -*- coding: utf-8 -*-
2 # This file is part of PrawoKultury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
4 #
5 from django.contrib.sites.models import Site
6 from django.core.mail import mail_managers
7 from django import forms
8 from django import template
9 from django.utils.translation import ugettext_lazy as _, get_language
10 from slugify import slugify
11 from migdal.models import Entry
12 from migdal import app_settings
13
14
15 def get_submit_form(*args, **kwargs):
16     lang = get_language()
17
18     class SubmitForm(forms.ModelForm):
19         class Meta:
20             model = Entry
21             fields = ['title_%s' % lang, 'lead_%s' % lang, 'author', 'author_email', 'categories']
22             required = ['title_%s' % lang]
23
24         def __init__(self, *args, **kwargs):
25             super(SubmitForm, self).__init__(*args, **kwargs)
26             title = self.fields['title_%s' % lang]
27             title.required = True
28             title.label = _('Title')
29             lead = self.fields['lead_%s' % lang]
30             lead.required = True
31             lead.label = _('Content')
32
33         def clean(self):
34             data = super(SubmitForm, self).clean()
35             data['type'] = app_settings.TYPE_SUBMIT
36             orig_slug = slugify(data.get('title_%s' % lang, ''))[:47]
37             slug = orig_slug
38             number = 2
39             while Entry.objects.filter(**{'slug_%s' % lang: slug}).exists():
40                 slug = "%s-%s" % (orig_slug, number)
41                 number += 1
42             data['slug_%s' % lang] = slug
43             self.cleaned_data = data
44             return data
45
46         def save(self, *args, **kwargs):
47             entry = super(SubmitForm, self).save(commit=False)
48             # Something's wrong with markup fields, they choke on None here.
49             for f in 'lead_en', 'lead_pl', 'body_en', 'body_pl':
50                 if getattr(entry, f) is None:
51                     setattr(entry, f, '')
52             for f in 'slug_%s' % lang, 'type':
53                 setattr(entry, f, self.cleaned_data[f])
54             entry.save()
55             entry = super(SubmitForm, self).save(*args, **kwargs)
56             mail_managers(
57                 u"Nowy wpis",
58                 template.loader.get_template(
59                     'migdal/mail/manager_new_entry.txt').render(
60                         template.Context({
61                             'object': entry,
62                             'site': Site.objects.get_current(),
63                         })))
64
65     return SubmitForm(*args, **kwargs)