Book _short_html fix, Fragment _short_html translations
[wolnelektury.git] / apps / catalogue / models.py
index b760ecc..2097e17 100644 (file)
@@ -9,6 +9,7 @@ from django.contrib.auth.models import User
 from django.core.files import File
 from django.template.loader import render_to_string
 from django.utils.safestring import mark_safe
+from django.utils.translation import get_language
 from django.core.urlresolvers import reverse
 from datetime import datetime
 
@@ -130,15 +131,18 @@ class Book(models.Model):
         return self.title
     
     def short_html(self):
-        if len(self._short_html):
-            return mark_safe(self._short_html)
+        key = '_short_html_%s' % get_language()
+        short_html = getattr(self, key)
+        
+        if len(short_html):
+            return mark_safe(short_html)
         else:
             tags = self.tags.filter(~Q(category__in=('set', 'theme', 'book')))
             tags = [mark_safe(u'<a href="%s">%s</a>' % (tag.get_absolute_url(), tag.name)) for tag in tags]
 
             formats = []
             if self.html_file:
-                formats.append(u'<a href="%s">Czytaj online</a>' % reverse('book_text', kwargs={'slug': self.slug}))
+                formats.append(u'<a href="%s">%s</a>' % (reverse('book_text', kwargs={'slug': self.slug}), _('Read online')))
             if self.pdf_file:
                 formats.append(u'<a href="%s">PDF</a>' % self.pdf_file.url)
             if self.odt_file:
@@ -152,15 +156,16 @@ class Book(models.Model):
             
             formats = [mark_safe(format) for format in formats]
             
-            self._short_html = unicode(render_to_string('catalogue/book_short.html',
-                {'book': self, 'tags': tags, 'formats': formats}))
+            setattr(self, key, unicode(render_to_string('catalogue/book_short.html',
+                {'book': self, 'tags': tags, 'formats': formats})))
             self.save(reset_short_html=False)
-            return mark_safe(self._short_html)
+            return mark_safe(getattr(self, key))
     
     def save(self, force_insert=False, force_update=False, reset_short_html=True):
         if reset_short_html:
             # Reset _short_html during save
-            self._short_html = ''
+            for key in filter(lambda x: x.startswith('_short_html'), self.__dict__):
+                self.__setattr__(key, '')
         
         book = super(Book, self).save(force_insert, force_update)
         
@@ -218,7 +223,7 @@ class Book(models.Model):
             book_shelves = []
         else:
             if not overwrite:
-                raise Book.AlreadyExists('Book %s already exists' % book_slug)
+                raise Book.AlreadyExists(_('Book %s already exists') % book_slug)
             # Save shelves for this book
             book_shelves = list(book.tags.filter(category='set'))
         
@@ -261,7 +266,7 @@ class Book(models.Model):
                     child_book.parent_number = n
                     child_book.save()
                 except Book.DoesNotExist, e:
-                    raise Book.DoesNotExist(u'Book with slug = "%s" does not exist.' % slug)
+                    raise Book.DoesNotExist(_('Book with slug = "%s" does not exist.') % slug)
         
         book_descendants = list(book.children.all())
         while len(book_descendants) > 0:
@@ -338,16 +343,18 @@ class Fragment(models.Model):
     tags = managers.TagDescriptor(Tag)
     
     def short_html(self):
-        if len(self._short_html):
-            return mark_safe(self._short_html)
+        key = '_short_html_%s' % get_language()
+        short_html = getattr(self, key)         
+        if 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']
             
-            self._short_html = unicode(render_to_string('catalogue/fragment_short.html',
-                {'fragment': self, 'book': self.book, 'book_authors': book_authors}))
+            setattr(self, key, unicode(render_to_string('catalogue/fragment_short.html',
+                {'fragment': self, 'book': self.book, 'book_authors': book_authors})))
             self.save()
-            return mark_safe(self._short_html)
+            return mark_safe(getattr(self, key))
     
     def get_absolute_url(self):
         return '%s#m%s' % (reverse('book_text', kwargs={'slug': self.book.slug}), self.anchor)
@@ -383,5 +390,4 @@ class BookStub(models.Model):
     class Meta:
         ordering = ('title',)
         verbose_name = _('book stub')
-        verbose_name_plural = _('book stubs')
-
+        verbose_name_plural = _('book stubs')
\ No newline at end of file