src/Controller/Admin/ActivationCompteController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Commun\Utilisateur;
  4. use App\Entity\Parametrage\EnumParametre;
  5. use App\Entity\Parametrage\EnumTypeNotification;
  6. use App\Form\Commun\DefinitionMotDePasseType;
  7. use App\Service\Commun\MailService;
  8. use App\Service\Commun\UtilisateurService;
  9. use App\Service\Notification\NotificationService;
  10. use App\Service\Parametrage\ParametrageService;
  11. use Psr\Log\LoggerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  17. class ActivationCompteController extends AbstractController
  18. {
  19.     private $parametrageService;
  20.     private $notificationService;
  21.     public function __construct(ParametrageService $parametrageServiceNotificationService $notificationService)
  22.     {
  23.         $this->parametrageService $parametrageService;
  24.         $this->notificationService $notificationService;
  25.     }
  26.     /**
  27.      * Envoi du code d'activation du compte
  28.      * TODO avoir un template mail différent pour renvoyer le lien d'activation ou réinitialiser le mdp
  29.      * 
  30.      * @Route("/renvoyer-code", name="compte_renvoyer_code_activation")
  31.      */
  32.     public function renvoyerCodeActivation(Request $requestUtilisateurService $utilisateurServiceLoggerInterface $logger)
  33.     {
  34.         // TODO validation format email
  35.         $form $this->createForm(EmailType::class);
  36.         $form->handleRequest($request);
  37.         if ($form->isSubmitted() && $form->isValid()) {
  38.             $email $form->getData();
  39.             $repo $this->getDoctrine()->getManager()->getRepository(Utilisateur::class);
  40.             $user $repo->loadUserByUsername($email);
  41.             if ($user) {
  42.                 $resultatMail $utilisateurService->envoyerCodeActivation($user);
  43.                 if (!$resultatMail["sent"]) {
  44.                     return $this->render('admin/activation_compte/renvoyer_code.html.twig', [
  45.                                 'form' => $form->createView(),
  46.                                 'error' => "Echec de l'envoi du code d'activation. Veuillez réessayer ultérieurement."
  47.                     ]);
  48.                 }
  49.             }
  50.             // Sinon, l'email n'existe pas en base, mais on le masque à l'utilisateur
  51.             $logger->info("Demande activation de compte ignoree : utilisateur inexistant", ['email' => $email]);
  52.             $mailContactNumeroVert $this->parametrageService->getParametre(EnumParametre::MAIL_CONTACT_NUMEROVERT)->getValeur();
  53.             return $this->render('admin/activation_compte/envoi_code_confirmation.html.twig', [
  54.                         'form' => $form->createView(),
  55.                         'mailContactNumeroVert' => $mailContactNumeroVert
  56.             ]);
  57.         }
  58.         return $this->render('admin/activation_compte/renvoyer_code.html.twig', ['form' => $form->createView()]);
  59.     }
  60.     /**
  61.      * TODO DOC
  62.      * 
  63.      * @Route("/reinitialiser-mot-de-passe", name="compte_demander_reinitialisation_mot_de_passe")
  64.      */
  65.     public function demanderReinitialisationMotDePasse(Request $requestUtilisateurService $utilisateurServiceLoggerInterface $logger)
  66.     {
  67.         // TODO validation format email
  68.         $form $this->createForm(EmailType::class);
  69.         $form->handleRequest($request);
  70.         if ($form->isSubmitted() && $form->isValid()) {
  71.             $email $form->getData();
  72.             $logger->debug("Traitement de la demande de réinitialisation de mot de passe pour le mail $email");            
  73.             $repo $this->getDoctrine()->getManager()->getRepository(Utilisateur::class);
  74.             $user $repo->loadUserByUsername($email);
  75.             if ($user) {
  76.                 $logger->debug("L'utilisateur associé à l'email $email a été trouvé");
  77.                 $resultatMail $utilisateurService->demanderReinitialisationMotDePasse($user);
  78.                 if (!$resultatMail["sent"]) {
  79.                     $logger->debug("Erreur lors de l'envoi du mail de réinitialisation du mot de passe à l'utilisateur $email");
  80.                     return $this->render('admin/activation_compte/renvoyer_code.html.twig', [
  81.                                 'form' => $form->createView(),
  82.                                 'error' => "Echec de l'envoi du code. Veuillez réessayer ultérieurement.",
  83.                     ]);
  84.                 }
  85.                 $logger->debug("Le code de réinitialisation du mot de passe a été envoyé à l'utilisateur $email");
  86.             }
  87.             else {
  88.                 // Sinon, l'email n'existe pas en base, mais on le masque à l'utilisateur
  89.                 $logger->info("Demande de réinitialisation de mot de passe ignorée : utilisateur inexistant", ['email' => $email]);
  90.             }
  91.             $mailContactNumeroVert $this->parametrageService->getParametre(EnumParametre::MAIL_CONTACT_NUMEROVERT)->getValeur();
  92.             return $this->render('admin/reinitialisation_mot_de_passe/reinitialiser_confirmation.html.twig', [
  93.                         'form' => $form->createView(),
  94.                         'mailContactNumeroVert' => $mailContactNumeroVert
  95.             ]);
  96.         }
  97.         return $this->render('admin/reinitialisation_mot_de_passe/demander_reinitialisation.html.twig', ['form' => $form->createView()]);
  98.     }
  99.     /**
  100.      * TODO DOC
  101.      * 
  102.      * @Route("/definir-mot-de-passe", name="compte_definir_mot_de_passe")
  103.      */
  104.     public function definirMotDePasse(Request $requestUtilisateurService $utilisateurServiceUserPasswordEncoderInterface $passwordEncoderMailService $mailService)
  105.     {
  106.         $code $request->query->get('code');
  107.         $email $request->query->get('email');
  108.         if (!$email || !$code) {
  109.             // TODO avoir une interface qui permet d'activer à la main ?
  110.             return $this->render('commun/erreurs/erreur_generique.html.twig', ['message' => "Le lien d'activation de compte est incomplet.\n Veuillez copier le lien depuis l'email d'activation reçu."]);
  111.         }
  112.         if (!$utilisateurService->verifierCodeActivation($code$email)) {
  113.             // Affichage user-friendly
  114.             return $this->render('commun/erreurs/erreur_generique.html.twig', ['message' => "Lien d'activation invalide, déjà utilisé ou périmé."]);
  115.         }
  116.         // Formulaire permettant de définir son mot de passe
  117.         $form $this->createForm(DefinitionMotDePasseType::class);
  118.         $form->handleRequest($request);
  119.         if ($form->isSubmitted() && $form->isValid()) {
  120.             // On vérifie de nouveau la validité du code (il peut s'écouler du temps entre l'affichage et l'envoi du formulaire...)
  121.             if (!$utilisateurService->verifierCodeActivation($code$email)) {
  122.                 // Affichage user-friendly
  123.                 return $this->render('commun/erreurs/erreur_generique.html.twig', ['message' => "Lien d'activation invalide, déjà utilisé ou périmé."]);
  124.             }
  125.             // Enregistrer le nouveau mot de passe
  126.             // TODO service
  127.             // TODO duplication avec MonCompteController
  128.             // TODO règles nouveau mot de passe
  129.             $repo $this->getDoctrine()->getManager()->getRepository(Utilisateur::class);
  130.             $user $repo->loadUserByUsername($email);
  131.             // Le compte est-il déjà activé ?
  132.             $mdp_existe $user->getPassword() ? true false;
  133.             $utilisateurService->enregistrerMotDePasse($user$form->get('password')->getData());
  134.             if ($mdp_existe) {
  135.                 // Le mot de passe a été modifié
  136.                 $resultatMail $mailService->envoyerInfoChangementMotDePasse($user);
  137.                 if (!$resultatMail["sent"]) {
  138.                     return $this->render('commun/erreurs/erreur_generique.html.twig', ['message' => "Le lien d'activation n'a pas pu être envoyé, veuillez réessayer ultérieurement."]);
  139.                 }
  140.             } else {
  141.                 // Le compte a été activé
  142.                 //notification d'activation à faire
  143.                 if ($user->estAssistantMaternel()) {
  144.                     $this->notificationService->ajouterOuMettreAJourNotification($user->getAssistantMaternel()->getId(), EnumTypeNotification::ACTIVATION_COMPTE'''');
  145.                 } else {
  146.                     //initialise les préférences selon le profil
  147.                     $utilisateurService->gererPreferencesNotification($user0$user->getProfil()->getId());
  148.                 }
  149.             }
  150.             return $this->render('admin/definir_mot_de_passe/definir_mot_de_passe_confirmation.html.twig', ['form' => $form->createView()]);
  151.         }
  152.         return $this->render('admin/definir_mot_de_passe/definir_mot_de_passe.html.twig', ['form' => $form->createView()]);
  153.     }
  154. }