src/Controller/ContentController.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Knp\Component\Pager\PaginatorInterface;
  4. use Pimcore\Model\DataObject\DemiAccommodationServiceProvider;
  5. use Pimcore\Model\DataObject\DemiInfrastructure;
  6. use Pimcore\Model\DataObject\DemiRegion;
  7. use Pimcore\Model\DataObject\DemiTown;
  8. use Pimcore\Translation\Translator;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Pimcore\Model\DataObject\AccessibilityCategory;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class ContentController extends AbstractController
  15. {
  16.     public function portalAction(Request $request)
  17.     {
  18.         return $this->renderTemplate('Content/portal.html.twig');
  19.     }
  20.     public function contentAction(Request $request)
  21.     {
  22.         return $this->renderTemplate('Content/content.html.twig');
  23.     }
  24.     public function whiteLabelAction(Request $request)
  25.     {
  26.         return $this->renderTemplate('Content/whiteLabel.html.twig');
  27.     }
  28.     public function landingPageAction(Request $request) {
  29.         return $this->renderTemplate('Content/landingPage.html.twig');
  30.     }
  31.     public function incertAction(Request $request) {
  32.         return $this->renderTemplate('Content/incert.html.twig');
  33.     }
  34.     public function gletscherWeinAction(Request $request) {
  35.         return $this->renderTemplate('Content/gletscherWein.html.twig');
  36.     }
  37.     public function barrierFreeOverviewAccoAction(Request $requestPaginatorInterface $paginator) {
  38.         $accessibilityCategories = new AccessibilityCategory\Listing();
  39.         $accessibilityCategories->setOrderKey('title');
  40.         $accessibilityAccommodation = new DemiAccommodationServiceProvider\Listing();
  41.         $accessibilityAccommodation->addObjectbrick('demiAccessibilityCategories');
  42.         $classId $accessibilityAccommodation->getClassId();
  43.         $accessibilityAccommodation->addConditionParam("object_localized_{$classId}_{$request->getLocale()}.o_id IN (SELECT object_metadata_$classId.o_id FROM object_metadata_$classId WHERE object_metadata_$classId.fieldname = 'accessibilityCategories' AND object_metadata_$classId.column = 'percent' AND object_metadata_$classId.data >= 80)");
  44.         if($demiRegion DemiRegion::getById($this->getDocumentEditable('relation''regionFilter')->getData()['id'])) {
  45.             $townIds $this->getTownsByRegion($demiRegion);
  46.             if(!empty($townIds)) {
  47.                 $accessibilityAccommodation->addConditionParam('town__id IN (' implode(','$townIds) . ')');
  48.             }
  49.         }
  50.         if (!empty($request->get('accessibility', []))) {
  51.             $validAccessibilityIds = [];
  52.             foreach($request->get('accessibility', []) as $accessibilityId) {
  53.                 if(intval($accessibilityId)) {
  54.                     $validAccessibilityIds[] = intval($accessibilityId);
  55.                 }
  56.             }
  57.             if(!empty($validAccessibilityIds)) {
  58.                 $validAccessibilityIds implode(','$validAccessibilityIds);
  59.                 $accessibilityAccommodation->addConditionParam("object_localized_{$classId}_{$request->getLocale()}.o_id IN (SELECT object_metadata_$classId.o_id FROM object_metadata_$classId WHERE object_metadata_$classId.fieldname = 'accessibilityCategories' AND object_metadata_$classId.column = 'percent' AND object_metadata_$classId.data >= 80 AND dest_id IN ($validAccessibilityIds))");
  60.             }
  61.         }
  62.         $accessibilityAccommodation $paginator->paginate($accessibilityAccommodation$request->get('page'1), 8);
  63.         if($request->isXmlHttpRequest()) {
  64.             return $this->json([
  65.                 'content' => [
  66.                     'result-main' => $this->renderView('Includes/barrier-free-list-acco.html.twig', [
  67.                         'accessibilityAccommodation' => $accessibilityAccommodation
  68.                     ]),
  69.                 ],
  70.                 'success' => true,
  71.             ]);
  72.         }
  73.         return $this->renderTemplate('Content/barrierFreeOverviewAcco.html.twig', [
  74.             'accessibilityCategories' => $accessibilityCategories,
  75.             'accessibilityAccommodation' => $accessibilityAccommodation
  76.         ]);
  77.     }
  78.     public function barrierFreeOverviewInfrastructureAction(Request $requestPaginatorInterface $paginator) {
  79.         $accessibilityCategories = new AccessibilityCategory\Listing();
  80.         $accessibilityCategories->setOrderKey('title');
  81.         $accessibilityInfrastructure = new DemiInfrastructure\Listing();
  82.         $accessibilityInfrastructure->addObjectbrick('demiAccessibilityCategories');
  83.         $classId $accessibilityInfrastructure->getClassId();
  84.         $accessibilityInfrastructure->addConditionParam("object_localized_{$classId}_{$request->getLocale()}.o_id IN (SELECT object_metadata_$classId.o_id FROM object_metadata_$classId WHERE object_metadata_$classId.fieldname = 'accessibilityCategories' AND object_metadata_$classId.column = 'percent' AND object_metadata_$classId.data >= 80)");
  85.         if($demiRegion DemiRegion::getById($this->getDocumentEditable('relation''regionFilter')->getData()['id'])) {
  86.             $townIds $this->getTownsByRegion($demiRegion);
  87.             if(!empty($townIds)) {
  88.                 $subConditions = [];
  89.                 foreach ($townIds as $townId) {
  90.                     $subConditions[] = '(towns LIKE ",' $townId ',")';
  91.                 }
  92.                 if(!empty($subConditions)) {
  93.                     $accessibilityInfrastructure->addConditionParam(implode(' OR '$subConditions));
  94.                 }
  95.             }
  96.         }
  97.         if (!empty($request->get('accessibility', []))) {
  98.             $validAccessibilityIds = [];
  99.             foreach($request->get('accessibility', []) as $accessibilityId) {
  100.                 if(intval($accessibilityId)) {
  101.                     $validAccessibilityIds[] = intval($accessibilityId);
  102.                 }
  103.             }
  104.             if(!empty($validAccessibilityIds)) {
  105.                 $validAccessibilityIds implode(','$validAccessibilityIds);
  106.                 $accessibilityInfrastructure->addConditionParam("object_localized_{$classId}_{$request->getLocale()}.o_id IN (SELECT object_metadata_$classId.o_id FROM object_metadata_$classId WHERE object_metadata_$classId.fieldname = 'accessibilityCategories' AND object_metadata_$classId.column = 'percent' AND object_metadata_$classId.data >= 80 AND dest_id IN ($validAccessibilityIds))");
  107.             }
  108.         }
  109.         $accessibilityInfrastructure $paginator->paginate($accessibilityInfrastructure$request->get('page'1), 8);
  110.         if($request->isXmlHttpRequest()) {
  111.             return $this->json([
  112.                 'content' => [
  113.                     'result-main' => $this->renderView('Includes/barrier-free-list-infrastructure.html.twig', [
  114.                         'accessibilityInfrastructure' => $accessibilityInfrastructure
  115.                     ]),
  116.                 ],
  117.                 'success' => true,
  118.             ]);
  119.         }
  120.         return $this->renderTemplate('Content/barrierFreeOverviewInfrastructure.html.twig', [
  121.             'accessibilityCategories' => $accessibilityCategories,
  122.             'accessibilityInfrastructure' => $accessibilityInfrastructure
  123.         ]);
  124.     }
  125.     /**
  126.      * @param Request $request
  127.      * @return Response
  128.      * @Route ("{_locale}/accessibility-lightbox_{id}" , name="accessibility-lightbox")
  129.      */
  130.     public function accessibilityLightboxAction(Request $request): Response
  131.     {
  132.         $id $request->get('id');
  133.         $language $request->get('lang') != '' $request->get('lang') : 'en';
  134.         $object null;
  135.         if($id) {
  136.             $object \Pimcore\Model\DataObject::getById($id);
  137.         }
  138.         if(!$object instanceof AccessibilityCategory) {
  139.             throw new NotFoundHttpException("the requested object doesn't exist anymore");
  140.         }
  141.         return $this->renderTemplate("Content/accessibilityLightbox.html.twig", [
  142.             'object' => $object,
  143.             'language' => $language
  144.         ]);
  145.     }
  146.     /**
  147.      * @Route("/{_locale}/top_offer_teaser_slider_ajax", name="top_offer_teaser_slider_ajax", methods={"GET"})
  148.      */
  149.     public function topOfferTeaserSliderAjaxAction(Request $request): Response {
  150.         $ids $request->get('ids');
  151.         if (null === $ids) {
  152.             return $this->json(['success' => false'message' => 'Invalid IDs format']);
  153.         }
  154.         $elements = [];
  155.         foreach ($ids as $idInfo) {
  156.             if (!isset($idInfo['type'], $idInfo['id'])) {
  157.                 continue;
  158.             }
  159.             $id $idInfo['id'];
  160.             switch ($idInfo['type']) {
  161.                 case 'document':
  162.                     $element \Pimcore\Model\Document::getById(($id));
  163.                     break;
  164.                 case 'object':
  165.                     $element \Pimcore\Model\DataObject::getById(($id));
  166.                     break;
  167.                 default:
  168.                     $element null;
  169.             }
  170.             if (null !== $element) {
  171.                 $elements[] = $element;
  172.             }
  173.         }
  174.         return $this->json([
  175.             'html' => $this->renderTemplate('areas/teaser-top-offer/Includes/topOfferTeaserSliderAjax.html.twig', [
  176.                 'elements' => $elements
  177.             ])->getContent(),
  178.             'success' => true,
  179.         ]);
  180.     }
  181.     private function getTownsByRegion(DemiRegion $demiRegion) {
  182.         $demiTowns = new DemiTown\Listing();
  183.         $demiTowns->addConditionParam("o_path LIKE :opath", ['opath' => ($demiRegion->getFullPath() . "%")]);
  184.         return array_map(function($demiTown) {
  185.             return $demiTown->getId();
  186.         }, $demiTowns->getObjects());
  187.     }
  188. }