organization filters
[redakcja.git] / apps / organizations / forms.py
index 6398448..98efeab 100644 (file)
@@ -4,9 +4,36 @@
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django import forms
+from django.contrib.sites.models import Site
+from django.utils.translation import ugettext as _
+
+from redakcja.utlis import send_notify_email
 from .models import Organization, UserCard, countries
 
 
+def clean_projects(projects):
+    lines = []
+    for line in projects.split('\n'):
+        line = line.strip()
+        if line:
+            try:
+                url, lang, desc = [part.strip(',') for part in line.split(None, 2)]
+            except ValueError:
+                raise forms.ValidationError(
+                    _('Each line has to consist of an Internet address, language and description, '
+                      'separated with spaces. Failed on: %s' % line))
+            # naive check
+            if '.' not in url or url.endswith('.'):
+                raise forms.ValidationError(
+                    _('The first item in each line should be an Internet address. Failed on: %s') % url)
+            if not url.startswith('http'):
+                url = 'http://' + url
+            lines.append(' '.join((url, lang, desc)))
+        else:
+            lines.append('')
+    return '\n'.join(lines)
+
+
 class OrganizationForm(forms.ModelForm):
     cts = countries
 
@@ -14,6 +41,22 @@ class OrganizationForm(forms.ModelForm):
         model = Organization
         exclude = ['_html']
 
+    def save(self, commit=True):
+        new = self.instance.id is None
+        organization = super(OrganizationForm, self).save(commit=commit)
+        if new:
+            site = Site.objects.get_current()
+            send_notify_email(
+                'New organization in MIL/PEER',
+                '''New organization in MIL/PEER: %s. View their profile: https://%s%s.
+
+--
+MIL/PEER team.''' % (organization.name, site.domain, organization.get_absolute_url()))
+        return organization
+
+    def clean_projects(self):
+        return clean_projects(self.cleaned_data.get('projects', ''))
+
 
 class UserCardForm(forms.ModelForm):
     cts = countries
@@ -38,3 +81,6 @@ class UserCardForm(forms.ModelForm):
         self.instance.user.last_name = self.cleaned_data.get('last_name', '')
         self.instance.user.save()
         return super(UserCardForm, self).save(*args, **kwargs)
+
+    def clean_projects(self):
+        return clean_projects(self.cleaned_data.get('projects', ''))