X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/f9a071b288cec64a55000125a63b62a3b233c3fd..3200b733982abd6033a6b638d9c40ceda4948333:/src/social/views.py diff --git a/src/social/views.py b/src/social/views.py index d9627eb9e..0ff077104 100644 --- a/src/social/views.py +++ b/src/social/views.py @@ -1,5 +1,5 @@ -# 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 Wolne Lektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Wolne Lektury. See NOTICE for more information. # from django.shortcuts import render, get_object_or_404, redirect from django.http import HttpResponseForbidden, JsonResponse @@ -8,11 +8,8 @@ from django.views.decorators.cache import never_cache from django.views.decorators.http import require_POST from django.views.generic.edit import FormView -from ajaxable.utils import AjaxableFormView - -from catalogue.models import Book, Tag -import catalogue.models.tag -from social import forms +from catalogue.models import Book +from social import forms, models from wolnelektury.utils import is_ajax @@ -21,13 +18,14 @@ from wolnelektury.utils import is_ajax # ==================== -@require_POST +@login_required def like_book(request, slug): - if not request.user.is_authenticated: - return HttpResponseForbidden('Login required.') book = get_object_or_404(Book, slug=slug) - book.like(request.user) + if request.method != 'POST': + return redirect(book) + + models.UserList.like(request.user, book) if is_ajax(request): return JsonResponse({"success": True, "msg": "ok", "like": True}) @@ -52,13 +50,14 @@ class RemoveSetView(AddSetView): form_class = forms.RemoveSetForm -@require_POST +@login_required def unlike_book(request, slug): - if not request.user.is_authenticated: - return HttpResponseForbidden('Login required.') book = get_object_or_404(Book, slug=slug) - book.unlike(request.user) + if request.method != 'POST': + return redirect(book) + + models.UserList.unlike(request.user, book) if is_ajax(request): return JsonResponse({"success": True, "msg": "ok", "like": False}) @@ -68,30 +67,30 @@ def unlike_book(request, slug): @login_required def my_shelf(request): - if request.EXPERIMENTS['layout'].value: - template_name = 'social/2022/my_shelf.html' - else: - template_name = 'social/my_shelf.html' + template_name = 'social/my_shelf.html' + ulists = list(request.user.userlist_set.all()) + suggest = [t for t in ulists if t.name] + return render(request, template_name, { - 'books': Book.tagged.with_any(request.user.tag_set.all()) + 'tags': ulists, + 'books': Book.objects_filter(userlistitem__list__user=request.user), + 'suggest': suggest, }) def get_sets_for_book_ids(book_ids, user): data = {} - tagged = catalogue.models.tag.TagRelation.objects.filter( - tag__user=user, - #content_type= # for books, - object_id__in=book_ids - ).order_by('tag__sort_key') + tagged = models.UserListItem.objects.filter( + list__user=user, + book_id__in=book_ids + ).order_by('list__name') for t in tagged: - # related? - item = data.setdefault(t.object_id, []) - if t.tag.name: + item = data.setdefault(t.book_id, []) + if t.list.name: item.append({ - "slug": t.tag.slug, - "url": t.tag.get_absolute_url(), - "name": t.tag.name, + "slug": t.list.slug, + "url": t.list.get_absolute_url(), + "name": t.list.name, }) for b in book_ids: if b not in data: @@ -116,28 +115,20 @@ def my_liked(request): @login_required def my_tags(request): term = request.GET.get('term', '') - tags = Tag.objects.filter(user=request.user).order_by('sort_key') + tags = models.UserList.objects.filter(user=request.user).order_by('name') if term: - tags = tags.filter(name__icontains=term) + ulists = tags.filter(name__icontains=term) return JsonResponse( [ - t.name for t in tags + ul.name for ul in ulists ], safe=False ) -class ObjectSetsFormView(AjaxableFormView): - form_class = forms.ObjectSetsForm - placeholdize = True - template = 'social/sets_form.html' - ajax_redirect = True - POST_login = True - - def get_object(self, request, slug): - return get_object_or_404(Book, slug=slug) - - def context_description(self, request, obj): - return obj.pretty_title() - - def form_args(self, request, obj): - return (obj, request.user), {} +def confirm_user(request, key): + uc = get_object_or_404(models.UserConfirmation, key=key) + user = uc.user + uc.use() + return render(request, 'social/user_confirmation.html', { + 'user': user, + })