/** * prepare */ public function prepare() { // check if the news module is active if (in_array('news', $this->Config->getActiveModules())) { // load backend user $this->import('BackendUser', 'User'); // check permission if ($this->User->isAdmin || $this->User->hasAccess('news', 'modules') && isset($this->User->news) && is_array($this->User->news)) { // check if table exists if (!$this->Database->tableExists('tl_news')) { return; } // get all news archives $objNews = \NewsArchiveModel::findAll(array('order' => 'title')); // there are at minimum one archiv if (!is_null($objNews) && $objNews->count()) { // prepare directentry array $arrDirectEntry = array(); // set counter $intCounter = 1; // do this foreach page while ($objNews->next()) { // check page permission if ($this->User->isAdmin || in_array($objNews->id, $this->User->news)) { // set the icon url and title $arrDirectEntry[$intCounter]['icons']['page']['url'] = 'contao/main.php?do=news&table=tl_news&id=' . $objNews->id; $arrDirectEntry[$intCounter]['icons']['page']['title'] = 'news'; $arrDirectEntry[$intCounter]['icons']['page']['icon'] = 'news'; // set the page url and title $arrDirectEntry[$intCounter]['name']['url'] = 'contao/main.php?do=news&table=tl_news&id=' . $objNews->id; $arrDirectEntry[$intCounter]['name']['title'] = $objNews->title; $arrDirectEntry[$intCounter]['name']['link'] = strlen($objNews->title) > 17 ? substr($objNews->title, 0, 15) . '...' : $objNews->title; // add one to counter $intCounter++; } } // add to direcentries service $this->import('DirectEntries'); $this->DirectEntries->addDirectEntry('content', 'news', $arrDirectEntry); } } } }
public function getIncludeArchives(\DataContainer $dc) { $arrReturn = array(); $strTable = ''; $strTitleKey = ''; $strPatternUrl = '%s'; if (!$dc->activeRecord->type) { return $arrReturn; } switch ($dc->activeRecord->type) { case 'nl_news': $strTable = 'tl_news_archive'; $strTitleKey = 'title'; $strPatternUrl = 'contao/main.php?do=news&id=%s&act=edit&popup=1&nb=1&rt=%s'; $objArchives = \NewsArchiveModel::findAll(array('order' => $strTable . '.' . $strTitleKey)); break; case 'nl_events': $strTable = 'tl_calendar'; $strTitleKey = 'title'; $strPatternUrl = 'contao/main.php?do=calendar&id=%s&act=edit&popup=1&nb=1&rt=%s'; $objArchives = \CalendarModel::findAll(array('order' => $strTable . '.' . $strTitleKey)); break; default: return $arrReturn; break; } if (!is_null($objArchives)) { foreach ($objArchives as $objArchive) { $strDo = ampersand(sprintf($strPatternUrl, $objArchive->id, REQUEST_TOKEN)); $arrReturn[$objArchive->id] = sprintf('<strong><a href="%s" title="%s" onclick="Backend.openModalIframe({\'width\':768,\'title\':\'%s\',\'url\':this.href});return false">%s</a></strong>', $strDo, sprintf(specialchars($GLOBALS['TL_LANG']['tl_content']['editalias'][1]), $objArchive->id), sprintf(specialchars($GLOBALS['TL_LANG']['tl_content']['editalias'][1]), $objArchive->id), $objArchive->{$strTitleKey}); } } return $arrReturn; }
/** * Return the IDs of the allowed news archives as array * @return array */ public function getAllowedArchives() { if ($this->User->isAdmin) { $objArchive = NewsArchiveModel::findAll(); } else { $objArchive = NewsArchiveModel::findMultipleByIds($this->User->news); } $return = array(); if ($objArchive !== null) { while ($objArchive->next()) { $return[$objArchive->id] = $objArchive->title; } } return $return; }
/** * Render a news. * * @param GetNewsEvent $event The event. * * @param string $eventName The event name. * * @param EventDispatcherInterface $eventDispatcher The event dispatcher. * * @return void * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.Superglobals) * @SuppressWarnings(PHPMD.CamelCaseVariableName) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function handleNews(GetNewsEvent $event, $eventName, EventDispatcherInterface $eventDispatcher) { if ($event->getNewsHtml()) { return; } $newsArchiveCollection = \NewsArchiveModel::findAll(); $newsArchiveIds = $newsArchiveCollection ? $newsArchiveCollection->fetchEach('id') : array(); $newsModel = \NewsModel::findPublishedByParentAndIdOrAlias($event->getNewsId(), $newsArchiveIds); if (!$newsModel) { return; } $newsModel = $newsModel->current(); $newsArchiveModel = $newsModel->getRelated('pid'); $objPage = \PageModel::findWithDetails($newsArchiveModel->jumpTo); $objTemplate = new \FrontendTemplate($event->getTemplate()); $objTemplate->setData($newsModel->row()); $objTemplate->class = $newsModel->cssClass != '' ? ' ' . $newsModel->cssClass : ''; $objTemplate->newsHeadline = $newsModel->headline; $objTemplate->subHeadline = $newsModel->subheadline; $objTemplate->hasSubHeadline = $newsModel->subheadline ? true : false; $objTemplate->linkHeadline = $this->generateLink($eventDispatcher, $newsModel->headline, $newsModel); $objTemplate->more = $this->generateLink($eventDispatcher, $GLOBALS['TL_LANG']['MSC']['more'], $newsModel, false, true); $objTemplate->link = $this->generateNewsUrl($eventDispatcher, $newsModel); $objTemplate->archive = $newsModel->getRelated('pid'); $objTemplate->count = 0; $objTemplate->text = ''; // Clean the RTE output. if ($newsModel->teaser != '') { if ($objPage->outputFormat == 'xhtml') { $objTemplate->teaser = \String::toXhtml($newsModel->teaser); } else { $objTemplate->teaser = \String::toHtml5($newsModel->teaser); } $objTemplate->teaser = \String::encodeEmail($objTemplate->teaser); } // Display the "read more" button for external/article links. if ($newsModel->source != 'default') { $objTemplate->text = true; } else { // Compile the news text. $objElement = \ContentModel::findPublishedByPidAndTable($newsModel->id, 'tl_news'); if ($objElement !== null) { while ($objElement->next()) { $getContentElementEvent = new GetContentElementEvent($objElement->id); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_GET_CONTENT_ELEMENT, $getContentElementEvent); $objTemplate->text .= $getContentElementEvent->getContentElementHtml(); } } } $arrMeta = $this->getMetaFields($newsModel); // Add the meta information. $objTemplate->date = $arrMeta['date']; $objTemplate->hasMetaFields = !empty($arrMeta); $objTemplate->numberOfComments = $arrMeta['ccount']; $objTemplate->commentCount = $arrMeta['comments']; $objTemplate->timestamp = $newsModel->date; $objTemplate->author = $arrMeta['author']; $objTemplate->datetime = date('Y-m-d\\TH:i:sP', $newsModel->date); $objTemplate->addImage = false; // Add an image. if ($newsModel->addImage && $newsModel->singleSRC != '') { $objModel = \FilesModel::findByUuid($newsModel->singleSRC); if ($objModel === null) { if (!\Validator::isUuid($newsModel->singleSRC)) { $objTemplate->text = '<p class="error">' . $GLOBALS['TL_LANG']['ERR']['version2format'] . '</p>'; } } elseif (is_file(TL_ROOT . '/' . $objModel->path)) { // Do not override the field now that we have a model registry (see #6303). $arrArticle = $newsModel->row(); // Override the default image size. // This is always false! if ($this->imgSize != '') { $size = deserialize($this->imgSize); if ($size[0] > 0 || $size[1] > 0) { $arrArticle['size'] = $this->imgSize; } } $arrArticle['singleSRC'] = $objModel->path; $addImageToTemplateEvent = new AddImageToTemplateEvent($arrArticle, $objTemplate); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_ADD_IMAGE_TO_TEMPLATE, $addImageToTemplateEvent); } } $objTemplate->enclosure = array(); // Add enclosures. if ($newsModel->addEnclosure) { $addEnclosureToTemplateEvent = new AddEnclosureToTemplateEvent($newsModel->row(), $objTemplate); $eventDispatcher->dispatch(ContaoEvents::CONTROLLER_ADD_ENCLOSURE_TO_TEMPLATE, $addEnclosureToTemplateEvent); } $news = $objTemplate->parse(); $event->setNewsHtml($news); }