Publishing non-findable books.
authorRadek Czajka <rczajka@rczajka.pl>
Mon, 27 Sep 2021 13:57:32 +0000 (15:57 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Mon, 27 Sep 2021 13:57:32 +0000 (15:57 +0200)
src/catalogue/forms.py
src/search/index.py

index 405ea7c..0e5b4d1 100644 (file)
@@ -16,6 +16,7 @@ class BookImportForm(forms.Form):
     book_xml = forms.CharField(required=False)
     gallery_url = forms.CharField(required=False)
     days = forms.IntegerField(required=False)
+    hidden = forms.BooleanField(required=False)
 
     def clean(self):
         from django.core.files.base import ContentFile
@@ -31,7 +32,9 @@ class BookImportForm(forms.Form):
     def save(self, **kwargs):
         return Book.from_xml_file(self.cleaned_data['book_xml_file'], overwrite=True,
                                   remote_gallery_url=self.cleaned_data['gallery_url'],
-                                  days=self.cleaned_data['days'], **kwargs)
+                                  days=self.cleaned_data['days'],
+                                  findable=not self.cleaned_data['hidden'],
+                                  **kwargs)
 
 
 FORMATS = [(f, f.upper()) for f in Book.ebook_formats]
index 2d84cb4..06d2c4a 100644 (file)
@@ -636,7 +636,7 @@ class SearchResult(object):
         if self._book is not None:
             return self._book
         try:
-            self._book = catalogue.models.Book.objects.get(id=self.book_id)
+            self._book = catalogue.models.Book.objects.get(id=self.book_id, findable=True)
         except catalogue.models.Book.DoesNotExist:
             self._book = None
         return self._book
@@ -903,7 +903,7 @@ class Search(SolrIndex):
 
     def search_by_author(self, words):
         from catalogue.models import Book
-        books = Book.objects.filter(parent=None).order_by('-popularity__count')
+        books = Book.objects.filter(parent=None, findable=True).order_by('-popularity__count')
         for word in words:
             books = books.filter(cached_author__iregex='\m%s\M' % word).select_related('popularity__count')
         return [SearchResult.from_book(book, how_found='search_by_author', query_terms=words) for book in books[:30]]
@@ -977,7 +977,7 @@ class Search(SolrIndex):
                 idx += 1
 
         except IOError as e:
-            book = catalogue.models.Book.objects.filter(id=book_id)
+            book = catalogue.models.Book.objects.filter(id=book_id, findable=True)
             if not book:
                 log.error("Book does not exist for book id = %d" % book_id)
             elif not book.get().children.exists():