/**
  * 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;
 }
示例#3
0
 /**
  * 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);
 }