edit buttons
[wolnelektury.git] / src / catalogue / models / book.py
index d3eddfd..b624abc 100644 (file)
@@ -139,6 +139,8 @@ class Book(models.Model):
 
     SORT_KEY_SEP = '$'
 
 
     SORT_KEY_SEP = '$'
 
+    is_book = True
+
     class AlreadyExists(Exception):
         pass
 
     class AlreadyExists(Exception):
         pass
 
@@ -229,8 +231,15 @@ class Book(models.Model):
     def is_accessible_to(self, user):
         if not self.preview:
             return True
     def is_accessible_to(self, user):
         if not self.preview:
             return True
+        if not user.is_authenticated:
+            return False
         Membership = apps.get_model('club', 'Membership')
         Membership = apps.get_model('club', 'Membership')
-        return Membership.is_active_for(user)
+        if Membership.is_active_for(user):
+            return True
+        Funding = apps.get_model('funding', 'Funding')
+        if Funding.objects.filter(user=user, offer__book=self):
+            return True
+        return False
 
     def save(self, force_insert=False, force_update=False, **kwargs):
         from sortify import sortify
 
     def save(self, force_insert=False, force_update=False, **kwargs):
         from sortify import sortify
@@ -289,23 +298,24 @@ class Book(models.Model):
         
         return self.parent.get_prev_text()
 
         
         return self.parent.get_prev_text()
 
-    def get_next_text(self):
-        child = self.children.order_by('parent_number').first()
-        if child is not None:
-            return child.get_first_text()
+    def get_next_text(self, inside=True):
+        if inside:
+            child = self.children.order_by('parent_number').first()
+            if child is not None:
+                return child.get_first_text()
 
         if not self.parent:
             return None
         sibling = self.parent.children.filter(parent_number__gt=self.parent_number).order_by('parent_number').first()
         if sibling is not None:
             return sibling.get_first_text()
 
         if not self.parent:
             return None
         sibling = self.parent.children.filter(parent_number__gt=self.parent_number).order_by('parent_number').first()
         if sibling is not None:
             return sibling.get_first_text()
-        return self.parent.get_next_text()
+        return self.parent.get_next_text(inside=False)
 
     def get_child_audiobook(self):
         BookMedia = apps.get_model('catalogue', 'BookMedia')
         if not BookMedia.objects.filter(book__ancestor=self).exists():
             return None
 
     def get_child_audiobook(self):
         BookMedia = apps.get_model('catalogue', 'BookMedia')
         if not BookMedia.objects.filter(book__ancestor=self).exists():
             return None
-        for child in self.children.all():
+        for child in self.children.order_by('parent_number').all():
             if child.has_mp3_file():
                 return child
             child_sub = child.get_child_audiobook()
             if child.has_mp3_file():
                 return child
             child_sub = child.get_child_audiobook()
@@ -553,6 +563,7 @@ class Book(models.Model):
 
     # will make problems in conjunction with paid previews
     def download_pictures(self, remote_gallery_url):
 
     # will make problems in conjunction with paid previews
     def download_pictures(self, remote_gallery_url):
+        # This is only needed for legacy relative image paths.
         gallery_path = self.gallery_path()
         # delete previous files, so we don't include old files in ebooks
         if os.path.isdir(gallery_path):
         gallery_path = self.gallery_path()
         # delete previous files, so we don't include old files in ebooks
         if os.path.isdir(gallery_path):
@@ -564,6 +575,8 @@ class Book(models.Model):
             makedirs(gallery_path)
             for ilustr in ilustr_elements:
                 ilustr_src = ilustr.get('src')
             makedirs(gallery_path)
             for ilustr in ilustr_elements:
                 ilustr_src = ilustr.get('src')
+                if '/' in ilustr_src:
+                    continue
                 ilustr_path = os.path.join(gallery_path, ilustr_src)
                 urlretrieve('%s/%s' % (remote_gallery_url, ilustr_src), ilustr_path)
 
                 ilustr_path = os.path.join(gallery_path, ilustr_src)
                 urlretrieve('%s/%s' % (remote_gallery_url, ilustr_src), ilustr_path)