more filters (type, subject)
[redakcja.git] / apps / wiki / forms.py
index 4f5f7aa..3cf5d11 100644 (file)
@@ -8,6 +8,8 @@ from django.core.exceptions import ValidationError
 from django.utils.translation import ugettext_lazy as _
 
 from catalogue.constants import STAGES
 from django.utils.translation import ugettext_lazy as _
 
 from catalogue.constants import STAGES
+from catalogue.models import Category
+from catalogue.models.document import metadata_from_text
 from librarian.document import Document
 
 
 from librarian.document import Document
 
 
@@ -44,7 +46,7 @@ class DocumentTextSaveForm(forms.Form):
     )
 
     stage = forms.ChoiceField(
     )
 
     stage = forms.ChoiceField(
-        choices=[(s, s) for s in STAGES],
+        choices=STAGES,
         required=False,
         label=_(u"Stage"),
         help_text=_(u"If completed a work stage, change to another one."),
         required=False,
         label=_(u"Stage"),
         help_text=_(u"If completed a work stage, change to another one."),
@@ -75,10 +77,22 @@ class DocumentTextSaveForm(forms.Form):
             raise ValidationError(
                 "The first header should contain the title in plain text (no links, emphasis etc.) and cannot be empty")
 
             raise ValidationError(
                 "The first header should contain the title in plain text (no links, emphasis etc.) and cannot be empty")
 
-        ext = doc.meta.get_one(DCNS('relation.coverimage.url')).rsplit('.', 1)[-1].lower()
-        if ext not in ('jpg', 'jpeg', 'png', 'gif', 'tif', 'tiff'):
-            raise ValidationError('Invalid cover image format, should be an image file (jpg, png, gif). '
-                                  'Change it in Metadata.')
+        cover_url = doc.meta.get_one(DCNS('relation.coverimage.url'))
+        if cover_url:
+            ext = cover_url.rsplit('.', 1)[-1].lower()
+            if ext not in ('jpg', 'jpeg', 'png', 'gif', 'svg'):
+                raise ValidationError('Invalid cover image format, should be an image file (jpg, png, gif, svg). '
+                                      'Change it in Metadata.')
+        metadata = metadata_from_text(text)
+        for category in Category.objects.all():
+            values = metadata.get(category.dc_tag)
+            if not category.multiple:
+                values = [values]
+            if not values:
+                values = []
+            for value in values:
+                if not category.tag_set.filter(dc_value=value):
+                    raise ValidationError('Invalid value for dc:%s: %s' % (category.dc_tag, value))
         return text
 
 
         return text