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.
4 from django.shortcuts import render, get_object_or_404, redirect
5 from django.http import HttpResponseForbidden, JsonResponse
6 from django.contrib.auth.decorators import login_required
7 from django.views.decorators.cache import never_cache
8 from django.views.decorators.http import require_POST
9 from django.views.generic.edit import FormView
11 from catalogue.models import Book
12 from social import forms, models
13 from wolnelektury.utils import is_ajax
16 # ====================
17 # = Shelf management =
18 # ====================
22 def like_book(request, slug):
23 book = get_object_or_404(Book, slug=slug)
25 if request.method != 'POST':
28 models.UserList.like(request.user, book)
31 return JsonResponse({"success": True, "msg": "ok", "like": True})
36 class AddSetView(FormView):
37 form_class = forms.AddSetForm
38 template_name = 'forms/form_detail.html'
40 def form_valid(self, form):
41 book, tag = form.save(self.request.user)
43 if is_ajax(self.request):
44 return JsonResponse(get_sets_for_book_ids([book.id], self.request.user))
49 class RemoveSetView(AddSetView):
50 form_class = forms.RemoveSetForm
54 def unlike_book(request, slug):
55 book = get_object_or_404(Book, slug=slug)
57 if request.method != 'POST':
60 models.UserList.unlike(request.user, book)
63 return JsonResponse({"success": True, "msg": "ok", "like": False})
69 def my_shelf(request):
70 template_name = 'social/my_shelf.html'
71 favs = request.user.userlist_set.filter(favorites=True)
72 others = request.user.userlist_set.filter(favorites=False)
73 ulists = list(request.user.userlist_set.all())
74 suggest = [t for t in ulists if t.name]
76 return render(request, template_name, {
79 #'books': Book.objects.filter(userlistitem__list__user=request.user),
83 def get_sets_for_book_ids(book_ids, user):
85 tagged = models.UserListItem.objects.filter(
88 ).order_by('list__name')
90 item = data.setdefault(t.book_id, [])
94 "url": t.list.get_absolute_url(),
106 def my_liked(request):
107 if not request.user.is_authenticated:
108 return JsonResponse({})
110 ids = [int(x) for x in request.GET.get('ids', '').split(',')]
112 return JsonResponse({})
113 return JsonResponse(get_sets_for_book_ids(ids, request.user))
118 def my_tags(request):
119 term = request.GET.get('term', '')
120 tags = models.UserList.objects.filter(user=request.user).order_by('name')
122 ulists = tags.filter(name__icontains=term)
125 ul.name for ul in ulists
130 def confirm_user(request, key):
131 uc = get_object_or_404(models.UserConfirmation, key=key)
134 return render(request, 'social/user_confirmation.html', {