fnp
/
wolnelektury.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Tag description update API
[wolnelektury.git]
/
src
/
catalogue
/
models
/
book.py
diff --git
a/src/catalogue/models/book.py
b/src/catalogue/models/book.py
index
97677bd
..
b624abc
100644
(file)
--- a/
src/catalogue/models/book.py
+++ b/
src/catalogue/models/book.py
@@
-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)
@@
-836,7
+849,7
@@
class Book(models.Model):
def related_themes(self):
return Tag.objects.usage_for_queryset(
Fragment.objects.filter(models.Q(book=self) | models.Q(book__ancestor=self)),
def related_themes(self):
return Tag.objects.usage_for_queryset(
Fragment.objects.filter(models.Q(book=self) | models.Q(book__ancestor=self)),
- counts=True).filter(category='theme')
+ counts=True).filter(category='theme')
.order_by('-count')
def parent_cover_changed(self):
"""Called when parent book's cover image is changed."""
def parent_cover_changed(self):
"""Called when parent book's cover image is changed."""