Fix photo upload from wikidata.
[redakcja.git] / src / catalogue / models.py
index 92275ec..ea7bf54 100644 (file)
@@ -9,6 +9,7 @@ from admin_ordering.models import OrderableModel
 from wikidata.client import Client
 from .constants import WIKIDATA
 from .wikidata import WikidataModel
+from .wikimedia import WikiMedia
 
 
 class Author(WikidataModel):
@@ -50,11 +51,16 @@ class Author(WikidataModel):
             (4, _("Unknown")),
         ],
     )
-    notes = models.TextField(_("notes"), blank=True)
+    notes = models.TextField(_("notes"), blank=True, help_text=_('private'))
+
     gazeta_link = models.CharField(_("gazeta link"), max_length=255, blank=True)
     culturepl_link = models.CharField(_("culture.pl link"), max_length=255, blank=True)
+    plwiki = models.CharField(blank=True, max_length=255)
+    photo = models.ImageField(blank=True, null=True, upload_to='catalogue/author/')
+    photo_source = models.CharField(blank=True, max_length=255)
+    photo_attribution = models.CharField(max_length=255, blank=True)
 
-    description = models.TextField(_("description"), blank=True)
+    description = models.TextField(_("description"), blank=True, help_text=_('for publication'))
 
     priority = models.PositiveSmallIntegerField(
         _("priority"), 
@@ -77,7 +83,11 @@ class Author(WikidataModel):
         year_of_death = WIKIDATA.DATE_OF_DEATH
         place_of_death = WIKIDATA.PLACE_OF_DEATH
         gender = WIKIDATA.GENDER
-        notes = "description"
+        notes = WikiMedia.append("description")
+        plwiki = "plwiki"
+        photo = WikiMedia.download(WIKIDATA.IMAGE)
+        photo_source = WikiMedia.descriptionurl(WIKIDATA.IMAGE)
+        photo_attribution = WikiMedia.attribution(WIKIDATA.IMAGE)
 
         def _supplement(obj):
             if not obj.first_name and not obj.last_name:
@@ -166,7 +176,7 @@ class Book(WikidataModel):
     )
     scans_source = models.CharField(_("scans source"), max_length=255, blank=True)
     text_source = models.CharField(_("text source"), max_length=255, blank=True)
-    notes = models.TextField(_("notes"), blank=True)
+    notes = models.TextField(_("notes"), blank=True, help_text=_('private'))
     priority = models.PositiveSmallIntegerField(
         _("priority"),
         default=0, choices=[(0, _("Low")), (1, _("Medium")), (2, _("High"))]
@@ -195,7 +205,7 @@ class Book(WikidataModel):
         language = WIKIDATA.LANGUAGE
         based_on = WIKIDATA.BASED_ON
         original_year = WIKIDATA.PUBLICATION_DATE
-        notes = "description"
+        notes = WikiMedia.append("description")
 
     def __str__(self):
         txt = self.title
@@ -217,15 +227,31 @@ class Book(WikidataModel):
         return f'https://wolnelektury.pl/katalog/lektura/{self.slug}/'
     
     def authors_str(self):
+        if not self.pk:
+            return ''
         return ", ".join(str(author) for author in self.authors.all())
     authors_str.admin_order_field = 'authors__last_name'
     authors_str.short_description = _('Author')
 
     def translators_str(self):
+        if not self.pk:
+            return ''
         return ", ".join(str(author) for author in self.translators.all())
     translators_str.admin_order_field = 'translators__last_name'
     translators_str.short_description = _('Translator')
 
+    def authors_first_names(self):
+        return ', '.join(a.first_name for a in self.authors.all())
+
+    def authors_last_names(self):
+        return ', '.join(a.last_name for a in self.authors.all())
+
+    def translators_first_names(self):
+        return ', '.join(a.first_name for a in self.translators.all())
+
+    def translators_last_names(self):
+        return ', '.join(a.last_name for a in self.translators.all())
+
     def get_estimated_costs(self):
         return {
             work_type: work_type.calculate(self)
@@ -236,7 +262,7 @@ class Book(WikidataModel):
 class CollectionCategory(models.Model):
     name = models.CharField(_("name"), max_length=255)
     parent = models.ForeignKey('self', models.SET_NULL, related_name='children', null=True, blank=True, verbose_name=_("parent"))
-    notes = models.TextField(_("notes"), blank=True)
+    notes = models.TextField(_("notes"), blank=True, help_text=_('private'))
 
     class Meta:
         ordering = ('parent__name', 'name')
@@ -254,7 +280,8 @@ class Collection(models.Model):
     name = models.CharField(_("name"), max_length=255)
     slug = models.SlugField(max_length=255, unique=True)
     category = models.ForeignKey(CollectionCategory, models.SET_NULL, null=True, blank=True, verbose_name=_("category"))
-    notes = models.TextField(_("notes"), blank=True)
+    notes = models.TextField(_("notes"), blank=True, help_text=_('private'))
+    description = models.TextField(_("description"), blank=True)
 
     class Meta:
         ordering = ('category', 'name')