src/Controller/DestinationController.php line 281

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\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  11. use Liip\ImagineBundle\Imagine\Cache\CacheManager;
  12. use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. use App\Utils\IresaManager;
  15. use App\Utils\Residences;
  16. use App\Services\ToolService;
  17. use App\Services\SeasonService;
  18. use App\Entity\Typologie;
  19. use App\Entity\Residence;
  20. use App\Entity\mediaResidence;
  21. use App\Entity\Language;
  22. use App\Entity\Destination;
  23. /**
  24.  * @Route("/{_locale}", requirements={"_locale": "en|fr"})
  25.  */
  26. class DestinationController extends AbstractController
  27. {
  28.     private $em;
  29.     private $session;
  30.     private $flashbag;
  31.     private $user;
  32.     private $seasonService;
  33.     private $iresaManager;
  34.     private $toolService;
  35.     private $helper;
  36.     private $cacheManager;
  37.     private $translator;
  38.     private $residenceService;
  39.     function __construct(EntityManagerInterface $em,  SessionInterface $sessionSeasonService $seasonServiceIresaManager $iresaManagerToolService $toolServiceUploaderHelper $helperCacheManager $cacheManagerTranslatorInterface $translatorResidences $residenceService) {
  40.         $this->em $em;
  41.         $this->session $session;
  42.         $this->flashbag $this->session->getFlashBag();
  43.         $this->seasonService $seasonService;
  44.         $this->iresaManager $iresaManager;
  45.         $this->toolService $toolService;
  46.         $this->helper $helper;
  47.         $this->cacheManager $cacheManager;
  48.         $this->translator $translator;
  49.         $this->residenceService $residenceService;
  50.         
  51.     }
  52.     
  53.     /**
  54.      * @Route("/destination/{slug}/{id}", name="ac_platform_destination")
  55.      */
  56.     public function destinationActionRequest (Request $request$slug$id)
  57.     {  
  58.         if($id == 0) { $id =2;} // par défaut => n'importe quelle destination => id = 2 => France
  59.         
  60.         $locale $request->getLocale();
  61.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  62.         
  63.         $params = [
  64.             'lang_id' => $lang->getId(),
  65.             'code_traduction' => $id
  66.         ];
  67.        
  68.         $destination $this->em->getRepository(Destination::class)->findOneByLang($params);
  69.         if(!$destination ) {
  70.             throw $this->createNotFoundException('Destination inexistante');
  71.         }
  72.         /* on récupère les paramètres de recherche s'il y en a */
  73.        
  74.         if ($request->query->has('datearrivee') ) {
  75.             $datearrivee $request->query->get('datearrivee');
  76.             $NbDeltaJour 0;
  77.         } else {
  78.             // s'il n'y a pas de date d'arrivée, on prend la date du jour et on cherche les locations autour de cette date
  79.             $NbDeltaJour 30;
  80.             $now = new \DateTime();
  81.             $now->add(new \DateInterval('P' intval($NbDeltaJour/2) . 'D'));
  82.             //$datearrivee = $now->format('Y-m-d');
  83.             $datearrivee ""
  84.         }
  85.         
  86.         /*
  87.          * par défaut on teste les dispos pour une durée de 7 jours
  88.          */
  89.         $listDurees = [];
  90.         if($request->query->has('duree') && $request->query->get('duree') != '') {
  91.             $listDurees[] = $request->query->get('duree');
  92.         } else {
  93.             $listDurees = [714215432];
  94.         }
  95.         
  96.         //$idTypePrestations = [1, 2];
  97.         $nbpax $request->query->get('nbpax');
  98.         $nbadultes $request->query->get('nbadultes');
  99.         $nbenfants $request->query->get('nbenfants');
  100.         $search $request->query->get('search');
  101.         
  102.         /* 
  103.             interrogation iresa avec les paramètres donnés en paramétre
  104.             exemple pour la page multi-destination "Montagne" sans paramètre
  105.             http://ateya-imhotep-prod.i-resa.com/imhotep/DataResultDetail/1/e9eb5b74-2565-42ca-9c1a-d067c8aee882/?ListLieu=10&DateDebut=&Duree=7&DetailParPrestation=1&pageSize=150
  106.         */
  107.         foreach($listDurees as $duree) {
  108.             $obj = [
  109.                 "DateDebut" => $datearrivee
  110.                 'Duree' => $duree,
  111.                 //'NbPax' => $nbpax, // Ce paramètre ne fonctionne pas 
  112.                 'NbDeltaJour' => $NbDeltaJour
  113.                 "DetailParPrestation" => true,
  114.                 //"tri" => "PrixTotal",
  115.                 "tri" => "DateDebut",
  116.                 //"IdTypePrestation" => 1, // il ne faut pas utiliser ce paramètre car on loupe les formules packages
  117.                 "pageSize" => 800
  118.             ];
  119.             if ($id 0) {
  120.                 $obj["ListLieu"] = $id;
  121.             }
  122.             
  123.             $result $this->iresaManager->getDataResultDetail($obj);
  124.             $hebergements $result["FichesLieuHebergement"];
  125.             // si on enleve "IdTypePrestation" => 1, le test ne marche pas
  126.             $count 0;
  127.             foreach ($hebergements as $hebergement) {
  128.                 if($hebergement['IdElement'] > 0) {
  129.                     $count += count($hebergement["ListFiches"]);
  130.                     break;
  131.                 }
  132.             }
  133.             echo "<!-- Durée :  " $duree " => Héb : " $count "-->";
  134.             
  135.             if(array_key_exists('MaxReponse'$result) && $result['MaxReponse'] > && $count 0) {
  136.                 break;
  137.             }
  138.         }
  139.         
  140.         /* 
  141.             Il n'y a pas de resultat, On teste la dispo sans prérequis de durée
  142.         */
  143.         if(empty($result) || $result['MaxReponse'] == 0)  {
  144.             $obj['Duree'] = null;
  145.             $result $this->iresaManager->getDataResultDetail($obj);
  146.             /* 
  147.                 Il n'y a pas de resultat, la destination n'est pas disponible
  148.                 On redirige vers la page d'erreur
  149.             */
  150.             if(empty($result) || $result['MaxReponse'] == 0)  {
  151.                 $code $this->translator->trans('erreur.erreurs.100', [], 'app');
  152.                 return $this->redirect($this->generateUrl('ac_platform_error', array('code' => $code )));  
  153.             }
  154.         }
  155.         
  156.         echo "<!-- \n\nREQUETE IRESA \nhttp://ateya-imhotep-prod.i-resa.com/imhotep/DataResultDetail/1/e9eb5b74-2565-42ca-9c1a-d067c8aee882/?ListLieu=" $id "&DateDebut=" .  $obj['DateDebut'] . "&Duree=" $obj['Duree']  . "&NbDeltaJour="$obj['NbDeltaJour']  ."&DetailParPrestation=1&pageSize=800 \n\n-->";
  157.         $hebergements $result["FichesLieuHebergement"];
  158.         $reponses $result["ListReponses"];
  159.         $prestations $result["FichesPrestation"];
  160.         
  161.        
  162.        
  163.         $countheb 0;
  164.         $listeHebergements "";
  165.         
  166.         foreach($hebergements as $heb) {
  167.             if($heb['IdElement'] > 0) {
  168.                 $listeHebergements .= $heb['IdElement'] . ",";
  169.             }
  170.             if(count($heb["ListFiches"])>0) {
  171.                 $countheb ++;
  172.                 // Sauvegarde le dernier hébergement trouvé, utilisé pour redirection en cas d'hébergement unique trouvé
  173.                 $hebergement $heb;
  174.             }
  175.         }
  176.        
  177.         if($countheb == 0)  {
  178.             $code $this->translator->trans('erreur.erreurs.101', [], 'app');
  179.             return $this->redirect($this->generateUrl('ac_platform_error', array('code' => $code )));  
  180.         }
  181.        
  182.         $typologies null;
  183.         /*
  184.             Si un seul hébergement est remonté => redirection vers la page produit correspondante
  185.         */
  186.         
  187.         if($countheb == ) {
  188.             
  189.             $slug $this->toolService->slugify(str_replace("*"""$hebergement["ListFiches"]["zero"]["nom"]));
  190.             $id $hebergement["IdElement"];
  191.             return $this->redirect($this->generateUrl('ac_platform_produit', [
  192.                 'slug' => $slug
  193.                 'id' => $id,
  194.                 'datearrivee' => $datearrivee,
  195.                 'duree' => $duree,
  196.                 'nbadultes' => $nbadultes,
  197.                 'nbenfants' => $nbenfants,
  198.             ]));
  199.         }
  200.         
  201.         /*
  202.             Si plusieurs hébergements sont remontés => redirection vers la page destination multi produit correspondante
  203.         */
  204.         $packages = [];
  205.        
  206.         if($request->query->has('search')) {
  207.             $titre $this->translator->trans('themes.noResult.titre', [], 'app');
  208.             $description $this->translator->trans('themes.noResult.description', [], 'app');
  209.         } else {
  210.             $titre  $destination->getTitreLong();
  211.             $description $destination->getIntroduction();
  212.         }
  213.         
  214.         $this->residenceService->setLocale($locale);
  215.         $fiches $this->residenceService->getSejours($hebergements$reponses$lang$nbpax);
  216.         $photoProfil = [];
  217.         $k=0;
  218.         foreach($fiches as $fiche) {
  219.             $residence $fiche['residence'];
  220.            
  221.             if($residence instanceof residence) {
  222.                 $season $this->seasonService->getSeason();
  223.                 $slider $this->em->getRepository(mediaResidence::class)->findOneByLocation($residence->getId(), "content"$lang$season);
  224.                 if($slider instanceof mediaResidence) {
  225.                     $image_path $this->helper->asset($slider'imageFile');
  226.                     $image_link $this->cacheManager->getBrowserPath($image_path'offre');
  227.                     $photoProfil[$k] = $image_link;
  228.                 }
  229.             }
  230.             $k++;
  231.         }
  232.         $aff_date $request->query->has('aff_date') ? $request->query->get('aff_date') : false;
  233.         $vars = array(
  234.             "page" => "destination",
  235.             "id" => $id,
  236.             "mod" => "destination",
  237.             "hebergements" => $hebergements,
  238.             "searchBloc" => true,
  239.             "aff_date" => $aff_date,
  240.             "datearrivee" => $datearrivee,
  241.             "duree" => $duree,
  242.             "nbadultes" => $nbadultes,
  243.             "nbenfants" => $nbenfants,
  244.             'nbpax' => $nbpax,
  245.             'titre' => $titre
  246.             'description' => $description,
  247.             "reponses" => $fiches,
  248.             "photoProfil" => $photoProfil,
  249.             "metaTitle" => $destination->getMetaTitle(),
  250.             "metaDescription" => $destination->getMetaDescription(),
  251.             "seoTitle" => $destination->getSeoTitle(),
  252.             "seoContent" => $destination->getSeoContent()
  253.         );
  254.         return $this->render('/front/Recherche/destination.html.twig'$vars);
  255.     }
  256. }