src/Controller/RegisterController.php line 105

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\Adresse;
  5. use App\Form\MedecinType;
  6. use App\Form\GrossisteType;
  7. use App\Form\PharmacieType;
  8. use GeoIp2\Database\Reader;
  9. use App\Services\CountryCode;
  10. use App\Form\PrescripteurType;
  11. use App\Entity\UserTypepaiement;
  12. use App\Services\MailerServices;
  13. use App\Services\IctocoinService;
  14. use App\Repository\PaysRepository;
  15. use App\Repository\UserRepository;
  16. use App\Services\OrangeSmsService;
  17. use App\Repository\VilleRepository;
  18. use App\Repository\AdresseRepository;
  19. use App\Repository\QuartierRepository;
  20. use App\Form\FinalisationIscriptionType;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use App\Form\Handler\RegisterFormHandler;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\Mailer\MailerInterface;
  25. use Symfony\Component\Security\Core\Security;
  26. use GeoIp2\Exception\AddressNotFoundException;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use Symfony\Component\HttpKernel\KernelInterface;
  30. use Symfony\Component\HttpFoundation\JsonResponse;
  31. use Symfony\Component\HttpFoundation\RequestStack;
  32. use Symfony\Contracts\Translation\TranslatorInterface;
  33. use App\Form\Handler\FinalisationInscriptionFormHandler;
  34. use Symfony\Component\Form\Extension\Core\Type\TextType;
  35. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  36. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  37. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  38. class RegisterController extends AbstractController
  39. {
  40.     private $em;
  41.     private $mailerint;
  42.     private $villeRepo;
  43.     private $quartierRepo;
  44.     private $paysRepo;
  45.     private $tanslator;
  46.     private $appKernel;
  47.     private $primeDeBienvenu 1000;
  48.     public function __construct(
  49.         EntityManagerInterface $em,
  50.         MailerInterface $mailerint,
  51.         PaysRepository $paysRepo,
  52.         VilleRepository $villeRepo,
  53.         QuartierRepository $quartierRepo,
  54.         TranslatorInterface $tanslator,
  55.         KernelInterface $appKernel
  56.     ) {
  57.         $this->em           $em;
  58.         $this->mailerint    $mailerint;
  59.         $this->villeRepo    $villeRepo;
  60.         $this->quartierRepo $quartierRepo;
  61.         $this->paysRepo     $paysRepo;
  62.         $this->tanslator    $tanslator;
  63.         $this->appKernel    $appKernel;
  64.     }
  65.     /**
  66.      * @Route("/register/grossiste", name="register_grossiste")
  67.      */
  68.     public function registerGrossiste(Request $requestUserPasswordHasherInterface $encodersMailerServices $msOrangeSmsService $OrangeSmsService,RequestStack $requestStack): Response
  69.     {
  70.         $user           = new User();
  71.         $form           $this->createForm(GrossisteType::class, $user);
  72.         $formHandler    = new RegisterFormHandler($form$request$this->em$encoders$requestStack);
  73.         $user->setRoles(['ROLE_GROSSISTE'])->setGrossiste($user);
  74.         $user $formHandler->process();
  75.         if (!is_null($user)) {
  76.             $ms->sendEmail($this->mailerint'pharmadexi@gmail.com'$user->getEmail(), $user->getDesignation(), 'Confirmation Inscription PHARMADEXI''emails/confirm_grssiste_register.html.twig');
  77.             $ms->sendEmailAdmin($this->mailerint'pharmadexi@gmail.com''eruditsophrmad@gmail.com'$user->getDesignation(), $user->getId(), "Compte client Pharmadexi en attente d'activation"'emails/activation_compte_client.html.twig');
  78.             //$this->addFlash('success', $this->tanslator->trans('Votre compte a été bien créé.'));
  79.             $code       rand(12317879);
  80.             $message    $this->tanslator->trans('PHARMADEXI-Code confirmation: ' $code);
  81.             if ($OrangeSmsService->envoyeSMSOrange($user->getPhone(), $message) == 'OK') {
  82.                 $user->setVerified(0)->setVerificationCode($code);
  83.             } else {
  84.                 $user->setVerified(2)->setVerificationCode($code);
  85.             }
  86.             $this->em->flush();
  87.             return $this->redirectToRoute('register_verify');
  88.         }
  89.         return $this->render('register/register_grossiste.html.twig', [
  90.             'form' => $form->createView(),
  91.         ]);
  92.     }
  93.     /**
  94.      * @Route("/register/prescripteur", name="register_prescripteur")
  95.      */
  96.     public function registerPrescripteur(Request $requestUserPasswordHasherInterface $encodersMailerServices $msCountryCode $cdOrangeSmsService $OrangeSmsServiceRequestStack $requestStack): Response
  97.     {
  98.         $user           = new User();
  99.         $form           $this->createForm(PrescripteurType::class, $user);
  100.         $formHandler    = new RegisterFormHandler($form$request$this->em$encoders,$requestStack);
  101.         $user->setRoles(['ROLE_PRESCRIPTEUR']);
  102.         $user           $formHandler->process();
  103.         if (!is_null($user)) {
  104.             $ms->sendEmail($this->mailerint'pharmadexi@gmail.com'$user->getEmail(), $user->getDesignation(), 'Confirmation Inscription PHARMADEXI''emails/confirm_pharmacie_register.html.twig');
  105.             $ms->sendEmailAdmin($this->mailerint'pharmadexi@gmail.com''eruditsophrmad@gmail.com'$user->getDesignation(), $user->getId(), "Compte client Pharmadexi en attente d'activation"'emails/activation_compte_client.html.twig');
  106.             //$this->addFlash('success', $this->tanslator->trans('Votre compte a été bien créé.'));
  107.             $code rand(12317879);
  108.             $message $this->tanslator->trans('PHARMADEXI-Code cofirmation: ' $code);
  109.             // if ($OrangeSmsService->envoyeSMSOrange($user->getPhone(), $message) == 'OK') {
  110.             //     $user->setVerified(0)->setVerificationCode($code);
  111.             // } else {
  112.             //     $user->setVerified(2)->setVerificationCode($code);
  113.             // }
  114.             $this->em->flush();
  115.             return $this->redirectToRoute('register_verify');
  116.         }
  117.         return $this->render('register/register_prescripteur.html.twig', [
  118.             'form' => $form->createView(),
  119.         ]);
  120.     }
  121.     /**
  122.      * @Route("/register/pharmacie", name="register_pharmacie")
  123.      */
  124.     public function registerPharmacie(RequestStack $requestStackAdresseRepository $adresseRepoIctocoinService $ictocoinServiceRequest $requestUserPasswordHasherInterface $encodersMailerServices $msOrangeSmsService $OrangeSmsServiceQuartierRepository $quartierRepo): Response
  125.     {
  126.         $user = new User();
  127.         $form $this->createForm(PharmacieType::class, $user);
  128.         $formHandler = new RegisterFormHandler($form$request$this->em$encoders$requestStack);
  129.         $user->setRoles(['ROLE_PHARMACIE']);
  130.         $user $formHandler->process($requestStack);
  131.         if ($user) {
  132.             // Gestion des paiements
  133.             foreach ($form->get('typepaiements')->getData() as $typepaiement) {
  134.                 $userTypePaiement = new UserTypepaiement();
  135.                 $userTypePaiement->setTypepaiements($typepaiement)
  136.                     ->setUsers($user)
  137.                     ->setIsValid(false);
  138.                 $this->em->persist($userTypePaiement);
  139.             }
  140.             // Code de vérification
  141.             $code rand(12317879);
  142.             $message $this->tanslator->trans('PHARMADEXI-Code confirmation: ' $code);
  143.             //    if ($OrangeSmsService->envoyeSMSOrange($user->getPhone(), $message) == 'OK') {
  144.             //        $user->setVerified(0)->setVerificationCode($code);
  145.             //    } else {
  146.             //        $user->setVerified(2)->setVerificationCode($code);
  147.             //    }
  148.             $this->em->flush();
  149.             // Prime de bienvenue
  150.             //$raison = "Prime de bienvenue";
  151.             //$ictocoinService->crediter($user->getIctusPharmacie(), $this->primeDeBienvenu, $raison);
  152.             // Envoi des emails
  153.             /* $ms->sendEmailAdmin($this->mailerint, 'pharmadexi@gmail.com', 'erudit.andrianomentsoa@sopharmad.mg', $user->getDesignation(), $user->getId(), "Compte client Pharmadexi en attente d'activation", 'emails/activation_compte_client.html.twig');
  154.             $sendMail = $ms->sendEmail($this->mailerint, 'pharmadexi@gmail.com', $user->getEmail(), $user->getDesignation(), 'Confirmation Inscription PHARMADEXI', 'emails/confirm_pharmacie_register.html.twig'); */
  155.             /* if ($sendMail === false) {
  156.                 $this->addFlash('success', $this->tanslator->trans('Votre compte a été bien créé, avec email à vérifier.'));
  157.             } */
  158.             return $this->redirectToRoute('register_verify');
  159.         }
  160.         return $this->render('register/register_pharmacie.html.twig', [
  161.             'form' => $form->createView(),
  162.         ]);
  163.     }
  164.     /**
  165.      * @Route("/testmessage", name="message_pharmacie")
  166.      */
  167.     public function testMessage(OrangeSmsService $OrangeSmsService)
  168.     {
  169.         $OrangeSmsService->sendMessage();
  170.         //dd('ok');
  171.     }
  172.     /**
  173.      * @Route("/inscription/verification-code", name="register_verify")
  174.      */
  175.     public function verifyCode(Request $requestUserRepository $user_repo)
  176.     {
  177.         $defaultData    = ['message' => 'Code'];
  178.         $form           $this->createFormBuilder($defaultData)
  179.             ->add('confirm_code'TextType::class, [
  180.                 'label' => false,
  181.                 'attr' => [
  182.                     'class' => 'form-control code-verify input-code',
  183.                     'placeholder' => '######'
  184.                 ]
  185.             ])
  186.             ->getForm();
  187.         $form->handleRequest($request);
  188.         if ($form->isSubmitted() && $form->isValid()) {
  189.             // data is an array with "name", "email", and "message" keys
  190.             $data   $form->getData();
  191.             $user   $user_repo->findOneByVerificationCode($data['confirm_code']);
  192.             if ($user) {
  193.                 $user->setVerified(1)->setVerificationCode($data['confirm_code'] . uniqid());
  194.                 $this->em->flush();
  195.                 $this->addFlash('success'$this->tanslator->trans('Votre compte a été bien créé.'));
  196.                 return $this->redirectToRoute('login');
  197.             } else {
  198.                 $this->addFlash('danger'$this->tanslator->trans('Code invalide.'));
  199.             }
  200.         }
  201.         return $this->render('register/verification_code.html.twig', [
  202.             'form' => $form->createView()
  203.         ]);
  204.     }
  205.     /**
  206.      * Undocumented function
  207.      * @Route("/inscription/verification-plustard", name="plustard_verification")
  208.      *
  209.      * @return void
  210.      */
  211.     public function plutardVerification()
  212.     {
  213.         $this->addFlash('success'$this->tanslator->trans('Votre compte a été bien créé.'));
  214.         return $this->redirectToRoute('login');
  215.     }
  216.     /**
  217.      * @Route("/login", name="login")
  218.      */
  219.     public function login(AuthenticationUtils $utilsSecurity $security): Response
  220.     {
  221.         $error    $utils->getLastAuthenticationError();
  222.         $username $utils->getLastUsername();
  223.         //dd($this->getUser()->getRoles()[0]);
  224.         if ($security->getUser()) {
  225.             switch ($this->getUser()->getRoles()[0]) {
  226.                 case 'ROLE_ADMIN':
  227.                     return $this->redirectToRoute('admin_category_index');
  228.                     break;
  229.                 case 'ROLE_PRESCRIPTEUR':
  230.                     return $this->redirectToRoute('prescripteur_index');
  231.                     break;
  232.                 case 'ROLE_PHARMACIE':
  233.                     return $this->redirectToRoute('pharmacie_index');
  234.                     break;
  235.                 case 'ROLE_GROSSISTE':
  236.                     return $this->redirectToRoute('grossiste_catalogue');
  237.                     break;
  238.                 default:
  239.                     return $this->redirectToRoute('home');
  240.                     break;
  241.             }
  242.             return $this->redirectToRoute('login');
  243.         }
  244.         return $this->render('register/login.html.twig', [
  245.             'hasError' => $error !== null,
  246.             'username' => $username
  247.         ]);
  248.     }
  249.     /**
  250.      * @Route("/logout", name="logout")
  251.      */
  252.     public function logout() {}
  253.     public function redirectAfterlogin()
  254.     {
  255.         return '';
  256.     }
  257.     /**
  258.      *
  259.      * @param Request $request
  260.      * @return JsonResponse
  261.      * @Route("/listville", name="listeville")
  262.      */
  263.     public function listVilleParPays(Request $request)
  264.     {
  265.         $villes $this->villeRepo->createQueryBuilder("v")
  266.             ->where("v.pays = :pays")
  267.             ->setParameter("pays"$request->query->get("payslocalisation"))
  268.             ->orderBy('v.name''DESC')
  269.             ->getQuery()
  270.             ->getResult();
  271.         $responseArray = array();
  272.         foreach ($villes as $ville) {
  273.             $responseArray[] = array(
  274.                 "id"   => $ville->getId(),
  275.                 "name" => $ville->getName()
  276.             );
  277.         }
  278.         return new JsonResponse($responseArray);
  279.         // e.g
  280.         // [{"id":"3","name":"Treasure Island"},{"id":"4","name":"Presidio of San Francisco"}]
  281.     }
  282.     /**
  283.      *
  284.      * @param Request $request
  285.      * @return JsonResponse
  286.      * @Route("/listQuartier", name="listequartier")
  287.      */
  288.     public function listQuartierParVille(Request $request)
  289.     {
  290.         $quartiers $this->quartierRepo->createQueryBuilder("q")
  291.             ->where("q.ville = :ville")
  292.             ->setParameter("ville"$request->query->get("ville"))
  293.             ->orderBy('q.name''ASC')
  294.             ->getQuery()
  295.             ->getResult();
  296.         $responseArray = array();
  297.         foreach ($quartiers as $quartier) {
  298.             $responseArray[] = array(
  299.                 "id"   => $quartier->getId(),
  300.                 "name" => $quartier->getName()
  301.             );
  302.         }
  303.         return new JsonResponse($responseArray);
  304.         // e.g
  305.         // [{"id":"3","name":"Treasure Island"},{"id":"4","name":"Presidio of San Francisco"}]
  306.     }
  307.     /**
  308.      *
  309.      * @param Request $request
  310.      * @Route("/finalisation-incription/{id}", name="finalisation_incription")
  311.      */
  312.     public function finalisationInscriptionPharmacie(User $userRequest $requestUserPasswordHasherInterface $encoders)
  313.     {
  314.         $form        $this->createForm(FinalisationIscriptionType::class, $user);
  315.         $formHandler = new FinalisationInscriptionFormHandler($form$request$this->em$encoders);
  316.         $user        $formHandler->process();
  317.         if (!is_null($user)) {
  318.             $this->addFlash('success''Votre compte est crée');
  319.             $this->redirectToRoute('login');
  320.         }
  321.         return $this->render('register/finalisation_incription.html.twig', [
  322.             'form' => $form->createView()
  323.         ]);
  324.     }
  325.     /**
  326.      * @Route("/update-session-localisation", name="update_session_localisation")
  327.      */
  328.     public function updateSessionLocalisation(RequestStack $requestStackRequest $request)
  329.     {
  330.         $session   $requestStack->getSession();
  331.         $latitude  $request->request->get('latitude');
  332.         $longitude $request->request->get('longitude');
  333.         $session->set('localisation_session', ['latitude' => $latitude'longitude' => $longitude]);
  334.         return new JsonResponse(['success' => true]);
  335.     }
  336. }