def repondreatous(request,message_id): """Renvoie vers la vue de réponse au message dont l'id est message_id""" message = Message.objects.filter(pk=message_id).filter(Q(auteur = request.user, hasAuteur = True) | Q(messagerecu__user = request.user)) if not message.exists(): raise Http404("Message non trouvé") message = message.first() destinataires = list(message.messagerecu.all()) if message.auteur.username in ['admin','Secrétariat']: returHttpResponseForbidden("Vous n'avez pas le droit de répondre") if message.auteur == request.user: # si on répond à un message qu'on a envoyé if request.user.eleve and not Config.objects.get_config().message_eleves: returHttpResponseForbidden("Vous n'avez pas le droit de répondre") else: desti = get_object_or_404(Destinataire,message=message,user=request.user) if request.user.eleve and desti.reponses and not Config.objects.get_config().message_eleves: return HttpResponseForbidden("Vous n'avez pas le droit de répondre") destinataires.append(Destinataire(user=message.auteur,message=None)) listedestinataires = "; ".join([str(desti.user) for desti in destinataires]) form = ReponseForm(message,request.POST or None, initial = {"destinataire": listedestinataires}) if form.is_valid(): mesage = Message(auteur=request.user,listedestinataires=listedestinataires,titre=form.cleaned_data['titre'],corps=form.cleaned_data['corps']) mesage.save() for destinat in destinataires: if destinat.user != request.user: Destinataire(message = mesage, user=destinat.user).save() messagees.error(request, "Message envoyé") if message.auteur != request.user: desti.reponses +=1 desti.save() return redirect('messages') return render(request,"accueil/repondre.html",{'form':form,'message':message})
def save(self): super().save() if not self.atous: Destinataire(user=self.message.auteur, message=self.instance).save() else: Destinataire.objects.bulk_create([ Destinataire(message=self.instance, user=destinataire.user) for destinataire in self.atous if destinataire.user != self.user ])
def answer(request, message_id, answerAll): """répond au message dont l'identifiant est message_id, avec les champs POST title et body. La réponse est envoyée à tous si la variable booléenne answerAll vaut True, et uniquement à l'expéditeur du message original sinon""" user = request.user if not checkeleve(user) and not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'body' not in request.POST or 'title' not in request.POST: raise Http404 message = get_object_or_404(Message, pk=message_id, messagerecu__user=user) userdestinataire = get_object_or_404(Destinataire, user=user, message=message) if userdestinataire.reponses and user.eleve is not None and not Config.objects.get_config( ).message_eleves: return HttpResponseForbidden("already answered") listedestinataires = message.auteur.first_name.title() + " " + \ message.auteur.last_name.upper() reponse = Message(auteur=user, titre=request.POST['title'], corps=request.POST['body'], listedestinataires=listedestinataires) reponse.save() destinataire = Destinataire(message=reponse, user=message.auteur) destinataire.save() userdestinataire.reponses += 1 userdestinataire.save() if answerAll == '1': destinataires = [] for destinataireUser in message.messagerecu.all(): if destinataireUser.user != user: destinataires.append( Destinataire(message=reponse, user=destinataireUser.user, reponses=0)) listedestinataires += "; " + str(destinataireUser.user) Destinataire.objects.bulk_create(destinataires) reponse.listedestinataires = listedestinataires reponse.save() return HttpResponse( json.dumps({ 'pk': reponse.pk, 'date': int(reponse.date.strftime('%s')), 'listedestinataires': reponse.listedestinataires, 'titre': reponse.titre, 'corps': reponse.corps, 'pj': reponse.pj }))
def repondre(request, message_id): """Renvoie vers la vue de réponse au message dont l'id est message_id""" message = get_object_or_404(Message, pk=message_id) if message.auteur == request.user: # on ne peut que "répondre à tous" à un message qu'on a envoyé raise Http404 destinataire = get_object_or_404(Destinataire, message=message, user=request.user) if request.user.eleve and destinataire.reponses and not Config.objects.get_config( ).message_eleves or message.auteur.username in ['admin', 'Secrétariat']: return HttpResponseForbidden("Vous n'avez pas le droit de répondre") form = ReponseForm(message, request.POST or None, initial={'destinataire': str(message.auteur)}) if form.is_valid(): mesage = Message(auteur=request.user, listedestinataires=str(message.auteur), titre=form.cleaned_data['titre'], corps=form.cleaned_data['corps']) mesage.save() Destinataire(user=message.auteur, message=message).save() messagees.error(request, "Message envoyé") destinataire.reponses += 1 destinataire.save() return redirect('messages') return render(request, "accueil/repondre.html", { 'form': form, 'message': message })
def repondre(request, destinataire_id): """Renvoie vers la vue de réponse au message dont le destinataire est destinataire_id""" destinataire = get_object_or_404(Destinataire, pk=destinataire_id) if destinataire.user != request.user: raise Http404 repondre = False if destinataire.message.auteur.username not in ['admin', 'Secrétariat']: if request.user.colleur or (request.user.eleve and not destinataire.reponses): repondre = True if not repondre: return HttpResponseForbidden("Vous n'avez pas le droit de répondre") form = ReponseForm(destinataire, request.POST or None) if form.is_valid(): message = Message(auteur=request.user, listedestinataires=str(destinataire.message.auteur), titre=form.cleaned_data['titre'], corps=form.cleaned_data['corps']) message.save() Destinataire(user=destinataire.message.auteur, message=message).save() destinataire.reponses += 1 destinataire.save() messagees.error(request, "Message envoyé") return redirect('messages') return render(request, "accueil/repondre.html", { 'form': form, 'destinataire': destinataire })
def ecrire(request): """Renvoie vers la vue d'écriture d'un message """ if request.user.eleve: return HttpResponseForbidden form=EcrireForm(request.user,request.POST or None) if form.is_valid(): destinataires = set() for key,value in form.cleaned_data.items(): cle = key.split('_')[0] if cle == 'classematiere' or cle == 'classeprof': destinataires |= {colleur.user for colleur in value} elif cle == 'classegroupe': destinataires |= {eleve.user for eleve in Eleve.objects.filter(groupe__in=value)} elif cle == 'classeeleve': destinataires |= {eleve.user for eleve in value} if not destinataires: messagees.error(request, "Il faut au moins un destinataire") else: message = Message(auteur=request.user,listedestinataires="; ".join(["{} {}".format(destinataire.first_name.title(),destinataire.last_name.upper()) for destinataire in destinataires]),titre=form.cleaned_data['titre'],corps=form.cleaned_data['corps']) message.save() for personne in destinataires: Destinataire(user=personne,message=message).save() messagees.error(request, "Message envoyé") return redirect('messages') return render(request,"accueil/ecrire.html",{'form':form})
def save(self): self.instance.listedestinataires = "; ".join( str(personne) for personne in self.destinataires) super().save() Destinataire.objects.bulk_create([ Destinataire(user=personne, message=self.instance) for personne in self.destinataires ])
def addmessage(request): """ajoute un message envoyé par l"utilisateur (colleur)""" user = request.user if not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'title' not in request.POST or 'body' not in request.POST or 'recipients' not in request.POST: raise Http404 title = request.POST['title'] body = request.POST['body'] destinataires = set() try: destinataireList = [[int(x) for x in y.split("-")] for y in request.POST['recipients'].split("_")] except Exception: raise Http404 for genre, pk, matiere_pk in destinataireList: if genre == 1: # élève try: destinataires.add(User.objects.get(eleve__pk = pk)) except Exception as e: pass elif genre == 2: # colleur try: destinataires.add(User.objects.get(colleur__pk = pk)) except Exception: pass elif genre == 3: # groupe try: destinataires |= {eleve.user for eleve in Eleve.objects.filter(groupe__pk = pk)} except Exception as e: return HttpResponse(str(e)) elif genre == 4: # tous les élèves d'une classe try: destinataires |= {eleve.user for eleve in Eleve.objects.filter(classe__pk = pk)} except Exception: pass elif genre == 5: # tous les profs d'une classe try: destinataires |= {colleur.user for colleur in Colleur.objects.filter(colleurprof__classe__pk = pk)} except Exception: pass elif genre == 6: # tous les colleurs d'une classe et d'une matière try: destinataires |= {colleur.user for colleur in Colleur.objects.filter(classes__pk = pk, matieres__pk = matiere_pk)} except Exception: pass if not destinataires: return HttpResponse("Il faut au moins un destinataire") else: destinataires.discard(user) message = Message(auteur=user,listedestinataires="; ".join(["{} {}".format(destinataire.first_name.title(),destinataire.last_name.upper()) for destinataire in destinataires]),titre=request.POST['title'],corps=request.POST['body']) message.save() for personne in destinataires: Destinataire(user=personne,message=message).save() return HttpResponse(json.dumps({'pk': message.pk, 'date': int(message.date.strftime( '%s')), 'listedestinataires': message.listedestinataires, 'titre': message.titre, 'corps': message.corps}))
def repondreatous(request, message_id): """Renvoie vers la vue de réponse au message dont l'id est message_id""" message = Message.objects.filter(pk=message_id).filter( Q(auteur=request.user, hasAuteur=True) | Q(messagerecu__user=request.user)) if not message.exists(): raise Http404("Message non trouvé") message = message.first() destinataires = list(message.messagerecu.all()) if message.auteur == request.user: # si on répond à un message qu'on a envoyé if request.user.eleve and not Config.objects.get_config( ).message_eleves: return HttpResponseForbidden( "Vous n'avez pas le droit de répondre") else: desti = get_object_or_404(Destinataire, message=message, user=request.user) if request.user.eleve and desti.reponses and not Config.objects.get_config( ).message_eleves: return HttpResponseForbidden( "Vous n'avez pas le droit de répondre") destinataires.append(Destinataire(user=message.auteur, message=None)) listedestinataires = "; ".join( [str(desti.user) for desti in destinataires]) reponse = Message(auteur=request.user, listedestinataires=listedestinataires, titre="Re: " + message.titre, corps=(">" + message.corps.strip().replace("\n", "\n>") + "\n")) form = ReponseForm(message, destinataires, request.user, request.POST or None, request.FILES or None, initial={"destinataire": listedestinataires}, instance=reponse) if form.is_valid(): form.save() messagees.error(request, "Message envoyé") if message.auteur != request.user: desti.reponses += 1 desti.save() return redirect('messages') return render(request, "accueil/repondre.html", { 'form': form, 'message': message })
def answer(request, message_id, answerAll): """répond au message dont l'identifiant est message_id, avec les champs POST title et body. La réponse est envoyée à tous si la variable booléenne ansewAll vaut True, et uniquement à l'expéditeur du message original sinon""" user = request.user if not checkeleve(user) and not checkcolleur(user): return HttpResponseForbidden("not authenticated") if request.method != 'POST' or 'body' not in request.POST or 'title' not in request.POST: raise Http404 message = get_object_or_404(Message, pk=message_id, messagerecu__user=user) userdestinataire = get_object_or_404( Destinataire, user=user, message=message) if userdestinataire.reponses and user.eleve is not None: return HttpResponseForbidden("already answered") listedestinataires = message.auteur.first_name.title() + " " + \ message.auteur.last_name.upper() reponse = Message(auteur=user, titre=request.POST['title'], corps=request.POST[ 'body'], listedestinataires=listedestinataires) reponse.save() destinataire = Destinataire( message=reponse, user=message.auteur, reponses=0) destinataire.save() userdestinataire.reponses += 1 userdestinataire.save() if answerAll == '1': for destinataireUser in message.messagerecu.all(): if destinataireUser.user != user: destinataire = Destinataire( message=reponse, user=destinataireUser.user, reponses=1) destinataire.save() listedestinataires += "; " + destinataireUser.user.first_name.title() + " " + \ destinataireUser.user.last_name.upper() reponse.listedestinataires = listedestinataires reponse.save() return HttpResponse(json.dumps({'pk': reponse.pk, 'date': int(reponse.date.strftime( '%s')), 'listedestinataires': reponse.listedestinataires, 'titre': reponse.titre, 'corps': reponse.corps}))