src/Controller/RegistrationController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\AbstractInscription;
  5. use App\Form\RegistrationFormType;
  6. use App\Repository\UserRepository;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Mailer\MailerInterface;
  14. use Symfony\Component\Mailer\Transport;
  15. use Symfony\Component\Mailer\Mailer;
  16. use Symfony\Component\Mime\Email;
  17. use Symfony\Component\Mime\Address;
  18. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. use Symfony\Bundle\TwigBundle\TwigEngine;
  23. class RegistrationController extends AbstractController
  24. {   
  25.     // private $mailer;
  26.     // public function __construct(MailerInterface $mailer)
  27.     // {
  28.     //     $this->mailer = $mailer;
  29.     // }
  30.     /**
  31.      * @Route("/register", name="app_register")
  32.      */
  33.     public function register(MailerInterface $mailer,Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
  34.     {
  35.        
  36.         return $this->render('registration/register.html.twig', [
  37.            
  38.         ]);
  39.     }
  40.     /**
  41.      * @Route("/registerJunior", name="front_registerJunior")
  42.      */
  43.     public function registerJunior(MailerInterface $mailer,Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, UserRepository $userrepository): Response
  44.     {
  45.         $user = new User();
  46.         if ($request->isMethod('post')) {
  47.            if ($userrepository->findOneBy(['email'=>$request->request->get('email')])!=null){
  48.             if($request->getLocale()=='fr'){
  49.                 $this->addFlash('danger', 'Email déja utilisé');
  50.             }else{
  51.                 $this->addFlash('danger', 'Email already used');
  52.             }
  53.             return $this->render('registration/register.html.twig', [
  54.             ]);
  55.            }
  56.             // encode the plain password.
  57.             $user->setPassword(
  58.             $userPasswordHasher->hashPassword(
  59.                     $user,
  60.                     $request->request->get('plainPassword')
  61.                 )
  62.             );
  63.             $user->setVerifCode($this->generateVerifCode());
  64.             $user->setNom($request->request->get('nom'));
  65.             $user->setPrenom($request->request->get('prenom'));
  66.             $user->setTel($request->request->get('tel'));
  67.             $user->setEmail($request->request->get('email'));
  68.             $user->setCivilite($request->request->get('civilite'));
  69.             $user->setAddresse($request->request->get('addresse'));
  70.             $user->setSpecialite($request->request->get('specialite'));
  71.            if(!empty($request->request->get('code_postal'))){ $user->setCodePostal($request->request->get('code_postal'));}
  72.             $user->setActivite('Public');
  73.             $user->setVille($request->request->get('ville'));
  74.             $user->setTitre('Résident');
  75.             $proofofStatus=$request->files->get("proofofStatus");
  76.             if ($proofofStatus != null) {
  77.                 $fileNamepdf = md5(uniqid()) . '.' . $proofofStatus->guessExtension();
  78.                 $user->setProofOfStatus($fileNamepdf);
  79.                 $proofofStatus->move(
  80.                     $this->getParameter('pdfUserProofOfStatus_directory'),
  81.                     $fileNamepdf
  82.                 );
  83.             } 
  84.             $photoUser=$request->files->get("photoUser");
  85.             if ($photoUser != null) {
  86.                 $fileNameimage = md5(uniqid()) . '.' . $photoUser->guessExtension();
  87.                 $user->setPhotoUser($fileNameimage);
  88.                 $photoUser->move(
  89.                     $this->getParameter('imagePhotoUser_directory'),
  90.                     $fileNameimage
  91.                 );
  92.             } 
  93.             $user->setNumOrdre(null);
  94.             $user->setPays($request->request->get('pays'));
  95.             $user->setRoles(["ROLE_MEMBRE_EN_ATTENTE"]);
  96.             $user->setStatut("en attente");
  97.             $user->setVerified(0);
  98.             $entityManager->persist($user);
  99.             $entityManager->flush();
  100.             if($request->getLocale()=='fr'){
  101.                 $this->addFlash('success', 'Votre compte est créé avec succès');
  102.             }else{
  103.                 $this->addFlash('success', 'Your account is successfully created');
  104.             }
  105.             return $this->redirectToRoute('app_login');
  106.         }
  107.         return $this->render('registration/register.html.twig', [
  108.            
  109.         ]);
  110.     }
  111.     /**
  112.      * @Route("/registerSenior", name="front_registerSenior")
  113.      */
  114.     public function registerSenior(MailerInterface $mailer,Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, UserRepository $userrepository): Response
  115.     {
  116.         $user = new User();
  117.         $form = $this->createForm(RegistrationFormType::class, $user);
  118.         $form->handleRequest($request);
  119.         if ($request->isMethod('post')) {
  120.             if ($userrepository->findOneBy(['email'=>$request->request->get('email')])!=null){
  121.                 if($request->getLocale()=='fr'){
  122.                     $this->addFlash('danger', 'Email déja utilisé');
  123.                 }else{
  124.                     $this->addFlash('danger', 'Email already used');
  125.                 }
  126.                 return $this->render('registration/register.html.twig', [
  127.                 ]);
  128.                }
  129.             // var_dump($request->request->get('plainPassword')->getData());
  130.             // die();
  131.             // encode the plain password.
  132.             $user->setPassword(
  133.             $userPasswordHasher->hashPassword(
  134.                     $user,
  135.                     $request->request->get('plainPassword')
  136.                 )
  137.             );
  138.             $user->setVerifCode($this->generateVerifCode());
  139.             $user->setNom($request->request->get('nom'));
  140.             $user->setPrenom($request->request->get('prenom'));
  141.             $user->setTel($request->request->get('tel'));
  142.             $user->setEmail($request->request->get('email'));
  143.             $user->setCivilite($request->request->get('civilite'));
  144.             $user->setAddresse($request->request->get('addresse'));
  145.             $user->setSpecialite($request->request->get('specialite'));
  146.             if(!empty($request->request->get('code_postal'))){$user->setCodePostal($request->request->get('code_postal'));}
  147.             $user->setActivite($request->request->get('activite'));
  148.             $user->setVille($request->request->get('ville'));
  149.             $user->setTitre($request->request->get('titre'));
  150.             $user->setNumOrdre($request->request->get('numOrdre'));
  151.             $user->setPays($request->request->get('pays'));
  152.             $user->setRoles(["ROLE_MEMBRE_EN_ATTENTE"]);
  153.             $user->setStatut("en attente");
  154.             $user->setSousSpecialite($request->request->get('sousSpecialite'));
  155.             $user->setFieldOfInterest($request->request->get('fieldOfInterest'));
  156.             $biographie=$request->files->get("biographie");
  157.             if ($biographie != null) {
  158.                 $fileNamepdfBiographie = md5(uniqid()) . '.' . $biographie->guessExtension();
  159.                 $user->setBiographie($fileNamepdfBiographie);
  160.                 $biographie->move(
  161.                     $this->getParameter('pdfBiographie_directory'),
  162.                     $fileNamepdfBiographie
  163.                 );
  164.             } 
  165.             $photoUser=$request->files->get("photoUser");
  166.             if ($photoUser != null) {
  167.                 $fileNameimage = md5(uniqid()) . '.' . $photoUser->guessExtension();
  168.                 $user->setPhotoUser($fileNameimage);
  169.                 $photoUser->move(
  170.                     $this->getParameter('imagePhotoUser_directory'),
  171.                     $fileNameimage
  172.                 );
  173.             } 
  174.             $user->setAddressPro($request->request->get('addressPro'));
  175.             $user->setVerified(0);
  176.             $entityManager->persist($user);
  177.             $entityManager->flush();
  178.             if($request->getLocale()=='fr'){
  179.                 $this->addFlash('success', 'Votre compte est créé avec succès');
  180.             }else{
  181.                 $this->addFlash('success', 'Your account is successfully created');
  182.             }
  183.             
  184.             return $this->redirectToRoute('app_login');
  185.         }
  186.         return $this->render('registration/register.html.twig', [
  187.             
  188.         ]);
  189.     }
  190.      /**
  191.      * @Route("/forgot-password", name="forgot_password")
  192.      */
  193.     public function forgetPassword(Request $request, MailerInterface $mailer): Response
  194.     {   
  195.         if($request->isMethod('POST')){
  196.             $repository = $this->getDoctrine()->getRepository(User::class);
  197.             $email=$request->request->get('email');
  198.             $user = $this->getDoctrine()->getRepository(User::class)->findOneBy(['email'=>$email]);
  199.             //dd($user);
  200.             if($user){
  201.                 $to      = $user->getEmail();
  202.                 $subject = 'ATU - Réinitialisation de votre mot de passe';
  203.                 $headers = "MIME-Version: 1.0\r\n";
  204.                 $headers .= "Content-type: text/html; charset=UTF-8\r\n";
  205.                 $headers .= 'From: contact@urotunisia.com' . "\r\n" .
  206.                 'Reply-To: contact@urotunisia.com' . "\r\n" .
  207.                 'X-Mailer: PHP/' . phpversion();
  208.                 // $template= new TwigEngine();
  209.                 $message = "<h1>Bonjour ".$user->getNom()." ".$user->getPrenom()."!</h1><p>Pour réinitialiser votre mot de passe, merci de vous rendre sur <a href='http://urotunisia.com/verif_code/".$user->getId()."/".$user->getVerifCode()."'>http://urotunisia.com/verif_code/".$user->getId()."/".$user->getVerifCode()."</a></p>
  210.                 <p>Cordialement</p><p>Association Tunisienne d'Urologie</p>";
  211.                 mail($to, $subject, $message, $headers);
  212.                 if($request->getLocale()=="en"){
  213.                     $this->addFlash('success','A reset link will be sent to your email'); }
  214.                 else {
  215.                     $this->addFlash('success','Un lien de réinitialisation sera envoyé à votre email');
  216.                 } 
  217.                 return $this->redirectToRoute('check-email', array('email' => $user->getEmail()));
  218.             }else{
  219.                 if($request->getLocale()=="en"){
  220.                     $this->addFlash('danger','invalid email'); }
  221.                 else {
  222.                     $this->addFlash('danger','email invalide');
  223.                 }
  224.                 return $this->redirectToRoute('forgot_password', array()); 
  225.             }   
  226.                  
  227.         }
  228.         return $this->render('registration/forgot_password.html.twig');
  229.     }
  230.     /**
  231.      * @Route("/forgot-password-abstract", name="forgot_password_abstract")
  232.      */
  233.     public function forgetPasswordAbstractIncri(Request $request, MailerInterface $mailer): Response
  234.     {   
  235.         if($request->isMethod('POST')){
  236.             $repository = $this->getDoctrine()->getRepository(User::class);
  237.             $email=$request->request->get('email');
  238.             $user = $this->getDoctrine()->getRepository(AbstractInscription::class)->findOneBy(['email'=>$email]);
  239.             //dd($user);
  240.             if($user){
  241.                 $to      = $user->getEmail();
  242.                 $subject = 'ATU - Réinitialisation de votre mot de passe pour les inscriptions aux abstracts';
  243.                 $headers = "MIME-Version: 1.0\r\n";
  244.                 $headers .= "Content-type: text/html; charset=UTF-8\r\n";
  245.                 $headers .= 'From: contact@urotunisia.com' . "\r\n" .
  246.                 'Reply-To: contact@urotunisia.com' . "\r\n" .
  247.                 'X-Mailer: PHP/' . phpversion();
  248.                 // $template= new TwigEngine();
  249.                 $message = "<h1>Bonjour ".$user->getNom()." ".$user->getPrenom()."!</h1><p>Pour réinitialiser votre mot de passe pour les inscriptions aux abstracts, merci de vous rendre sur <a href='http://urotunisia.com/verif_code_abstract/".$user->getId()."/".$user->getVerifCode()."'>http://urotunisia.com/verif_code_abstract/".$user->getId()."/".$user->getVerifCode()."</a></p>
  250.                 <p>Cordialement</p><p>Association Tunisienne d'Urologie</p>";
  251.                 mail($to, $subject, $message, $headers);
  252.                 if($request->getLocale()=="en"){
  253.                     $this->addFlash('success','A reset link will be sent to your email'); }
  254.                 else {
  255.                     $this->addFlash('success','Un lien de réinitialisation sera envoyé à votre email');
  256.                 } 
  257.                 return $this->redirectToRoute('check-email-abstract', array('email' => $user->getEmail()));
  258.             }else{
  259.                 if($request->getLocale()=="en"){
  260.                     $this->addFlash('danger','invalid email'); }
  261.                 else {
  262.                     $this->addFlash('danger','email invalide');
  263.                 }
  264.                 return $this->redirectToRoute('forgot_password_abstract', array()); 
  265.             }   
  266.                  
  267.         }
  268.         return $this->render('registration/forgot_password_abstract.html.twig');
  269.     }
  270.     /**
  271.      * @Route("/check-email-abstract/{email}", name="check-email-abstract")
  272.      */
  273.     public function checkEmail(Request $request,$email): Response
  274.     {
  275.         return $this->render('registration/check_email_abstract.html.twig');
  276.     }
  277.     /**
  278.      * @Route("/check-email/{email}", name="check-email")
  279.      */
  280.     public function checkEmailAbstract(Request $request,$email): Response
  281.     {
  282.         return $this->render('registration/check_email.html.twig');
  283.     }
  284.      /**
  285.      * @Route("/verif_code/{id}/{code}", name="verif_code")
  286.      */
  287.     public function verifCode(Request $request, int $id, string $code, EntityManagerInterface $entityManager, UserPasswordEncoderInterface $userPasswordEncoder): Response
  288.     {
  289.         $repository = $this->getDoctrine()->getRepository(User::class);
  290.             $user = $this->getDoctrine()
  291.             ->getRepository(User::class)
  292.             ->findOneBy(['id'=>$id,'verifCode'=>$code]);
  293.             if(!$user){
  294.                 if($request->getLocale()=="en"){
  295.                     $this->addFlash('fail','Invalid verifying code'); }
  296.                 else {
  297.                     $this->addFlash('fail','Code de vérification invalide'); 
  298.                 }
  299.                 return $this->redirectToRoute('forgot_password');
  300.             }
  301.         if($request->isMethod('POST')){
  302.             
  303.             $user->setVerifCode($this->generateVerifCode());
  304.             $user->setPassword(
  305.                 $userPasswordEncoder->encodePassword(
  306.                     $user,
  307.                     $request->request->get('password')
  308.                 )
  309.             );
  310.             
  311.             $entityManager->persist($user);
  312.             $entityManager->flush();
  313.             return $this->redirectToRoute('app_accueil');
  314.         }
  315.         return $this->render('registration/verif_code.html.twig',["email"=>$user->getEmail()]);
  316.     }
  317.      /**
  318.      * @Route("/verif_code_abstract/{id}/{code}", name="verif_code_abstract")
  319.      */
  320.     public function verifCodeAbstract(Request $request, int $id, string $code, EntityManagerInterface $entityManager, UserPasswordHasherInterface $userPasswordHasher): Response
  321.     {
  322.         $repository = $this->getDoctrine()->getRepository(AbstractInscription::class);
  323.             $user = $this->getDoctrine()
  324.             ->getRepository(AbstractInscription::class)
  325.             ->findOneBy(['id'=>$id,'verifCode'=>$code]);
  326.             if(!$user){
  327.                 if($request->getLocale()=="en"){
  328.                     $this->addFlash('fail','Invalid verifying code'); }
  329.                 else {
  330.                     $this->addFlash('fail','Code de vérification invalide'); 
  331.                 }
  332.                 return $this->redirectToRoute('forgot_password_abstract');
  333.             }
  334.         if($request->isMethod('POST')){
  335.             
  336.             $user->setVerifCode($this->generateVerifCode());
  337.             $user->setPassword(
  338.                 $userPasswordHasher->hashPassword(
  339.                     $user,
  340.                     $request->request->get('password')
  341.                 )
  342.             );
  343.             
  344.             $entityManager->persist($user);
  345.             $entityManager->flush();
  346.             return $this->redirectToRoute('app_accueil');
  347.         }
  348.         return $this->render('registration/verif_code_abstract.html.twig',["email"=>$user->getEmail()]);
  349.     }
  350.     function generateVerifCode(){
  351.         $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  352.         $randstring = '';
  353.         for ($i = 0; $i < 15; $i++) {
  354.             $randstring .= $characters[rand(0, strlen($characters)-1)];
  355.             }
  356.         return $randstring;
  357.         
  358.     }
  359. }