<?php
namespace Aviatur\SearchBundle\Controller;
use Aviatur\AgencyBundle\Entity\Agency;
use Aviatur\EditionBundle\Entity\HomePromo;
use Aviatur\EditionBundle\Entity\HomePromoList;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpFoundation\RequestStack;
use Aviatur\TwigBundle\Services\TwigFolder;
use Aviatur\ParkBundle\Services\ListParkService;
class ParkController extends AbstractController
{
private $listParkService;
public function __construct(ListParkService $listParkService, ManagerRegistry $managerRegistry)
{
$this->managerRegistry = $managerRegistry;
$this->listParkService = $listParkService;
}
const EXCLUDED_AGENCIES = [
'Aviatur S.A.S.', 'Aviatur S.A.S. Metasearch', 'Aval', 'Aviacaribbean',
'Aviatur - WorldPay', 'Aviatur Carnaval BAQ MB', 'Aviatur Colombia',
'Aviatur Colombia EN', 'Aviatur Colombia ES', 'Aviatur Ecoturismo',
'Aviatur Kioskos', 'Aviatur Metasearch Mexico', 'Aviatur Mexico',
'Aviatur Mexico QA', 'Aviatur Mobile', 'Aviatur PinBus', 'Aviatur - Pruebas',
'BabyMarket', 'Buceo Colombia', 'Cielos Abiertos', 'Corona Aviatur',
'Directo a la Playa', 'Experiencias Jet-Set', 'Great Vibes', 'Landing visa',
'Lufthansa City Center', 'Megatours', 'Octopus Agents', 'Octopus Marcas Blancas',
'Octopus Travel QA', 'Panturismo Marcas Blancas', 'Parque Tayrona',
'Representaciones Pasabordo WM', 'Rokatur Marcas Blancas', 'RollingTrips',
'Star World', 'Swissandina', 'Takentours', 'TerraNet Marcas Blancas',
'Turiscol Ltda.', 'Aviatur S.A.', 'Union de Representaciones',
'Union de Representaciones - Whitemark', 'Virtuoso', 'Claro', 'WeCare',
'Octopus Travel Ltda.', 'Aviatur Site', 'Aviatur S.A.S. - BBVA',
'Aviatur Welcome Beds'
];
/**
* indexAction
*
* @param mixed $requestStack
* @param mixed $registry
* @param mixed $twigFolder
* @return void
*/
public function indexAction(RequestStack $requestStack, ManagerRegistry $registry, TwigFolder $twigFolder)
{
$em = $registry->getManager();
$session = $requestStack->getSession();
$agency = $this->getAgency($session, $em);
$promoType = $this->getPromoType($session);
// Verificar si la agencia está en la lista de agencias excluidas
$validationAgencyFolder = $this->isAgencyExcluded($agency);
// Obtener el listado de parques y sedes
$parksAndSedes = $this->listParkService->getParksAndSedes($agency);
// Obtener promociones
$homePromos = $this->getHomePromos($agency, $em, $promoType);
$homePromosMain = $this->getHomePromosMain($agency, $em, $promoType);
$homePromosRecommendations = $this->getHomePromosRecommendations($agency, $em, $promoType);
// Validar carpeta de agencia
$agencyFolder = $twigFolder->twigFlux();
return $this->render($twigFolder->twigExists(sprintf('@AviaturTwig/%s/Search/Park/parkSearch_index.html.twig', $agencyFolder)), [
'listParks' => $parksAndSedes['parks'],
'listSedesPark' => $parksAndSedes['sedes'],
'homePromos' => $homePromos['promos'],
'titlePromo' => $homePromos['title'],
'subtitlePromo' => $homePromos['subtitle'],
'promoType' => '__parques',
'homePromosMain' => $homePromosMain['promos'],
'titlePromoMain' => $homePromosMain['title'],
'subtitlePromoMain' => $homePromosMain['subtitle'],
'promoTypeMain' => '__parques' . '-main',
'homePromosRecommendations' => $homePromosRecommendations['promos'],
'titlePromoRecommendations' => $homePromosRecommendations['title'],
'subtitlePromoRecommendations' => $homePromosRecommendations['subtitle'],
'promoTypeRecommendations' => '__parques' . '-recommendations',
'validationAgencyFolder' => $validationAgencyFolder,
]);
}
/**
* getAgency
*
* @param mixed $session
* @param mixed $em
* @return void
*/
private function getAgency($session, $em)
{
$agencyId = $session->get('agencyId');
return $em->getRepository(Agency::class)->find($agencyId);
}
/**
* getPromoType
*
* @param mixed $session
* @return void
*/
private function getPromoType($session)
{
$promoType = '';
if ($session->has('whitemark')) {
$promoType = '_' . $session->get('whitemark');
}
return $promoType;
}
/**
* isAgencyExcluded
*
* @param mixed $agency
* @return void
*/
private function isAgencyExcluded($agency)
{
foreach (self::EXCLUDED_AGENCIES as $excludedAgency) {
if ($excludedAgency === $agency->getName()) {
return true;
}
}
return false;
}
/**
* getHomePromos
*
* @param mixed $agency
* @param mixed $em
* @param mixed $promoType
* @return void
*/
private function getHomePromos($agency, $em, $promoType)
{
$homePromoList = $em->getRepository(HomePromoList::class)->findOneBy([
'type' => '__parques' . $promoType,
'agency' => $agency->getId(),
]);
if ($homePromoList != null) {
return [
'promos' => $em->getRepository(HomePromo::class)->findByHomePromoList($homePromoList, ['date' => 'DESC']),
'title' => $homePromoList->getTitle(),
'subtitle' => $homePromoList->getSubtitle(),
];
}
return ['promos' => [], 'title' => null, 'subtitle' => null];
}
/**
* getHomePromosMain
*
* @param mixed $agency
* @param mixed $em
* @param mixed $promoType
* @return void
*/
private function getHomePromosMain($agency, $em, $promoType)
{
return $this->getHomePromosByType($agency, $em, '__parques' . '-main');
}
/**
* getHomePromosRecommendations
*
* @param mixed $agency
* @param mixed $em
* @param mixed $promoType
* @return void
*/
private function getHomePromosRecommendations($agency, $em, $promoType)
{
return $this->getHomePromosByType($agency, $em, '__parques' . '-recommendations');
}
/**
* getHomePromosByType
*
* @param mixed $agency
* @param mixed $em
* @param mixed $promoType
* @return void
*/
private function getHomePromosByType($agency, $em, $promoType)
{
$homePromoList = $em->getRepository(HomePromoList::class)->findOneBy([
'type' => $promoType,
'agency' => $agency->getId(),
]);
if ($homePromoList != null) {
return [
'promos' => $em->getRepository(HomePromo::class)->findByHomePromoList($homePromoList, ['date' => 'DESC']),
'title' => $homePromoList->getTitle(),
'subtitle' => $homePromoList->getSubtitle(),
];
}
return ['promos' => [], 'title' => null, 'subtitle' => null];
}
}