src/Entrepreneurs/Bundle/Enseignant/Controller/SecurityController.php line 30

Open in your IDE?
  1. <?php
  2. namespace Entrepreneurs\Bundle\Enseignant\Controller;
  3. use Entrepreneurs\Bundle\Admin\Controller\AdminController;
  4. use Entrepreneurs\Bundle\AppBundle\Manager\MailManager;
  5. use Entrepreneurs\Bundle\AppBundle\Propel\Enseignant;
  6. use Entrepreneurs\Bundle\AppBundle\Propel\EnseignantQuery;
  7. use Entrepreneurs\Bundle\AppBundle\Propel\EnseignantStatut;
  8. use Entrepreneurs\Bundle\Enseignant\Form\MdpOublieType;
  9. use Entrepreneurs\Bundle\Enseignant\Form\MdpReinitialisationType;
  10. use Entrepreneurs\Bundle\Enseignant\Form\MdpType;
  11. use Entrepreneurs\Bundle\Enseignant\Form\ProfilType;
  12. use Entrepreneurs\Bundle\FrontBundle\Form\ConnexionMailType;
  13. use Propel\Runtime\Exception\PropelException;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Security\Core\Security;
  18. use Symfony\Component\Security\Http\LoginLink\LoginLinkHandlerInterface;
  19. use Twig\Error\LoaderError;
  20. use Twig\Error\RuntimeError;
  21. use Twig\Error\SyntaxError;
  22. class SecurityController extends AdminController
  23. {
  24.     /**
  25.      * @Route(name="enseignant_security_connexion", path="/auth/connexion")
  26.      */
  27.     public function connexionAction(Request $request): Response
  28.     {
  29.         $session $request->getSession();
  30.         if ($this->getUser()) {
  31.             return $this->forward('Entrepreneurs\Bundle\Enseignant\Controller\DemandeInterventionController::listAction');
  32.         }
  33.         if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
  34.             $error $request->attributes->get(Security::AUTHENTICATION_ERROR);
  35.         } else {
  36.             $error $session->get(Security::AUTHENTICATION_ERROR);
  37.             $session->remove(Security::AUTHENTICATION_ERROR);
  38.         }
  39.         return $this->renderTwig('Enseignant:Security:connexion.html.twig', [
  40.             'last_username' => $session->get(Security::LAST_USERNAME),
  41.             'error' => $error,
  42.         ]);
  43.     }
  44.     /**
  45.      * @Route(name="enseignant_profil_edition", path="/profil/edition")
  46.      */
  47.     public function profilAction(Request $request): Response
  48.     {
  49.         $enseignant $this->getUser();
  50.         $formProfil $this->createForm(ProfilType::class, $this->getUser(), ['request' => $request'enseignant' => $enseignant]);
  51.         $formMdp $this->createForm(MdpType::class, $this->getUser());
  52.         if ($request->isMethod('post') && $dataProfil $request->get($formProfil->getName())) {
  53.             $formProfil->submit($dataProfil);
  54.             if ($formProfil->isValid()) {
  55.                 $formProfil->getData()
  56.                     ->setDateMajFront(time())
  57.                     ->save();
  58.                 $this->addFlash('success''Les informations de votre profil ont bien été mises à jour.');
  59.                 return $this->redirectToRoute('enseignant_profil_edition');
  60.             } else {
  61.                 $this->addFlash('warning'"Les informations de votre profil n'ont pu être enregistrées. Veuillez vérifier les informations renseignées et essayez à nouveau.");
  62.             }
  63.         }
  64.         if ($request->isMethod('post') && $dataMdp $request->get($formMdp->getName())) {
  65.             $formMdp->submit($dataMdp);
  66.             if ($formMdp->isValid()) {
  67.                 $enseignant $formMdp->getData();
  68.                 $enseignant
  69.                     ->setMotDePasse($enseignant->getPlainMotDePasse())
  70.                     ->setDateMajFront(time())
  71.                     ->save();
  72.                 $this->addFlash('success''Votre mot de passe a correctement été mis à jour. Pensez à le renseigner lors de votre prochaine connexion.');
  73.                 return $this->redirectToRoute('enseignant_profil_edition');
  74.             } else {
  75.                 $this->addFlash('warning'"Votre mot de passe n'a pu être mis à jour. Veuillez vérifier qu'il a été correctement renseigné.");
  76.             }
  77.         }
  78.         return $this->render('Enseignant/Security/profil.html.twig', [
  79.             'formProfil' => $formProfil->createView(),
  80.             'formMdp' => $formMdp->createView(),
  81.         ]);
  82.     }
  83.     /**
  84.      * @Route(name="enseignant_security_activation", path="/auth/activation/{mail}/{uid}")
  85.      */
  86.     public function activationAction(Request $requestMailManager $managerstring $mailstring $uid): Response
  87.     {
  88.         $enseignant EnseignantQuery::create()
  89.             ->filterByEmail($mail)
  90.             ->filterByUid($uid)
  91.             ->findOne();
  92.         if (!$enseignant) {
  93.             $this->addFlash('warning'"Votre compte n\'a pu être activé. Si vous avez suivi le lien d\'activation renseigné dans notre précédent mail, merci de nous contacter.");
  94.             return $this->redirectToRoute('enseignant_homepage');
  95.         }
  96.         $form $this->createForm(MdpReinitialisationType::class, $enseignant);
  97.         $form->handleRequest($request);
  98.         if ($form->isSubmitted()) {
  99.             if (!$form->isValid()) {
  100.                 $this->addFlash('warning''Une erreur est survenue lors de l\'enregistrement du mot passe.');
  101.             } else {
  102.                 $enseignant $form->getData();
  103.                 $enseignant->setDateMajFront(time());
  104.                 $enseignant->setStatutId(EnseignantStatut::ACTIF);
  105.                 $enseignant->setDateActivation(new \DateTime());
  106.                 $enseignant->save();
  107.                 $this->addFlash('success''Votre mot de passe a bien été enregistrer.');
  108.             }
  109.         }
  110.         if (EnseignantStatut::EN_ATTENTE_ACTIVATION === $enseignant->getStatutId() || null === $enseignant->getMotDePasse()) {
  111.             return $this->render('Enseignant/Security/activation.html.twig', [
  112.                 'enseignant' => $enseignant,
  113.                 'form' => $form->createView(),
  114.             ]);
  115.         }
  116.         return $this->render('Enseignant/Security/activation_suite.html.twig', [
  117.             'enseignant' => $enseignant,
  118.         ]);
  119.     }
  120.     /**
  121.      * @Route(name="enseignant_security_mdp_oublie", path="/auth/mot-de-passe/oublie")
  122.      */
  123.     public function mdpOublieAction(Request $requestMailManager $manager): Response
  124.     {
  125.         $params = [];
  126.         $form $this->createForm(MdpOublieType::class);
  127.         $form->handleRequest($request);
  128.         if ($form->isSubmitted() && $form->isValid()) {
  129.             $data $form->getData();
  130.             $enseignant EnseignantQuery::create()
  131.                     ->filterByEnabled()
  132.                     ->findOneByEmail($data['email']);
  133.             if ($enseignant) {
  134.                 $enseignant->setStatutId(EnseignantStatut::MDP_REINITIALISE);
  135.                 $enseignant->setDateMajFront(time());
  136.                 $enseignant->generateNewTokenReinitialisation();
  137.                 $enseignant->save();
  138.                 $manager->sendMailEnseignantMdpOublie($enseignant);
  139.                 $params['enseignant'] = $enseignant;
  140.                 $this->addFlash('success''La demande de changement de mot de passe a bien été prise en compte.');
  141.             } else {
  142.                 $this->addFlash('warning'"Aucun utilisateur valide avec l'identifiant renseigné n'a pu être trouvé dans notre système.");
  143.             }
  144.         }
  145.         $params['form'] = $form->createView();
  146.         return $this->renderTwig('Enseignant:Security:mdp_oublie.html.twig'$params);
  147.     }
  148.     /**
  149.      * @Route(name="enseignant_security_mdp_reinitialisation", path="/auth/mot-de-passe/reinitialisation/{uid}/{mail}/{token}")
  150.      */
  151.     public function mdpReinitialisationAction(Request $requeststring $uidstring $mailstring $token): Response
  152.     {
  153.         $enseignant EnseignantQuery::create()
  154.             ->filterByUid($uid)
  155.             ->filterByEmail($mail)
  156.             ->filterByTokenReinitialisation($token)
  157.             ->filterByStatutId(EnseignantStatut::MDP_REINITIALISE)
  158.             ->findOne();
  159.         if (!$enseignant) {
  160.             $this->addFlash('warning'"Votre lien d'activation n'est plus valide.");
  161.             return $this->redirectToRoute('enseignant_homepage');
  162.         }
  163.         $form $this->createForm(MdpReinitialisationType::class, $enseignant);
  164.         $form->handleRequest($request);
  165.         if ($form->isSubmitted()) {
  166.             if ($form->isValid()) {
  167.                 $enseignant->setDateMajFront(time());
  168.                 $enseignant->setStatutId(EnseignantStatut::ACTIF)->save();
  169.                 $this->addFlash('success''Votre mot de passe a bien été réinitialisé. Vous pouvez désormais vous connecter avec ce dernier.');
  170.                 return $this->redirectToRoute('enseignant_security_connexion');
  171.             }
  172.             $this->addFlash('warning''Une erreur est survenue lors du changement de mot passe.');
  173.         }
  174.         return $this->renderTwig('Enseignant:Security:mdp_reinitialisation.html.twig', ['form' => $form->createView()]);
  175.     }
  176.     #[Route(path'/auth/connexion/mail'name'enseignant_security_connexion_mail')]
  177.     public function connexionMailAction(
  178.         Request $request,
  179.         MailManager $mailManager,
  180.         LoginLinkHandlerInterface $loginLinkHandler
  181.     ): Response {
  182.         if ($this->getUser() instanceof Enseignant) {
  183.             return $this->redirectToRoute('admin_homepage');
  184.         }
  185.         $form $this->createForm(ConnexionMailType::class);
  186.         $form->handleRequest($request);
  187.         if ($form->isSubmitted() && $form->isValid()) {
  188.             $data $form->getData();
  189.             $enseignant EnseignantQuery::create()->findOneByEmail($data['email']);
  190.             if ($enseignant) {
  191.                 try {
  192.                     $mailManager->sendMailEnseignantConnexionMail($enseignant$loginLinkHandler->createLoginLink($enseignant)->getUrl());
  193.                 } catch (PropelException|LoaderError|RuntimeError|SyntaxError) {
  194.                     $this->addFlash('danger''Une erreur est survenue.');
  195.                 }
  196.                 return $this->render('Front/Security/connexion_email.html.twig', [
  197.                     'email' => $enseignant->getEmail(),
  198.                     'bodyClass' => 'refonte-2023',
  199.                 ]);
  200.             }
  201.             $this->addFlash('warning''L\'identifiant est invalide.');
  202.         }
  203.         return $this->render('Front/Security/connexion_email.html.twig', [
  204.             'form' => $form->createView(),
  205.             'bodyClass' => 'refonte-2023',
  206.             'title' => 'Connexion pour les Enseignants',
  207.             'username' => $request->get('username'''),
  208.         ]);
  209.     }
  210.     #[Route(path'/auth/connexion-link'name'enseignant_security_connexion_link')]
  211.     public function connexionLinkAction(LoginLinkHandlerInterface $loginLinkHandler): Response
  212.     {
  213.         return $this->redirectToRoute('enseignant_homepage');
  214.     }
  215. }