src/Controller/RegistrationController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Veterinaire;
  4. use App\Form\RegistrationFormType;
  5. use App\Repository\UserRepository;
  6. use App\Security\EmailVerifier;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  10. use Symfony\Component\Form\Extension\Core\Type\TextType;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
  16. use function Symfony\Component\Translation\t;
  17. class RegistrationController extends AbstractController
  18. {
  19.     private EmailVerifier $emailVerifier;
  20.     public function __construct(EmailVerifier $emailVerifier)
  21.     {
  22.         $this->emailVerifier $emailVerifier;
  23.     }
  24.     #[Route('/register'name'app_register')]
  25.     public function register(Request $requestUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $entityManager): Response
  26.     {
  27.         $user = new Veterinaire();
  28.         $form $this->createForm(RegistrationFormType::class, $user);
  29.         $form->handleRequest($request);
  30.         if ($form->isSubmitted() && $form->isValid()) {
  31.             if ($form->get('cle')->getData() == "lysi_2023") {
  32.                 // encode the plain password
  33.                 $user->setPassword(
  34.                     $userPasswordHasher->hashPassword(
  35.                         $user,
  36.                         $form->get('plainPassword')->getData()
  37.                     )
  38.                 );
  39.                 $user->setIsVerified(true);
  40.                 if ($user->newHash() === -1) {
  41.                     $this->addFlash('error't('Échec de génération du code de connexion'));
  42.                     return $this->redirectToRoute('index');
  43.                 }
  44.                 $entityManager->persist($user);
  45.                 try {
  46.                     $entityManager->flush();
  47.                 } catch (\Exception $e) {
  48.                     $this->addFlash('error't('L\'identifiant demandé est déjà utilisé.'));
  49.                     return $this->redirectToRoute('index');
  50.                 }
  51.                 /* generate a signed url and email it to the user
  52.                 $this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
  53.                     (new TemplatedEmail())
  54.                         ->from(new Address($this->getParameter('app.emailfrom'), 'Lysi - Dopharma'))
  55.                         ->to($user->getEmail())
  56.                         ->subject(t('Veuillez confirmer votre email'))
  57.                         ->htmlTemplate('registration/confirmation_email.html.twig')
  58.                 );*/
  59.                 $msg t('Votre compte est créé. Vous pouvez vous connecter.');
  60.                 if ($this->isAppMobile($request)) {
  61.                     $msg .= PHP_EOL '<a href="#" onclick="window.close();">Via l\'application mobile.</a>';
  62.                     // Renvoyer le hash de connexion dans le localStorage pour pouvoir se connecter
  63.                     /*
  64.                     $msg .= PHP_EOL.'<script>window.localStorage.setItem(\'cnxhash\',\''.
  65.                         \json_encode([
  66.                             'hash' => $user->getHash(),
  67.                             'expires' => $user->getHashDateExpire()->format('YmdHi')
  68.                         ]).'\')</script>'.PHP_EOL;
  69.                     */
  70.                 }
  71.                 $this->addFlash('success'$msg);
  72.                 return $this->redirectToRoute('index');
  73.             } else {
  74.                 $this->addFlash('danger't('La clé d\'activation n\'est pas la bonne.'));
  75.                 return $this->redirectToRoute('register');
  76.             }
  77.         }
  78.         return $this->render('registration/register.html.twig', [
  79.             'registrationForm' => $form->createView(),
  80.         ]);
  81.     }
  82.     /**
  83.      * Est-ce que le client est sur l'app mobile ?
  84.      * @param Request $req
  85.      * @return bool
  86.      */
  87.     public function isAppMobile(Request $req): bool {
  88.         return $req->headers->get('x-requested-with'false) === 'com.astraga.lysi';
  89.     }
  90.     #[Route('/verify/email'name'app_verify_email')]
  91.     public function verifyUserEmail(Request $requestUserRepository $userRepository): Response
  92.     {
  93.         $id $request->get('id');
  94.         if (null === $id) {
  95.             return $this->redirectToRoute('app_register');
  96.         }
  97.         $user $userRepository->find($id);
  98.         if (null === $user) {
  99.             return $this->redirectToRoute('index');
  100.         }
  101.         // validate email confirmation link, sets User::isVerified=true and persists
  102.         try {
  103.             $this->emailVerifier->handleEmailConfirmation($request$user);
  104.         } catch (VerifyEmailExceptionInterface $exception) {
  105.             $this->addFlash('verify_email_error'$exception->getReason());
  106.             return $this->redirectToRoute('app_register');
  107.         }
  108.         $this->addFlash('success't('Your email address has been verified.'));
  109.         return $this->redirectToRoute('index');
  110.     }
  111.     #[Route('/verificationcode'name'app_jeton')]
  112.     public function verifyCodeUnique(Request $request): Response
  113.     {
  114.         $connectForm $this->createFormBuilder()
  115.             ->add('jeton'TextType::class, [
  116.                 'attr' => ['placeholder' => "Code unique"]])
  117.             ->add('save'SubmitType::class, [
  118.                 'attr' => ['class' => 'btn btn-primary'],
  119.             ])
  120.             ->getForm();
  121.         $connectForm->handleRequest($request);
  122.         if ($connectForm->isSubmitted() && $connectForm->isValid()) {
  123.             if ($connectForm['jeton']->getData() === "default_token") {
  124.                 return $this->redirectToRoute('app_register');
  125.             } else {
  126.                 $this->addFlash(
  127.                     'warningver',
  128.                     'Mauvais jeton!'
  129.                 );
  130.             }
  131.         }
  132.         return $this->render('registration/premiereconnexion.html.twig', [
  133.             'connectForm' => $connectForm->createView(),
  134.         ]);
  135.     }
  136. }