/** * Generate a URL and return it as string. * * @param EventDispatcherInterface $eventDispatcher The event dispatcher. * * @param NewsModel $objItem The news model. * * @param boolean $blnAddArchive Add the current archive parameter (news archive) (default: false). * * @return string * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.Superglobals) * @SuppressWarnings(PHPMD.CamelCaseVariableName) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function generateNewsUrl(EventDispatcherInterface $eventDispatcher, NewsModel $objItem, $blnAddArchive = false) { $url = null; switch ($objItem->source) { // Link to an external page. case 'external': if (substr($objItem->url, 0, 7) == 'mailto:') { $url = StringHelper::encodeEmail($objItem->url); } else { $url = ampersand($objItem->url); } break; // Link to an internal page. // Link to an internal page. case 'internal': if (($objTarget = $objItem->getRelated('jumpTo')) !== null) { $generateFrontendUrlEvent = new GenerateFrontendUrlEvent($objTarget->row()); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_GENERATE_FRONTEND_URL, $generateFrontendUrlEvent); $url = $generateFrontendUrlEvent->getUrl(); } break; // Link to an article. // Link to an article. case 'article': if (($objArticle = ArticleModel::findByPk($objItem->articleId, array('eager' => true))) !== null && ($objPid = $objArticle->getRelated('pid')) !== null) { $generateFrontendUrlEvent = new GenerateFrontendUrlEvent($objPid->row(), '/articles/' . (!$GLOBALS['TL_CONFIG']['disableAlias'] && $objArticle->alias != '' ? $objArticle->alias : $objArticle->id)); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_GENERATE_FRONTEND_URL, $generateFrontendUrlEvent); $url = $generateFrontendUrlEvent->getUrl(); } break; default: } // Link to the default page. if ($url === null) { $objPage = PageModel::findByPk($objItem->getRelated('pid')->jumpTo); if ($objPage === null) { $url = ampersand(Environment::get('request'), true); } else { $generateFrontendUrlEvent = new GenerateFrontendUrlEvent($objPage->row(), ($GLOBALS['TL_CONFIG']['useAutoItem'] && !$GLOBALS['TL_CONFIG']['disableAlias'] ? '/' : '/items/') . (!$GLOBALS['TL_CONFIG']['disableAlias'] && $objItem->alias != '' ? $objItem->alias : $objItem->id)); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_GENERATE_FRONTEND_URL, $generateFrontendUrlEvent); $url = $generateFrontendUrlEvent->getUrl(); } // Add the current archive parameter (news archive). if ($blnAddArchive && Input::get('month') != '') { $url .= ($GLOBALS['TL_CONFIG']['disableAlias'] ? '&' : '?') . 'month=' . Input::get('month'); } } return $url; }
/** * Generates URL to a news item. * * @param NewsModel $news * * @return string */ private function generateNewsReaderUrl(NewsModel $news) { /** @var PageModel $targetPage */ if (!($archive = $news->getRelated('pid')) instanceof NewsArchiveModel || !($targetPage = $archive->getRelated('jumpTo')) instanceof PageModel) { return ''; } /** @var Config $config */ $config = $this->framework->getAdapter(Config::class); return $targetPage->getFrontendUrl(($config->get('useAutoItem') ? '/' : '/items/') . ($news->alias ?: $news->id)); }