/**
  * Display a wildcard in the back end
  * @return string
  */
 public function generate()
 {
     if (TL_MODE == 'BE') {
         $objTemplate = new \BackendTemplate('be_wildcard');
         $objTemplate->wildcard = '### NEWS CATEGORIES MENU ###';
         $objTemplate->title = $this->headline;
         $objTemplate->id = $this->id;
         $objTemplate->link = $this->name;
         $objTemplate->href = 'contao/main.php?do=themes&table=tl_module&act=edit&id=' . $this->id;
         return $objTemplate->parse();
     }
     $this->news_archives = $this->sortOutProtected(deserialize($this->news_archives));
     // Return if there are no archives
     if (!is_array($this->news_archives) || empty($this->news_archives)) {
         return '';
     }
     $param = 'items';
     // Use the auto_item parameter if enabled
     if (!isset($_GET['items']) && $GLOBALS['TL_CONFIG']['useAutoItem'] && isset($_GET['auto_item'])) {
         $param = 'auto_item';
     }
     $newsModel = \NewsModel::findPublishedByParentAndIdOrAlias(\Input::get($param), $this->news_archives);
     // Get the category IDs of the active news item
     if ($newsModel !== null) {
         $this->activeNewsCategories = deserialize($newsModel->categories, true);
     }
     return parent::generate();
 }
 /**
  * Generate the list in related categories mode
  *
  * Use the categories of the current news item. The module must be
  * on the same page as news reader module.
  *
  * @return string
  */
 protected function generateRelated()
 {
     // Set the item from the auto_item parameter
     if (!isset($_GET['items']) && $GLOBALS['TL_CONFIG']['useAutoItem'] && isset($_GET['auto_item'])) {
         \Input::setGet('items', \Input::get('auto_item'));
     }
     // Return if there is no item specified
     if (!\Input::get('items')) {
         return '';
     }
     $this->news_archives = $this->sortOutProtected(deserialize($this->news_archives));
     // Return if there are no archives
     if (!is_array($this->news_archives) || empty($this->news_archives)) {
         return '';
     }
     $news = \NewsModel::findPublishedByParentAndIdOrAlias(\Input::get('items'), $this->news_archives);
     // Return if the news item was not found
     if ($news === null) {
         return '';
     }
     $GLOBALS['NEWS_FILTER_CATEGORIES'] = false;
     $GLOBALS['NEWS_FILTER_DEFAULT'] = deserialize($news->categories, true);
     $GLOBALS['NEWS_FILTER_EXCLUDE'] = array($news->id);
     return parent::generate();
 }
Пример #3
0
 /**
  * Generate the module
  */
 protected function compile()
 {
     global $objPage;
     $this->Template->articles = '';
     $this->Template->referer = 'javascript:history.go(-1)';
     $this->Template->back = $GLOBALS['TL_LANG']['MSC']['goBack'];
     // Get the news item
     $objArticle = \NewsModel::findPublishedByParentAndIdOrAlias(\Input::get('items'), $this->news_archives);
     if ($objArticle === null) {
         // Do not index or cache the page
         $objPage->noSearch = 1;
         $objPage->cache = 0;
         // Send a 404 header
         header('HTTP/1.1 404 Not Found');
         $this->Template->articles = '<p class="error">' . sprintf($GLOBALS['TL_LANG']['MSC']['invalidPage'], \Input::get('items')) . '</p>';
         return;
     }
     $arrArticle = $this->parseArticle($objArticle);
     $this->Template->articles = $arrArticle;
     // Overwrite the page title
     if ($objArticle->headline != '') {
         $objPage->pageTitle = strip_insert_tags($objArticle->headline);
     }
     // Overwrite the page description
     if ($objArticle->teaser != '') {
         $objPage->description = $this->prepareMetaDescription($objArticle->teaser);
     }
     // HOOK: comments extension required
     if ($objArticle->noComments || !in_array('comments', $this->Config->getActiveModules())) {
         $this->Template->allowComments = false;
         return;
     }
     $objArchive = $objArticle->getRelated('pid');
     $this->Template->allowComments = $objArchive->allowComments;
     // Adjust the comments headline level
     $intHl = min(intval(str_replace('h', '', $this->hl)), 5);
     $this->Template->hlc = 'h' . ($intHl + 1);
     $this->import('Comments');
     $arrNotifies = array();
     // Notify the system administrator
     if ($objArchive->notify != 'notify_author') {
         $arrNotifies[] = $GLOBALS['TL_ADMIN_EMAIL'];
     }
     // Notify the author
     if ($objArchive->notify != 'notify_admin') {
         if (($objAuthor = $objArticle->getRelated('author')) !== null && $objAuthor->email != '') {
             $arrNotifies[] = $objAuthor->email;
         }
     }
     $objConfig = new \stdClass();
     $objConfig->perPage = $objArchive->perPage;
     $objConfig->order = $objArchive->sortOrder;
     $objConfig->template = $this->com_template;
     $objConfig->requireLogin = $objArchive->requireLogin;
     $objConfig->disableCaptcha = $objArchive->disableCaptcha;
     $objConfig->bbcode = $objArchive->bbcode;
     $objConfig->moderate = $objArchive->moderate;
     $this->Comments->addCommentsToTemplate($this->Template, $objConfig, 'tl_news', $objArticle->id, $arrNotifies);
 }
 protected function compile()
 {
     $objArticle = \NewsModel::findPublishedByParentAndIdOrAlias(\Input::get('items'), $this->news_archives);
     $objAuthor = \UserModel::findById($objArticle->author);
     if ($objAuthor->addImage) {
         $objFile = \FilesModel::findByUuid($objAuthor->userSRC);
         $this->addImageToTemplate($this->Template, array('singleSRC' => $objFile->path, 'alt' => 'Screenshot of Music Academy', 'size' => $this->imgSize));
     }
     foreach ($objAuthor->row() as $k => $v) {
         $this->Template->{$k} = $v;
     }
 }
 /**
  * Generate the module
  */
 protected function compile()
 {
     /** @var \PageModel $objPage */
     global $objPage;
     $this->Template->articles = '';
     $this->Template->referer = 'javascript:history.go(-1)';
     $this->Template->back = $GLOBALS['TL_LANG']['MSC']['goBack'];
     // Get the news item
     $objArticle = \NewsModel::findPublishedByParentAndIdOrAlias(\Input::get('items'), $this->news_archives);
     if (null === $objArticle) {
         /** @var \PageError404 $objHandler */
         $objHandler = new $GLOBALS['TL_PTY']['error_404']();
         $objHandler->generate($objPage->id);
     }
     $arrArticle = $this->parseArticle($objArticle);
     $this->Template->articles = $arrArticle;
     // Overwrite the page title (see #2853 and #4955)
     if ($objArticle->headline != '') {
         $objPage->pageTitle = strip_tags(strip_insert_tags($objArticle->headline));
     }
     // Overwrite the page description
     if ($objArticle->teaser != '') {
         $objPage->description = $this->prepareMetaDescription($objArticle->teaser);
     }
     // HOOK: comments extension required
     if ($objArticle->noComments || !in_array('comments', \ModuleLoader::getActive())) {
         $this->Template->allowComments = false;
         return;
     }
     /** @var \NewsArchiveModel $objArchive */
     $objArchive = $objArticle->getRelated('pid');
     $this->Template->allowComments = $objArchive->allowComments;
     // Comments are not allowed
     if (!$objArchive->allowComments) {
         return;
     }
     // Adjust the comments headline level
     $intHl = min(intval(str_replace('h', '', $this->hl)), 5);
     $this->Template->hlc = 'h' . ($intHl + 1);
     $this->import('Comments');
     $arrNotifies = array();
     // Notify the system administrator
     if ($objArchive->notify != 'notify_author') {
         $arrNotifies[] = $GLOBALS['TL_ADMIN_EMAIL'];
     }
     // Notify the author
     if ($objArchive->notify != 'notify_admin') {
         /** @var \UserModel $objAuthor */
         if (($objAuthor = $objArticle->getRelated('author')) !== null && $objAuthor->email != '') {
             $arrNotifies[] = $objAuthor->email;
         }
     }
     $objConfig = new \stdClass();
     $objConfig->perPage = $objArchive->perPage;
     $objConfig->order = $objArchive->sortOrder;
     $objConfig->template = $this->com_template;
     $objConfig->requireLogin = $objArchive->requireLogin;
     $objConfig->disableCaptcha = $objArchive->disableCaptcha;
     $objConfig->bbcode = $objArchive->bbcode;
     $objConfig->moderate = $objArchive->moderate;
     $this->Comments->addCommentsToTemplate($this->Template, $objConfig, 'tl_news', $objArticle->id, $arrNotifies);
 }
 public static function findRelatedNewsEntity($varId, array $arrRelation, \ModuleModel $objModule = null)
 {
     if (!isset($arrRelation['table'])) {
         return null;
     }
     $strModelClass = \Model::getClassFromTable($arrRelation['table']);
     if (!class_exists($strModelClass)) {
         return null;
     }
     if ($objModule === null) {
         return \NewsModel::findByPk($varId);
     }
     return \NewsModel::findPublishedByParentAndIdOrAlias($varId, deserialize($objModule->news_archives));
 }
Пример #7
0
 protected function getContentFromArticle($id, $type = "")
 {
     $tmpContent = "";
     $thumb = "";
     $sharelink = "";
     $retArr = array();
     $time = time();
     $base = \Environment::get('base');
     $table = "";
     if ($type == 'news') {
         $table = "tl_news";
     } else {
         if ($table == 'event') {
             $table = "tl_calendar_events";
         } else {
             $table = "tl_article";
         }
     }
     $openComment = $type == 'news' ? "open" : "closed";
     $commentCount = 0;
     $result = "";
     $query = "SELECT * FROM `{$table}` WHERE `id` = '" . $id . "' ";
     $articleRes = \Database::getInstance()->query($query)->fetchAssoc();
     if ($type == "news") {
         switch ($articleRes['source']) {
             case 'external':
                 $sharelink = $articleRes['url'];
                 break;
             case 'article':
                 $sharelink = $base . \Controller::replaceInsertTags("{{article_url::" . $articleRes['articleId'] . "}}");
                 break;
             case 'internal':
                 $sharelink = $base . \Controller::replaceInsertTags("{{link_url::" . $articleRes['jumpTo'] . "}}");
                 break;
             default:
                 $sharelink = $base . \Controller::replaceInsertTags("{{news_url::" . $articleRes['id'] . "}}");
                 break;
         }
         $newsModel = \NewsModel::findPublishedByParentAndIdOrAlias($id, array(0 => $articleRes['pid']));
         $result = $this->parseNews($newsModel);
     } else {
         if ($type == "event") {
             $objEvent = \CalendarEventsModel::findPublishedByParentAndIdOrAlias($id, array($this->settings['calendar']));
             $objTemplate = new \FrontendTemplate("event_full");
             $objTemplate->setData($objEvent->row());
             $objTemplate->date = $date;
             $objTemplate->start = $intStartTime;
             $objTemplate->end = $intEndTime;
             $objTemplate->class = $objEvent->cssClass != '' ? ' ' . $objEvent->cssClass : '';
             $objTemplate->recurring = $recurring;
             $objTemplate->until = $until;
             $objTemplate->locationLabel = $GLOBALS['TL_LANG']['MSC']['location'];
             $objTemplate->details = '';
             $objElement = \ContentModel::findPublishedByPidAndTable($objEvent->id, 'tl_calendar_events');
             if ($objElement !== null) {
                 while ($objElement->next()) {
                     $objTemplate->details .= $this->getContentElement($objElement->id);
                 }
             }
             $objTemplate->addImage = false;
             if ($objEvent->addImage && $objEvent->singleSRC != '') {
                 $objModel = \FilesModel::findByUuid($objEvent->singleSRC);
                 if (is_file(TL_ROOT . '/' . $objModel->path)) {
                     $arrEvent = $objEvent->row();
                     $arrEvent['singleSRC'] = $objModel->path;
                     $this->addImageToTemplate($objTemplate, $arrEvent);
                 }
             }
             $objTemplate->enclosure = array();
             if ($objEvent->addEnclosure) {
                 $this->addEnclosuresToTemplate($objTemplate, $objEvent->row());
             }
             $result = $objTemplate->parse();
         } else {
             $result = \ArticleModel::findByIdOrAliasAndPid($id, $articleRes['pid']);
         }
     }
     $sharelink = $sharelink == "" ? $base . \Controller::replaceInsertTags("{{link_url::" . $articleRes['pid'] . "}}") : $sharelink;
     if ($result != "") {
         if ($type != "news" && $type != "event") {
             $pageTitleRes = \Controller::getPageDetails($articleRes['pid']);
             $objArticle = new \ModuleArticle($result);
             $tmpContent = $objArticle->generate(true);
         } else {
             $tmpContent = $result;
         }
         $tmpContent = \Controller::replaceInsertTags($tmpContent);
         $tmpContent = str_replace('src="files/', 'src="' . $base . 'files/', $tmpContent);
         $tmpContent = str_replace('src="assets/', 'src="' . $base . 'assets/', $tmpContent);
         $tmpContent = str_replace('href="index.php/', 'href="' . $base . 'index.php/', $tmpContent);
         if ($pageTitleRes->thumb) {
             $thumb = $this->getFilePath($pageTitleRes->thumb);
         }
         if ($openComment == "open") {
             $commentCount = \CommentsModel::countPublishedBySourceAndParent("tl_news", $id);
         }
         $retArr['tstamp'] = time();
         $retArr['img']['src'] = "";
         $retArr['img']['thumb'] = $thumb;
         $retArr['pid'] = $id;
         $retArr['title'] = $type != "news" ? $pageTitleRes->title : $articleRes['headline'];
         $retArr['commentStatus'] = $openComment;
         $retArr['commentCount'] = $commentCount;
         $retArr['sharelink'] = $sharelink;
         $tmpContent = str_replace(']]>', ']]&gt;', $tmpContent);
         $tmpContent = str_replace("\r\n", '\\n', $tmpContent);
         $retArr['content'] = preg_replace('/[\\x00-\\x1F\\x80-\\x9F]/u', '', $tmpContent);
     } else {
         $retArr = false;
     }
     return $retArr;
 }
 /**
  * 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);
 }