Merge branch 'master' into appdev
[wolnelektury.git] / src / lesmianator / views.py
1 # This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
2 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
3 #
4 import json
5 from django.shortcuts import render, get_object_or_404
6 from django.views.decorators import cache
7
8 from catalogue.utils import get_random_hash
9 from catalogue.models import Book
10 from social.models import UserList
11 from lesmianator.models import Poem, Continuations
12
13
14 def main_page(request):
15     last = Poem.objects.all().order_by('-created_at')[:10]
16     shelves = UserList.objects.filter(user__username='lesmianator')
17
18     return render(
19         request,
20         'lesmianator/lesmianator.html',
21         {"last": last, "shelves": shelves})
22
23 @cache.never_cache
24 def new_poem(request):
25     user = request.user if request.user.is_authenticated else None
26     text = Poem.write()
27     p = Poem(slug=get_random_hash(text), text=text, created_by=user)
28     p.save()
29
30     return render(
31         request,
32         'lesmianator/poem.html',
33         {"poem": p})
34
35
36 @cache.never_cache
37 def poem_from_book(request, slug):
38     book = get_object_or_404(Book, slug=slug)
39     user = request.user if request.user.is_authenticated else None
40     text = Poem.write(Continuations.get(book))
41     p = Poem(slug=get_random_hash(text), text=text, created_by=user)
42     p.created_from = json.dumps([book.id])
43     p.save()
44
45     return render(
46         request,
47         'lesmianator/poem.html',
48         {"poem": p, "books": [book], "book": book})
49
50
51 @cache.never_cache
52 def poem_from_set(request, shelf):
53     user = request.user if request.user.is_authenticated else None
54     tag = get_object_or_404(UserList, slug=shelf)
55     text = Poem.write(Continuations.get(tag))
56     p = Poem(slug=get_random_hash(text), text=text, created_by=user)
57     books = tag.get_books()
58     p.created_from = json.dumps([b.id for b in books])
59     p.save()
60
61     book = books[0] if len(books) == 1 else None
62
63     return render(
64         request,
65         'lesmianator/poem.html',
66         {"poem": p, "shelf": tag, "books": books, "book": book})
67
68
69 def get_poem(request, poem):
70     p = get_object_or_404(Poem, slug=poem)
71     p.visit()
72     created_from = json.loads(p.created_from or '[]')
73     if created_from:
74         books = Book.objects.filter(id__in=created_from)
75         book = books[0] if len(books) == 1 else None
76     else:
77         books = book = None
78
79     return render(
80         request,
81         'lesmianator/poem.html',
82         {"poem": p, "books": books, "book": book})