Exemple #1
0
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})
Exemple #2
0
 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
         ])
Exemple #3
0
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
        }))
Exemple #4
0
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
    })
Exemple #5
0
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
    })
Exemple #6
0
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})
Exemple #7
0
 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
     ])
Exemple #8
0
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}))
Exemple #9
0
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
    })
Exemple #10
0
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}))