src/Aviatur/SearchBundle/Controller/ParkController.php line 57

Open in your IDE?
  1. <?php
  2. namespace Aviatur\SearchBundle\Controller;
  3. use Aviatur\AgencyBundle\Entity\Agency;
  4. use Aviatur\EditionBundle\Entity\HomePromo;
  5. use Aviatur\EditionBundle\Entity\HomePromoList;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Aviatur\TwigBundle\Services\TwigFolder;
  10. use Aviatur\ParkBundle\Services\ListParkService;
  11. class ParkController extends AbstractController
  12. {
  13.     /**
  14.      * @var ManagerRegistry
  15.      */
  16.     protected ManagerRegistry $managerRegistry;
  17.     private $listParkService;
  18.     public function __construct(ListParkService $listParkServiceManagerRegistry $managerRegistry)
  19.     {
  20.         $this->managerRegistry $managerRegistry;
  21.         $this->listParkService $listParkService;
  22.     }
  23.     const EXCLUDED_AGENCIES = [
  24.         'Aviatur S.A.S.''Aviatur S.A.S. Metasearch''Aval''Aviacaribbean'
  25.         'Aviatur - WorldPay''Aviatur Carnaval BAQ MB''Aviatur Colombia'
  26.         'Aviatur Colombia EN''Aviatur Colombia ES''Aviatur Ecoturismo'
  27.         'Aviatur Kioskos''Aviatur Metasearch Mexico''Aviatur Mexico'
  28.         'Aviatur Mexico QA''Aviatur Mobile''Aviatur PinBus''Aviatur - Pruebas'
  29.         'BabyMarket''Buceo Colombia''Cielos Abiertos''Corona Aviatur'
  30.         'Directo a la Playa''Experiencias Jet-Set''Great Vibes''Landing visa'
  31.         'Lufthansa City Center''Megatours''Octopus Agents''Octopus Marcas Blancas'
  32.         'Octopus Travel QA''Panturismo Marcas Blancas''Parque Tayrona'
  33.         'Representaciones Pasabordo WM''Rokatur Marcas Blancas''RollingTrips'
  34.         'Star World''Swissandina''Takentours''TerraNet Marcas Blancas'
  35.         'Turiscol Ltda.''Aviatur S.A.''Union de Representaciones'
  36.         'Union de Representaciones - Whitemark''Virtuoso''Claro''WeCare'
  37.         'Octopus Travel Ltda.''Aviatur Site''Aviatur S.A.S. - BBVA'
  38.         'Aviatur Welcome Beds'
  39.     ];
  40.     
  41.     /**
  42.      * indexAction
  43.      *
  44.      * @param  mixed $requestStack
  45.      * @param  mixed $registry
  46.      * @param  mixed $twigFolder
  47.      * @return void
  48.      */
  49.     public function indexAction(RequestStack $requestStackManagerRegistry $registryTwigFolder $twigFolder)
  50.     {
  51.         $em $registry->getManager();
  52.         $session $requestStack->getSession();
  53.         $agency $this->getAgency($session$em);
  54.         $promoType $this->getPromoType($session);
  55.         // Verificar si la agencia está en la lista de agencias excluidas
  56.         $validationAgencyFolder $this->isAgencyExcluded($agency);
  57.         // Obtener el listado de parques y sedes
  58.         $parksAndSedes $this->listParkService->getParksAndSedes($agency);
  59.         // Obtener promociones
  60.         $homePromos $this->getHomePromos($agency$em$promoType);
  61.         $homePromosMain $this->getHomePromosMain($agency$em$promoType);
  62.         $homePromosRecommendations $this->getHomePromosRecommendations($agency$em$promoType);
  63.         $homePromosFaq $this->getHomePromosFaq($agency$em$promoType);
  64.         // Validar carpeta de agencia
  65.         $agencyFolder $twigFolder->twigFlux();
  66.         return $this->render($twigFolder->twigExists(sprintf('@AviaturTwig/%s/Search/Park/parkSearch_index.html.twig'$agencyFolder)), [
  67.             'listParks' => $parksAndSedes['parks'],
  68.             'listSedesPark' => $parksAndSedes['sedes'],
  69.             'homePromos' => $homePromos['promos'],
  70.             'titlePromo' => $homePromos['title'],
  71.             'subtitlePromo' => $homePromos['subtitle'],
  72.             'promoType' => '__parques',
  73.             'homePromosMain' => $homePromosMain['promos'],
  74.             'titlePromoMain' => $homePromosMain['title'],
  75.             'subtitlePromoMain' => $homePromosMain['subtitle'],
  76.             'promoTypeMain' => '__parques' '-main',
  77.             'homePromosRecommendations' => $homePromosRecommendations['promos'],
  78.             'titlePromoRecommendations' => $homePromosRecommendations['title'],
  79.             'subtitlePromoRecommendations' => $homePromosRecommendations['subtitle'],
  80.             'promoTypeRecommendations' => '__parques' '-recommendations',
  81.             'validationAgencyFolder' => $validationAgencyFolder,
  82.             'homePromosFaq' => $homePromosFaq['promos'],
  83.             'titlePromoFaq' => $homePromosFaq['title'],
  84.             'subtitlePromoFaq' => $homePromosFaq['subtitle'],
  85.             'promoTypeFaq' => '__parques' '-faq',
  86.         ]);
  87.     }
  88.     
  89.     /**
  90.      * getAgency
  91.      *
  92.      * @param  mixed $session
  93.      * @param  mixed $em
  94.      * @return void
  95.      */
  96.     private function getAgency($session$em)
  97.     {
  98.         $agencyId $session->get('agencyId');
  99.         return $em->getRepository(Agency::class)->find($agencyId);
  100.     }
  101.     
  102.     /**
  103.      * getPromoType
  104.      *
  105.      * @param  mixed $session
  106.      * @return void
  107.      */
  108.     private function getPromoType($session)
  109.     {
  110.         $promoType '';
  111.         if ($session->has('whitemark')) {
  112.             $promoType '_' $session->get('whitemark');
  113.         }
  114.         return $promoType;
  115.     }
  116.     
  117.     /**
  118.      * isAgencyExcluded
  119.      *
  120.      * @param  mixed $agency
  121.      * @return void
  122.      */
  123.     private function isAgencyExcluded($agency)
  124.     {
  125.         foreach (self::EXCLUDED_AGENCIES as $excludedAgency) {
  126.             if ($excludedAgency === $agency->getName()) {
  127.                 return true;
  128.             }
  129.         }
  130.         return false;
  131.     }
  132.     
  133.     /**
  134.      * getHomePromos
  135.      *
  136.      * @param  mixed $agency
  137.      * @param  mixed $em
  138.      * @param  mixed $promoType
  139.      * @return void
  140.      */
  141.     private function getHomePromos($agency$em$promoType)
  142.     {
  143.         $homePromoList $em->getRepository(HomePromoList::class)->findOneBy([
  144.             'type' => '__parques' $promoType,
  145.             'agency' => $agency->getId(),
  146.         ]);
  147.         if ($homePromoList != null) {
  148.             return [
  149.                 'promos' => $em->getRepository(HomePromo::class)->findByHomePromoList($homePromoList, ['date' => 'DESC']),
  150.                 'title' => $homePromoList->getTitle(),
  151.                 'subtitle' => $homePromoList->getSubtitle(),
  152.             ];
  153.         }
  154.         return ['promos' => [], 'title' => null'subtitle' => null];
  155.     }
  156.     
  157.     /**
  158.      * getHomePromosMain
  159.      *
  160.      * @param  mixed $agency
  161.      * @param  mixed $em
  162.      * @param  mixed $promoType
  163.      * @return void
  164.      */
  165.     private function getHomePromosMain($agency$em$promoType)
  166.     {
  167.         return $this->getHomePromosByType($agency$em'__parques' '-main');
  168.     }
  169.     
  170.     /**
  171.      * getHomePromosRecommendations
  172.      *
  173.      * @param  mixed $agency
  174.      * @param  mixed $em
  175.      * @param  mixed $promoType
  176.      * @return void
  177.      */
  178.     private function getHomePromosRecommendations($agency$em$promoType)
  179.     {
  180.         return $this->getHomePromosByType($agency$em'__parques' '-recommendations');
  181.     }
  182.     
  183.     /**
  184.      * getHomePromosFaq
  185.      *
  186.      * @param  mixed $agency
  187.      * @param  mixed $em
  188.      * @param  mixed $promoType
  189.      * @return void
  190.      */
  191.     private function getHomePromosFaq($agency$em$promoType)
  192.     {
  193.         return $this->getHomePromosByType($agency$em'__parques' '-faq');
  194.     }
  195.         
  196.     /**
  197.      * getHomePromosByType
  198.      *
  199.      * @param  mixed $agency
  200.      * @param  mixed $em
  201.      * @param  mixed $promoType
  202.      * @return void
  203.      */
  204.     private function getHomePromosByType($agency$em$promoType)
  205.     {
  206.         $homePromoList $em->getRepository(HomePromoList::class)->findOneBy([
  207.             'type' => $promoType,
  208.             'agency' => $agency->getId(),
  209.             'online' => true,
  210.         ]);
  211.         if ($homePromoList != null) {
  212.             return [
  213.                 'promos' => $em->getRepository(HomePromo::class)->findByHomePromoList($homePromoList, ['date' => 'DESC']),
  214.                 'title' => $homePromoList->getTitle(),
  215.                 'subtitle' => $homePromoList->getSubtitle(),
  216.             ];
  217.         }
  218.         return ['promos' => [], 'title' => null'subtitle' => null];
  219.     }
  220. }