Add missing content type for text.
[wolnelektury.git] / src / wolnelektury / views.py
index a5db0a8..5e56f59 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]
@@ -54,13 +46,28 @@ def main_page(request):
                     break
             break
 
                     break
             break
 
-    # Choose a collection for main.
-    try:
-        ctx['collection'] = Collection.objects.order_by('?')[:1][0]
-    except IndexError:
-        pass
-
-    ctx['best'] = Book.objects.order_by('?')[:5]
+    # Choose collections for main.
+    ctx['collections'] = Collection.objects.filter(listed=True).order_by('?')[:4]
+
+    best = []
+    best_places = 5
+    recommended_collection = None
+    for recommended in Collection.objects.filter(listed=True, role='recommend').order_by('?'):
+        if recommended_collection is None:
+            recommended_collection = recommended
+        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
+    ctx['recommended_collection'] = recommended_collection
+    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 +81,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 +102,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 +168,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')