default sort order for documents
[redakcja.git] / apps / wiki / forms.py
index 4f5f7aa..df6bf85 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,26 @@ 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)
+        if 'multiple_values' in metadata:
+            raise ValidationError('Category "%s" does not allow multiple values.' % metadata['multiple_values'])
+        for category in Category.objects.all():
+            values = metadata.get(category.dc_tag)
+            if values is None:
+                continue
+            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