/** * Add an event to the array of active events * * @param \CalendarEventsModel $objEvent * @param integer $intStart * @param integer $intEnd * @param string $strUrl * @param string $strBase */ protected function addEvent($objEvent, $intStart, $intEnd, $strUrl, $strBase) { if ($intEnd < time()) { return; } /** @var \PageModel $objPage */ global $objPage; // Called in the back end (see #4026) if ($objPage === null) { $objPage = new \stdClass(); $objPage->dateFormat = \Config::get('dateFormat'); $objPage->datimFormat = \Config::get('datimFormat'); $objPage->timeFormat = \Config::get('timeFormat'); } $intKey = date('Ymd', $intStart); $span = self::calculateSpan($intStart, $intEnd); $format = $objEvent->addTime ? 'datimFormat' : 'dateFormat'; // Add date if ($span > 0) { $title = \Date::parse($objPage->{$format}, $intStart) . ' – ' . \Date::parse($objPage->{$format}, $intEnd); } else { $title = \Date::parse($objPage->dateFormat, $intStart) . ($objEvent->addTime ? ' (' . \Date::parse($objPage->timeFormat, $intStart) . ($intStart < $intEnd ? ' – ' . \Date::parse($objPage->timeFormat, $intEnd) : '') . ')' : ''); } // Add title and link $title .= ' ' . $objEvent->title; $link = ''; switch ($objEvent->source) { case 'external': $link = $objEvent->url; break; case 'internal': if (($objTarget = $objEvent->getRelated('jumpTo')) !== null) { $link = $strBase . $this->generateFrontendUrl($objTarget->row()); } break; case 'article': if (($objArticle = \ArticleModel::findByPk($objEvent->articleId, array('eager' => true))) !== null && ($objPid = $objArticle->getRelated('pid')) !== null) { $link = $strBase . ampersand($this->generateFrontendUrl($objPid->row(), '/articles/' . (!\Config::get('disableAlias') && $objArticle->alias != '' ? $objArticle->alias : $objArticle->id))); } break; } // Link to the default page if ($link == '') { $link = $strBase . sprintf($strUrl, $objEvent->alias != '' && !\Config::get('disableAlias') ? $objEvent->alias : $objEvent->id); } // Store the whole row (see #5085) $arrEvent = $objEvent->row(); // Override link and title $arrEvent['link'] = $link; $arrEvent['title'] = $title; // Clean the RTE output if ($objPage->outputFormat == 'xhtml') { $arrEvent['teaser'] = \StringUtil::toXhtml($objEvent->teaser); } else { $arrEvent['teaser'] = \StringUtil::toHtml5($objEvent->teaser); } // Reset the enclosures (see #5685) $arrEvent['enclosure'] = array(); // Add the article image as enclosure if ($objEvent->addImage) { $objFile = \FilesModel::findByUuid($objEvent->singleSRC); if ($objFile !== null) { $arrEvent['enclosure'][] = $objFile->path; } } // Enclosures if ($objEvent->addEnclosure) { $arrEnclosure = deserialize($objEvent->enclosure, true); if (is_array($arrEnclosure)) { $objFile = \FilesModel::findMultipleByUuids($arrEnclosure); if ($objFile !== null) { while ($objFile->next()) { $arrEvent['enclosure'][] = $objFile->path; } } } } $this->arrEvents[$intKey][$intStart][] = $arrEvent; }
/** * Generate a URL and return it as string * * @param \CalendarEventsModel $objEvent * @param string $strUrl * * @return string */ protected function generateEventUrl($objEvent, $strUrl) { switch ($objEvent->source) { // Link to an external page case 'external': if (substr($objEvent->url, 0, 7) == 'mailto:') { return \String::encodeEmail($objEvent->url); } else { return ampersand($objEvent->url); } break; // Link to an internal page // Link to an internal page case 'internal': if (($objTarget = $objEvent->getRelated('jumpTo')) !== null) { return ampersand($this->generateFrontendUrl($objTarget->row())); } break; // Link to an article // Link to an article case 'article': if (($objArticle = \ArticleModel::findByPk($objEvent->articleId, array('eager' => true))) !== null && ($objPid = $objArticle->getRelated('pid')) !== null) { return ampersand($this->generateFrontendUrl($objPid->row(), '/articles/' . (!\Config::get('disableAlias') && $objArticle->alias != '' ? $objArticle->alias : $objArticle->id))); } break; } // Link to the default page return ampersand(sprintf($strUrl, !\Config::get('disableAlias') && $objEvent->alias != '' ? $objEvent->alias : $objEvent->id)); }
/** * Generate a URL and return it as string * * @param CalendarEventsModel $objEvent * * @return string */ public static function generateEventUrl($objEvent) { $strCacheKey = 'id_' . $objEvent->id; // Load the URL from cache if (isset(self::$arrUrlCache[$strCacheKey])) { return self::$arrUrlCache[$strCacheKey]; } // Initialize the cache self::$arrUrlCache[$strCacheKey] = null; switch ($objEvent->source) { // Link to an external page case 'external': if (substr($objEvent->url, 0, 7) == 'mailto:') { self::$arrUrlCache[$strCacheKey] = \StringUtil::encodeEmail($objEvent->url); } else { self::$arrUrlCache[$strCacheKey] = ampersand($objEvent->url); } break; // Link to an internal page // Link to an internal page case 'internal': if (($objTarget = $objEvent->getRelated('jumpTo')) !== null) { self::$arrUrlCache[$strCacheKey] = ampersand(\Controller::generateFrontendUrl($objTarget->row())); } break; // Link to an article // Link to an article case 'article': if (($objArticle = \ArticleModel::findByPk($objEvent->articleId, array('eager' => true))) !== null && ($objPid = $objArticle->getRelated('pid')) !== null) { self::$arrUrlCache[$strCacheKey] = ampersand(\Controller::generateFrontendUrl($objPid->row(), '/articles/' . ($objArticle->alias ?: $objArticle->id))); } break; } // Link to the default page if (self::$arrUrlCache[$strCacheKey] === null) { $objPage = \PageModel::findByPk($objEvent->getRelated('pid')->jumpTo); if ($objPage === null) { self::$arrUrlCache[$strCacheKey] = ampersand(\Environment::get('request'), true); } else { self::$arrUrlCache[$strCacheKey] = ampersand(\Controller::generateFrontendUrl($objPage->row(), (\Config::get('useAutoItem') ? '/' : '/events/') . ($objEvent->alias ?: $objEvent->id))); } } return self::$arrUrlCache[$strCacheKey]; }
/** * Add an event to the array of active events * * @param CalendarEventsModel $objEvent * @param integer $intStart * @param integer $intEnd * @param string $strUrl * @param string $strBase */ protected function addEvent($objEvent, $intStart, $intEnd, $strUrl, $strBase = '') { if ($intEnd < time()) { return; } /** @var PageModel $objPage */ global $objPage; // Called in the back end (see #4026) if ($objPage === null) { $objPage = new \stdClass(); $objPage->dateFormat = \Config::get('dateFormat'); $objPage->datimFormat = \Config::get('datimFormat'); $objPage->timeFormat = \Config::get('timeFormat'); } $intKey = date('Ymd', $intStart); $span = self::calculateSpan($intStart, $intEnd); $format = $objEvent->addTime ? 'datimFormat' : 'dateFormat'; // Add date if ($span > 0) { $title = \Date::parse($objPage->{$format}, $intStart) . ' – ' . \Date::parse($objPage->{$format}, $intEnd); } else { $title = \Date::parse($objPage->dateFormat, $intStart) . ($objEvent->addTime ? ' (' . \Date::parse($objPage->timeFormat, $intStart) . ($intStart < $intEnd ? ' – ' . \Date::parse($objPage->timeFormat, $intEnd) : '') . ')' : ''); } // Add title and link $title .= ' ' . $objEvent->title; // Backwards compatibility (see #8329) if ($strBase != '' && !preg_match('#^https?://#', $strUrl)) { $strUrl = $strBase . $strUrl; } $link = ''; switch ($objEvent->source) { case 'external': $link = $objEvent->url; break; case 'internal': if (($objTarget = $objEvent->getRelated('jumpTo')) instanceof PageModel) { /** @var PageModel $objTarget */ $link = $objTarget->getAbsoluteUrl(); } break; case 'article': if (($objArticle = \ArticleModel::findByPk($objEvent->articleId, array('eager' => true))) !== null && ($objPid = $objArticle->getRelated('pid')) instanceof PageModel) { /** @var PageModel $objPid */ $link = ampersand($objPid->getAbsoluteUrl('/articles/' . ($objArticle->alias ?: $objArticle->id))); } break; default: $link = sprintf($strUrl, $objEvent->alias ?: $objEvent->id); break; } // Store the whole row (see #5085) $arrEvent = $objEvent->row(); // Override link and title $arrEvent['link'] = $link; $arrEvent['title'] = $title; // Clean the RTE output $arrEvent['teaser'] = \StringUtil::toHtml5($objEvent->teaser); // Reset the enclosures (see #5685) $arrEvent['enclosure'] = array(); // Add the article image as enclosure if ($objEvent->addImage) { $objFile = \FilesModel::findByUuid($objEvent->singleSRC); if ($objFile !== null) { $arrEvent['enclosure'][] = $objFile->path; } } // Enclosures if ($objEvent->addEnclosure) { $arrEnclosure = \StringUtil::deserialize($objEvent->enclosure, true); if (is_array($arrEnclosure)) { $objFile = \FilesModel::findMultipleByUuids($arrEnclosure); if ($objFile !== null) { while ($objFile->next()) { $arrEvent['enclosure'][] = $objFile->path; } } } } $this->arrEvents[$intKey][$intStart][] = $arrEvent; }