src/Controller/RegistrationController.php line 605

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\Autres;
  5. use App\Entity\Adresse;
  6. use App\Entity\AgentInterne;
  7. use App\Entity\ChargeAssistance;
  8. use App\Entity\ChargeFormation;
  9. use App\Entity\Dae;
  10. use App\Entity\Delegation;
  11. use App\Entity\EnterprisePartenaire;
  12. use App\Form\AutresType;
  13. use App\Form\AdresseType;
  14. use App\Entity\Entreprise;
  15. use App\Entity\Partenaire;
  16. use App\Entity\Particulier;
  17. use App\Form\AgentInterneType;
  18. use App\Form\ChargeAssistanceType;
  19. use App\Form\ChargeFormationType;
  20. use App\Form\EntrepriseType;
  21. use App\Form\PartenaireNationalType;
  22. use App\Form\DaeType;
  23. use App\Form\PartenaireRegionalType;
  24. use App\Form\PartenaireType;
  25. use App\Form\ParticulierType;
  26. use App\Security\EmailVerifier;
  27. use App\Form\RegistrationFormType;
  28. use App\Repository\UserRepository;
  29. use Symfony\Component\Mime\Address;
  30. use App\Repository\AdresseRepository;
  31. use App\Repository\DelegationRepository;
  32. use App\Repository\EnterprisePartenaireRepository;
  33. use App\Repository\GouvernoratRepository;
  34. use Doctrine\DBAL\Driver\Mysqli\Initializer\Charset;
  35. use Doctrine\ORM\EntityManagerInterface;
  36. use Doctrine\Persistence\ManagerRegistry;
  37. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  38. use Symfony\Component\HttpFoundation\Request;
  39. use Symfony\Component\HttpFoundation\Response;
  40. use Symfony\Component\Routing\Annotation\Route;
  41. use Symfony\Component\HttpFoundation\RequestStack;
  42. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  43. use Symfony\Component\String\Slugger\SluggerInterface;
  44. use Symfony\Contracts\Translation\TranslatorInterface;
  45. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  46. use Symfony\Component\HttpFoundation\JsonResponse;
  47. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  48. use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
  49. use App\Security\UsersAuthenticator;
  50. use App\Service\FileUploader;
  51. use App\Service\LegacyEmailVerificationTokenManager;
  52. use App\Validator\Constraints\PasswordPolicy;
  53. class RegistrationController extends AbstractController
  54. {
  55.     private const PASSWORD_POLICY_REGEX '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/';
  56.     private EmailVerifier $emailVerifier;
  57.     private $request;
  58.         /**
  59.      * @var FileUploader
  60.      */
  61.     protected $fileUploader;
  62.     /**
  63.      * @param RequestStack $request
  64.      */
  65.     public function __construct(EmailVerifier $emailVerifierRequestStack $requestFileUploader $fileUploader)
  66.     {
  67.         $this->emailVerifier $emailVerifier;
  68.         $this->request $request;
  69.         $this->fileUploader $fileUploader;
  70.     }
  71.     #[Route('/register'name'app_register')]
  72.     public function register(
  73.         Request $request,
  74.         UserPasswordHasherInterface $userPasswordHasher,
  75.         EntityManagerInterface $entityManager,
  76.         UserRepository $userRepository,
  77.         GouvernoratRepository $gouvernoratRepository,
  78.         DelegationRepository $delegationRepository,
  79.         UserAuthenticatorInterface $userAuthenticator,
  80.         UsersAuthenticator $authenticator
  81.     ): Response {
  82.         $form_view_array = [];
  83.         $requestedType null;
  84.         $request $this->request->getCurrentRequest();
  85.         $adresse = new Adresse();
  86.         $formAdr $this->createForm(AdresseType::class);
  87.         $types = [
  88.             User::PARTIICULIER,
  89.             User::ENTREPRISE,
  90.             Partenaire::PARTENAIRE_NATIONAL,
  91.             Partenaire::PARTENAIRE_REGIONAL,
  92.             
  93.         ];
  94.         $instance_array = [
  95.             User::PARTIICULIER => new Particulier(),
  96.             User::ENTREPRISE  => new Entreprise(),
  97.             Partenaire::PARTENAIRE_NATIONAL => new Partenaire(),
  98.             Partenaire::PARTENAIRE_REGIONAL => new Partenaire(),
  99.             User::AUTRES  => new Autres(),
  100.         ];
  101.         $form_type_array = [
  102.             User::ENTREPRISE  => EntrepriseType::class,
  103.             User::PARTIICULIER => ParticulierType::class,
  104.             Partenaire::PARTENAIRE_REGIONAL => PartenaireRegionalType::class,
  105.             Partenaire::PARTENAIRE_NATIONAL => PartenaireNationalType::class,
  106.             User::AUTRES => AutresType::class,
  107.         ];
  108.         $role_array = [
  109.             User::PARTIICULIER  => 'ROLE_PARTICULIER',
  110.             User::ENTREPRISE  => 'ROLE_ENTREPRISES',
  111.             Partenaire::PARTENAIRE_REGIONAL  => 'ROLE_PARTENAIRES_REGIONAUX',
  112.             Partenaire::PARTENAIRE_NATIONAL  => 'ROLE_PARTENAIRES_NATIONAUX',
  113.             User::AUTRES => 'ROLE_AUTRES',
  114.         ];
  115.         $formAdr->handleRequest($request);
  116.         foreach ($types as $type) {
  117.             $instance $instance_array[$type];
  118.             $form $this->createForm($form_type_array[$type], $instance);
  119.             //$instance->addAdress(new Adresse());
  120.             $form_view_array[$type] = $form->createView();
  121.             $form->handleRequest($request);
  122.             if ($form->isSubmitted()) {
  123.                 if (!$form->isValid()) {
  124.                     foreach ($form->getErrors(true) as $error) {
  125.                         return new JsonResponse([
  126.                             'success' => false,
  127.                             'message' => $error->getMessage(),
  128.                         ], Response::HTTP_OK, ['Content-Type''application/json']);
  129.                     }
  130.                 }
  131.                 if ($type == "Entreprise" and count($instance->getAdresses()) > 0) {
  132.                     foreach ($request->request->all()[strtolower($type)]['adresses'] as $i => $elem) {
  133.                         $deleg =  $delg $delegationRepository->findOneBy(['id' => $elem['delegation']]);
  134.                         $instance->getAdresses()[$i]->setDelegation($deleg);
  135.                         $instance->getAdresses()[$i]->setUser($instance);
  136.                         $instance->getAdresses()[$i]->setAdresse($elem['adresse']);
  137.                         
  138.                     }
  139.                 }
  140.                 if ($type == "Entreprise" and $instance->getChargeFormations()) {
  141.                     /** mapping of created User */
  142.                     foreach ($instance->getChargeFormations() as $elem) {
  143.                         $elem->setEntreprise($instance);
  144.                     }
  145.                 }
  146.                 if (($type == "Partenaire_national" or $type == "Partenaire_regional") and $instance->getAdresses()) {
  147.                     $adress = new Adresse();
  148.                     $deleg $delegationRepository->findOneBy(['id' => $request->request->all()[strtolower($type)]['delegation']]);
  149.                     $gouv $gouvernoratRepository->findOneBy(['id' => $request->request->all()[strtolower($type)]['gouvernorat']]);
  150.                     $adress->setDelegation($deleg);
  151.                     $adress->setGouvernorat($gouv);
  152.                     $adress->setCodePostale($request->request->all()[strtolower($type)]['code_postale']);
  153.                     $adress->setAdresse($request->request->all()[strtolower                                                                                                                                                                                       ($type)]['adresse']);
  154.                     $instance->addAdress($adress);
  155.                 }
  156.                 if ($type == "Partenaire_national" or $type == "Partenaire_regional") {
  157.                     $instance->setTypePartenaire($type);
  158.                     /** mapping of created User */
  159.                     foreach ($instance->getEnterprisePartenaires() as $elem) {
  160.                         $elem->setEntreprisePartenaire($instance);
  161.                     }
  162.                 }
  163.                 if (($type == "Autres"  or $type == "Particulier") and $instance->getAdresses()) {
  164.                     $adress = new Adresse();
  165.                     $gouv $gouvernoratRepository->findOneBy(['id' => $request->request->all()[strtolower($type)]['gouvernorat']]);
  166.                     $adress->setGouvernorat($gouv);
  167.                     $adress->setCodePostale($request->request->all()[strtolower($type)]['code_postale']);
  168.                     $adress->setAdresse($request->request->all()[strtolower($type)]['adresse']);
  169.                     $instance->addAdress($adress);
  170.                 }
  171.                 $requestedType $type;
  172.                 $requestedParams $request->request->all()[strtolower($type)];
  173.        
  174.                 if ($form->get('plainPassword')->getData() != null) {
  175.                     if (!preg_match(self::PASSWORD_POLICY_REGEX, (string) $form->get('plainPassword')->getData())) {
  176.                         return new JsonResponse([
  177.                             'success' => false,
  178.                             'message' => PasswordPolicy::MESSAGE,
  179.                         ], Response::HTTP_OK, ['Content-Type''application/json']);
  180.                     }
  181.                     if (strcmp($form->get('plainPassword')->getData(), $form->get('confirmpassword')->getData()) == 0) {
  182.                         if ($form->get('plainPassword')->getData() != null) {
  183.                             $instance->setPassword(
  184.                                 $userPasswordHasher->hashPassword(
  185.                                     $instance,
  186.                                     $form->get('plainPassword')->getData()
  187.                                 )
  188.                             );
  189.                         }
  190.                     } else {
  191.                         return new JsonResponse([
  192.                             'success' => false,
  193.                             'message' => 'Les mots de passe ne sont pas identiques !'
  194.                             
  195.                         ], Response::HTTP_OK, ['Content-Type''application/json']);
  196.                     }
  197.                 }
  198.     
  199.                 // set roles
  200.                 $instance->setRoles(array($role_array[$type]));
  201.                 // set gouvernorat
  202.                 if (array_key_exists('gouvernorat'$requestedParams)) {
  203.                     $gouv $gouvernoratRepository->findOneBy(['id' => $requestedParams['gouvernorat']]);
  204.                     $adresse->setGouvernorat($gouv);
  205.                 }
  206.                 // set delegation if exist
  207.                 if (array_key_exists('delegation'$requestedParams)) {
  208.                     $delg $delegationRepository->findOneBy(['id' => $requestedParams['delegation']]);
  209.                     $adresse->setDelegation($delg);
  210.                 }
  211.                 // set adresse if exist
  212.                 if (array_key_exists('adresse'$requestedParams)) {
  213.                     $adresse->setAdresse($requestedParams['adresse']);
  214.                 }
  215.                 // set Localite if exist
  216.                 if (array_key_exists('Localite'$requestedParams)) {
  217.                     $adresse->setLocalite($requestedParams['Localite']);
  218.                 }
  219.                 // set code postale
  220.                 if (array_key_exists('code_postale'$requestedParams)) {
  221.                     $adresse->setCodePostale($requestedParams['code_postale']);
  222.                 }
  223.                 
  224.                 if (!$userRepository->findOneBy(['email' => $form->get('email')->getData()])) {
  225.                   //dd($instance);
  226.                   $entityManager->persist($instance);
  227.                   $entityManager->flush();
  228.                   // SEC-022 : abandon du JWT custom de vérification e-mail.
  229.                   // Le lien signé est généré par verify-email-bundle.
  230.                   $this->emailVerifier->sendEmailConfirmation(
  231.                       'app_verify_email',
  232.                       $instance,
  233.                       (new TemplatedEmail())
  234.                           ->from(new Address($this->getParameter('EmailAdmin'), 'CNFCPP'))
  235.                           ->to($instance->getEmail())
  236.                           ->subject($this->trans('email.subject.account_activation'))
  237.                           ->htmlTemplate('emails/register_mail.html.twig')
  238.                           ->context([
  239.                               'username' => $instance->getUsername(),
  240.                               '_locale' => $request->getLocale(),
  241.                           ])
  242.                   );
  243.                   return new JsonResponse([
  244.                       'success' => true,
  245.                       'message' => 'Votre compte a été créé avec succès, vérifiez votre boite mail pour le confirmer!'
  246.                       
  247.                   ], Response::HTTP_OK, ['Content-Type''application/json']);
  248.                  
  249.                 } else {
  250.                     return new JsonResponse([
  251.                         'success' => false,
  252.                         'message' => 'Email existe déjà !'
  253.                         
  254.                     ], Response::HTTP_OK, ['Content-Type''application/json']);
  255.                    
  256.                 }
  257.             }
  258.         }
  259.         return $this->render('registration/register.html.twig', [
  260.             'form_view_array' => $form_view_array,
  261.             'types' => $types,
  262.             'formAdr' => $formAdr->createView(),
  263.             'requestedType' => $requestedType
  264.         ]);
  265.     }
  266.     #[Route('ajax/get/delegation'name'ajax_get_delegation')]
  267.     public function getDelegation(Request $requestTranslatorInterface $translatorEntityManagerInterface $em): JsonResponse
  268.     {
  269.         $delegations $em
  270.             ->getRepository(Delegation::class)
  271.             ->getDelegationByGouvernaurat($request->query->get('gouvernorat_id'));
  272.         return new JsonResponse(json_encode($delegations));
  273.     }
  274.     #[Route('/verify/email'name'app_verify_email')]
  275.     public function verifyUserEmail(Request $requestUserRepository $userRepositoryTranslatorInterface $translator): Response
  276.     {
  277.         $userId $request->query->get('id');
  278.         if (null === $userId || !ctype_digit((string) $userId)) {
  279.             $this->addFlash('danger'$translator->trans('flash.token_invalid_expired'));
  280.             return $this->redirectToRoute('login');
  281.         }
  282.         $user $userRepository->find((int) $userId);
  283.         if (!$user) {
  284.             $this->addFlash('danger'$translator->trans('flash.token_invalid_expired'));
  285.             return $this->redirectToRoute('login');
  286.         }
  287.         if ($user->isVerified()) {
  288.             $this->addFlash('warning'$translator->trans('flash.user_already_activated'));
  289.             return $this->redirectToRoute('login');
  290.         }
  291.         try {
  292.             $this->emailVerifier->handleEmailConfirmation($request$user);
  293.             $this->addFlash('success'$translator->trans('flash.email_verified'));
  294.         } catch (VerifyEmailExceptionInterface $e) {
  295.             $this->addFlash('verify_email_error'$e->getReason());
  296.             return $this->redirectToRoute('login');
  297.         }
  298.         return $this->redirectToRoute('login');
  299.     }
  300.     #[Route('/verif/{token}'name'verify_user_legacy')]
  301.     public function verifyLegacyUserEmail(
  302.         string $token,
  303.         LegacyEmailVerificationTokenManager $legacyTokenManager,
  304.         UserRepository $userRepository,
  305.         EntityManagerInterface $entityManager,
  306.         TranslatorInterface $translator
  307.     ): Response {
  308.         if (
  309.             !$legacyTokenManager->isValid($token)
  310.             || $legacyTokenManager->isExpired($token)
  311.             || !$legacyTokenManager->checkSignature($token, (string) $this->getParameter('kernel.secret'))
  312.         ) {
  313.             $this->addFlash('danger'$translator->trans('flash.token_invalid_expired'));
  314.             return $this->redirectToRoute('login');
  315.         }
  316.         $payload $legacyTokenManager->getPayload($token);
  317.         $legacyUserId $payload['user_id'] ?? null;
  318.         if (!is_int($legacyUserId) && !(is_string($legacyUserId) && ctype_digit($legacyUserId))) {
  319.             $this->addFlash('danger'$translator->trans('flash.token_invalid_expired'));
  320.             return $this->redirectToRoute('login');
  321.         }
  322.         $user $userRepository->find((int) $legacyUserId);
  323.         if (!$user) {
  324.             $this->addFlash('danger'$translator->trans('flash.token_invalid_expired'));
  325.             return $this->redirectToRoute('login');
  326.         }
  327.         if (!$user->isVerified()) {
  328.             $user->setIsVerified(true);
  329.             $entityManager->persist($user);
  330.             $entityManager->flush();
  331.             $this->addFlash('success'$translator->trans('flash.email_verified'));
  332.         } else {
  333.             $this->addFlash('warning'$translator->trans('flash.user_already_activated'));
  334.         }
  335.         return $this->redirectToRoute('login');
  336.     }
  337.     #[Route('/profil'name'app_profil')]
  338. public function app_profil(
  339.     Request $request,
  340.     SluggerInterface $slugger,
  341.     EntityManagerInterface $entityManager,
  342.     ManagerRegistry $registry,
  343.     GouvernoratRepository $gouvernoratRepository,
  344.     DelegationRepository $delegationRepository,
  345.     UserPasswordHasherInterface $userPasswordHasher,
  346.     EnterprisePartenaireRepository $enterprisePartenaireRepository,
  347.     UserRepository $userRepository,
  348.     AdresseRepository $adresseRepository
  349. ): Response {
  350.     $AdresseRepository $entityManager->getRepository(Adresse::class);
  351.     $adr $AdresseRepository->findOneBy(['user' => $this->getUser()]);
  352.     // Vérification utilisateur connecté
  353.     if (!$this->getUser()) {
  354.         return $this->redirectToRoute('login');
  355.     }
  356.     // Création du formulaire en fonction du type d’utilisateur
  357.     $form null;
  358.     if ($this->getUser() instanceof Partenaire) {
  359.         if ($this->getUser()->getTypePartenaire() === Partenaire::PARTENAIRE_REGIONAL) {
  360.             $form $this->createForm(PartenaireRegionalType::class, $this->getUser());
  361.         } elseif ($this->getUser()->getTypePartenaire() === Partenaire::PARTENAIRE_NATIONAL) {
  362.             $form $this->createForm(PartenaireNationalType::class, $this->getUser());
  363.         }
  364.     } elseif ($this->getUser() instanceof Particulier) {
  365.         $form $this->createForm(ParticulierType::class, $this->getUser());
  366.     } elseif ($this->getUser() instanceof Entreprise) {
  367.         $form $this->createForm(EntrepriseType::class, $this->getUser());
  368.     } elseif ($this->getUser() instanceof Autres) {
  369.         $form $this->createForm(AutresType::class, $this->getUser());
  370.     } elseif ($this->getUser() instanceof Dae) {
  371.         $form $this->createForm(DaeType::class, $this->getUser());
  372.     } elseif ($this->getUser() instanceof ChargeAssistance) {
  373.         $form $this->createForm(ChargeAssistanceType::class, $this->getUser());
  374.     } elseif ($this->getUser() instanceof AgentInterne) {
  375.         $form $this->createForm(AgentInterneType::class, $this->getUser());
  376.     }
  377.     // Si aucun formulaire trouvé → erreur explicite
  378.     if (!$form) {
  379.         throw $this->createNotFoundException('Aucun formulaire défini pour ce type d’utilisateur.');
  380.     }
  381.     // L'acceptation des CGU est requise à l'inscription uniquement, pas en modification de profil
  382.     if ($form->has('agreeTerms')) {
  383.         $form->remove('agreeTerms');
  384.     }
  385.     // Traitement du formulaire
  386.     $form->handleRequest($request);
  387.     if ($form->isSubmitted() && !$form->isValid()) {
  388.         foreach ($form->getErrors(true) as $error) {
  389.             return new JsonResponse([
  390.                 'success' => false,
  391.                 'message' => $error->getMessage(),
  392.             ]);
  393.         }
  394.     }
  395.     if ($form->isSubmitted() && $form->isValid()) {
  396.         $data $request->request->all();
  397.         if ($this->getUser() instanceof Particulier) {
  398.             $gouv $gouvernoratRepository->find((int)$data['particulier']['gouvernorat']);
  399.             $adr->setGouvernorat($gouv);
  400.             $adr->setAdresse($data['particulier']['adresse']);
  401.             $adr->setCodePostale($data['particulier']['code_postale']);
  402.         } elseif ($this->getUser() instanceof Dae) {
  403.             $gouv $gouvernoratRepository->find((int)$data['dae']['gouvernorat']);
  404.             $adr->setGouvernorat($gouv);
  405.             $adr->setAdresse($data['dae']['adresse']);
  406.             $adr->setCodePostale($data['dae']['code_postale']);
  407.         } elseif ($this->getUser() instanceof Entreprise) {
  408.             foreach ($this->getUser()->getChargeFormations() as $elem) {
  409.                 $elem->setEntreprise($this->getUser());
  410.             }
  411.         } elseif ($this->getUser() instanceof Partenaire) {
  412.             $type $this->getUser()->getTypePartenaire() === Partenaire::PARTENAIRE_NATIONAL
  413.                 "partenaire_national"
  414.                 "partenaire_regional";
  415.             $gouv $gouvernoratRepository->find((int)$data[$type]['gouvernorat']);
  416.             $delg $delegationRepository->find((int)$data[$type]['delegation']);
  417.             $adr->setGouvernorat($gouv);
  418.             $adr->setDelegation($delg);
  419.             $adr->setAdresse($data[$type]['adresse']);
  420.             $adr->setCodePostale($data[$type]['code_postale']);
  421.             $file $request->files->get($type)['fileName'] ?? null;
  422.             if ($file) {
  423.                 $newFileName $this->fileUploader->upload($file'/listEnt''docEnt');
  424.                 $this->getUser()->setFileName($newFileName);
  425.             }
  426.         } elseif ($this->getUser() instanceof Autres) {
  427.             $gouv $gouvernoratRepository->find((int)$data['autres']['gouvernorat']);
  428.             $adr->setGouvernorat($gouv);
  429.             $adr->setAdresse($data['autres']['adresse']);
  430.             $adr->setCodePostale($data['autres']['code_postale']);
  431.         }
  432.         // Vérification mot de passe
  433.         if ($form->get('plainPassword')->getData()) {
  434.             if (!preg_match(self::PASSWORD_POLICY_REGEX, (string) $form->get('plainPassword')->getData())) {
  435.                 return new JsonResponse([
  436.                     'success' => false,
  437.                     'message' => PasswordPolicy::MESSAGE,
  438.                 ]);
  439.             }
  440.             if ($form->get('plainPassword')->getData() === $form->get('confirmpassword')->getData()) {
  441.                 $this->getUser()->setPassword(
  442.                     $userPasswordHasher->hashPassword(
  443.                         $this->getUser(),
  444.                         $form->get('plainPassword')->getData()
  445.                     )
  446.                 );
  447.             } else {
  448.                 return new JsonResponse([
  449.                     'success' => false,
  450.                     'message' => 'Les mots de passe ne sont pas identiques !'
  451.                 ]);
  452.             }
  453.         }
  454.         $entityManager->persist($this->getUser());
  455.         $entityManager->flush();
  456.         return new JsonResponse([
  457.             'success' => true,
  458.             'message' => 'Profil mis à jour avec succès'
  459.         ]);
  460.     }
  461.     return $this->render('registration/profil.html.twig', [
  462.         'profilForm' => $form->createView(),
  463.         'adr' => $adr
  464.     ]);
  465. }
  466.     #[Route('/renvoiverif'name'resend_verif')]
  467.     public function resendVerif(Request $requestTranslatorInterface $translatorUserRepository $userRepository): Response
  468.     {
  469.         $user $this->getUser();
  470.         $redirectRoute 'app_profil';
  471.         if (!$user) {
  472.             $redirectRoute 'login';
  473.             $email trim((string) $request->request->get('email'$request->query->get('email''')));
  474.             if ('' !== $email) {
  475.                 $user $userRepository->findOneBy(['email' => $email]);
  476.             }
  477.         }
  478.         if (!$user) {
  479.             // Réponse neutre pour éviter l'énumération de comptes.
  480.             $this->addFlash('success'$translator->trans('flash.verification_email_sent'));
  481.             return $this->redirectToRoute($redirectRoute);
  482.         }
  483.         if ($user->isVerified()) {
  484.             $this->addFlash('warning'$translator->trans('flash.user_already_activated'));
  485.             return $this->redirectToRoute($redirectRoute);
  486.         }
  487.         $this->sendVerificationEmailForUser($user);
  488.         $this->addFlash('success'$translator->trans('flash.verification_email_sent'));
  489.         return $this->redirectToRoute($redirectRoute);
  490.     }
  491.     private function sendVerificationEmailForUser(User $user): void
  492.     {
  493.         $this->emailVerifier->sendEmailConfirmation(
  494.             'app_verify_email',
  495.             $user,
  496.             (new TemplatedEmail())
  497.                 ->from(new Address($this->getParameter('EmailAdmin'), 'CNFCPP'))
  498.                 ->to($user->getEmail())
  499.                 ->subject($this->trans('email.subject.account_activation'))
  500.                 ->htmlTemplate('emails/register_mail.html.twig')
  501.                 ->context([
  502.                     'username' => $user->getUsername(),
  503.                     '_locale' => $this->request->getCurrentRequest()?->getLocale() ?? 'fr',
  504.                 ])
  505.         );
  506.     }
  507.      protected function executeAction(Request $request): Response
  508.     {
  509.         // Récupérez les données soumises
  510.         $montant $request->request->get('entreprise_montant');
  511.         // Effectuez la validation et l'enregistrement
  512.         if (floatval($montant) === 0) {
  513.             return new Response('Le montant ne peut pas être zéro.'400);
  514.         }
  515.         // Effectuez l'enregistrement dans la base de données
  516.         return new Response('Enregistrement réussi !');
  517.     }
  518.     #[Route('/general-conditions'name'app_general_conditions')]
  519.     public function generalConditions(){
  520.         return $this->render('registration/general_conditions.html.twig', []);
  521.     }
  522. }