pretty book descriptions and don't hide short descriptions
[wolnelektury.git] / apps / catalogue / models.py
index 2008f09..cf270f2 100644 (file)
@@ -55,7 +55,7 @@ class Tag(TagBase):
     death = models.IntegerField(_(u'year of death'), blank=True, null=True)
     gazeta_link = models.CharField(blank=True, max_length=240)
     wiki_link = models.CharField(blank=True, max_length=240)
     death = models.IntegerField(_(u'year of death'), blank=True, null=True)
     gazeta_link = models.CharField(blank=True, max_length=240)
     wiki_link = models.CharField(blank=True, max_length=240)
-    
+
     categories_rev = {
         'autor': 'author',
         'epoka': 'epoch',
     categories_rev = {
         'autor': 'author',
         'epoka': 'epoch',
@@ -117,7 +117,7 @@ class Tag(TagBase):
                             real_tags.append(Tag.objects.exclude(category='book').get(slug=name))
                         except Tag.MultipleObjectsReturned, e:
                             ambiguous_slugs.append(name)
                             real_tags.append(Tag.objects.exclude(category='book').get(slug=name))
                         except Tag.MultipleObjectsReturned, e:
                             ambiguous_slugs.append(name)
-                            
+
             if category:
                 # something strange left off
                 raise Tag.DoesNotExist()
             if category:
                 # something strange left off
                 raise Tag.DoesNotExist()
@@ -131,13 +131,13 @@ class Tag(TagBase):
                 return real_tags
         else:
             return TagBase.get_tag_list(tags)
                 return real_tags
         else:
             return TagBase.get_tag_list(tags)
-    
+
     @property
     def url_chunk(self):
         return '/'.join((Tag.categories_dict[self.category], self.slug))
 
 
     @property
     def url_chunk(self):
         return '/'.join((Tag.categories_dict[self.category], self.slug))
 
 
-# TODO: why is this hard-coded ? 
+# TODO: why is this hard-coded ?
 def book_upload_path(ext):
     def get_dynamic_path(book, filename):
         return 'lektura/%s.%s' % (book.slug, ext)
 def book_upload_path(ext):
     def get_dynamic_path(book, filename):
         return 'lektura/%s.%s' % (book.slug, ext)
@@ -171,7 +171,7 @@ class Book(models.Model):
     objects = models.Manager()
     tagged = managers.ModelTaggedItemManager(Tag)
     tags = managers.TagDescriptor(Tag)
     objects = models.Manager()
     tagged = managers.ModelTaggedItemManager(Tag)
     tags = managers.TagDescriptor(Tag)
-    
+
     _tag_counter = JSONField(null=True, editable=False)
     _theme_counter = JSONField(null=True, editable=False)
 
     _tag_counter = JSONField(null=True, editable=False)
     _theme_counter = JSONField(null=True, editable=False)
 
@@ -189,8 +189,12 @@ class Book(models.Model):
     def save(self, force_insert=False, force_update=False, reset_short_html=True, refresh_mp3=True):
         if reset_short_html:
             # Reset _short_html during save
     def save(self, force_insert=False, force_update=False, reset_short_html=True, refresh_mp3=True):
         if reset_short_html:
             # Reset _short_html during save
+            update = {}
             for key in filter(lambda x: x.startswith('_short_html'), self.__dict__):
             for key in filter(lambda x: x.startswith('_short_html'), self.__dict__):
+                update[key] = ''
                 self.__setattr__(key, '')
                 self.__setattr__(key, '')
+            # Fragment.short_html relies on book's tags, so reset it here too
+            self.fragments.all().update(**update)
 
         book = super(Book, self).save(force_insert, force_update)
 
 
         book = super(Book, self).save(force_insert, force_update)
 
@@ -210,7 +214,7 @@ class Book(models.Model):
     @property
     def name(self):
         return self.title
     @property
     def name(self):
         return self.title
-    
+
     def book_tag(self):
         slug = ('l-' + self.slug)[:120]
         book_tag, created = Tag.objects.get_or_create(slug=slug, category='book')
     def book_tag(self):
         slug = ('l-' + self.slug)[:120]
         book_tag, created = Tag.objects.get_or_create(slug=slug, category='book')
@@ -399,8 +403,8 @@ class Book(models.Model):
 
         book.save()
         return book
 
         book.save()
         return book
-    
-    
+
+
     def refresh_tag_counter(self):
         tags = {}
         for child in self.children.all().order_by():
     def refresh_tag_counter(self):
         tags = {}
         for child in self.children.all().order_by():
@@ -411,7 +415,7 @@ class Book(models.Model):
         self.set__tag_counter_value(tags)
         self.save(reset_short_html=False, refresh_mp3=False)
         return tags
         self.set__tag_counter_value(tags)
         self.save(reset_short_html=False, refresh_mp3=False)
         return tags
-    
+
     @property
     def tag_counter(self):
         if self._tag_counter is None:
     @property
     def tag_counter(self):
         if self._tag_counter is None:
@@ -426,13 +430,13 @@ class Book(models.Model):
         self.set__theme_counter_value(tags)
         self.save(reset_short_html=False, refresh_mp3=False)
         return tags
         self.set__theme_counter_value(tags)
         self.save(reset_short_html=False, refresh_mp3=False)
         return tags
-    
+
     @property
     def theme_counter(self):
         if self._theme_counter is None:
             return self.refresh_theme_counter()
         return dict((int(k), v) for k, v in self.get__theme_counter_value().iteritems())
     @property
     def theme_counter(self):
         if self._theme_counter is None:
             return self.refresh_theme_counter()
         return dict((int(k), v) for k, v in self.get__theme_counter_value().iteritems())
-    
+
 
 
 class Fragment(models.Model):
 
 
 class Fragment(models.Model):
@@ -460,11 +464,8 @@ class Fragment(models.Model):
         if short_html and len(short_html):
             return mark_safe(short_html)
         else:
         if short_html and len(short_html):
             return mark_safe(short_html)
         else:
-            book_authors = [mark_safe(u'<a href="%s">%s</a>' % (tag.get_absolute_url(), tag.name))
-                for tag in self.book.tags if tag.category == 'author']
-
             setattr(self, key, unicode(render_to_string('catalogue/fragment_short.html',
             setattr(self, key, unicode(render_to_string('catalogue/fragment_short.html',
-                {'fragment': self, 'book': self.book, 'book_authors': book_authors})))
+                {'fragment': self})))
             self.save()
             return mark_safe(getattr(self, key))
 
             self.save()
             return mark_safe(getattr(self, key))