src/Controller/DefaultController.php line 207

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Yaml\Yaml;
  10. use Symfony\Component\Yaml\Exception\ParseException;
  11. use Symfony\Component\Yaml\Exception;
  12. use Twig\Environment;
  13. use Liip\ImagineBundle\Imagine\Cache\CacheManager;
  14. use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. use App\Entity\Residence;
  17. use App\Entity\Typologie;
  18. use App\Entity\Promo;
  19. use App\Entity\VenteFlash;
  20. use App\Entity\mediaResidence;
  21. use App\Entity\blog;
  22. use App\Entity\slider;
  23. use App\Entity\Language;
  24. use App\Entity\miseenavant;
  25. use App\Entity\Theme;
  26. use App\Entity\InscritNewsletter;
  27. use App\Utils\IresaManager;
  28. use App\Services\SeasonService;
  29. use App\Services\ToolService;
  30. use App\Form\InscritNewsletterType;
  31. /**
  32.  * @Route("/{_locale}", requirements={"_locale": "en|fr"})
  33.  */
  34. class DefaultController extends AbstractController
  35. {
  36.     /**
  37.      * @var EntityManagerInterface
  38.      */
  39.     private $em;
  40.     private $seasonService;
  41.     private $iresaManager;
  42.     private $toolService;
  43.     private $uploadHelper;
  44.     private $cacheManager;
  45.     private $translator;
  46.     private $twig;
  47.     public function __construct(EntityManagerInterface $emSeasonService $seasonServiceIresaManager $iresaManagerToolService $toolServiceUploaderHelper $uploadHelperCacheManager $cacheManagerTranslatorInterface $translatorEnvironment $twig)
  48.     {
  49.         $this->em $em;
  50.         $this->seasonService $seasonService;
  51.         $this->iresaManager $iresaManager;
  52.         $this->toolService $toolService;
  53.         $this->uploadHelper $uploadHelper;
  54.         $this->cacheManager $cacheManager;
  55.         $this->translator $translator;
  56.         $this->twig $twig;
  57.     }
  58.     /**
  59.      * @Route("/", name="ac_platform_homepage")
  60.      */
  61.     public function index(Request $request)
  62.     {
  63.         $session $request->getSession();
  64.         $locale $request->getLocale();
  65.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  66.         
  67.         if($request->query->has('_locale')) {
  68.             return $this->redirect($this->generateUrl('ac_platform_homepage', ['_locale' => $request->query->get('_locale')]));
  69.         }
  70.            
  71.         $session->remove('next');
  72.         $session->remove('nextan');
  73.         $MiseEnAvantMajeur $this->em->getRepository(blog::class)->getHome($lang);
  74.         $MisesEnAvantMineur $this->em->getRepository(miseenavant::class)->getHome($lang);
  75.         $slider $this->em->getRepository(slider::class)->getHome($lang);
  76.         $repository $this->em->getRepository(Promo::class);
  77.         $promos $repository->getBonsPlansDuMoment();
  78.         $photoProfil = [];
  79.         foreach($promos as $promo) {
  80.             $residence $this->em->getRepository(Residence::class)->findOneByIdiresa($promo->getIdLieuHebergement());
  81.             
  82.             if($residence instanceof residence) {
  83.                 $season $this->seasonService->getSeason();
  84.                 $mediaResidence $this->em->getRepository(mediaResidence::class)->findOneByLocation($residence->getId(), "content"$lang$season);
  85.                 if($mediaResidence instanceof mediaResidence) {
  86.                     $image_path $this->uploadHelper->asset($mediaResidence'imageFile');
  87.                     $image_link $this->cacheManager->getBrowserPath($image_path'offre');
  88.                     $photoProfil[$promo->getId()] = $image_link;
  89.                 }
  90.             }
  91.         }
  92.         
  93.         $vars = array(
  94.             "page_code" => "home",
  95.             "searchBloc" => true,
  96.             "mod" => "promo",
  97.             "MiseEnAvantMajeur" => $MiseEnAvantMajeur,
  98.             "MisesEnAvantMineur" => $MisesEnAvantMineur,
  99.             "slider" => $slider,
  100.             "promos" => $promos,
  101.             "photoProfil" => $photoProfil
  102.         );
  103.         
  104.         return $this->render('/front/Default/index.html.twig'$vars);
  105.     }
  106.     /**
  107.      * @Route("/dest/e/{code}", name="ac_platform_error")
  108.      */
  109.     public function error(Request $request$code)
  110.     {
  111.         $locale $request->getLocale();
  112.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  113.         
  114.         if($request->query->has('_locale')) {
  115.             return $this->redirect($this->generateUrl('ac_platform_homepage', ['_locale' => $request->query->get('_locale')]));
  116.         }
  117.     
  118.         $code_id $this->translator->trans('erreur.' $code,  [], 'app');
  119.         switch($code_id) {
  120.             case 100// erreur 100 / moteur de recherche / Pas d'hébergement trouvé
  121.                 $title "Ouups ! Petit problème...";
  122.                 $message "Nous n'avons trouvé aucune destination avec vos paramètres de recherche";
  123.             break;
  124.             case 101// erreur 101 / moteur de recherche / Pas de destination trouvée
  125.                 $title "Ouups ! Petit problème...";
  126.                 $message "Aucun séjour ne correspond à vos souhaits. <br/>Nous vous invitons à renouveler votre recherche avec des dates différentes.";
  127.             break;
  128.             case 102// erreur_102 / moteur de recherche / destination inconnue
  129.                 $title "Ouups ! Petit problème...";
  130.                 $message "Cette destination n'existe pas";
  131.             break;
  132.             case 200// erreur 200 / Hebergement remonté mais pas de tarif
  133.                 $title "Ouups ! Petit problème...";
  134.                 $message "Il y a eu un problème technique  avec cette réservation, merci de nous contacter au 04 82 98 36 42";
  135.             break;
  136.         }
  137.         $repository $this->em->getRepository(Promo::class);
  138.         $promos $repository->getBonsPlansDuMoment();
  139.         $vars = array(
  140.             "searchBloc" => true,
  141.             "title" =>  $title,
  142.             "message" => $message,
  143.         );
  144.         
  145.         return $this->render('/front/Default/error.html.twig'$vars);
  146.     }
  147.     
  148.     /**
  149.      * @Route("/themes", name="ac_platform_themes")
  150.      */
  151.     public function themes(Request $request)
  152.     {
  153.         $locale $request->getLocale();
  154.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  155.         $criteria = [
  156.             'lang' => $lang
  157.             'etat' => true
  158.         ];
  159.         $orderBy = ['ordre' => 'ASC'];
  160.         $themes  $this->em->getRepository(Theme::class)->findBy($criteria$orderBy);
  161.         $vars = [
  162.             'themes' => $themes
  163.         ];
  164.         return $this->render('/front/Moteur/themes.html.twig'$vars);
  165.     }
  166.     public function chglng(Request $request)
  167.     {
  168.         $lng strtolower($request->request->get("lng"));
  169.         $uri =  $request->request->get("uri");
  170.         $uri str_replace("/".$request->getLocale()."/""/".$lng."/"$uri);
  171.         return new JsonResponse($uri);
  172.     }
  173.     /**
  174.      * @Route("/inscription-newsletter", name="ac_platform_inscriptionnewsletter")
  175.      */
  176.     public function newsletter(Request $request)
  177.     {
  178.         $inscritNewsletter = new InscritNewsletter();
  179.         $form $this->createForm(InscritNewsletterType::class, $inscritNewsletter);
  180.        
  181.         if ($request->isXmlHttpRequest()) {
  182.             // La requête est une requête Ajax
  183.             $email $request->request->get('email');
  184.             if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
  185.                 $retour 'ko';
  186.                 return new JsonResponse($retour);
  187.             }
  188.             
  189.             $newsletter $this->em->getRepository(InscritNewsletter::class)->findOneByEmail($email);
  190.             if(!$newsletter instanceof InscritNewsletter) {
  191.                 $newsletter = new InscritNewsletter();
  192.                 $newsletter->setEmail($email);
  193.                 $newsletter->setEtat(1);
  194.                 $this->em->persist($newsletter);
  195.                 $this->em->flush();
  196.                 $retour 'ok';
  197.                 
  198.             } else {
  199.                 $retour 'email_exists';
  200.             }
  201.         
  202.             return new JsonResponse($retour);
  203.         }
  204.         return $this->render('/front/Default/newsletter.html.twig', array(
  205.             'form'=>$form->createView()
  206.         ));
  207.     }
  208.     public function familles(Request $request) {
  209.         $moteur $this->iresaManager->getDataMoteur();
  210.         $familles $moteur->ListFamillesLieuHebergement;
  211.         $retour = array(
  212.             "familles" => $familles
  213.         );
  214.         return $this->render('/front/Moteur/familles.html.twig'$retour);
  215.     }
  216.     public function checkpanier(Request $request)
  217.     {
  218.         $session $request->getSession();
  219.         $resas $session->get('resas');
  220.         if($resas) {
  221.             $dt = new \DateTime;
  222.             foreach($resas as $resa) {
  223.                 echo $dt->getTimestamp() - $resa["timestamp"];
  224.                 if( $dt->getTimestamp() - $resa["timestamp"] > 3600) {
  225.                     $session->remove('resas');
  226.                 }
  227.             }
  228.         }
  229.         return new JsonResponse("");
  230.     }
  231.     public function menu(Request $request)
  232.     {
  233.         $route $request->query->get('route_name');
  234.         $params $request->query->get('params');
  235.         $params is_null($params) ? [] : $params;
  236.         $repository $this->em->getRepository(Promo::class);
  237.         $count $repository->countPromos();
  238.         $haspromo $count truefalse;
  239.         
  240.         $venteFlash = new VenteFlash();
  241.         try {
  242.             $projectRoot $this->getParameter('kernel.project_dir');
  243.             $parameter Yaml::parse(file_get_contents($projectRoot.'/var/config/vente-flash.yaml'));
  244.             $venteFlash->setParameter($parameter);
  245.             
  246.         } catch (ParseException $exception) {
  247.             //dump('Unable to parse the YAML string: %s', $exception->getMessage());
  248.         }
  249.         $categories = [];
  250.         
  251.         $promosCategories Promo::CATEGORIES;
  252.         $now = new \DateTime();
  253.         $now = new \DateTime$now->format('Y-m-d'));
  254.        
  255.         if($venteFlash->actif && $now >= $venteFlash->operationDateDebut && $now <= $venteFlash->operationDateFin) {
  256.             array_unshift($promosCategoriesPromo::CATEGORY_VENTES_FLASH);
  257.         }
  258.        
  259.         foreach($promosCategories as $category ) {
  260.             $method $this->toolService->snakeToCamelCase('get-'$category);
  261.             if(method_exists$repository$method)) {
  262.                 $promos $repository->{$method}();
  263.                 if(count($promos) > 0){
  264.                    $categories[] = $category;
  265.                 }
  266.             }
  267.         }
  268.        
  269.         $vars = array(
  270.             "haspromo" =>  $haspromo,
  271.             "categories" => $categories,
  272.             "route_name" => $route,
  273.             "params" => $params
  274.         );
  275.        
  276.         return $this->render('/front/Default/menu.html.twig'$vars);
  277.     }
  278.    
  279.     /**
  280.      * @Route("/footer", name="ac_platform_footer")
  281.      */
  282.     public function footer(Request $request)
  283.     {
  284.         $locale $request->getLocale();
  285.         
  286.         $locale $request->getLocale();
  287.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  288.         $residences  $this->em->getRepository(Residence::class)->findEnabled($lang);
  289.         $vars = array(
  290.             "hebergements" => $residences
  291.         );
  292.         $html $this->twig->render('/front/Default/footer.html.twig'$vars);
  293.         $twig = new Response($html);
  294.         $twig->headers->set('Content-Type''text/html');
  295.         
  296.         return $twig;
  297.         
  298.     }
  299. }