merge new librarian changes with custom pdf fix
[wolnelektury.git] / apps / lesmianator / views.py
index 3307a25..cebcf8b 100644 (file)
@@ -1,5 +1,6 @@
 # Create your views here.
 
+from django.http import Http404
 from django.shortcuts import render_to_response, get_object_or_404
 from django.template import RequestContext
 from django.contrib.auth.decorators import login_required
@@ -23,7 +24,7 @@ def main_page(request):
 
 @cache.never_cache
 def new_poem(request):
-    user = request.user if request.user.is_authenticated else None
+    user = request.user if request.user.is_authenticated() else None
     text = Poem.write()
     p = Poem(slug=get_random_hash(text), text=text, created_by=user)
     p.save()
@@ -34,9 +35,12 @@ def new_poem(request):
 
 
 @cache.never_cache
-def poem_from_book(request, slug):
-    book = get_object_or_404(Book, slug=slug)
-    user = request.user if request.user.is_authenticated else None
+def poem_from_book(request, book):
+    kwargs = Book.split_urlid(book)
+    if kwargs is None:
+        raise Http404
+    book = get_object_or_404(Book, **kwargs)
+    user = request.user if request.user.is_authenticated() else None
     text = Poem.write(Continuations.get(book))
     p = Poem(slug=get_random_hash(text), text=text, created_by=user)
     p.set_created_from_value([book.id])
@@ -48,9 +52,8 @@ def poem_from_book(request, slug):
 
 
 @cache.never_cache
-@login_required
 def poem_from_set(request, shelf):
-    user = request.user
+    user = request.user if request.user.is_authenticated() else None
     tag = get_object_or_404(Tag, category='set', slug=shelf)
     text = Poem.write(Continuations.get(tag))
     p = Poem(slug=get_random_hash(text), text=text, created_by=user)
@@ -67,8 +70,11 @@ def poem_from_set(request, shelf):
 def get_poem(request, poem):
     p = get_object_or_404(Poem, slug=poem)
     p.visit()
-    books = Book.objects.filter(id__in=p.get_created_from_value())
-    book = books[0] if len(books) == 1 else None
+    if p.created_from:
+        books = Book.objects.filter(id__in=p.get_created_from_value())
+        book = books[0] if len(books) == 1 else None
+    else:
+        books = book = None
 
     return render_to_response('lesmianator/poem.html', 
                 {"poem": p, "books": books, "book": book},