src/Controller/TabbingController.php line 104

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Elements.at New Media Solutions GmbH
  4.  *
  5.  */
  6. namespace App\Controller;
  7. use App\Service\FacilityService;
  8. use App\Service\RenderletService;
  9. use Elements\Bundle\TicketShopFrameworkBundle\Service\CartService;
  10. use Pimcore\Model\DataObject;
  11. use Pimcore\Model\DataObject\Fieldcollection\Data\ArrivalTabbingContent;
  12. use Pimcore\Model\DataObject\Fieldcollection\Data\Citation;
  13. use Pimcore\Model\DataObject\Fieldcollection\Data\Gallery;
  14. use Pimcore\Model\DataObject\Fieldcollection\Data\LargeImage;
  15. use Pimcore\Model\DataObject\Fieldcollection\Data\MixedTeaser;
  16. use Pimcore\Model\DataObject\Fieldcollection\Data\PortalTabbingContent;
  17. use Pimcore\Model\DataObject\Fieldcollection\Data\Wysiwyg;
  18. use Pimcore\Model\DataObject\Fieldcollection\Data\WysiwygMedia;
  19. use Pimcore\Model\DataObject\TabbingContent;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. use Twig\Environment;
  24. class TabbingController extends AbstractController
  25. {
  26.     public function __construct(CartService $cartServiceEnvironment $twig, protected RenderletService $renderletService)
  27.     {
  28.         parent::__construct($cartService$twig);
  29.     }
  30.     /**
  31.      * @Route("/{_locale}/portal-tab", name="portal_tab")
  32.      *
  33.      * @param Request $request
  34.      *
  35.      * @return Response
  36.      */
  37.     public function portalTabAction(Request $request): Response
  38.     {
  39.         $template '';
  40.         $tabbingContentObject TabbingContent::getById($request->get('tab'));
  41.         $tabbingContent $tabbingContentObject->getContent()->current();
  42.         if ($tabbingContent instanceof PortalTabbingContent) {
  43.             $template $this->renderTemplate('includes/tabbing/dynamic-text-media.html.twig', [
  44.                 'tabbingObject' => $tabbingContent,
  45.             ])->getContent();
  46.         }
  47.         return $this->json([ 'html' => $template'success' => true ]);
  48.     }
  49.     /**
  50.      * @Route("/{_locale}/career-tab", name="career_tab")
  51.      *
  52.      * @param Request $request
  53.      *
  54.      * @return Response
  55.      */
  56.     public function careerTabAction(Request $request): Response
  57.     {
  58.         $jobs = new DataObject\Job\Listing();
  59.         $category DataObject\JobCategory::getById($request->get('tab'));
  60.         if ($category instanceof DataObject\JobCategory) {
  61.             $jobs->addConditionParam('category__id = :categoryId', [ 'categoryId' => $request->get('tab') ]);
  62.         }
  63.         $team DataObject\JobTeam::getById($request->get('team'));
  64.         if ($team instanceof DataObject\JobTeam) {
  65.             $jobs->addConditionParam('team__id = :teamId', [ 'teamId' => $request->get('team') ]);
  66.         }
  67.         $template $this->renderTemplate('job/partials/career-tabbing-content.html.twig', [ 'jobs' => $jobs->load()]);
  68.         return $this->json([ 'html' => $template->getContent(), 'success' => true ]);
  69.     }
  70.     /**
  71.      * @Route("/{_locale}/weather-tab", name="weather_tab")
  72.      *
  73.      * @param Request $request
  74.      *
  75.      * @return Response
  76.      */
  77.     public function weatherTabAction(Request $request): Response
  78.     {
  79.         $weather DataObject\Weather::getById($request->get('tab'));
  80.         $template $this->renderTemplate('weather/partials/weather-tabbing-content.html.twig', [ 'weather' => $weather ]);
  81.         return $this->json([ 'html' => $template->getContent(), 'success' => true ]);
  82.     }
  83.     /**
  84.      * @Route("/{_locale}/facility-tab", name="facility_tab")
  85.      *
  86.      * @param Request $request
  87.      * @param FacilityService $service
  88.      *
  89.      * @return Response
  90.      */
  91.     public function facilityTabAction(Request $requestFacilityService $service): Response
  92.     {
  93.         $resort DataObject\Resort::getById($request->get('tab'));
  94.         $data $service->getFacilitiesViewData($resort$request->get('date') ?: null);
  95.         $template $this->renderTemplate('facility/partials/facility-tabbing-content.html.twig'$data);
  96.         return $this->json([ 'html' => $template->getContent(), 'success' => true ]);
  97.     }
  98.     /**
  99.      * @Route("/{_locale}/arrival-tab", name="arrival_tab")
  100.      *
  101.      * @param Request $request
  102.      *
  103.      * @return Response
  104.      */
  105.     public function arrivalTabAction(Request $request): Response
  106.     {
  107.         $tabbingContentObject TabbingContent::getById($request->get('tab'));
  108.         $tabbingContent $tabbingContentObject->getContent()->current();
  109.         if ($tabbingContent instanceof ArrivalTabbingContent) {
  110.             $links $tabbingContent->getLinks();
  111.             $destination $request->get('destination') ?: 'zermatt';
  112.             $links array_filter($links, function ($link) use ($destination) {
  113.                 return $link->getDestination() == $destination;
  114.             });
  115.             $meanOfTransport $request->get('meanOfTransport') ?: 'train';
  116.             $links array_filter($links, function ($link) use ($meanOfTransport) {
  117.                 return $link->getMeanOfTransport() == $meanOfTransport;
  118.             });
  119.             if ($request->get('destination') || $request->get('meanOfTransport')) {
  120.                 $template $this->renderTemplate('includes/tabbing/partials/arrival-links.html.twig', [ 'links' => $links ])->getContent();
  121.             } else {
  122.                 $template $this->renderTemplate('includes/tabbing/arrival.html.twig', [
  123.                     'elementId' => $tabbingContentObject->getId(),
  124.                     'content' => $tabbingContent,
  125.                     'links' => $links,
  126.                 ])->getContent();
  127.             }
  128.         } else {
  129.             $template $this->getContentTabTemplate($tabbingContent);
  130.         }
  131.         return $this->json([ 'html' => $template'success' => true ]);
  132.     }
  133.     /**
  134.      * @Route("/{_locale}/content-tab", name="content_tab")
  135.      *
  136.      * @param Request $request
  137.      *
  138.      * @return Response
  139.      */
  140.     public function contentTabAction(Request $request): Response
  141.     {
  142.         $tabbingContentObject TabbingContent::getById($request->get('tab'));
  143.         $tabbingContent $tabbingContentObject->getContent()->current();
  144.         return $this->json([ 'html' => $this->getContentTabTemplate($tabbingContent), 'success' => true ]);
  145.     }
  146.     private function getContentTabTemplate(DataObject\Fieldcollection\Data\AbstractData $tabbingContent): string
  147.     {
  148.         if ($tabbingContent instanceof Wysiwyg) {
  149.             return $this->renderTemplate('includes/content/wysiwyg.html.twig', [
  150.                 'topTitle' => $tabbingContent->getTopTitle(),
  151.                 'title' => $tabbingContent->getTitle(),
  152.                 'text' => $tabbingContent->getText(),
  153.                 'link' => $tabbingContent->getLink(),
  154.                 'buttonType' => $tabbingContent->getButtonType(),
  155.             ])->getContent();
  156.         } elseif ($tabbingContent instanceof WysiwygMedia) {
  157.             $template $this->renderTemplate('includes/content/wysiwyg-media-two-cols.html.twig', [
  158.                 'badgeText' => $tabbingContent->getBadgeText(),
  159.                 'topTitle' => $tabbingContent->getTopTitle(),
  160.                 'title' => $tabbingContent->getTitle(),
  161.                 'text' => $tabbingContent->getText(),
  162.                 'link' => $tabbingContent->getLink(),
  163.                 'buttonType' => $tabbingContent->getButtonType(),
  164.                 'image' => $tabbingContent->getImage(),
  165.                 'video' => $tabbingContent->getVideo(),
  166.                 'mediaType' => $tabbingContent->getVideo() ? 'video' 'image',
  167.                 'textPosition' => $tabbingContent->getTextPosition() ?: 'left',
  168.             ])->getContent();
  169.             return preg_replace('#<script(.*?)>(.*?)</script>#is'''$template);
  170.         } elseif ($tabbingContent instanceof Citation) {
  171.             $snippet $tabbingContent->getSnippet() && $tabbingContent->getSnippet()->getTemplate() == 'snippets/citation.html.twig' $tabbingContent->getSnippet() : null;
  172.             return $this->renderTemplate('includes/content/citation.html.twig', [
  173.                 'author' => $snippet $snippet->getEditable('author') : $tabbingContent->getAuthor(),
  174.                 'position' => $snippet $snippet->getEditable('position') : $tabbingContent->getPosition(),
  175.                 'quote' =>  $snippet $snippet->getEditable('quote') : $tabbingContent->getQuote(),
  176.             ])->getContent();
  177.         } elseif ($tabbingContent instanceof Gallery) {
  178.             $template '<section class="wysiwyg-three-images-area">';
  179.             foreach ($tabbingContent->getRows() as $row) {
  180.                 $template .= $this->renderTemplate('includes/content/image-grid.html.twig', [
  181.                     'images' => $row['images']->getData(),
  182.                     'positionBigImage' => $row['positionBigImage']->getData(),
  183.                 ])->getContent();
  184.             }
  185.             return $template '</section>';
  186.         } elseif ($tabbingContent instanceof LargeImage) {
  187.             $returnArray $this->renderletService->getLargeImageTeaserDataFromSnippet($tabbingContent->getSnippet());
  188.             $templateFile count($returnArray) == 'teaser/large-image-teaser.html.twig' 'includes/content/large-image-slider.html.twig';
  189.             return $this->renderTemplate($templateFile$returnArray)->getContent();
  190.         } elseif ($tabbingContent instanceof MixedTeaser) {
  191.             return $this->renderTemplate('includes/content/mixed-teaser-slider.html.twig', [
  192.                 'topTitle' => $tabbingContent->getTopTitle(),
  193.                 'title' => $tabbingContent->getTitle(),
  194.                 'teasers' => array_filter($tabbingContent->getTeaser(), function ($teaser) {
  195.                     return $teaser instanceof DataObject || $teaser->getTemplate() == 'snippets/card-teaser.html.twig';
  196.                 }),
  197.             ])->getContent();
  198.         }
  199.         return '';
  200.     }
  201. }