fix
[wolnelektury.git] / src / wolnelektury / views.py
index a5db0a8..48063d2 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -20,30 +19,23 @@ from django.views.decorators.cache import never_cache
 from ajaxable.utils import AjaxableFormView
 from ajaxable.utils import placeholdized
 from catalogue.models import Book, Collection, Tag, Fragment
 from ajaxable.utils import AjaxableFormView
 from ajaxable.utils import placeholdized
 from catalogue.models import Book, Collection, Tag, Fragment
-from ssify import ssi_included
 
 from social.utils import get_or_choose_cite
 from wolnelektury.forms import RegistrationForm, SocialSignupForm
 
 
 
 from social.utils import get_or_choose_cite
 from wolnelektury.forms import RegistrationForm, SocialSignupForm
 
 
+@never_cache
 def main_page(request):
     ctx = {
 def main_page(request):
     ctx = {
-        'last_published': Book.objects.exclude(cover_thumb='').filter(parent=None).order_by('-created_at')[:6],
+        'last_published': Book.objects.exclude(cover_thumb='').filter(findable=True, parent=None).order_by('-created_at')[:6],
         'theme_books': [],
         'theme_books': [],
-        'cite': get_or_choose_cite(request),
     }
 
     }
 
-    # for category in ('author', 'epoch', 'genre', 'kind'):
-    #     try:
-    #         ctx[category] = Tag.objects.filter(category=category).order_by('?')[:1][0]
-    #     except IndexError:
-    #         pass
-
     # FIXME: find this theme and books properly.
     if Fragment.objects.exists():
         while True:
             ctx['theme'] = Tag.objects.filter(category='theme').order_by('?')[:1][0]
     # FIXME: find this theme and books properly.
     if Fragment.objects.exists():
         while True:
             ctx['theme'] = Tag.objects.filter(category='theme').order_by('?')[:1][0]
-            tf = Fragment.tagged.with_any([ctx['theme']]).select_related('book').order_by('?')[:100]
+            tf = Fragment.tagged.with_any([ctx['theme']]).select_related('book').filter(book__findable=True).order_by('?')[:100]
             if not tf:
                 continue
             ctx['theme_fragment'] = tf[0]
             if not tf:
                 continue
             ctx['theme_fragment'] = tf[0]
@@ -56,11 +48,25 @@ def main_page(request):
 
     # Choose a collection for main.
     try:
 
     # Choose a collection for main.
     try:
-        ctx['collection'] = Collection.objects.order_by('?')[:1][0]
+        ctx['collection'] = Collection.objects.filter(listed=True).order_by('?')[:1][0]
     except IndexError:
         pass
 
     except IndexError:
         pass
 
-    ctx['best'] = Book.objects.order_by('?')[:5]
+    best = []
+    best_places = 5
+    for recommended in Collection.objects.filter(listed=True, role='recommend').order_by('?'):
+        books = list(recommended.get_books().exclude(id__in=[b.id for b in best]).order_by('?')[:best_places])
+        best.extend(books)
+        best_places -= len(books)
+        if not best_places:
+            break
+    if best_places:
+        best.extend(
+            list(
+                Book.objects.filter(findable=True).exclude(id__in=[b.id for b in best]).order_by('?')[:best_places]
+            )
+        )
+    ctx['best'] = best
 
     return render(request, "main_page.html", ctx)
 
 
     return render(request, "main_page.html", ctx)
 
@@ -74,7 +80,7 @@ class LoginFormView(AjaxableFormView):
     ajax_redirect = True
 
     def __call__(self, request):
     ajax_redirect = True
 
     def __call__(self, request):
-        if request.user.is_authenticated():
+        if request.user.is_authenticated:
             return self.redirect_or_refresh(
                 request, '/',
                 message=_('Already logged in as user %(user)s', ) % {'user': request.user.username})
             return self.redirect_or_refresh(
                 request, '/',
                 message=_('Already logged in as user %(user)s', ) % {'user': request.user.username})
@@ -95,7 +101,7 @@ class RegisterFormView(AjaxableFormView):
     honeypot = True
 
     def __call__(self, request):
     honeypot = True
 
     def __call__(self, request):
-        if request.user.is_authenticated():
+        if request.user.is_authenticated:
             return self.redirect_or_refresh(
                 request, '/',
                 message=_('Already logged in as user %(user)s', ) % {'user': request.user.username})
             return self.redirect_or_refresh(
                 request, '/',
                 message=_('Already logged in as user %(user)s', ) % {'user': request.user.username})
@@ -161,28 +167,6 @@ def user_settings(request):
     return render(request, "user.html")
 
 
     return render(request, "user.html")
 
 
-@ssi_included(use_lang=False, timeout=1800)
-def latest_blog_posts(request, feed_url=None, posts_to_show=5):
-    if feed_url is None:
-        feed_url = settings.LATEST_BLOG_POSTS
-    try:
-        feed = feedparser.parse(str(feed_url))
-        posts = []
-        for i in range(posts_to_show):
-            pub_date = feed['entries'][i].published_parsed
-            published = date(pub_date[0], pub_date[1], pub_date[2])
-            posts.append({
-                'title': feed['entries'][i].title,
-                'summary': feed['entries'][i].summary,
-                'link': feed['entries'][i].link,
-                'date': published,
-                })
-    except:
-        posts = []
-    return render(request, 'latest_blog_posts.html', {'posts': posts})
-
-
-@ssi_included(use_lang=False)
 def widget(request):
     return render(request, 'widget.html')
 
 def widget(request):
     return render(request, 'widget.html')