src/Controller/DefaultController.php line 981

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use App\Repository\ArticlesRepository;
  8. use App\Repository\CategoriesEvenementsRepository;
  9. use App\Repository\EvenementsRepository;
  10. use App\Repository\ReservationsRepository;
  11. use App\Repository\PartenairesRepository;
  12. use App\Repository\UserRepository;
  13. use Knp\Component\Pager\PaginatorInterface;
  14. use Symfony\Component\HttpFoundation\Session\Session;
  15. use App\Entity\Reservations;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  17. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  18. use Datetime;
  19. use App\Entity\Evenements;
  20. use App\Form\EvenementsType;
  21. use Mailjet\Api\Client;
  22. use Mailjet\Resources;
  23. use Stripe\Stripe;
  24. use Stripe\Exception\CardException;
  25. use Stripe\Exception\ApiErrorException// Importer l'exception ApiErrorException
  26.  use Doctrine\ORM\EntityManagerInterface;
  27. class DefaultController extends AbstractController
  28. {
  29.     /**
  30.      * @Route("/", name="app_default")
  31.      */
  32.     public function index(Request $requestArticlesRepository $articlesRepository,EvenementsRepository $evenements): Response
  33.     {
  34.         $press $articlesRepository->findBy(array('Pages'=>5),array('Date'=>'desc'),3);
  35.         $event =  $evenements->findByExampleField();
  36.        
  37.         return $this->render('default/index.html.twig', [
  38.             'articles' => $articlesRepository->findBy(['Pages'=>1]),
  39.             'press'=>$press,
  40.             'events'=>$event
  41.         ]);
  42.     }
  43.     /**
  44.      * @Route("/a-propos", name="aPropos")
  45.      */
  46.     public function aPropos(Request $requestArticlesRepository $articlesRepository): Response
  47.     {
  48.         return $this->render('default/apropos.html.twig', [
  49.             'articles' => $articlesRepository->findBy(['Pages'=>2]),
  50.             'team' => $articlesRepository->findBy(['Pages'=>4]),
  51.         ]);
  52.     }
  53.      /**
  54.      * @Route("/activites", name="activites")
  55.      */
  56.     public function activites(PaginatorInterface $paginatorRequest $requestArticlesRepository $articlesRepository): Response
  57.     {
  58.         $yActive ='';
  59.         if(isset($_GET['years']))
  60.         {
  61.             $articles $articlesRepository->findOneBySomeField($_GET['years'],6);
  62.             //Filter par année
  63.             $yActive =$_GET['years'];
  64.         }
  65.         else
  66.         {
  67.             $articles $articlesRepository->findBy(array('Pages'=>6),array('Date'=>'desc'));
  68.         }
  69.         $articles2 $articlesRepository->findBy(array('Pages'=>6),array('Date'=>'desc'));
  70.         $years = array();
  71.         foreach($articles2 as $res)
  72.         {
  73.             $y $res->getDate()->format('Y');
  74.             array_push($years,$y);
  75.         }
  76.         $years array_unique($years);
  77.         // J'importe le module paginator dans la variable pagination
  78. $pagination $paginator->paginate(
  79.     $articles/* Je charge la liste de mes données */ $request->query->getInt('page'1), /* je lui informe qu'il doit
  80.     commencer à la page 1*/
  81.     12 /* nombre de résultat par page */
  82.     );
  83.        
  84.         return $this->render('default/activites.html.twig', [
  85.             'articles'=>$pagination,
  86.             'articles2'=>$articles,
  87.             'years'=>$years,
  88.             'yActive'=>$yActive
  89.            
  90.         ]);
  91.     }
  92.      /**
  93.      * @Route("/activiteDetail/{id}", name="activiteDetail")
  94.      * 
  95.      */
  96.     public function activiteDetail(PaginatorInterface $paginatorArticlesRepository $articlesRepositoryRequest $requestCategoriesEvenementsRepository $categoriesRepository,EvenementsRepository $evenements$id): Response
  97.     {
  98.     
  99.         $article $articlesRepository->findOneById($id);
  100.         return $this->render('default/activiteDetail.html.twig', [
  101.             'article'=>$article,
  102.             
  103.            
  104.            
  105.         ]);
  106.     }
  107.     /**
  108.      * @Route("/commissions", name="commissions")
  109.      */
  110.     public function commissions(Request $requestArticlesRepository $articlesRepository): Response
  111.     {
  112.         return $this->render('default/commissions.html.twig', [
  113.             'articles' => $articlesRepository->findBy(['Pages'=>3],['id'=>'desc']),
  114.            
  115.         ]);
  116.     }
  117.      /**
  118.      * @Route("/calendrier", name="calendrier")
  119.      */
  120.     public function calendrier(PaginatorInterface $paginatorRequest $requestCategoriesEvenementsRepository $categoriesRepository,EvenementsRepository $evenements): Response
  121.     {
  122.         $cActive ='';
  123.         if(isset($_GET['categorie']))
  124.         {
  125.             $cActive =$_GET['categorie'];
  126.             $articles $evenements->findBy(array('CategoriesEvenements'=>$_GET['categorie'],'Archive'=>0),array('Date'=>'asc'));
  127.         }
  128.         else
  129.         {
  130.             $articles $evenements->findBy(array('Archive'=>0),array('Date'=>'asc'));
  131.         }
  132.           // J'importe le module paginator dans la variable pagination
  133. $pagination $paginator->paginate(
  134.     $articles/* Je charge la liste de mes données */ $request->query->getInt('page'1), /* je lui informe qu'il doit
  135.     commencer à la page 1*/
  136.     10 /* nombre de résultat par page */
  137.     );
  138.         return $this->render('default/calendrier.html.twig', [
  139.             'categories'=>$categoriesRepository->findBy(array(),array('Ordre'=>'asc')),
  140.             'evenements'=>$pagination,
  141.             'cActive'=>$cActive,
  142.             'articles'=>$articles
  143.            
  144.         ]);
  145.     }
  146.      /**
  147.      * @Route("/calendrier/{id}", name="calendrierDetail")
  148.      * 
  149.      */
  150.     public function calendrierDetail(PaginatorInterface $paginatorReservationsRepository $reservationsRequest $requestCategoriesEvenementsRepository $categoriesRepository,EvenementsRepository $evenements$id): Response
  151.     {
  152.         $pDispo 0;
  153.         $abo 0;
  154.         $event $evenements->findOneById($id);
  155.         
  156.         if($event->getBilleterie() == 1)
  157.         {
  158.             // CALCUL DES PLACES A LUNITE
  159.             $resa $reservations->findBy(array('Evenements'=>$event));
  160.             $pRes 0;
  161.             foreach($resa as $res)
  162.             {
  163.                 $pRes $pRes $res->getNbPlaces();
  164.                
  165.             }
  166.         
  167.              // CALCUL DES PLACES POUR L'ABO
  168.             
  169.                 $resa $reservations->findBy(array('Evenements'=>$event->getEvenements()));
  170.               
  171.                 foreach($resa as $res)
  172.                 {
  173.                     $pRes $pRes $res->getNbPlaces();
  174.                 }
  175.           
  176.             
  177.             
  178.             
  179.             $pDispo $event->getNbPlaces() - $pRes;
  180.            
  181.             if(!empty($event->getEvenements()))
  182.             {
  183.             
  184.         
  185.             if($event->getCategoriesEvenements()->getId() == 8)
  186.             {
  187.               
  188.               
  189.                 $eventFest $evenements->findBy(array('Evenements'=>$event));
  190.              
  191.              
  192.                 $nbPlaceFest = array();
  193.               
  194.                     foreach($eventFest as $fest)
  195.                     {
  196.                         array_push($nbPlaceFest,$fest->getNbPlaces());
  197.                     }
  198.                 
  199.                     if(!empty($nbPlaceFest))
  200.                     {
  201.                         $pDispo min($nbPlaceFest);
  202.                     }
  203.                 
  204.             }
  205.         }
  206.         }
  207.  
  208.       
  209.         
  210.         return $this->render('default/calendrierDetail.html.twig', [
  211.             'evenement'=>$event,
  212.             'dispo'=>$pDispo,
  213.             
  214.            
  215.            
  216.         ]);
  217.     }
  218.      /**
  219.      * @Route("/reservation", name="reservation")
  220.      */
  221.     public function reservation(Request $requestEvenementsRepository $evenementsReservationsRepository $reservations): Response
  222.     {
  223.         
  224.     
  225.         $session = new Session();
  226.         $user $this->getUser();
  227.         
  228.             $time time();
  229.             
  230.             $session->set('userTemp'$time);
  231.             
  232.        
  233.         $events $evenements->findOneById($_POST['event']);
  234.         $userTemp $session->get('userTemp');
  235.         $resa = new Reservations();
  236.         if(empty($user))
  237.         {
  238.             $resa->setUserTemp($userTemp);
  239.         }
  240.         else
  241.         {
  242.             $resa->setUser($user);
  243.         }
  244.         if($_POST['submit'] == 'billet')
  245.         {
  246.         $resa->setEvenements($events);
  247.         }
  248.         if($events->getCategoriesEvenements()->getId() == 9)
  249.         {
  250.             $ty 'abonnement';
  251.         }
  252.         else
  253.         {
  254.             $ty 'billet';
  255.         }
  256.         
  257.         $total $_POST['places'] * $events->getPrix();
  258.         $resa->setCategoriesEvenements($events->getCategoriesEvenements());
  259.         $resa->setType($ty);
  260.         $resa->setNbPlaces($_POST['places']);
  261.         $resa->setCreated(new Datetime());
  262.         $resa->setTotal($total);
  263.         $resa->setPayer(0);
  264.         $reservations->add($resatrue);
  265.        // return $this->redirectToRoute('valierReservation', ['id'=>$resa->getId()], Response::HTTP_SEE_OTHER);
  266.        return new Response('ok');
  267.     }
  268.      /**
  269.      * @Route("/validerReservation/{id}", name="valierReservation")
  270.      * @Security("is_granted('ROLE_CLIENT')")
  271.      */
  272.     public function valierReservation(Request $requestEvenementsRepository $evenementsReservationsRepository $reservations,$id): Response
  273.     {
  274.         $session = new Session();
  275.         $user $this->getUser();
  276.         $ignore $user->isIgnorePaiement();
  277.         $userTemp $session->get('userTemp');
  278.         $resa $reservations->findOneById($id);
  279.         if(empty($user))
  280.         {
  281.             $resa->setUserTemp($userTemp);
  282.         }
  283.         else
  284.         {
  285.             $resa->setUser($user);
  286.         }
  287.         $date date('Y-m-d');
  288.         $date2 date('Y').'-12-31';
  289.         $festival $evenements->findByExampleField2($date,$date2);
  290.            
  291.             if($resa->getType() == 'billet')
  292.             {
  293.                 $prix $resa->getEvenements()->getPrix();
  294.             }
  295.             else
  296.             {
  297.                 $prix $resa->getCategoriesEvenements()->getPrixAbo();
  298.             }
  299.             $total $resa->getNbPlaces() * $prix;
  300.             $resa->setTotal($total);
  301.             $reservations->add($resatrue);
  302.        
  303.             return $this->render('default/paiement.html.twig', [
  304.                 'resa'=>$resa,
  305.                 'total'=>$total,
  306.                 'ignore'=>$ignore,
  307.                 'id'=>$id,
  308.                 'festival'=>$festival,
  309.                 'prix'=>$prix
  310.              
  311.                
  312.             ]);
  313.     }
  314.      /**
  315.      * @Route("/panier", name="panier")
  316.      * @Security("is_granted('ROLE_CLIENT')")
  317.      */
  318.     public function panier(Request $requestEvenementsRepository $evenementsReservationsRepository $reservations): Response
  319.     {
  320.         $user $this->getUser();
  321.         $resa $reservations->findBy(array('User'=>$user,'Payer'=>0));
  322.         
  323.         if($user->isIgnorePaiement())
  324.         {
  325.             $ignore 1;
  326.         }
  327.         else
  328.         {
  329.             $ignore 0;
  330.         }
  331.         foreach($resa as $res)
  332.         {
  333.             $ev $evenements->findOneById($res->getEvenements());
  334.             if($ev->getNbPlaces() < $res->getNbPlaces())
  335.             {
  336.                 $reservations->remove($restrue);
  337.             }
  338.         }
  339.         $resa $reservations->findBy(array('User'=>$user,'Payer'=>0));
  340.        
  341.             return $this->render('default/panier.html.twig', [
  342.                 'resa'=>$resa,
  343.                 'ignore' => $ignore
  344.         
  345.                
  346.             ]);
  347.     }
  348.      /**
  349.      * @Route("/deletePanier/{id}", name="deletePanier")
  350.      * @Security("is_granted('ROLE_CLIENT')")
  351.      */
  352.     public function deletePanier(Request $requestEvenementsRepository $evenementsReservationsRepository $reservations,$id): Response
  353.     {
  354.         $resa $reservations->findOneById($id);
  355.         $reservations->remove($resatrue);
  356.         return $this->redirectToRoute('panier');
  357.     }
  358.     /**
  359.      * @Route("/validation-de-la-commande/{id}", name="validationCmd")
  360.      * @Security("is_granted('ROLE_CLIENT')")
  361.      */
  362.     public function validationCmd(Request $requestEvenementsRepository $evenementsReservationsRepository $reservations,$id,EntityManagerInterface $entityManager): Response
  363.     {
  364.         $user $this->getUser();
  365.        
  366.         
  367.         $resa $reservations->findBy(array('User'=>$id'Payer'=>0));
  368.        
  369.         $total 0;
  370.       
  371.         foreach($resa as $res)
  372.         {
  373.             $evi $res->getEvenements();
  374. $solde $evi->getNbPlaces() - $res->getNbPlaces();
  375. $evi->setNbPlaces($solde);
  376. $entityManager->persist($evi); // facultatif si déjà managé
  377. $entityManager->flush();
  378.            
  379.         $res->setPayer(1);
  380.         $reservations->add($restrue);
  381.         $total $total $res->getTotal();
  382.         
  383.         
  384.        
  385.        
  386.             $event $res->getEvenements();
  387.   
  388.             if($event->getCategoriesEvenements()->getId() == 8)
  389.             {
  390.                  
  391.                 $eventFest $evenements->findBy(array('Evenements'=>$event));
  392.                 foreach($eventFest as $fest)
  393.                 {
  394.                     $solde $fest->getNbPlaces() - $res->getNbPlaces();
  395.                     $fest->setNbPlaces($solde);
  396.                     $evenements->add($festtrue);
  397.                 }
  398.             }
  399.             else
  400.             {
  401.               
  402.                 
  403.                 $solde $res->getEvenements()->getNbPlaces() - $res->getNbPlaces();
  404.                  
  405.                 $event->setNbPlaces($solde);
  406.                 $evenements->add($eventtrue);
  407.             }
  408.         
  409.         
  410.        
  411.             $msg $this->renderView(
  412.             // templates/emails/registration.txt.twig
  413.                 'default/confirmationEmail.html.twig',
  414.                 [
  415.                 'nom'=>$res->getUser()->getNom(),
  416.                 'prenom'=>$res->getUser()->getPrenom(),
  417.                 'nbPlaces'=>$res->getNbPlaces(),
  418.                 'type'=>'billet',
  419.                 'resa'=>$res
  420.                 ]
  421.             );
  422.         
  423.        
  424.     
  425.             // if (!empty($_POST['g-recaptcha-response'])){
  426.         $mj = new \Mailjet\Client('9c42ddfa4db6f8f973a32c7087ea2d51','eace5eb7252f4ff3a1b483251360e04c',true,['version' => 'v3.1']);
  427.         $body = [
  428.             'Messages' => [
  429.                 [
  430.                     'From' => [
  431.                         'Email' => "noreply@lions-laclaireau.be",
  432.                         'Name' => "LIONS LACLAIREAU"
  433.                     ],
  434.                     'To' => [
  435.                         [
  436.                              'Email' => $res->getUser()->getEmail()
  437.                         ]
  438.                     ],
  439.                    
  440.                     
  441.                         'Subject' => "Confirmation de réservation",
  442.                             
  443.                             'HTMLPart' => $msg
  444.     
  445.                 ]
  446.             ]
  447.         ];
  448.         $response $mj->post(Resources::$Email, ['body' => $body]);
  449.         $response->success();
  450.     
  451.         $info $response->getData();
  452.     }
  453.             return $this->render('default/paiementValidation.html.twig', [
  454.                 'resa'=>$resa,
  455.                 'total'=>$total,
  456.                 'type'=>'billet',
  457.             ]);
  458.     }
  459.     /**
  460.      * @Route("/monCompte", name="monCompte")
  461.      * @Security("is_granted('ROLE_CLIENT')")
  462.      */
  463.     public function monCompte(Request $requestEvenementsRepository $evenementsReservationsRepository $reservations): Response
  464.     {
  465.     }
  466.       /**
  467.      * @Route("/press", name="press")
  468.      */
  469.     public function press(PaginatorInterface $paginatorRequest $requestArticlesRepository $articlesRepository): Response
  470.     {
  471.         $yActive ='';
  472.         if(isset($_GET['years']))
  473.         {
  474.             $articles $articlesRepository->findOneBySomeField($_GET['years'],5);
  475.             //Filter par année
  476.             $yActive =$_GET['years'];
  477.         }
  478.         else
  479.         {
  480.             $articles $articlesRepository->findBy(array('Pages'=>5),array('Date'=>'desc'));
  481.         }
  482.         $articles2 $articlesRepository->findBy(array('Pages'=>5),array('Date'=>'desc'));
  483.         $years = array();
  484.         foreach($articles2 as $res)
  485.         {
  486.             $y $res->getDate()->format('Y');
  487.             array_push($years,$y);
  488.         }
  489.         $years array_unique($years);
  490.         // J'importe le module paginator dans la variable pagination
  491. $pagination $paginator->paginate(
  492.     $articles/* Je charge la liste de mes données */ $request->query->getInt('page'1), /* je lui informe qu'il doit
  493.     commencer à la page 1*/
  494.     12 /* nombre de résultat par page */
  495.     );
  496.        
  497.         return $this->render('default/press.html.twig', [
  498.             'articles'=>$pagination,
  499.             'articles2'=>$articles,
  500.             'years'=>$years,
  501.             'yActive'=>$yActive
  502.            
  503.         ]);
  504.     }
  505.      /**
  506.      * @Route("/sponsors", name="sponsors")
  507.      */
  508.     public function sponsors(PaginatorInterface $paginatorRequest $requestPartenairesRepository $partenaires): Response
  509.     {
  510.         
  511.         
  512.         return $this->render('default/sponsors.html.twig', [
  513.             'partenaires'=>$partenaires->findAll()
  514.          
  515.            
  516.         ]);
  517.     }
  518.       /**
  519.      * @Route("/contact", name="contact")
  520.      */
  521.     public function contact(Request $requestArticlesRepository $articlesRepository,EvenementsRepository $evenements): Response
  522.     {
  523.         $press $articlesRepository->findBy(array('Pages'=>5),array('Date'=>'desc'),3);
  524.         $event =  $evenements->findByExampleField();
  525.        
  526.         return $this->render('default/contact.html.twig', [
  527.            
  528.             'press'=>$press,
  529.             'events'=>$event
  530.         ]);
  531.         return $this->render('default/contact.html.twig', [
  532.            
  533.         ]);
  534.     }
  535.      /**
  536.      * @Route("/gestion-cookies", name="cookies")
  537.      */
  538.     public function cookies(): Response
  539.     {
  540.         return $this->render('default/cookies.html.twig', [
  541.             'controller_name' => 'DefaultController',
  542.         ]);
  543.     }
  544.      /**
  545.      * @Route("/politique-de-confidentialite", name="politique")
  546.      */
  547.     public function politique(): Response
  548.     {
  549.         return $this->render('default/politique.html.twig', [
  550.             'controller_name' => 'DefaultController',
  551.         ]);
  552.     }
  553.     /**
  554.      * @Route("/reservations/{id}", name="listereservations", methods={"GET", "POST"})
  555.      */
  556.     public function listereservations(Request $requestEvenements $evenementEvenementsRepository $evenementsRepositoryReservationsRepository $resaRepo$id): Response
  557.     {
  558.         $event $evenementsRepository->findOneById($id);
  559.         $resa $resaRepo->findBy(array('Evenements'=>$event,'Payer'=>1));
  560.         $date1 date('Y').'-01-01 00:00:00';
  561.         $date2 $event->getDate()->format('Y-m-d');
  562.         $resa2 $resaRepo->findByExampleField2($date1,$date2);
  563.         
  564.         return $this->renderForm('evenements/reservations.html.twig', [
  565.             'resa'=>$resa,
  566.             'resa2'=>$resa2,
  567.             'event'=>$event
  568.             
  569.         ]);
  570.     }
  571.      /**
  572.      * @Route("/erreurAccess", name="erreurAccess")
  573.      */
  574.     public function erreurAccess(Request $request): Response
  575.     {
  576.         
  577.         return $this->renderForm('default/erreurAccess.html.twig', [
  578.            
  579.             
  580.         ]);
  581.     }
  582.       /**
  583.      * @Route("/exportPdf", name="exportPdf")
  584.      */
  585.     public function exportPdf(Request $request,  ReservationsRepository $resaRepo): Response
  586.     {
  587.         $resaPayer $resaRepo->findBy(array('Payer'=>0),array('id'=>'desc'));
  588.         $resaPayer2 $resaRepo->findBy(array('Payer'=>1),array('id'=>'desc'));
  589.         
  590.         return $this->renderForm('default/exportPdf.html.twig', [
  591.             'resaPayer' =>$resaPayer,
  592.             'resaPayer2' =>$resaPayer2
  593.            
  594.             
  595.         ]);
  596.     }
  597.     
  598.      /**
  599.      * @Route("/contactReq", name="contactReq")
  600.      * 
  601.      */
  602.     public function contactReq(Request $request): Response
  603.     {
  604.         $msg $this->renderView(
  605.             // templates/emails/registration.txt.twig
  606.                 'default/contactSend.html.twig',
  607.                 [
  608.                 'nom'=>$_POST['nom'],
  609.                 'email'=>$_POST['email'],
  610.                 'objet'=>$_POST['objet'],
  611.                 'message'=>$_POST['message'],
  612.                 
  613.                 ]
  614.             );
  615.     
  616.         if ($_POST['calcul'] == 9){
  617.     $mj = new \Mailjet\Client('9c42ddfa4db6f8f973a32c7087ea2d51','eace5eb7252f4ff3a1b483251360e04c',true,['version' => 'v3.1']);
  618.     $body = [
  619.         'Messages' => [
  620.             [
  621.                 'From' => [
  622.                     'Email' => "noreply@lions-laclaireau.be",
  623.                     'Name' => "LIONS LACLAIREAU"
  624.                 ],
  625.                 'To' => [
  626.                     [
  627.                          'Email' => 'laurentcha65@gmail.com',
  628.                         //'Email' => 'matthieu@aready.io',
  629.                     ]
  630.                 ],
  631.                
  632.                 
  633.                     'Subject' => "Confirmation de réservation",
  634.                         
  635.                         'HTMLPart' => $msg
  636.             ]
  637.         ]
  638.     ];
  639.     $response $mj->post(Resources::$Email, ['body' => $body]);
  640.     $response->success();
  641.     $info $response->getData();
  642. }
  643.     return $this->redirectToRoute('contact', ['send'=>'ok'], Response::HTTP_SEE_OTHER);
  644.     }
  645.     /**
  646.      * @Route("/stripeForm", name="stripeForm")
  647.      */
  648.     public function stripeForm(Request $requestArticlesRepository $articlesRepository,EvenementsRepository $evenements): Response
  649.     {
  650.         $user $this->getUser();
  651.         $this->get('session')->set('loginUserId'$user->getId());
  652.        
  653.        
  654.         return $this->renderForm('default/stripe.html.twig', [
  655.            
  656.             
  657.         ]);
  658.     }
  659.   /**
  660.      * @Route("/stripe", name="stripe")
  661.      */
  662.     public function stripe(Request $requestArticlesRepository $articlesRepository,EvenementsRepository $evenements): Response
  663.     {
  664.         
  665.         $em=$this->getDoctrine()->getManager(); 
  666.         $reservations $em->getRepository(Reservations::class);
  667.         $user $this->getUser();
  668.         $this->get('session')->set('loginUserId'$user->getId());
  669.         
  670.         $resa $reservations->findBy(array('User'=>$user,'Payer'=>0));
  671.         $total 0;
  672.         $description '';
  673.         foreach($resa as $res)
  674.         {
  675.             $total $total $res->getTotal();
  676.             $description .= $res->getEvenements()->getTitre().' + '.$user->getId();
  677.         }
  678.          $totals $total 100;
  679.          
  680.         // Récupérer le token envoyé depuis le frontend
  681.         $token json_decode($request->getContent(), true)['token'];
  682.         $description substr($description,0,-1);
  683.         // clé secrète TEST
  684.         //Stripe::setApiKey('sk_test_51OfL2IJLeEy2AaEYs5nWm3y5gogVSL4w6LWj2e5eyNQ6SCtK6SPvlSmXtFgolMw6RDSbTASsGgATKIq64zH468fA00oKsME0LJ');
  685.          // clé secrète PRODUCTION
  686.          Stripe::setApiKey('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');
  687.         try {
  688.         // Effectuer la charge avec le token
  689.         // Par exemple :
  690.          $charge = \Stripe\Charge::create([
  691.              'amount' => $totals// Montant en centimes
  692.              'currency' => 'eur',
  693.              'source' => $token// Token de carte de crédit
  694.              'description' => $description,
  695.          ]);
  696.         // Ici, vous pouvez gérer la réponse de Stripe, puis renvoyer une réponse appropriée au frontend
  697.         return $this->json(['message' => 'Paiement effectué avec succès']);
  698.     } catch (CardException $e) {
  699.         // Si une exception liée à la carte se produit (par exemple, la carte est déclinée), capturez l'erreur
  700.         // et renvoyez le message d'erreur au frontend
  701.         return $this->json(['error' => $e->getMessage()], Response::HTTP_BAD_REQUEST);
  702.     } catch (ApiErrorException $e) {
  703.         // Si une autre exception Stripe se produit, capturez l'erreur
  704.         // et renvoyez un message d'erreur générique au frontend
  705.         return $this->json(['error' => 'Une erreur est survenue lors du traitement du paiement. Veuillez réessayer.'], Response::HTTP_INTERNAL_SERVER_ERROR);
  706.     }
  707.     }
  708.      /**
  709.      * @Route("/retourStripe/{etat}", name="retourStripe")
  710.      */
  711.     public function retourStripe(Request $requestEntityManagerInterface $entityManagerArticlesRepository $articlesRepository,EvenementsRepository $evenementsRepository,ReservationsRepository $reservations,$etatUserRepository $userRepository): Response
  712.     {
  713.       
  714.         if($etat == 'success')
  715.         {
  716.             $user $userRepository->findOneBy(array('Token'=>$_GET['token']));
  717.         
  718.         $resa $reservations->findBy(array('User'=>$user,'Payer'=>0));
  719.     
  720.         foreach($resa as $res)
  721.         {
  722.             $res->setPayer(1);
  723.             $reservations->add($restrue);
  724.             $event $res->getEvenements();
  725.             $nb $event->getNbPlaces() - $res->getNbPlaces();
  726.             
  727.             $event->setNbPlaces($nb);
  728.             $entityManager->persist($event); // optionnel si déjà managé
  729.             $entityManager->flush();
  730.             if(empty($event->getEvenements()))
  731.             {   
  732.            
  733.                  $eventsFest $evenementsRepository->findBy(array('Evenements'=>$res->getEvenements()->getId()));
  734.                     foreach($eventsFest as $eFest)
  735.                     {
  736.                         $nbF $eFest->getNbPlaces() - $res->getNbPlaces();
  737.                          $eFest->setNbPlaces($nbF);
  738.                         $entityManager->persist($eFest); // optionnel si déjà managé
  739.                         $entityManager->flush();
  740.                         
  741.                     }
  742.               
  743.             }
  744.            
  745.            $msg $this->renderView(
  746.             // templates/emails/registration.txt.twig
  747.                 'default/confirmationEmail.html.twig',
  748.                 [
  749.                 'nom'=>$res->getUser()->getNom(),
  750.                 'prenom'=>$res->getUser()->getPrenom(),
  751.                 'nbPlaces'=>$res->getNbPlaces(),
  752.                 'type'=>$res->getType(),
  753.                 'resa'=>$res
  754.                 ]
  755.             );
  756.         
  757.        
  758.     
  759.             // if (!empty($_POST['g-recaptcha-response'])){
  760.         $mj = new \Mailjet\Client('9c42ddfa4db6f8f973a32c7087ea2d51','eace5eb7252f4ff3a1b483251360e04c',true,['version' => 'v3.1']);
  761.         $body = [
  762.             'Messages' => [
  763.                 [
  764.                     'From' => [
  765.                         'Email' => "noreply@lions-laclaireau.be",
  766.                         'Name' => "LIONS LACLAIREAU"
  767.                     ],
  768.                     'To' => [
  769.                         [
  770.                              'Email' => $res->getUser()->getEmail()
  771.                         ]
  772.                     ],
  773.                    
  774.                     
  775.                         'Subject' => "Confirmation de commande",
  776.                             
  777.                             'HTMLPart' => $msg
  778.     
  779.                 ]
  780.             ]
  781.         ];
  782.         $response $mj->post(Resources::$Email, ['body' => $body]);
  783.         $response->success();
  784.     
  785.         $info $response->getData();
  786.         $body = [
  787.             'Messages' => [
  788.                 [
  789.                     'From' => [
  790.                         'Email' => "noreply@lions-laclaireau.be",
  791.                         'Name' => "LIONS LACLAIREAU"
  792.                     ],
  793.                     'To' => [
  794.                         [
  795.                              
  796.                              'Email' => 'laurentcha65@gmail.com'
  797.                         ]
  798.                     ],
  799.                    
  800.                     
  801.                         'Subject' => "Confirmation de commande",
  802.                             
  803.                             'HTMLPart' => $msg
  804.     
  805.                 ]
  806.             ]
  807.         ];
  808.         $response $mj->post(Resources::$Email, ['body' => $body]);
  809.         $response->success();
  810.     
  811.         $info $response->getData();
  812.     }
  813.         
  814.         
  815.         }
  816.         
  817.         
  818.         return $this->renderForm('default/retourStripe.html.twig', [
  819.             'etat'=>$etat
  820.            
  821.             
  822.         ]);
  823.     }
  824.     /**
  825.      * @Route("/supprimerPanierAuto", name="supprimerPanierAuto")
  826.      */
  827.     public function supprimerPanierAuto(Request $requestArticlesRepository $articlesRepository,ReservationsRepository $reservations): Response
  828.     {
  829.       
  830.         $resa $reservations->findBy(array('Payer'=>0));
  831.     
  832.         foreach($resa as $res)
  833.         {
  834.             $reservations->remove($restrue);
  835.         }
  836.         return new Response('ok');
  837.         
  838.     }
  839.        
  840.     
  841. }