"""Vues et fonctions pour tout ce qui touche à la communication entre plusieurs utilisateurs.""" from datetime import datetime from django.contrib.auth.decorators import login_required from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render, get_object_or_404 from django.views.decorators.http import require_http_methods from django.urls import reverse from .forms import MessageForm from .models import Message @login_required def get_number_of_unread_message(request): """Récupère le nombre de messages non lus associés à l'utilisateur en session. """ return ( Message.objects.filter(recipient=request.user) .filter(read_at__isnull=True) .count() ) @login_required @require_http_methods(["GET"]) def get_received_messages(request): """Récupère des messages recus pour l'utilisateur connecté. """ return request.user.received_messages.all() @login_required @require_http_methods(["GET"]) def get_sent_messages(request): """Récupère des messages envoyés par l'utilisateur connecté. """ return request.user.sent_messages.all() @login_required @require_http_methods(["GET"]) def get_message_details(request, messageid): """Récupère les détails (l'affichage ?) d'un message. """ message = get_object_or_404(Message, pk=messageid) if not message.read_at and message.recipient == request.user.id: message.read_at = datetime.now() message.save() context = {"message": message, "type": None} return render(request, "message_details.html", context) @login_required @require_http_methods(["POST"]) def delete_message(request, messageid): """Supprime le message dont la clé est passée en paramètre. """ try: message = Message.objects.get(pk=messageid) if message.sender == request.user or message.recipient == request.user: message.delete() else: return HttpResponse(401) except: return HttpResponse(400) return HttpResponse(200) @login_required @require_http_methods(["GET", "POST"]) def compose_message(request): """Permet à l'utilisateur connecté de rédiger un nouveau message. """ if request.method == "POST": form = MessageForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse("sent_messages")) print("Invalid form") else: form = MessageForm() context = {"form": form, "writer": request.user.id} return render(request, "message_create.html", context)