<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Pimcore\Model\DataObject;
use DestiSuiteBundle\Importer\Accommodation\RequestHelper\AccommodationAvailabilityInternalHelper;
use DestiSuiteBundle\Repository\ExperienceRepository;
class DefaultController extends FrontendController
{
/**
* @Template
* @param Request $request
* @return array
*/
public function defaultAction(Request $request)
{
return [];
}
/**
* @Template
* @param Request $request
* @return array
*/
public function modalAction(Request $request)
{
return [];
}
/**
* @Route("/{_locale}/location_badges_num", name="location_badges_num")
*/
public function location_badges_numAction(Request $request)
{
$entityMap = array();
$response = array();
$response_urls = array();
$multisiteOwner = $this->document->getProperty('multisiteOwner');
$types = $request->get('types');
$ids = $request->get('ids');
foreach ($types as $index => $type_current) {
if (!empty($ids[$index])) {
$responseKey = $type_current . '_' . $ids[$index];
if (!isset($response[ $responseKey ])) {
// collect ids & entities
$locationEntities_current = array();
$ids_current = explode(',', $ids[$index]);
foreach ($ids_current as $id_current) {
if (!empty($entityMap[$id_current])) {
$locationEntities_current[] = $entityMap[$id_current];
} else {
$entity = DataObject\Concrete::getById($id_current);
if (!empty($entity)) {
$entityMap[$id_current] = $entity;
$locationEntities_current[] = $entity;
}
}
}
$count = null;
$badgeUrl = null;
if ($type_current == 'experiences') {
$filters = array(
'locations' => $locationEntities_current,
);
$eventIds = ExperienceRepository::getNextEntities($request->get('_locale'), $multisiteOwner, $filters, null, true);
$count = count($eventIds);
// build url
if(!empty($this->document->getProperty('ds_experiencesPage'))) {
$badgeUrl = $this->document->getProperty('ds_experiencesPage')->getFullPath();
$badgeUrl .= '?' . http_build_query(['locations' => $ids_current]);
}
} elseif ($type_current == 'accommodations') {
$helper = new AccommodationAvailabilityInternalHelper();
$helper->language = $request->get('_locale');
$helper->setCustomLocationFilter($locationEntities_current);
$helper->limit = null;
$helper->search();
$count = $helper->getNumResult();
// build url
if(!empty($this->document->getProperty('ds_accommodationPage'))) {
$badgeUrl = $this->document->getProperty('ds_accommodationPage')->getFullPath();
$badgeUrl .= '?' . http_build_query([
'no_date' => '1',
'overwrite' => '1',
'accommodationLocation' => $ids_current
]);
}
}
$response[ $responseKey ] = $count;
$response_urls[ $responseKey ] = $badgeUrl;
}
}
}
return $this->json([
'success' => true,
'data' => $response,
'urls' => $response_urls,
'types' => $request->get('types'),
'ids' => $request->get('ids'),
]);
}
public function redirectorAction(Request $request)
{
/*
if ($validLanguages = \Pimcore\Tool::getValidLanguages()) {
$validLanguages = array_merge(['en'], $validLanguages);
if ($preferred = $request->getPreferredLanguage($validLanguages)) {
$preferred = str_replace('_', '-', strtolower($preferred));
return $this->redirect('/' . $preferred, 301);
}
}
*/
return $this->redirect('/it', 301);
}
}