Mise à jour 2021
This commit is contained in:
parent
18d1d53c45
commit
e470a2a268
36 changed files with 1082 additions and 420 deletions
|
@ -2,21 +2,31 @@
|
|||
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
|
||||
from django.views.generic import DetailView, ListView
|
||||
from django.views.generic.edit import UpdateView, CreateView
|
||||
from django.views.generic import (
|
||||
DetailView, ListView, UpdateView, CreateView, TemplateView, DeleteView,
|
||||
FormView, View
|
||||
)
|
||||
from django.views.generic.detail import SingleObjectMixin
|
||||
from django import forms
|
||||
from django.urls import reverse
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.conf import settings
|
||||
from django.contrib.admin.views.decorators import staff_member_required
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.tokens import default_token_generator
|
||||
from django.contrib.auth.views import PasswordResetConfirmView
|
||||
from django.contrib import messages
|
||||
from braces.views import LoginRequiredMixin
|
||||
from django.http import JsonResponse, HttpResponseForbidden, Http404
|
||||
from django.core.mail import send_mail
|
||||
from django.db.models import Q, Count
|
||||
from collections import Counter, defaultdict
|
||||
from simple_email_confirmation.models import EmailAddress
|
||||
|
||||
from .models import Normalien, Stage, Lieu, AvisLieu, AvisStage
|
||||
from .forms import StageForm, LieuForm, AvisStageForm, AvisLieuForm, FeedbackForm
|
||||
from .forms import (
|
||||
StageForm, LieuForm, AvisStageForm, AvisLieuForm, FeedbackForm, AdresseEmailForm,
|
||||
ReinitMdpForm
|
||||
)
|
||||
from .utils import en_scolarite
|
||||
|
||||
from .views_search import *
|
||||
|
@ -343,3 +353,126 @@ def statistiques(request):
|
|||
'num_lieux_utiles': nlieux,
|
||||
'num_par_longueur': nbylength,
|
||||
})
|
||||
|
||||
#
|
||||
# Compte
|
||||
#
|
||||
|
||||
class MesAdressesMixin(LoginRequiredMixin):
|
||||
slug_url_kwarg = "email"
|
||||
slug_field = "email"
|
||||
confirmed_only = False
|
||||
|
||||
def get_queryset(self, *args, **kwargs):
|
||||
qs = self.request.user.email_address_set.all()
|
||||
if self.confirmed_only:
|
||||
qs = qs.filter(confirmed_at__isnull=False)
|
||||
return qs
|
||||
|
||||
def _send_confirm_mail(email, request):
|
||||
confirm_url = request.build_absolute_uri(
|
||||
reverse("avisstage:emails_confirme", kwargs={"key": email.key}))
|
||||
send_mail(
|
||||
"[ExperiENS] Confirmez votre adresse a-mail",
|
||||
"""Bonjour,
|
||||
|
||||
Vous venez d'ajouter cette adresse e-mail à votre compte ExperiENS.
|
||||
|
||||
Pour la vérifier, merci de cliquer sur le lien suivant, ou de copier l'adresse dans votre navigateur :
|
||||
|
||||
{confirm_url}
|
||||
|
||||
Cordialement,
|
||||
L'équipe ExperiENS""".format(confirm_url=confirm_url),
|
||||
'experiens-nepasrepondre@eleves.ens.fr',
|
||||
[email.email],
|
||||
fail_silently=False,
|
||||
)
|
||||
return redirect(reverse("avisstage:emails_aconfirmer",
|
||||
kwargs={"email": email.email}))
|
||||
|
||||
class MesParametres(LoginRequiredMixin, FormView):
|
||||
model = EmailAddress
|
||||
template_name = "avisstage/compte/parametres.html"
|
||||
form_class = AdresseEmailForm
|
||||
|
||||
def get_form_kwargs(self, *args, **kwargs):
|
||||
kwargs = super().get_form_kwargs(*args, **kwargs)
|
||||
kwargs["_user"] = self.request.user
|
||||
return kwargs
|
||||
|
||||
def form_valid(self, form):
|
||||
new = EmailAddress.objects.create_unconfirmed(
|
||||
form.cleaned_data["email"], self.request.user)
|
||||
return _send_confirm_mail(new, self.request)
|
||||
|
||||
class RendAdressePrincipale(MesAdressesMixin, SingleObjectMixin, View):
|
||||
model = EmailAddress
|
||||
confirmed_only = True
|
||||
|
||||
def post(self, *args, **kwargs):
|
||||
if not hasattr(self, "object"):
|
||||
self.object = self.get_object()
|
||||
self.request.user.email = self.object.email
|
||||
self.request.user.save()
|
||||
return redirect(reverse("avisstage:parametres"))
|
||||
|
||||
class AdresseAConfirmer(MesAdressesMixin, DetailView):
|
||||
model = EmailAddress
|
||||
template_name = "avisstage/compte/aconfirmer.html"
|
||||
|
||||
class ReConfirmeAdresse(MesAdressesMixin, DetailView):
|
||||
model = EmailAddress
|
||||
|
||||
def post(self, *args, **kwargs):
|
||||
email = self.get_object()
|
||||
if email.confirmed_at is None:
|
||||
return _send_confirm_mail(email, self.request)
|
||||
return redirect(reverse("avisstage:parametres"))
|
||||
|
||||
class ConfirmeAdresse(LoginRequiredMixin, View):
|
||||
def get(self, *args, **kwargs):
|
||||
try:
|
||||
email = EmailAddress.objects.confirm(self.kwargs["key"],
|
||||
self.request.user, True)
|
||||
except Exception as e:
|
||||
raise Http404()
|
||||
messages.add_message(
|
||||
self.request, messages.SUCCESS,
|
||||
"L'adresse email {email} a bien été confirmée".format(email=email.email))
|
||||
return redirect(reverse("avisstage:parametres"))
|
||||
|
||||
class SupprimeAdresse(MesAdressesMixin, DeleteView):
|
||||
model = EmailAddress
|
||||
template_name = "avisstage/compte/email_supprime.html"
|
||||
success_url = reverse_lazy("avisstage:parametres")
|
||||
|
||||
def get_queryset(self, *args, **kwargs):
|
||||
qs = super().get_queryset(*args, **kwargs)
|
||||
return qs.exclude(email=self.request.user.email)
|
||||
|
||||
class EnvoieLienMotDePasse(LoginRequiredMixin, View):
|
||||
def post(self, *args, **kwargs):
|
||||
form = ReinitMdpForm({"email": self.request.user.email})
|
||||
form.is_valid()
|
||||
form.save(
|
||||
email_template_name = 'avisstage/mails/reinit_mdp.html',
|
||||
from_email = 'experiens-nepasrepondre@eleves.ens.fr',
|
||||
subject_template_name = 'avisstage/mails/reinit_mdp.txt',
|
||||
)
|
||||
messages.add_message(
|
||||
self.request, messages.INFO,
|
||||
"Un mail a été envoyé à {email}. Merci de vérifier vos indésirables si vous ne le recevez pas bientôt".format(email=self.request.user.email)
|
||||
)
|
||||
return redirect(reverse("avisstage:parametres"))
|
||||
|
||||
class DefinirMotDePasse(PasswordResetConfirmView):
|
||||
template_name = "avisstage/compte/edit_mdp.html"
|
||||
success_url = reverse_lazy("avisstage:perso")
|
||||
|
||||
def get_user(self, *args, **kwargs):
|
||||
user = super().get_user(*args, **kwargs)
|
||||
if self.request.user.is_authenticated and user != self.request.user:
|
||||
raise Http404("Ce token n'est pas valide pour votre compte")
|
||||
return user
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue