Esempio n. 1
0
 /**
  * Queries the database for the page record and returns it.
  *
  * @param int $uid Page id
  * @throws \RuntimeException
  * @return array
  */
 protected function getRecordArray($uid)
 {
     $currentCacheIdentifier = $this->getCacheIdentifier($uid);
     if (!isset(self::$pageRecordCache[$currentCacheIdentifier])) {
         $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
         $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
         $row = $queryBuilder->select(...self::$rootlineFields)->from('pages')->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)), $queryBuilder->expr()->neq('doktype', $queryBuilder->createNamedParameter(PageRepository::DOKTYPE_RECYCLER, \PDO::PARAM_INT)))->execute()->fetch();
         if (empty($row)) {
             throw new \RuntimeException('Could not fetch page data for uid ' . $uid . '.', 1343589451);
         }
         $this->pageContext->versionOL('pages', $row, false, true);
         $this->pageContext->fixVersioningPid('pages', $row);
         if (is_array($row)) {
             if ($this->languageUid > 0) {
                 $row = $this->pageContext->getPageOverlay($row, $this->languageUid);
             }
             $row = $this->enrichWithRelationFields(isset($row['_PAGES_OVERLAY_UID']) ? $row['_PAGES_OVERLAY_UID'] : $uid, $row);
             self::$pageRecordCache[$currentCacheIdentifier] = $row;
         }
     }
     if (!is_array(self::$pageRecordCache[$currentCacheIdentifier])) {
         throw new \RuntimeException('Broken rootline. Could not resolve page with uid ' . $uid . '.', 1343464101);
     }
     return self::$pageRecordCache[$currentCacheIdentifier];
 }
 /**
  * Queries the database for the page record and returns it.
  *
  * @param integer $uid Page id
  * @throws \RuntimeException
  * @return array
  */
 protected function getRecordArray($uid)
 {
     if (!isset(self::$pageRecordCache[$this->getCacheIdentifier($uid)])) {
         if (!is_array($GLOBALS['TCA']['pages']['columns'])) {
             if (isset($GLOBALS['TSFE'])) {
                 $GLOBALS['TSFE']->includeTCA($GLOBALS['TSFE']->TCAloaded);
             }
             \TYPO3\CMS\Core\Utility\GeneralUtility::loadTCA('pages');
         }
         $row = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow(implode(',', self::$rootlineFields), 'pages', 'uid = ' . intval($uid) . ' AND pages.deleted = 0 AND pages.doktype <> ' . \TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_RECYCLER);
         if (empty($row)) {
             throw new \RuntimeException('Could not fetch page data for uid ' . $uid . '.', 1343589451);
         }
         $this->pageContext->versionOL('pages', $row, FALSE, TRUE);
         $this->pageContext->fixVersioningPid('pages', $row);
         if (is_array($row)) {
             $this->pageContext->getPageOverlay($row, $this->languageUid);
             $row = $this->enrichWithRelationFields($uid, $row);
             self::$pageRecordCache[$this->getCacheIdentifier($uid)] = $row;
         }
     }
     if (!is_array(self::$pageRecordCache[$this->getCacheIdentifier($uid)])) {
         throw new \RuntimeException('Broken rootline. Could not resolve page with uid ' . $uid . '.', 1343464101);
     }
     return self::$pageRecordCache[$this->getCacheIdentifier($uid)];
 }
Esempio n. 3
0
 /**
  * Queries the database for the page record and returns it.
  *
  * @param int $uid Page id
  * @throws \RuntimeException
  * @return array
  */
 protected function getRecordArray($uid)
 {
     $currentCacheIdentifier = $this->getCacheIdentifier($uid);
     if (!isset(self::$pageRecordCache[$currentCacheIdentifier])) {
         $row = $this->databaseConnection->exec_SELECTgetSingleRow(implode(',', self::$rootlineFields), 'pages', 'uid = ' . (int) $uid . ' AND pages.deleted = 0 AND pages.doktype <> ' . PageRepository::DOKTYPE_RECYCLER);
         if (empty($row)) {
             throw new \RuntimeException('Could not fetch page data for uid ' . $uid . '.', 1343589451);
         }
         $this->pageContext->versionOL('pages', $row, false, true);
         $this->pageContext->fixVersioningPid('pages', $row);
         if (is_array($row)) {
             if ($this->languageUid > 0) {
                 $row = $this->pageContext->getPageOverlay($row, $this->languageUid);
             }
             $row = $this->enrichWithRelationFields(isset($row['_PAGES_OVERLAY_UID']) ? $row['_PAGES_OVERLAY_UID'] : $uid, $row);
             self::$pageRecordCache[$currentCacheIdentifier] = $row;
         }
     }
     if (!is_array(self::$pageRecordCache[$currentCacheIdentifier])) {
         throw new \RuntimeException('Broken rootline. Could not resolve page with uid ' . $uid . '.', 1343464101);
     }
     return self::$pageRecordCache[$currentCacheIdentifier];
 }
 /**
  * Generates a list of content objects with sectionIndex enabled
  * available on a specific page
  *
  * Used for menus with sectionIndex enabled
  *
  * @param string $altSortField Alternative sorting field
  * @param integer $pid The page id to search for sections
  * @throws UnexpectedValueException if the query to fetch the content elements unexpectedly fails
  * @return array
  */
 protected function sectionIndex($altSortField, $pid = NULL)
 {
     $pid = (int) ($pid ?: $this->id);
     $basePageRow = $this->sys_page->getPage($pid);
     if (!is_array($basePageRow)) {
         return array();
     }
     $configuration = $this->mconf['sectionIndex.'];
     $useColPos = 0;
     if (trim($configuration['useColPos']) !== '' || is_array($configuration['useColPos.'])) {
         $useColPos = $GLOBALS['TSFE']->cObj->stdWrap($configuration['useColPos'], $configuration['useColPos.']);
         $useColPos = (int) $useColPos;
     }
     $selectSetup = array('pidInList' => $pid, 'orderBy' => $altSortField, 'languageField' => 'sys_language_uid', 'where' => $useColPos >= 0 ? 'colPos=' . $useColPos : '');
     if ($basePageRow['content_from_pid']) {
         // If the page is configured to show content from a referenced page the sectionIndex contains only contents of
         // the referenced page
         $selectSetup['pidInList'] = $basePageRow['content_from_pid'];
     }
     $resource = $this->parent_cObj->exec_getQuery('tt_content', $selectSetup);
     if (!$resource) {
         $message = 'SectionIndex: Query to fetch the content elements failed!';
         throw new \UnexpectedValueException($message, 1337334849);
     }
     $result = array();
     while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($resource)) {
         $this->sys_page->versionOL('tt_content', $row);
         if ($GLOBALS['TSFE']->sys_language_contentOL && $basePageRow['_PAGES_OVERLAY_LANGUAGE']) {
             $row = $this->sys_page->getRecordOverlay('tt_content', $row, $basePageRow['_PAGES_OVERLAY_LANGUAGE'], $GLOBALS['TSFE']->sys_language_contentOL);
         }
         if ($this->mconf['sectionIndex.']['type'] !== 'all') {
             $doIncludeInSectionIndex = $row['sectionIndex'] >= 1;
             $doHeaderCheck = $this->mconf['sectionIndex.']['type'] === 'header';
             $isValidHeader = ((int) $row['header_layout'] !== 100 || !empty($this->mconf['sectionIndex.']['includeHiddenHeaders'])) && trim($row['header']) !== '';
             if (!$doIncludeInSectionIndex || $doHeaderCheck && !$isValidHeader) {
                 continue;
             }
         }
         if (is_array($row)) {
             $uid = $row['uid'];
             $result[$uid] = $basePageRow;
             $result[$uid]['title'] = $row['header'];
             $result[$uid]['nav_title'] = $row['header'];
             $result[$uid]['subtitle'] = $row['subheader'];
             $result[$uid]['starttime'] = $row['starttime'];
             $result[$uid]['endtime'] = $row['endtime'];
             $result[$uid]['fe_group'] = $row['fe_group'];
             $result[$uid]['media'] = $row['media'];
             $result[$uid]['header_layout'] = $row['header_layout'];
             $result[$uid]['bodytext'] = $row['bodytext'];
             $result[$uid]['image'] = $row['image'];
             $result[$uid]['sectionIndex_uid'] = $uid;
         }
     }
     $GLOBALS['TYPO3_DB']->sql_free_result($resource);
     return $result;
 }
Esempio n. 5
0
 /**
  * Generates a list of content objects with sectionIndex enabled
  * available on a specific page
  *
  * Used for menus with sectionIndex enabled
  *
  * @param string $altSortField Alternative sorting field
  * @param int $pid The page id to search for sections
  * @throws \UnexpectedValueException if the query to fetch the content elements unexpectedly fails
  * @return array
  */
 protected function sectionIndex($altSortField, $pid = null)
 {
     $pid = (int) ($pid ?: $this->id);
     $basePageRow = $this->sys_page->getPage($pid);
     if (!is_array($basePageRow)) {
         return [];
     }
     $tsfe = $this->getTypoScriptFrontendController();
     $configuration = $this->mconf['sectionIndex.'];
     $useColPos = 0;
     if (trim($configuration['useColPos']) !== '' || is_array($configuration['useColPos.'])) {
         $useColPos = $tsfe->cObj->stdWrap($configuration['useColPos'], $configuration['useColPos.']);
         $useColPos = (int) $useColPos;
     }
     $selectSetup = ['pidInList' => $pid, 'orderBy' => $altSortField, 'languageField' => 'sys_language_uid', 'where' => $useColPos >= 0 ? 'colPos=' . $useColPos : ''];
     if ($basePageRow['content_from_pid']) {
         // If the page is configured to show content from a referenced page the sectionIndex contains only contents of
         // the referenced page
         $selectSetup['pidInList'] = $basePageRow['content_from_pid'];
     }
     $statement = $this->parent_cObj->exec_getQuery('tt_content', $selectSetup);
     if (!$statement) {
         $message = 'SectionIndex: Query to fetch the content elements failed!';
         throw new \UnexpectedValueException($message, 1337334849);
     }
     $result = [];
     while ($row = $statement->fetch()) {
         $this->sys_page->versionOL('tt_content', $row);
         if ($tsfe->sys_language_contentOL && $basePageRow['_PAGES_OVERLAY_LANGUAGE']) {
             $row = $this->sys_page->getRecordOverlay('tt_content', $row, $basePageRow['_PAGES_OVERLAY_LANGUAGE'], $tsfe->sys_language_contentOL);
         }
         if ($this->mconf['sectionIndex.']['type'] !== 'all') {
             $doIncludeInSectionIndex = $row['sectionIndex'] >= 1;
             $doHeaderCheck = $this->mconf['sectionIndex.']['type'] === 'header';
             $isValidHeader = ((int) $row['header_layout'] !== 100 || !empty($this->mconf['sectionIndex.']['includeHiddenHeaders'])) && trim($row['header']) !== '';
             if (!$doIncludeInSectionIndex || $doHeaderCheck && !$isValidHeader) {
                 continue;
             }
         }
         if (is_array($row)) {
             $uid = $row['uid'];
             $result[$uid] = $basePageRow;
             $result[$uid]['title'] = $row['header'];
             $result[$uid]['nav_title'] = $row['header'];
             // Prevent false exclusion in filterMenuPages, thus: Always show tt_content records
             $result[$uid]['nav_hide'] = 0;
             $result[$uid]['subtitle'] = $row['subheader'];
             $result[$uid]['starttime'] = $row['starttime'];
             $result[$uid]['endtime'] = $row['endtime'];
             $result[$uid]['fe_group'] = $row['fe_group'];
             $result[$uid]['media'] = $row['media'];
             $result[$uid]['header_layout'] = $row['header_layout'];
             $result[$uid]['bodytext'] = $row['bodytext'];
             $result[$uid]['image'] = $row['image'];
             $result[$uid]['sectionIndex_uid'] = $uid;
         }
     }
     return $result;
 }