Always attempt to build HTML and fix_tree_tags when publishing a book. Also, some...
[wolnelektury.git] / apps / catalogue / fields.py
index 6080c2a..89b76ee 100644 (file)
@@ -134,19 +134,23 @@ class BuildHtml(BuildEbook):
 
         book = fieldfile.instance
 
-        meta_tags = list(book.tags.filter(
-            category__in=('author', 'epoch', 'genre', 'kind')))
-        book_tag = book.book_tag()
-
         html_output = self.transform(
                         book.wldocument(parse_dublincore=False),
                         fieldfile)
-        lang = book.language
-        lang = LANGUAGES_3TO2.get(lang, lang)
-        if lang not in [ln[0] for ln in settings.LANGUAGES]:
-            lang = None
+
+        # Delete old fragments, create from scratch if necessary.
+        book.fragments.all().delete()
 
         if html_output:
+            meta_tags = list(book.tags.filter(
+                category__in=('author', 'epoch', 'genre', 'kind')))
+            book_tag = book.book_tag()
+
+            lang = book.language
+            lang = LANGUAGES_3TO2.get(lang, lang)
+            if lang not in [ln[0] for ln in settings.LANGUAGES]:
+                lang = None
+
             fieldfile.save(None, ContentFile(html_output.get_string()),
                     save=False)
             type(book).objects.filter(pk=book.pk).update(**{
@@ -160,8 +164,6 @@ class BuildHtml(BuildEbook):
                 ancestor_tags.append(p.book_tag())
                 p = p.parent
 
-            # Delete old fragments and create them from scratch
-            book.fragments.all().delete()
             # Extract fragments
             closed_fragments, open_fragments = html.extract_fragments(fieldfile.path)
             for fragment in closed_fragments.values():
@@ -205,8 +207,10 @@ class BuildHtml(BuildEbook):
 
                 new_fragment.save()
                 new_fragment.tags = set(meta_tags + themes + [book_tag] + ancestor_tags)
+            book.fix_tree_tags()
             book.html_built.send(sender=book)
             return True
+        book.fix_tree_tags()
         return False
 
 @BuildEbook.register('cover_thumb')