X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/6280673f35e13e75e81c5b7821bd2a44a1831eab..357027375ff8867f42ca34bcbfb5a78b5b185fc3:/src/social/views.py diff --git a/src/social/views.py b/src/social/views.py new file mode 100644 index 000000000..49c9b708a --- /dev/null +++ b/src/social/views.py @@ -0,0 +1,90 @@ +# -*- 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. +# +from django.shortcuts import render, get_object_or_404, redirect +from django.http import HttpResponseForbidden, JsonResponse +from django.contrib.auth.decorators import login_required +from django.views.decorators.http import require_POST + +from ajaxable.utils import AjaxableFormView + +from catalogue.models import Book +from ssify import ssi_included +from social import forms +from .models import Cite +from social.utils import get_set, likes, set_sets + + +# ==================== +# = Shelf management = +# ==================== + + +@require_POST +def like_book(request, slug): + if not request.user.is_authenticated(): + return HttpResponseForbidden('Login required.') + book = get_object_or_404(Book, slug=slug) + if not likes(request.user, book): + tag = get_set(request.user, '') + set_sets(request.user, book, [tag]) + + if request.is_ajax(): + return JsonResponse({"success": True, "msg": "ok", "like": True}) + else: + return redirect(book) + + +@login_required +def my_shelf(request): + books = Book.tagged.with_any(request.user.tag_set.all()) + return render(request, 'social/my_shelf.html', locals()) + + +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), {} + + +@require_POST +def unlike_book(request, slug): + if not request.user.is_authenticated(): + return HttpResponseForbidden('Login required.') + book = get_object_or_404(Book, slug=slug) + if likes(request.user, book): + set_sets(request.user, book, []) + + if request.is_ajax(): + return JsonResponse({"success": True, "msg": "ok", "like": False}) + else: + return redirect(book) + + +@ssi_included +def cite(request, pk, main=False): + cite = get_object_or_404(Cite, pk=pk) + return render(request, 'social/cite_promo.html', { + 'main': main, + 'cite': cite, + }) + + +@ssi_included(use_lang=False) +def cite_info(request, pk): + cite = get_object_or_404(Cite, pk=pk) + return render(request, 'social/cite_info.html', { + 'cite': cite, + })