src/Controller/Front/AccountController.php line 83

  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\User;
  4. use App\Form\RegisterType;
  5. use App\Security\EmailVerifier;
  6. use Symfony\Component\Mime\Address;
  7. use App\Repository\TypeUserRepository;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\SecurityBundle\Security;
  10. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use MercurySeries\FlashyBundle\FlashyNotifier;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  18. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  19. use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
  20. class AccountController extends AbstractController
  21. {
  22.     public $typeUserRepo;
  23.     private $emailVerifier;
  24.     private $flashy;
  25.     public function __construct(TypeUserRepository $typeUserRepositoryEmailVerifier $emailVerifierFlashyNotifier $flashy)
  26.     {
  27.         $this->typeUserRepo $typeUserRepository;
  28.         $this->emailVerifier $emailVerifier;
  29.         $this->flashy $flashy;
  30.     }
  31.     /**
  32.      * Fonction de connexion de l'utilisateur a la plateforme
  33.      *  @param AuthenticationUtils $utils
  34.      * @return Repsonse
  35.      */
  36.     #[Route('/'name'account_login')]
  37.     public function login(AuthenticationUtils $utilsSecurity $security): Response
  38.     {
  39.         $error $utils->getLastAuthenticationError();
  40.         $username $utils->getLastUsername();
  41.         //Verifie le role de l'utilisateur et le redirige en fonction de son role
  42.         if($this->getUser()){
  43.             if($this->getUser()->hasRole('ROLE_ADMIN'))
  44.                 return $this->redirect($this->generateUrl('admin_dashboard'));
  45.             elseif($this->getUser()->hasRole('ROLE_USER'))
  46.                 if($this->getUser()->getActive() != true ){
  47.                     //$this->flashy->error("Votre compte n'est pas actif, veuillez contacter l'administrateur");
  48.                     //return $this->redirect($this->generateUrl('account_logout'));
  49.                     return $this->redirect($this->generateUrl('desactived_account'));
  50.                 }else{
  51.                     return $this->redirect($this->generateUrl('users_profil', array('slug' => $this->getUser()->getSlug())));
  52.                 }
  53.                 
  54.             throw new \Exception(AccessDeniedException::class);
  55.         };
  56.         return $this->render('account/login.html.twig', [
  57.             'hasError' => $error,
  58.             'username' => $username
  59.         ]);
  60.     }
  61.     #[Route('/deconnexion'name:'account_logout'methods: ['GET'])]
  62.     public function logout(){
  63.         //throw new \Exception('Don\'t forget to activate logout in security.yaml');
  64.     }
  65.     /**
  66.      * Formulaire d'inscription
  67.      * @param Request $request
  68.      * @param UserPasswordEncoderInterface $encoder
  69.      * @return Response
  70.      */
  71.     #[Route('/inscription'name'account_register')]
  72.     public function inscription(Request $requestUserPasswordHasherInterface $hasherEntityManagerInterface $entityManager)
  73.     {
  74.         $user  = new User();
  75.         $form  $this->createForm(RegisterType::class, $user);
  76.         $form->handleRequest($request);
  77.         if ($form->isSubmitted() && $form->isValid()) {
  78.             $typeUser            $this->typeUserRepo->findOneBy(['nom' => 'client']);
  79.             $passwordHashed      $hasher->hashPassword(
  80.                 $user,
  81.                 $form->get('password')->getData()
  82.             );
  83.             $user->setPassword($passwordHashed)
  84.                  ->setActive(false)
  85.                  ->setTypesUser($typeUser);
  86.             $entityManager->persist($user);
  87.             $entityManager->flush();
  88.             // Génération d'une url signé pour la vérification de l'email de l'user
  89.             $this->emailVerifier->sendEmailConfirmation(
  90.                 'app_verify_email',
  91.                 $user,
  92.                 (new TemplatedEmail())
  93.                     ->from(new Address('no-reply@picpesage.com''Pic Pesage Metrologie'))
  94.                     ->to($user->getEmail())
  95.                     ->subject('Veuillez confirmer votre e-mail')
  96.                     ->htmlTemplate('registration/confirmation_email.html.twig')
  97.             );
  98.             $this->flashy->success("Veuillez vérifier votre adresse email pour terminer votre inscription");
  99.             //Envoi mail de notification à l'administrateur pour validation du compte
  100.             //Code...
  101.             return $this->redirectToRoute('account_login'); // redirection sur Page de connexion
  102.         }
  103.         return $this->render('account/register.html.twig', [
  104.             'user' => $user,
  105.             'form' => $form->createView(),
  106.         ]);
  107.     }
  108.     #[Route('/verify/email'name'app_verify_email')]
  109.     public function verifyUserEmail(Request $requestTranslatorInterface $translator): Response
  110.     {
  111.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  112.         // validate email confirmation link, sets User::isVerified=true and persists
  113.         try {
  114.             $this->emailVerifier->handleEmailConfirmation($request$this->getUser());
  115.         } catch (VerifyEmailExceptionInterface $exception) {
  116.             $this->addFlash('verify_email_error'$translator->trans($exception->getReason(), [], 'VerifyEmailBundle'));
  117.             return $this->redirectToRoute('account_register');
  118.         }
  119.         // @TODO Change the redirect on success and handle or remove the flash message in your templates
  120.         $this->flashy->success('Votre adresse e-mail a été vérifiée.');
  121.         return $this->redirectToRoute('account_login');
  122.     }
  123.     #[Route('/compte-desactive'name'desactived_account')]
  124.     public function desactived()
  125.     {
  126.         return $this->render('account/desactived_account.html.twig');
  127.     }
  128.     
  129. }