src/Controller/HomeController.php line 169

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Blog;
  4. use App\Entity\Categorie;
  5. use App\Entity\CodePromo;
  6. use App\Entity\MessageClient;
  7. use App\Entity\PageAboutUs;
  8. use App\Entity\Prediction;
  9. use App\Entity\Reservation;
  10. use App\Entity\User;
  11. use App\Form\MessageClientFormType;
  12. use App\Form\PredictionFormType;
  13. use App\Repository\BlogRepository;
  14. use App\Repository\CategorieRepository;
  15. use App\Repository\CodePromoRepository;
  16. use App\Repository\TestNumerologieInfoElmtRepository;
  17. use App\Repository\TestNumerologieInfoRepository;
  18. use App\Repository\UserRepository;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. use App\Service\MailService;
  24. use App\Service\ReservationService;
  25. use App\Service\SecurityService;
  26. use Doctrine\ORM\EntityManagerInterface;
  27. use Exception;
  28. use Symfony\Component\HttpFoundation\JsonResponse;
  29. class HomeController extends AbstractController
  30. {
  31.     private $mailService;
  32.     private $entityManager;
  33.     private $messageClientRepository;
  34.     private $userRepository;
  35.     private $reservationService;
  36.     public function __construct(MailService $mailServiceEntityManagerInterface $entityManagerReservationService $reservationServiceUserRepository $userRepository, private CodePromoRepository $codePromoRepository){
  37.         $this->mailService $mailService;
  38.         $this->entityManager $entityManager;
  39.         $this->reservationService $reservationService;
  40.         $this->userRepository $userRepository;
  41.     }
  42.     #[Route('/'name'app_home')]
  43.     public function index(Request $requestCategorieRepository $categorieRepository): Response
  44.     {
  45.         $prediction = new Prediction();
  46.         
  47.         $predictionForm $this->createForm(PredictionFormType::class, $prediction);
  48.         $predictionForm->handleRequest($request);
  49.         $error null;
  50.         
  51.         if ($predictionForm->isSubmitted() && $predictionForm->isValid()) {
  52.             try{
  53.                 $prediction $predictionForm->getData();
  54.                 $prediction->setCreatedAt(new \DateTime());
  55.                 $this->entityManager->persist($prediction);
  56.                 
  57.                 $client $this->userRepository->findByMailIngoreCase($prediction->getEmail());
  58.                 if(!$client){
  59.                     $client = new User();
  60.                     $client->setFirstname($prediction->getName());
  61.                     $client->setMail($prediction->getEmail());
  62.                     $client->setRoles(['ROLE_CLIENT']);
  63.                     $client->setTypeInscription(User::TYPE_INSCRIPTION_PAGE_NUMEROLOGIE);
  64.                     $this->entityManager->persist($client);
  65.                 }
  66.                 $this->entityManager->flush();
  67.                 return $this->redirectToRoute('app_prediction', [
  68.                     'nm'=>SecurityService::encrypt($prediction->getName(), SecurityService::$KEY) ,
  69.                     'dg'=>SecurityService::encrypt($prediction->getDigit(), SecurityService::$KEY)
  70.                 ]);
  71.             } catch(\Exception $ex){
  72.                 $this->addFlash('danger'$ex->getMessage());
  73.             }
  74.         }
  75.         return $this->render('home/home.html.twig', [
  76.             'controller_name' => 'HomeController',
  77.             'predictionForm' => $predictionForm->createView(),
  78.             'error'=>$error
  79.         ]);
  80.     }
  81.     #[Route('/nos-informations/{id}'name'app_about_us')]
  82.     public function aboutUsPageAboutUs $pageAboutUs): Response
  83.     {
  84.         
  85.         return $this->render('about_us/page_about_us_show.html.twig', [
  86.             'controller_name' => 'aboutUsController',
  87.             'pageAboutUs' => $pageAboutUs
  88.         ]);
  89.     }
  90.     #[Route('/services'name'app_services')]
  91.     public function services(Request $request): Response
  92.     {
  93.         
  94.         return $this->render('services/services.html.twig', [
  95.             'controller_name' => 'servicesController'
  96.         ]);
  97.     }
  98.     #[Route('/details'name'app_details')]
  99.     public function details(Request $request): Response
  100.     {
  101.         
  102.         return $this->render('details/details.html.twig', [
  103.             'controller_name' => 'detailsController'
  104.         ]);
  105.     }
  106.     #[Route('/services-voyance-cartomancie'name'app_prestations')]
  107.     public function prestations(Request $requestCategorieRepository $categorieRepository): Response
  108.     {
  109.         
  110.         return $this->render('prestations/prestations.html.twig', [
  111.             'controller_name' => 'prestationsController',
  112.             'categories' => $categorieRepository->findAll()
  113.         ]);
  114.     }
  115.     #[Route('/prestation/category/{id}/details'name'app_prestations_category_details')]
  116.     public function app_prestations_details(Categorie $catPrestation): Response
  117.     {
  118.         return $this->render('prestations/prestations_details.html.twig', [
  119.             'catPrestation' =>  $catPrestation 
  120.         ]);
  121.     }
  122.     #[Route('/e-formations'name'app_formations')]
  123.     public function formations(Request $request): Response
  124.     {
  125.         
  126.         return $this->render('formations/formations.html.twig', [
  127.             'controller_name' => 'formationsController'
  128.         ]);
  129.     }
  130.     #[Route('/temoignages'name'app_testimonials')]
  131.     public function testimonials(Request $request): Response
  132.     {
  133.         
  134.         return $this->render('testimonials/testimonials.html.twig', [
  135.             'controller_name' => 'testimonialsController'
  136.         ]);
  137.     }
  138.     #[Route('/prediction'name'app_prediction')]
  139.     public function prediction(Request $requestTestNumerologieInfoRepository $testNumerologieInfoRepositoryTestNumerologieInfoElmtRepository $testNumerologieInfoElmtRepository): Response
  140.     {
  141.         $error null;
  142.         $name SecurityService::decrypt($request->query->get('nm'), SecurityService::$KEY);
  143.         $digit SecurityService::decrypt($request->query->get('dg'), SecurityService::$KEY);
  144.         $info $testNumerologieInfoRepository->find($digit);
  145.         if($info!=null$info->setElmts($testNumerologieInfoElmtRepository->findValidByParent($info));
  146.         return $this->render('prediction/prediction.html.twig', [
  147.             'name' => $name,
  148.             'info' => $info,
  149.             'error'=>$error
  150.         ]);
  151.     }
  152.     #[Route('/contact'name'app_contact')]
  153.     public function contact(Request $requestMailService $mailService): Response
  154.     {
  155.         $messageClient = new MessageClient();
  156.         $form $this->createForm(MessageClientFormType::class, $messageClient);
  157.         $form->handleRequest($request);
  158.         $error "";
  159.         
  160.         if ($form->isSubmitted() && $form->isValid()) {
  161.             try{
  162.                 $messageClient $form->getData();
  163.                 $mail = [
  164.                     'to' => $this->getParameter('contact_recipient_mail'),
  165.                     'subject' => "Nouveau contact de ".$messageClient->getName(),
  166.                     'body' => $mailService->renderTwig('emails/contact.html.twig', ['contact' => $messageClient])
  167.                 ];
  168.                 $mailService->sendMail($mail);
  169.                 $messageClient->setCreatedAt(new \DateTime());
  170.                 $this->entityManager->persist($messageClient);
  171.                 $this->entityManager->flush();
  172.                 $this->addFlash('success''Message envoyé');   
  173.                 unset($messageClient);
  174.                 unset($form);
  175.                 $messageClient = new MessageClient();
  176.                 $form $this->createForm(MessageClientFormType::class, $messageClient);
  177.             } catch(\Exception $ex){
  178.                 $this->addFlash('danger'$ex->getMessage());
  179.             }
  180.         }
  181.         return $this->render('contact/contact.html.twig', [
  182.             'form' => $form->createView(),
  183.             'contact' => $messageClient,
  184.             'error'=>$error
  185.         ]);
  186.     }
  187.     #[Route('/rendez-vous/etape-1'name'app_appointment_step_1')]
  188.     public function appointmentStep1(Request $request): Response
  189.     {
  190.         $orders = [];
  191.         if ($request->isMethod('POST')) {
  192.             return $this->redirectToRoute('app_appointment_step_2');
  193.         }
  194.         return $this->render('appointment/appointment_step_1.html.twig', [
  195.             'controller_name' => 'appointmentController',
  196.             'orders'=>$orders
  197.         ]);
  198.     }
  199.     #[Route('/rendez-vous/etape-2'name'app_appointment_step_2')]
  200.     public function appointmentStep2(Request $request): Response
  201.     {
  202.         $orders = [];
  203.         if ($request->isMethod('POST')) {
  204.             return $this->redirectToRoute('app_appointment_step_3');
  205.         }
  206.         return $this->render('appointment/appointment_step_2.html.twig', [
  207.             'controller_name' => 'appointmentController',
  208.             'orders'=>$orders
  209.         ]);
  210.     }
  211.     #[Route('/rendez-vous/etape-3'name'app_appointment_step_3')]
  212.     public function appointmentStep3(Request $request): Response
  213.     {
  214.         $orders = [];
  215.         if ($request->isMethod('POST')) {
  216.             return $this->redirectToRoute('app_home');
  217.         }
  218.         return $this->render('appointment/appointment_step_3.html.twig', [
  219.             'controller_name' => 'appointmentController',
  220.             'orders'=>$orders
  221.         ]);
  222.     }
  223.     #[Route('/rendez-vous'name'app_appointment')]
  224.     public function appointment(Request $request): Response
  225.     {
  226.         return $this->redirectToRoute('app_appointment_step_1');
  227.     }
  228.     #[Route('/mentions-legales'name'app_legal_notice')]
  229.     public function legalNotice(Request $request): Response
  230.     {
  231.         
  232.         return $this->render('legal-notice/legal-notice.html.twig', [
  233.             'controller_name' => 'legalNoticeController'
  234.         ]);
  235.     }
  236.     #[Route('/take-appointment'name'app_take_appointment'methods:"POST")]
  237.     public function takeAppointment(Request $request): JsonResponse
  238.     {
  239.         try{
  240.             $params json_decode$request->getContent(), true);
  241.             $reservation $this->reservationService->parseReservation($params);
  242.             $reservation->setFromAdmin($this->isGranted('ROLE_ADMIN'));
  243.             $this->reservationService->saveReservation($reservation);
  244.             return new JsonResponse(['reservationId' => $reservation->getId()]);
  245.         } catch(Exception $ex){
  246.             return new JsonResponse(['message' => $ex->getMessage()], 500);
  247.         }
  248.     }
  249.     public function checkStatus($statusShouldReservation $reservation): ?Response{
  250.         if($statusShould != Reservation::CREATED && $reservation->getStatut() == Reservation::CREATED
  251.             return $this->redirectToRoute('app_take_appointment_step_1', ['id' => $reservation->getId()]);
  252.         else if($statusShould != Reservation::SCHEDULED && $reservation->getStatut() == Reservation::SCHEDULED
  253.             return $this->redirectToRoute('app_take_appointment_step_2', ['id' => $reservation->getId()]);
  254.         else if($statusShould != Reservation::PAIED && $reservation->getStatut() == Reservation::PAIED)
  255.             return $this->redirectToRoute('app_take_appointment_step_3', ['id' => $reservation->getId()]);
  256.         return null;
  257.     }
  258.     #[Route('/take-appointment/{id}/step-1'name'app_take_appointment_step_1')]
  259.     public function takeAppointmentStep1(Reservation $reservationRequest $request): Response
  260.     {
  261.         $response $this->checkStatus(Reservation::CREATED$reservation);
  262.         if($response) return $response;
  263.         return $this->render('take_appointment/take_appointment_step_1.html.twig', [
  264.             'controller_name' => 'appointmentController',
  265.             'reservation'=>$reservation,
  266.             'clientId'=>$this->getUser() != null $this->getUser()->getId() : null
  267.         ]);
  268.     }
  269.     #[Route('/take-appointment/{id}/step-2'name'app_take_appointment_step_2')]
  270.     public function takeAppointmentStep2(Reservation $reservationRequest $request): Response
  271.     {
  272.         $response $this->checkStatus(Reservation::SCHEDULED$reservation);
  273.         if($response) return $response;
  274.         return $this->render('take_appointment/take_appointment_step_2.html.twig', [
  275.             'controller_name' => 'appointmentController',
  276.             'reservation'=>$reservation
  277.         ]);
  278.     }
  279.     #[Route('/take-appointment/{id}/step-3'name'app_take_appointment_step_3')]
  280.     public function takeAppointmentStep3(Reservation $reservationRequest $request): Response
  281.     {
  282.         $response $this->checkStatus(Reservation::PAIED$reservation);
  283.         if($reservation->getCodePromo() != null && $reservation->getCodePromo()->getId() != null){
  284.             $reservation->setCodePromo($this->codePromoRepository->find($reservation->getCodePromo()->getId()));
  285.         }
  286.         if($response) return $response;
  287.         return $this->render('take_appointment/take_appointment_step_3.html.twig', [
  288.             'controller_name' => 'appointmentController',
  289.             'reservation'=>$reservation
  290.         ]);
  291.     }
  292.     #[Route('/reservation/{id}/payement-intent/{codePromo}'name'app_reservation_payment_intent'methods:"GET")]
  293.     public function getPaymentIntent(Reservation $reservation$codePromo null): JsonResponse
  294.     {
  295.         try{
  296.             $codePromoObj null;
  297.             if($codePromo != null){
  298.                 $codePromoObj = new CodePromo();
  299.                 $codePromoObj->setValue($codePromo);
  300.                 $reservation->setCodePromo($codePromoObj);
  301.             }        
  302.             $clientSecret $this->reservationService->createReservationPaymentIntent($reservation);
  303.             return new JsonResponse(['clientSecret' => $clientSecret]);
  304.         } catch(Exception $ex){
  305.             return new JsonResponse(['message' => $ex->getMessage()], 500);
  306.         }
  307.     }
  308.     #[Route('/reservation/{id}/pay'name'app_reservation_pay'methods:"PUT")]
  309.     public function pay(Reservation $reservation): JsonResponse
  310.     {
  311.         try{
  312.             $reservation->setPaymentApiMethod(Reservation::PAYMENT_API_METHOD_STRIPE);
  313.             $this->reservationService->payReservation($reservation);
  314.             return new JsonResponse(['message' => 'ok']);
  315.         } catch(Exception $ex){
  316.             return new JsonResponse(['message' => $ex->getMessage()], 500);
  317.         }
  318.     }
  319.     #[Route('/reservation/{id}/paypal'name'app_reservation_paypal'methods:"PUT")]
  320.     public function paypal(Reservation $reservationRequest $request): JsonResponse
  321.     {
  322.         try{
  323.             $reservation->setPaymentApiMethod(Reservation::PAYMENT_API_METHOD_PAYPAL);
  324.             $params json_decode$request->getContent(), true);
  325.             $this->reservationService->payReservationPaypal($reservation$params['authorizationId']);
  326.             return new JsonResponse(['message' => 'ok']);
  327.         } catch(Exception $ex){
  328.             return new JsonResponse(['message' => $ex->getMessage()], 500);
  329.         }
  330.     }
  331.     #[Route('/reservaton/{id}/infos'name'app_reservation_save_infos'methods:"POST")]
  332.     public function saveInfos(Reservation $reservationRequest $request): JsonResponse
  333.     {
  334.         try{
  335.             $params json_decode$request->getContent(), true);
  336.             
  337.             $params['client']=null;
  338.             if($params['clientId']!=null$params['client']=$this->userRepository->find($params['clientId']);
  339.             $reservation $this->reservationService->saveInfosReservation($reservation$params);
  340.             return new JsonResponse(['message' => 'ok']);
  341.         } catch(Exception $ex){
  342.             return new JsonResponse(['message' => $ex->getMessage()], 500);
  343.         }
  344.     }
  345.     // #[Route('/requete/sql/exec', name: 'req_sql_exec')]
  346.     // public function req_sql_exec(BlogRepository $blogRepository, EntityManagerInterface $em)
  347.     // {
  348.     //     $allBlog = $blogRepository->findAll();
  349.     //     /**
  350.     //      * @var Blog $blog 
  351.     //      */
  352.     //     foreach ($allBlog as $blog) {
  353.     //         $blog->setMetatitle($blog->getTitre());
  354.     //         $blog->setMetadescription($blog->getDescription());
  355.     //         $blog->setNomAuteur('Françoise');
  356.     //     }
  357.     //     $em->flush();
  358.     //     return $this->redirectToRoute('app_about_us');
  359.     // }
  360. }