__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.shortcuts import HttpResponse from django.template.response import TemplateResponse from scipost.permissions import HTMXResponse from .models import Note from .forms import NoteForm def _hx_note_create_form(request, regarding_content_type, regarding_object_id): regarding_content_type = ContentType.objects.get_for_id(regarding_content_type) form = NoteForm( request.POST or None, initial={ "author": request.user.contributor, "regarding_object_id": regarding_object_id, "regarding_content_type": regarding_content_type, }, ) if form.is_valid(): form.save() response = HTMXResponse("Note created successfully", tag="success") response["HX-Trigger"] = "notes-updated" return response context = {"form": form} return TemplateResponse(request, "pins/_hx_note_create_form.html", context) def _hx_note_delete(request, pk): if request.method != "DELETE": return HTMXResponse("Invalid request method", tag="danger") note = Note.objects.filter(pk=pk).first() if note is None: return HTMXResponse("Note not found", tag="danger") if note.author == request.user.contributor: note.delete() return HttpResponse() else: response = HTMXResponse( "You are not the author of this note.", tag="danger" ) response["HX-Trigger"] = "notes-updated" return response def _hx_notes_list(request, regarding_content_type, regarding_object_id): regarding_content_type = ContentType.objects.get_for_id(regarding_content_type) object = regarding_content_type.get_object_for_this_type(id=regarding_object_id) notes = Note.objects.filter( regarding_content_type=regarding_content_type, regarding_object_id=regarding_object_id, ) # Handle permission checks for viewing and creating notes can_create_notes = request.user.has_perm("pins.can_add_notes") # Filter according to the visibility of the notes notes = notes.visible_to(request.user, object.__class__) context = { "object": object, "can_create_notes": can_create_notes, "notes": notes, } return TemplateResponse(request, "pins/_hx_notes_list.html", context)