src/Controller/BusController.php line 64

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Twig\LayoutExtension;
  4. use App\Twig\LinkGenerator;
  5. use Carbon\Carbon;
  6. use Knp\Component\Pager\PaginatorInterface;
  7. use Pimcore\Model\DataObject\BusTravel;
  8. use Pimcore\Model\DataObject\ConventionPartner;
  9. use Pimcore\Model\DataObject\Package;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class BusController extends AbstractController
  15. {
  16.     private LayoutExtension $layoutExtension;
  17.     private LinkGenerator $linkGenerator;
  18.     public function __construct(LayoutExtension $layoutExtensionLinkGenerator $linkGenerator) {
  19.         $this->layoutExtension $layoutExtension;
  20.         $this->linkGenerator $linkGenerator;
  21.     }
  22.     public function overviewAction(Request $requestPaginatorInterface $paginator) {
  23.         $busListing = new BusTravel\Listing();
  24.         if($this->getDocumentEditable('select''filterBusTravel')->getData() != 'both') {
  25.             $busListing->addConditionParam('bustype = :bustype', ['bustype' => $this->getDocumentEditable('select''filterBusTravel')->getData()]);
  26.         }
  27.         if ($this->getDocumentEditable('checkbox''randomize-bus')->getData()){
  28.             $busListing->setOrderKey("Rand(" Carbon::today()->unix() . ")"false);
  29.         }
  30.         $perPage $this->getDocumentEditable('numeric''perPage')->getData() ?: 8;
  31.         $pagination $paginator->paginate($busListing$request->get('page'1), $perPage);
  32.         if ($request->isXmlHttpRequest() && $request->get('pois'false)) {
  33.             return $this->getMapdata($pagination);
  34.         }
  35.         if($request->get('ajax') && $request->isXmlHttpRequest()) {
  36.             $response =[
  37.                 "success" => true,
  38.                 "content" => [
  39.                     'result-main' => $this->render('Bus/Includes/bus-list.html.twig', [
  40.                         'items' => $pagination,
  41.                     ])->getContent(),
  42.                     'result-paging' => $this->renderView('Navigation/paging.html.twig', [
  43.                         'styleModifier' => 'justify-content-center',
  44.                         'ajaxClass' => 'js-ajax-form-map__link',
  45.                         'paginator' => $pagination
  46.                     ]),
  47.                 ],
  48.             ];
  49.             return new JsonResponse($response);
  50.         }
  51.         return $this->renderTemplate('Bus/overview.html.twig', [
  52.             'paginator' => $pagination,
  53.         ]);
  54.     }
  55.     public function detailAction(Request $request) {
  56.         $busTravel BusTravel::getById($request->get('id'));
  57.         if(!$busTravel) {
  58.             throw new NotFoundHttpException("the requested object doesn't exist anymore");
  59.         }
  60.         return $this->renderTemplate('Bus/detail.html.twig', [
  61.             'busTravel' => $busTravel,
  62.             'isAccommodation' => $busTravel->getBusType() == 'accommodation',
  63.             'weatherStation' => $this->getWeatherStationByBusTravel($busTravel),
  64.             'videos' => $this->getSortedVideosByBusTravel($busTravel),
  65.             'packages' => $this->getPackageTeaserByBusTravel($busTravel),
  66.         ]);
  67.     }
  68.     /**
  69.      * @Route("/{_locale}/interactive-bus-map-info-box", name="interactive-bus-map-info-box")
  70.      */
  71.     public function getBusMapInfoBox(Request $request) {
  72.         $busTravel BusTravel::getById($request->get('id'null));
  73.         $document $this->document;
  74.         $locale $document->getProperty('language') ?? $request->getLocale();
  75.         if($busTravel) {
  76.             $wysiwyg '<ul>';
  77.             foreach($busTravel->getBulletPoints($locale) as $bulletpoint) {
  78.                 $wysiwyg .= '<li>'  $bulletpoint['bulletPointText']->getData() . '</li>';
  79.             }
  80.             $wysiwyg .= '</ul>';
  81.             return $this->json([
  82.                 'success' => true,
  83.                 'html' => $this->renderView('Convention/Includes/interactive-map-info-box.html.twig', [
  84.                     'image' => $busTravel->getTeaserImage(),
  85.                     'subtitle' => $busTravel->getShortDescription($locale),
  86.                     'title' => $busTravel->getTitle($locale),
  87.                     'wysiwyg' => $wysiwyg,
  88.                     'link' => $this->linkGenerator->generate($busTravel, ['document' => $document]),
  89.                     'id' => $request->get('id')
  90.                 ])
  91.             ]);
  92.         }
  93.     }
  94.     private function getWeatherStationByBusTravel(BusTravel $busTravel) {
  95.         $weatherStation $busTravel->getWeatherStation();
  96.         if(!$weatherStation) {
  97.             if(count($busTravel->getCommunity()) > 0) {
  98.                 $weatherStation $busTravel->getCommunity()[0]->getPrognosis();
  99.             } elseif(count($busTravel->getRegion()) > 0) {
  100.                 $weatherStation $busTravel->getRegion()[0]->getWeatherStation();
  101.             }
  102.         }
  103.         return $weatherStation;
  104.     }
  105.     private function getSortedVideosByBusTravel(BusTravel $busTravel) {
  106.         $videos = [];
  107. //        if($busTravel->getVideo1()) {
  108. //            $videos[$busTravel->getVideoPos1() ?? 'video1'] = $busTravel->getVideo1();
  109. //        }
  110.         if($busTravel->getVideo2()) {
  111.             $videos[$busTravel->getVideoPos2() ?? 'video2'] = $this->layoutExtension->getVideoEditable($busTravel->getVideo2());
  112.         }
  113.         if($busTravel->getVideo3()) {
  114.             $videos[$busTravel->getVideoPos3() ?? 'video3'] = $this->layoutExtension->getVideoEditable($busTravel->getVideo3());
  115.         }
  116.         if($busTravel->getVideo4()) {
  117.             $videos[$busTravel->getVideoPos4() ?? 'video4' ] = $this->layoutExtension->getVideoEditable($busTravel->getVideo4());
  118.         }
  119.         ksort($videos);
  120.         return $videos;
  121.     }
  122.     private function getPackageTeaserByBusTravel(BusTravel $busTravel$numOfTeaser 3) {
  123.         $teaserPackages = [];
  124.         if($busTravel->getPackages()) {
  125.             $tmpPackages $busTravel->getPackages();
  126.             shuffle($tmpPackages);
  127.             $teaserPackages array_slice($tmpPackages0$numOfTeaser);
  128.         } else {
  129.             $packageListing = new Package\Listing();
  130.             $packageListing->addConditionParam('isBusTour is not null and isBusTour = 1');
  131.             $packageListing->setOrderKey('RAND()'false);
  132.             $packageListing->setLimit($numOfTeaser);
  133.             $teaserPackages $packageListing->getObjects();
  134.         }
  135.         $teaserdata = [];
  136.         /**
  137.          * @var Package $package
  138.          */
  139.         foreach ($teaserPackages as $package) {
  140.             $teaserdata[] = [
  141.                 "title" => $package->getTitle(),
  142.                 "href" => $this->linkGenerator->generate($package),
  143.                 "image" => $package->getTeaserImage(),
  144. //                "badgeText" =>  $infra->get(),
  145.                 "isInNav" =>  false,
  146.                 "isSearchTeaser" =>  false,
  147.                 "ratio" =>  null
  148.             ];
  149.         }
  150.         return $teaserdata;
  151.     }
  152.     private function getMapdata(\Knp\Component\Pager\Pagination\PaginationInterface $pagination)
  153.     {
  154.         $geoData = [];
  155.         /**
  156.          * @var BusTravel $busTravel
  157.          */
  158.         foreach ($pagination as $busTravel) {
  159.             if($busTravel) {
  160.                 $geo $busTravel->getMap();
  161.                 if($geo) {
  162.                     $geoData[] = [
  163.                         "id" => $busTravel->getId(),
  164.                         "lat" => $geo->getLatitude(),
  165.                         "lng" => $geo->getLongitude(),
  166.                         "detailInfoBoxUrl" => $this->generateUrl('interactive-bus-map-info-box',[
  167.                             'id' => $busTravel->getId(),
  168.                         ])
  169.                     ];
  170.                 }
  171.             }
  172.         }
  173.         return new JsonResponse([
  174.             "success" => true,
  175.             "pois" => $geoData
  176.         ]);
  177.     }
  178. }