"""Vues de gestion des profils utilisateurs.""" from django.contrib.auth.decorators import login_required from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.http import HttpResponseRedirect, HttpResponse 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 ProfileForm from .models import Profile, Notification from jarvis.people.models import Gymnast User = get_user_model() @login_required @require_http_methods(["GET", "POST"]) def profile_update(request): """Modification du profil de l'utilisateur connectĂ©""" try: profile = request.user.profile except Exception: # don't do this ! profile = Profile.objects.create(user=request.user) if request.method == "POST": form = ProfileForm(request.POST, instance=profile) if form.is_valid(): form.save() request.session["template"] = profile.template_color request.session["sidebar"] = profile.sidebar_color request.session["is_sidebar_minified"] = profile.is_sidebar_minified return HttpResponseRedirect(reverse("home")) else: form = ProfileForm(instance=profile) context = { "form": form, } return render(request, "update.html", context) @login_required @require_http_methods(["GET", "POST"]) def notification_update(request): gymnast_list = Gymnast.objects.filter(is_active=True).order_by( "first_name", "last_name" ) functionality_list = ContentType.objects.filter(app_label="followup") notification_dict = {} for gymnast in gymnast_list: query = gymnast.notifications.filter(user=request.user).values_list( "functionality", flat=True ) if query: notification_dict[gymnast.id] = query context = { "gymnast_list": gymnast_list, "functionality_list": functionality_list, "notification_dict": notification_dict, } return render(request, "notification_update.html", context) @require_http_methods(["POST"]) def notification_add(request): """ Ajoute une demande de notification """ gymnast_id = request.POST.get("gymnast_id", None) functionality_id = request.POST.get("functionality_id", None) gymnast = get_object_or_404(Gymnast, pk=gymnast_id) functionality = get_object_or_404(ContentType, pk=functionality_id) row, created = Notification.objects.get_or_create( user=request.user, gymnast=gymnast, functionality=functionality ) if created: return HttpResponse(200, (row, created)) # devrait ĂȘtre un 201 else: return HttpResponse(400, (row, created)) @require_http_methods(["POST"]) def notification_remove(request): """ Supprime une demande de notification """ gymnast_id = request.POST.get("gymnast_id", None) functionnality_id = request.POST.get("functionality_id", None) try: Notification.objects.get( user=request.user, gymnast=gymnast_id, functionality=functionnality_id ).delete() except Exception: return HttpResponse(409) return HttpResponse(200)