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

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