, none */ /** * MapController */ class MapController extends ActionController { use InjectMarkerRepositoryTrait; use InjectMapEntryRepositoryTrait; use InjectTravelAuthorRepositoryTrait; use InjectTravelPostRepositoryTrait; use InjectTravelCategoryRepositoryTrait; use InjectImageServiceTrait; private static $mapIcons = null; /** * * @param UriBuilder $uriBuilder * @param TemplateView $sourceView * @param type $arguments * @param type $actionName * @param type $controllerName * @return string */ static private function generateContent(UriBuilder $uriBuilder, TemplateView &$sourceView, $arguments = [], $actionName = 'popup', $controllerName = 'Map'): StandaloneView { $templatePath = $controllerName . '/' . ucfirst($actionName); $objectManager = GeneralUtility::makeInstance(ObjectManager::class); $templateRootPaths = $sourceView->getTemplateRootPaths(); $context = $objectManager->get(ControllerContext::class); $request = $objectManager->get(Request::class); $context->setRequest($request); $context->setUriBuilder($uriBuilder); /** * @var StandaloneView $view */ $view = $objectManager->get(StandaloneView::class); $view->setControllerContext($context); $view->setLayoutRootPaths($sourceView->getLayoutRootPaths()); $view->setTemplateRootPaths($templateRootPaths); $view->setPartialRootPaths($sourceView->getPartialRootPaths()); $view->setTemplate($templatePath); $arguments['today'] = (new \DateTime())->format('d.m.Y'); $view->assignMultiple($arguments); return $view; } private function setMapMarkerIcons() { if (self::$mapIcons === null) { self::$mapIcons = []; $markers = $this->markerRepository->findAll(); foreach ($markers as $marker) { if ($marker->getMapIcon() !== null) { self::$mapIcons[] = [ 'uid' => 'i-' . $marker->getUid(), 'icon' => $this->imageService->getImageUri($this->imageService->applyProcessingInstructions($this->imageService->getImage('', $marker->getMapIcon(), false), []), true) ]; } } } } /** * action map * * @return string|object|null|void */ public function mapAction() { $layerIds = explode(',', $this->settings['layers']); $layerConfigs = MapConfigUtility::getMapLayerConfig($layerIds); if ($this->settings['useLayerSwitcher'] === '1') { for ($i = 0; $i < count($layerConfigs); $i++) { $layerConfigs[$i]['active'] = true; } } $this->uriBuilder->setTargetPageType(1652369512); $centerLat = 0.0; $centerLon = 0.0; switch ((int) $this->settings['mapType']) { case 0: $markers = $this->mapEntryRepository->findAll(); $markerUri = $this->uriBuilder->uriFor('allMapMarkers', null, null, null, 'MapConfig'); $zoom = 1; break; case 1: $travelPost = $this->travelPostRepository->findByUid((int) $this->configurationManager->getContentObject()->data['pid']); if ($travelPost !== null && $travelPost->getDoktype() === Constants::DOKTYPE_BLOG_POST) { $markers = $travelPost->getRelMapEntries(); foreach ($markers as $marker) { $centerLat = $centerLat + $marker->getLatitude(); $centerLon = $centerLon + $marker->getLongitude(); } $centerLat = $centerLat / count($markers); $centerLon = $centerLon / count($markers); $markerUri = $this->uriBuilder->uriFor('postMapMarkers', null, null, null, 'MapConfig'); $zoom = 6; } break; case 2: $cats = explode(',', $this->settings['showCategories']); $args = ['tx_a2gtravelblog_mapconfig' => ['categories' => $cats]]; $travelPosts = $this->travelPostRepository->getFromCategoryUids($cats); $this->uriBuilder->setArguments($args); $markerUri = $this->uriBuilder->uriFor('mapMarkersFromCategories', null, null, null, 'MapConfig'); $markers = []; foreach ($travelPosts as $travelPost) { $markers[$travelPost->getUid()] = $travelPost->getRelMapEntries()->current(); $centerLat = $centerLat + $markers[$travelPost->getUid()]->getLatitude(); $centerLon = $centerLon + $markers[$travelPost->getUid()]->getLongitude(); } $centerLat = $centerLat / count($markers); $centerLon = $centerLon / count($markers); $zoom = 3; break; case 3: $authorUids = explode(',', $this->settings['showAuthors']); $args = ['tx_a2gtravelblog_mapconfig' => ['authors' => $authorUids]]; $travelPosts = $this->travelPostRepository->getFromAuthorUids($authorUids); $this->uriBuilder->setArguments($args); $markerUri = $this->uriBuilder->uriFor('mapMarkersFromAuthor', null, null, null, 'MapConfig'); $markers = []; foreach ($travelPosts as $travelPost) { $markers[$travelPost->getUid()] = $travelPost->getRelMapEntries()->current(); $centerLat = $centerLat + $markers[$travelPost->getUid()]->getLatitude(); $centerLon = $centerLon + $markers[$travelPost->getUid()]->getLongitude(); } $centerLat = $centerLat / count($markers); $centerLon = $centerLon / count($markers); $zoom = 2; break; default: $markers = []; $zoom = 1; break; } if ((int) $this->settings['zoom'] > 0) { $zoom = (int) $this->settings['zoom']; } if (count($markers) > 0) { $showMarkers = true; } else { $showMarkers = false; } $this->view->assignMultiple([ 'mapId' => 'a2g-map-' . uniqid(), 'countMapLayers' => count($layerIds), 'mapConfig' => \GuzzleHttp\json_encode(MapConfigUtility::getMapConfig( $layerIds, null, $showMarkers === true ? $markerUri : null, null, $zoom, 18, $centerLon, $centerLat, true, true, true)) ]); } private function getMarkersFromCategories(array $uids) { } private function getMarkers(int $uid = 0) { $travelPost = $this->travelPostRepository->findByUid($uid); if ($travelPost !== null && $travelPost->getDoktype() === Constants::DOKTYPE_BLOG_POST) { $markers = []; foreach ($travelPost->getRelMapEntries() as $post) { $markers[] = $post; } } else { $markers = []; $posts = $this->travelPostRepository->findAll(); foreach ($posts as $post) { if (count($post->getRelMapEntries()) > 0) { $markers[] = $post->getRelMapEntries()->current(); } } } return $markers; } /** * action mapMarkersFromTag * * @return string|object|null|void */ public function mapMarkersFromTagAction() { $travelPosts = $this->travelPostRepository->getFromTagUids([(int)$_GET['tx_a2gtravelblog_mapconfig']['tag']]); $markers = []; foreach ($travelPosts as $post) { if (count($post->getRelMapEntries()) > 0) { $markers[] = $post->getRelMapEntries()->current(); } } $out = [ "type" => "FeatureCollection", "totalFeatures" => count($markers), "csr" => MapConfigUtility::getMarkerCsr(), "features" => [] ]; foreach ($markers as $marker) { if ($marker->getRelMarker() !== null) { $tmpIcon = "i-" . $marker->getRelMarker()->getUid(); } else if ($marker->getRelTravelPost()->getAuthors()->count() > 0) { $author = $this->travelAuthorRepository->findByUid($marker->getRelTravelPost()->getAuthors()->current()->getUid()); $tmpIcon = $author === null || $author->getRelMapMarker() === null ? null : "i-" . $author->getRelMapMarker()->getUid(); } else { $tmpIcon = null; } $out["features"][] = MapConfigUtility::getMarker($marker, $tmpIcon, self::generateContent($this->uriBuilder, $this->view, ['settings' => $this->settings, 'mapEntry' => $marker], 'popup')->render()); } return \GuzzleHttp\json_encode($out); } /** * action mapMarkers * * @return string|object|null|void */ public function mapMarkersFromAuthorAction() { $travelPosts = $this->travelPostRepository->getFromAuthorUids($_GET['tx_a2gtravelblog_mapconfig']['authors']); $markers = []; foreach ($travelPosts as $post) { if (count($post->getRelMapEntries()) > 0) { $markers[] = $post->getRelMapEntries()->current(); } } $out = [ "type" => "FeatureCollection", "totalFeatures" => count($markers), "csr" => MapConfigUtility::getMarkerCsr(), "features" => [] ]; foreach ($markers as $marker) { if ($marker->getRelMarker() !== null) { $tmpIcon = "i-" . $marker->getRelMarker()->getUid(); } else if ($marker->getRelTravelPost()->getAuthors()->count() > 0) { $author = $this->travelAuthorRepository->findByUid($marker->getRelTravelPost()->getAuthors()->current()->getUid()); $tmpIcon = $author === null || $author->getRelMapMarker() === null ? null : "i-" . $author->getRelMapMarker()->getUid(); } else { $tmpIcon = null; } $out["features"][] = MapConfigUtility::getMarker($marker, $tmpIcon, self::generateContent($this->uriBuilder, $this->view, ['settings' => $this->settings, 'mapEntry' => $marker], 'popup')->render()); } return \GuzzleHttp\json_encode($out); } /** * action mapMarkers * * @return string|object|null|void */ public function mapMarkersFromCategoriesAction() { $travelPosts = $this->travelPostRepository->getFromCategoryUids($_GET['tx_a2gtravelblog_mapconfig']['categories']); $markers = []; foreach ($travelPosts as $post) { if (count($post->getRelMapEntries()) > 0) { $markers[] = $post->getRelMapEntries()->current(); } } $out = [ "type" => "FeatureCollection", "totalFeatures" => count($markers), "csr" => MapConfigUtility::getMarkerCsr(), "features" => [] ]; foreach ($markers as $marker) { if ($marker->getRelMarker() !== null) { $tmpIcon = "i-" . $marker->getRelMarker()->getUid(); } else if ($marker->getRelTravelPost()->getAuthors()->count() > 0) { $author = $this->travelAuthorRepository->findByUid($marker->getRelTravelPost()->getAuthors()->current()->getUid()); $tmpIcon = $author === null || $author->getRelMapMarker() === null ? null : "i-" . $author->getRelMapMarker()->getUid(); } else { $tmpIcon = null; } $out["features"][] = MapConfigUtility::getMarker($marker, $tmpIcon, self::generateContent($this->uriBuilder, $this->view, ['settings' => $this->settings, 'mapEntry' => $marker], 'popup')->render()); } return \GuzzleHttp\json_encode($out); } /** * action mapMarkers * * @return string|object|null|void */ public function postMapMarkersAction() { $markers = $this->getMarkers((int) $this->configurationManager->getContentObject()->data['uid']); $out = [ "type" => "FeatureCollection", "totalFeatures" => count($markers), "csr" => MapConfigUtility::getMarkerCsr(), "features" => [] ]; foreach ($markers as $marker) { if ($marker->getRelMarker() !== null) { $tmpIcon = "i-" . $marker->getRelMarker()->getUid(); } else if ($marker->getRelTravelPost()->getAuthors()->count() > 0) { $author = $this->travelAuthorRepository->findByUid($marker->getRelTravelPost()->getAuthors()->current()->getUid()); $tmpIcon = $author === null || $author->getRelMapMarker() === null ? null : "i-" . $author->getRelMapMarker()->getUid(); } else { $tmpIcon = null; } $out["features"][] = MapConfigUtility::getMarker($marker, $tmpIcon, self::generateContent($this->uriBuilder, $this->view, ['mapEntry' => $marker], 'popupPost')->render()); } return \GuzzleHttp\json_encode($out); } /** * action mapMarkers * * @return string|object|null|void */ public function allMapMarkersAction() { $markers = $this->getMarkers(); $out = [ "type" => "FeatureCollection", "totalFeatures" => count($markers), "csr" => MapConfigUtility::getMarkerCsr(), "features" => [] ]; foreach ($markers as $marker) { if ($marker->getRelMarker() !== null) { $tmpIcon = "i-" . $marker->getRelMarker()->getUid(); } else if ($marker->getRelTravelPost()->getAuthors()->count() > 0) { $author = $this->travelAuthorRepository->findByUid($marker->getRelTravelPost()->getAuthors()->current()->getUid()); $tmpIcon = $author === null || $author->getRelMapMarker() === null ? null : "i-" . $author->getRelMapMarker()->getUid(); } else { $tmpIcon = null; } $out["features"][] = MapConfigUtility::getMarker($marker, $tmpIcon, self::generateContent($this->uriBuilder, $this->view, ['settings' => $this->settings, 'mapEntry' => $marker])->render()); } return \GuzzleHttp\json_encode($out); } public function activeCountryGeojsonAction(){ $travelCats=[]; foreach($_GET['tx_a2gtravelblog_mapconfig']['categories'] as $uid){ $travelCats[] = $this->travelCategoryRepository->findByUid((int)$uid); } $isoCodes = []; foreach($travelCats as $travelCat){ $isoCodes[$travelCat->getIsoA2CountryCode()] = null; } return \GuzzleHttp\json_encode(MapConfigUtility::getCountryFeatureCollectionsFromIsoCodeList($isoCodes)); } public function activeCountriesGeojsonAction(){ $travelCats = $this->travelCategoryRepository->findAll(); $isoCodes = []; foreach($travelCats as $travelCat){ $isoCodes[$travelCat->getIsoA2CountryCode()] = self::generateContent($this->uriBuilder, $this->view, ['settings' => $this->settings, 'category' => $travelCat], 'popupCategory')->render(); } return \GuzzleHttp\json_encode(MapConfigUtility::getCountryFeatureCollectionsFromIsoCodeList($isoCodes)); } /** * action mapConfig * * @return string|object|null|void */ public function mapConfigAction() { $this->setMapMarkerIcons(); $this->view->assignMultiple([ 'mapIcons' => \GuzzleHttp\json_encode(self::$mapIcons) ]); } /** * action ajaxListAction * * @return string|object|null|void */ public function ajaxListAction() { } // /** // * action show // * // * @param Ingredients $ingredient // * @return string|object|null|void // */ // public function showAction(Ingredients $ingredient) { // $titleProvider = GeneralUtility::makeInstance(A2gPageTitleProvider::class); // // if($this->settings['pageTitleSuffix'] !== null && $this->settings['pageTitleSuffix'] !== '' && (strlen($ingredient->getTitle()) + strlen($this->settings['pageTitleSuffix'])) < 66 ){ // $pageTitle = $ingredient->getTitle(). ' ' . $this->settings['pageTitleSuffix']; // } else { // $pageTitle = $ingredient->getTitle(); // } // $titleProvider->setTitle($pageTitle); // $contentObject = GeneralUtility::makeInstance(ContentObjectRenderer::class); // $description = $contentObject->crop($ingredient->getDescription(), 125 . '|...|' . true); // // $uri = $this->uriBuilder->reset()->setCreateAbsoluteUri(true)->setTargetPageUid( // $GLOBALS['TSFE']->id)->uriFor('show', ['ingredient' => $ingredient], 'Ingredients', 'a2gProducts', 'ingredientsdetail'); // // $metaTagManager = GeneralUtility::makeInstance(MetaTagManagerRegistry::class); // // $metaTagManager->getManagerForProperty('robots')->addProperty('robots', 'index, folow'); // $metaTagManager->getManagerForProperty('og:type')->addProperty('og:type', 'website'); // $metaTagManager->getManagerForProperty('twitter:card')->addProperty('twitter:card', 'summary_large_image'); // // if ($ingredient->getTitle() !== '') { // $metaTagManager->getManagerForProperty('title')->addProperty('title', $pageTitle); // $metaTagManager->getManagerForProperty('og:title')->addProperty('og:title', $pageTitle); // $metaTagManager->getManagerForProperty('twitter:title')->addProperty('twitter:title', $pageTitle); // } // if ($ingredient->getDescription() !== '') { // $metaTagManager->getManagerForProperty('description')->addProperty('description', $description); // $metaTagManager->getManagerForProperty('og:description')->addProperty('og:description', $description); // $metaTagManager->getManagerForProperty('twitter:description')->addProperty('twitter:description', $description); // } // $metaTagManager->getManagerForProperty('og:url')->addProperty('og:url', $uri); // $metaTagManager->getManagerForProperty('twitter:url')->addProperty('twitter:url', $uri); // // if ($ingredient->getImage() !== null) { // $processedImage = $this->imageService->applyProcessingInstructions( // $this->imageService->getImage('', $ingredient->getImage(), false), // ['width' => ' // 1200', 'height' => '630c'] // ); // $metaTagManager->getManagerForProperty('twitter:image')->addProperty('twitter:image', $this->imageService->getImageUri($processedImage, true)); // $metaTagManager->getManagerForProperty('og:image')->addProperty('og:image', $this->imageService->getImageUri($processedImage, true)); // } // $this->view->assign('ingredient', $ingredient); // } }