src/Controller/ThemeController.php line 212

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 Symfony\Contracts\Translation\TranslatorInterface;
  12. use App\Utils\Residences as ResidencesUtil;
  13. use App\Utils\IresaManager;
  14. use App\Services\SeasonService;
  15. use App\Services\iresaService;
  16. use App\Entity\Residence;
  17. use App\Entity\mediaResidence;
  18. use App\Entity\Language;
  19. use App\Entity\Theme;
  20. use App\Services\ToolService;
  21. use Liip\ImagineBundle\Imagine\Cache\CacheManager;
  22. use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
  23. /**
  24.  * @Route("/{_locale}", requirements={"_locale": "en|fr"})
  25.  */
  26. class ThemeController extends AbstractController
  27. {
  28.     private $em;
  29.     private $session;
  30.     private $flashbag;
  31.     private $user;
  32.     private $seasonService;
  33.     private $toolService;
  34.     private $cacheManager;
  35.     private $helper;
  36.     private $translator;
  37.     private $residencesUtil;
  38.     private $iresaManager;
  39.     function __construct(EntityManagerInterface $em,  SessionInterface $sessionSeasonService $seasonServiceToolService $toolServiceCacheManager $cacheManagerUploaderHelper $helperTranslatorInterface $translatorResidencesUtil $residencesUtilIresaManager $iresaManager) {
  40.         $this->em $em;
  41.         $this->session $session;
  42.         $this->flashbag $this->session->getFlashBag();
  43.         $this->seasonService $seasonService;
  44.         $this->toolService $toolService;
  45.         $this->cacheManager $cacheManager;
  46.         $this->helper $helper;
  47.         $this->translator $translator;
  48.         $this->residencesUtil $residencesUtil;
  49.         $this->iresaManager $iresaManager;
  50.     }
  51.     /**
  52.      * @Route("/theme/{slug}/{id}", name="ac_platform_theme")
  53.      */ 
  54.     public function themeAction($slug$idRequest $request)
  55.     {       
  56.         $locale $request->getLocale();
  57.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  58.         /* 
  59.             interrogation iresa avec les paramètres donnés en paramétre
  60.             exemple pour la page multi-destination "Montagne" sans paramètre
  61.             http://ateya-imhotep-prod.i-resa.com/imhotep/DataResultDetail/1/e9eb5b74-2565-42ca-9c1a-d067c8aee882/?ListLieu=10&DateDebut=&Duree=7&DetailParPrestation=1&pageSize=150
  62.         */
  63.         if ($request->query->has('datearrivee') ) {
  64.             $datearrivee $request->query->get('datearrivee');
  65.             $NbDeltaJour 7;
  66.         } else {
  67.             // s'il n'y a pas de date d'arrivée, on prend la date du jour et on cherche les location autour de cette date
  68.             $datearrivee date('d/m/Y');
  69.             $NbDeltaJour 30;
  70.         }
  71.         $duree 0;
  72.         if ($request->query->has('duree') ) {
  73.             $duree $request->query->get('duree');
  74.         }
  75.         $currentPage $request->query->get('page') ?? 1;
  76.         $pageSize 25;
  77.         $obj = array(
  78.             "ListThemes" => $id,
  79.             "DateDebut" => $datearrivee
  80.             'Duree' => $duree,
  81.             'NbDeltaJour' => $NbDeltaJour
  82.             "DetailParPrestation" => true,
  83.             "pageSize" => $pageSize,
  84.             "page" => $currentPage
  85.         );
  86.         
  87.         $result $this->iresaManager->getDataResultDetail($obj);
  88.         $hebergements $result["FichesLieuHebergement"];
  89.         $reponses $result["ListReponses"];
  90.         $prestations $result["FichesPrestation"];
  91.         
  92.         $maxReponse $result["MaxReponse"];
  93.         $nbPages =  ceil($maxReponse $pageSize);
  94.         $countheb 0;
  95.         $listeHebergements "";
  96.        
  97.         foreach($hebergements as $heb) {
  98.             if($heb['IdElement'] > 0) {
  99.                 $listeHebergements .= $heb['IdElement'] . ",";
  100.             }
  101.             if(count($heb["ListFiches"])>0) {
  102.                 $countheb ++;
  103.                 $hebergement $heb;
  104.             }
  105.         }
  106.        
  107.         $typologies null;
  108.         /*
  109.             Si un seul hébergement est remonté => redirection vers la page produit correspondante
  110.         */
  111.         
  112.         if($countheb == ) {
  113.             
  114.             $slug $this->toolService->slugify(str_replace("*"""$hebergement["ListFiches"]["zero"]["nom"]));
  115.             $id $hebergement["IdElement"];
  116.             return $this->redirect($this->generateUrl('ac_platform_produit', array('slug' => $slug'id' => $id)));
  117.         }
  118.         
  119.         /*
  120.             Si plusieurs hébergements sont remontés => redirection vers la page destination multi produit correspondante
  121.         */
  122.         $packages = [];
  123.         $titre "";
  124.         $description "";
  125.         if($request->query->has('search')) {
  126.             $titre $this->translator->trans('themes.noResult.titre', [], 'app');;
  127.             $description $this->translator->trans('themes.noResult.description', [], 'app');
  128.         } else {
  129.             /*
  130.                 [Traductions] TODO
  131.                 Mise à jour  entité themes + édition BO
  132.             */
  133.             $params = [
  134.                 'code_traduction' => $id,
  135.                 'lang_id' => $lang->getId()
  136.             ];
  137.             
  138.             $theme  $this->em->getRepository(Theme::class)->findOneByLang($params);
  139.             if ($theme instanceof Theme) {
  140.                 $titre $theme->getTitre() ?? $theme->getNom();
  141.                 $description  $theme->getDescription();
  142.             }
  143.         }
  144.         
  145.         $this->residencesUtil->setLocale($locale);
  146.         $fiches $this->residencesUtil->getSejours($hebergements$reponses$lang);
  147.         
  148.         $photoProfil = [];
  149.         $k=0;
  150.         foreach($fiches as $fiche) {
  151.             $residence $fiche['residence'];
  152.             if($residence instanceof residence) {
  153.                 $season $this->seasonService->getSeason();
  154.                 $slider $this->em->getRepository(mediaResidence::class)->findOneByLocation($residence->getId(), "content"$lang$season);
  155.                 if($slider instanceof mediaResidence) {
  156.                     $image_path $this->helper->asset($slider'imageFile');
  157.                     if($image_path) {
  158.                         $image_link $this->cacheManager->getBrowserPath($image_path'offre');
  159.                         $photoProfil[$k] = $image_link;
  160.                     }
  161.                 }
  162.             }
  163.             $k++;
  164.         }
  165.         $vars = [
  166.             "page_code" => "theme"// ok
  167.             "slug" => $slug// ok
  168.             "id" => $id// ok
  169.             "currentPage" => $currentPage// ok
  170.             "nbPages" => $nbPages// ok
  171.             "maxReponse" => $maxReponse// ok
  172.             "mod" => "destination"// ok
  173.             "searchBloc" => true// ok
  174.             "aff_date" => false,  // ok
  175.             'titre' => $titre,  // ok
  176.             'description' => $description// ok
  177.             "hebergements" => $hebergements// ok
  178.             "reponses" => $fiches// ok
  179.             "photoProfil" => $photoProfil// ok
  180.         ];
  181.         return $this->render('/front/Recherche/theme.html.twig'$vars);
  182.     }
  183. }