X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/63519710f7ae064e26d3ee068d59201e8bc02cf3..8a57885f70d87d9f79b0c0d47dc0f683d434b734:/apps/catalogue/models/book.py diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py index e320af76..42a4d1fc 100755 --- a/apps/catalogue/models/book.py +++ b/apps/catalogue/models/book.py @@ -87,6 +87,12 @@ class Book(models.Model): self.get_absolute_url() ) + def gallery_path(self): + return os.path.join(settings.MEDIA_ROOT, settings.IMAGE_DIR, self.gallery) + + def gallery_url(self): + return '%s%s%s/' % (settings.MEDIA_URL, settings.IMAGE_DIR, self.gallery) + # Creating & manipulating # ======================= @@ -94,7 +100,7 @@ class Book(models.Model): return self.public or request.user.is_authenticated() @classmethod - @transaction.commit_on_success + @transaction.atomic def create(cls, creator, text, *args, **kwargs): b = cls.objects.create(*args, **kwargs) b.chunk_set.all().update(creator=creator) @@ -106,7 +112,7 @@ class Book(models.Model): return self.chunk_set.reverse()[0].split(*args, **kwargs) @classmethod - @transaction.commit_on_success + @transaction.atomic def import_xml_text(cls, text=u'', previous_book=None, commit_args=None, **kwargs): """Imports a book from XML, splitting it into chunks as necessary.""" @@ -153,7 +159,7 @@ class Book(models.Model): i += 1 return new_slug - @transaction.commit_on_success + @transaction.atomic def append(self, other, slugs=None, titles=None): """Add all chunks of another book to self.""" assert self != other @@ -213,7 +219,7 @@ class Book(models.Model): other.delete() - @transaction.commit_on_success + @transaction.atomic def prepend_history(self, other): """Prepend history from all the other book's chunks to own.""" assert self != other @@ -416,17 +422,27 @@ class Book(models.Model): parse_dublincore=parse_dublincore, strict=strict) - def publish(self, user, fake=False): + def publish(self, user, fake=False, host=None): """ Publishes a book on behalf of a (local) user. """ self.assert_publishable() changes = self.get_current_changes(publishable=True) - book_xml = self.materialize(changes=changes) if not fake: - apiclient.api_call(user, "books/", {"book_xml": book_xml}) + book_xml = self.materialize(changes=changes) + data = {"book_xml": book_xml} + if host: + data['gallery_url'] = host + self.gallery_url() + apiclient.api_call(user, "books/", data) # record the publish br = BookPublishRecord.objects.create(book=self, user=user) for c in changes: ChunkPublishRecord.objects.create(book_record=br, change=c) + if not self.public: + self.public = True + self.save() post_publish.send(sender=br) + + def latex_dir(self): + doc = self.wldocument() + return doc.latex_dir(cover=True, ilustr_path=self.gallery_path())