‪TYPO3CMS  ‪main
TYPO3\CMS\Core\Utility\RootlineUtility Class Reference

Public Member Functions

 __construct (int $uid, string $mountPointParameter='', ?Context $context=null)
 
 get ()
 

Public Attributes

const RUNTIME_CACHE_TAG = 'rootline-utility'
 
 $relatedUids = $relationHandler->getValueArray()
 
 $pageRecord [$column] = implode(',', $relatedUids)
 
return $pageRecord
 
array< string, function processMountedPage(array $mountedPageData, array $mountPointPageData):array { $mountPid=$mountPointPageData[ 'mount_pid'] ?? null;$uid=$mountedPageData[ 'uid'] ?? null;if((int) $mountPid !==(int) $uid) { throw new BrokenRootLineException( 'Broken rootline. Mountpoint parameter does not match the actual rootline. mount_pid(' . $mountPid . ') does not match page uid(' . $uid . ').', 1343464100);} $mountUid=$mountPointPageData[ 'uid'] ?? null;if(!empty( $mountPointPageData[ 'mount_pid_ol'])) { $mountedPageData[ '_MOUNT_OL']=true;$mountedPageData[ '_MOUNT_PAGE']=['uid'=> else
 
 $mountedPageData ['_MOUNTED_FROM'] = $this->pageUid
 
return $mountedPageData
 

Protected Member Functions

 getCacheIdentifier (int $otherUid=null)
 
array< string, getRecordArray(int $uid):array { $rootlineFields=array_merge( $this->rootlineFields, GeneralUtility::trimExplode(',', $GLOBALS[ 'TYPO3_CONF_VARS'][ 'FE'][ 'addRootLineFields'], true));$rootlineFields=array_unique( $rootlineFields);$currentCacheIdentifier=$this-> getCacheIdentifier ($uid)
 
array< string, enrichWithRelationFields(int $uid, array $pageRecord):array { if(!is_array( $GLOBALS[ 'TCA'][ 'pages'][ 'columns'] ?? false)) { throw new \LogicException('Main ext:core configuration $GLOBALS[\ 'TCA\'][\ 'pages\'][\ 'columns\'] not found.', 1712572738);} foreach( $GLOBALS[ 'TCA'][ 'pages'][ 'columns'] as $column=> $configuration) { if(array_key_exists( $column, $pageRecord) &&$this->columnHasRelationToResolve( $configuration)) { $fieldConfig=$configuration[ 'config'];$relatedUids=[];if(( $fieldConfig[ 'MM'] ?? false)||(!empty( $fieldConfig[ 'foreign_table'] ?? $fieldConfig[ 'allowed'] ?? ''))) { $relationHandler=GeneralUtility::makeInstance(RelationHandler::class);$relationalTable=$fieldConfig[ 'foreign_table'] ?? $fieldConfig[ 'allowed'];$hiddenFieldName=$GLOBALS[ 'TCA'][ $relationalTable][ 'ctrl'][ 'enablecolumns'][ 'disabled'] ?? null;if(! $this->context->getAspect( 'visibility') ->includeHiddenContent() &&$hiddenFieldName) { $fieldConfig[ 'foreign_match_fields'][ $hiddenFieldName]=0;} $relationHandler-> setWorkspaceId ($this->workspaceUid)
 
bool columnHasRelationToResolve (array $configuration)
 
 generateRootlineCache ()
 
 isMountedPage ()
 
 sanitizeMountPointParameter (string $mountPointParameter)
 
 parseMountPointParameter ()
 
 resolvePageId (int $pageId)
 
 resolvePageRecord (int $pageId)
 
 resolveMovePointerId (int $liveId)
 
 createQueryBuilder (string $tableName)
 

Protected Attributes

int $pageUid
 
string $mountPointParameter
 
array $parsedMountPointParameters = []
 
int $languageUid = 0
 
int $workspaceUid = 0
 
FrontendInterface $cache
 
FrontendInterface $runtimeCache
 
array $rootlineFields
 
PageRepository $pageRepository
 
Context $context
 
string $cacheIdentifier
 
array< string, function processMountedPage(array $mountedPageData, array $mountPointPageData):array { $mountPid=$mountPointPageData[ 'mount_pid'] ?? null;$uid=$mountedPageData[ 'uid'] ?? null;if((int) $mountPid !==(int) $uid) { throw new BrokenRootLineException( 'Broken rootline. Mountpoint parameter does not match the actual rootline. mount_pid(' . $mountPid . ') does not match page uid(' . $uid . ').', 1343464100);} $mountUid=$mountPointPageData[ 'uid'] ?? null;if(!empty( $mountPointPageData[ 'mount_pid_ol'])) { $mountedPageData[ '_MOUNT_OL']=true;$mountedPageData[ '_MOUNT_PAGE']=['uid'=> $mountUid
 

Detailed Description

A utility resolving and Caching the Rootline generation

Definition at line 39 of file RootlineUtility.php.

Constructor & Destructor Documentation

◆ __construct()

TYPO3\CMS\Core\Utility\RootlineUtility::__construct ( int  $uid,
string  $mountPointParameter = '',
?Context  $context = null 
)

Member Function Documentation

◆ columnHasRelationToResolve()

bool TYPO3\CMS\Core\Utility\RootlineUtility::columnHasRelationToResolve ( array  $configuration)
protected

Checks whether the TCA Configuration array of a column describes a relation which is not stored as CSV in the record

Parameters
array$configuration‪TCA configuration to check
Returns
‪bool TRUE, if it describes a non-CSV relation

Definition at line 270 of file RootlineUtility.php.

◆ createQueryBuilder()

TYPO3\CMS\Core\Utility\RootlineUtility::createQueryBuilder ( string  $tableName)
protected

◆ generateRootlineCache()

TYPO3\CMS\Core\Utility\RootlineUtility::generateRootlineCache ( )
protected

Actual function to generate the rootline and cache it

Exceptions
CircularRootLineException

Definition at line 290 of file RootlineUtility.php.

References TYPO3\CMS\Core\Utility\RootlineUtility\$mountPointParameter, and TYPO3\CMS\Core\Utility\RootlineUtility\isMountedPage().

Referenced by TYPO3\CMS\Core\Utility\RootlineUtility\get().

◆ get()

TYPO3\CMS\Core\Utility\RootlineUtility::get ( )

Returns the actual rootline without the tree root (uid=0), including the page with $this->pageUid

Definition at line 126 of file RootlineUtility.php.

References TYPO3\CMS\Core\Utility\RootlineUtility\generateRootlineCache(), and TYPO3\CMS\Core\Utility\RootlineUtility\getCacheIdentifier().

◆ getCacheIdentifier() [1/2]

array<string, getRecordArray(int $uid): array { $rootlineFields = array_merge($this->rootlineFields, GeneralUtility::trimExplode(',', $GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'], true)); $rootlineFields = array_unique($rootlineFields); $currentCacheIdentifier = $this-> TYPO3\CMS\Core\Utility\RootlineUtility::getCacheIdentifier (   $uid)
protected

Queries the database for the page record and returns it.

Parameters
int$uidPage id
Exceptions
PageNotFoundException
Returns
‪array<string, string|int|float|null> The array will contain the fields listed in the $rootlineFields static property.

◆ getCacheIdentifier() [2/2]

TYPO3\CMS\Core\Utility\RootlineUtility::getCacheIdentifier ( int  $otherUid = null)
protected

◆ isMountedPage()

TYPO3\CMS\Core\Utility\RootlineUtility::isMountedPage ( )
protected

Checks whether the current Page is a Mounted Page (according to the MP-URL-Parameter)

Definition at line 336 of file RootlineUtility.php.

Referenced by TYPO3\CMS\Core\Utility\RootlineUtility\generateRootlineCache().

◆ parseMountPointParameter()

TYPO3\CMS\Core\Utility\RootlineUtility::parseMountPointParameter ( )
protected

Parse the MountPoint Parameters Splits the MP-Param via "," for several nested mountpoints and afterwords registers the mountpoint configurations

Definition at line 400 of file RootlineUtility.php.

References TYPO3\CMS\Core\Utility\GeneralUtility\intExplode(), and TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode().

Referenced by TYPO3\CMS\Core\Utility\RootlineUtility\__construct().

◆ resolveMovePointerId()

TYPO3\CMS\Core\Utility\RootlineUtility::resolveMovePointerId ( int  $liveId)
protected

Fetched the UID of the versioned record if the live record has been moved in a workspace.

Definition at line 455 of file RootlineUtility.php.

References TYPO3\CMS\Core\Utility\RootlineUtility\createQueryBuilder(), and TYPO3\CMS\Core\Database\Connection\PARAM_INT.

Referenced by TYPO3\CMS\Core\Utility\RootlineUtility\resolvePageId().

◆ resolvePageId()

TYPO3\CMS\Core\Utility\RootlineUtility::resolvePageId ( int  $pageId)
protected

Fetches the UID of the page.

If the page was moved in a workspace, actually returns the UID of the moved version in the workspace.

Definition at line 415 of file RootlineUtility.php.

References TYPO3\CMS\Core\Utility\RootlineUtility\resolveMovePointerId(), and TYPO3\CMS\Core\Utility\RootlineUtility\resolvePageRecord().

Referenced by TYPO3\CMS\Core\Utility\RootlineUtility\__construct().

◆ resolvePageRecord()

TYPO3\CMS\Core\Utility\RootlineUtility::resolvePageRecord ( int  $pageId)
protected

◆ sanitizeMountPointParameter()

TYPO3\CMS\Core\Utility\RootlineUtility::sanitizeMountPointParameter ( string  $mountPointParameter)
protected

Sanitize the MountPoint Parameter Splits the MP-Param via "," and removes mountpoints that don't have the format \d+-\d+

Definition at line 379 of file RootlineUtility.php.

References TYPO3\CMS\Core\Utility\RootlineUtility\$mountPointParameter, and TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode().

Referenced by TYPO3\CMS\Core\Utility\RootlineUtility\__construct().

◆ setWorkspaceId()

array<string, enrichWithRelationFields(int $uid, array $pageRecord): array { if (!is_array($GLOBALS['TCA']['pages']['columns'] ?? false)) { throw new \LogicException( 'Main ext:core configuration $GLOBALS[\'TCA\'][\'pages\'][\'columns\'] not found.', 1712572738 ); } foreach ($GLOBALS['TCA']['pages']['columns'] as $column => $configuration) { if (array_key_exists($column, $pageRecord) && $this->columnHasRelationToResolve($configuration)) { $fieldConfig = $configuration['config']; $relatedUids = []; if (($fieldConfig['MM'] ?? false) || (!empty($fieldConfig['foreign_table'] ?? $fieldConfig['allowed'] ?? ''))) { $relationHandler = GeneralUtility::makeInstance(RelationHandler::class); $relationalTable = $fieldConfig['foreign_table'] ?? $fieldConfig['allowed']; $hiddenFieldName = $GLOBALS['TCA'][$relationalTable]['ctrl']['enablecolumns']['disabled'] ?? null; if (!$this->context->getAspect('visibility')->includeHiddenContent() && $hiddenFieldName) { $fieldConfig['foreign_match_fields'][$hiddenFieldName] = 0; } $relationHandler-> TYPO3\CMS\Core\Utility\RootlineUtility::setWorkspaceId (   $this->)
protected

Resolve relations as defined in TCA and add them to the provided $pageRecord array.

Parameters
int$uid‪page ID
array<string,string|int|float|null>‪$pageRecord Page record (possibly overlaid) to be extended with relations
Exceptions
PagePropertyRelationNotFoundException
Returns
‪array<string, string|int|float|null> $pageRecord with additional relations

Member Data Documentation

◆ $cache

FrontendInterface TYPO3\CMS\Core\Utility\RootlineUtility::$cache
protected

Definition at line 55 of file RootlineUtility.php.

◆ $cacheIdentifier

string TYPO3\CMS\Core\Utility\RootlineUtility::$cacheIdentifier
protected

Definition at line 99 of file RootlineUtility.php.

◆ $context

Context TYPO3\CMS\Core\Utility\RootlineUtility::$context
protected

Query context

Definition at line 97 of file RootlineUtility.php.

Referenced by TYPO3\CMS\Core\Utility\RootlineUtility\__construct().

◆ $languageUid

int TYPO3\CMS\Core\Utility\RootlineUtility::$languageUid = 0
protected

Definition at line 51 of file RootlineUtility.php.

◆ $mountedPageData [1/2]

TYPO3\CMS\Core\Utility\RootlineUtility::$mountedPageData[ '_MP_PARAM'] = $this->pageUid

Definition at line 369 of file RootlineUtility.php.

◆ $mountedPageData [2/2]

return TYPO3\CMS\Core\Utility\RootlineUtility::$mountedPageData

Definition at line 371 of file RootlineUtility.php.

◆ $mountPointParameter

◆ $mountUid

array<string, function processMountedPage(array $mountedPageData, array $mountPointPageData): array { $mountPid = $mountPointPageData['mount_pid'] ?? null; $uid = $mountedPageData['uid'] ?? null; if ((int)$mountPid !== (int)$uid) { throw new BrokenRootLineException('Broken rootline. Mountpoint parameter does not match the actual rootline. mount_pid (' . $mountPid . ') does not match page uid (' . $uid . ').', 1343464100); } $mountUid = $mountPointPageData['uid'] ?? null; if (!empty($mountPointPageData['mount_pid_ol'])) { $mountedPageData['_MOUNT_OL'] = true; $mountedPageData['_MOUNT_PAGE'] = [ 'uid' => TYPO3\CMS\Core\Utility\RootlineUtility::$mountUid
protected

Enhances with mount point information or replaces the node if needed

Parameters
array<string,string|int|float|null>‪$mountedPageData page record array of mounted page
array<string,string|int|float|null>‪$mountPointPageData page record array of mount point page
Exceptions
BrokenRootLineException
Returns
‪array<string, string|int|float|null>

Definition at line 361 of file RootlineUtility.php.

◆ $pageRecord [1/2]

TYPO3\CMS\Core\Utility\RootlineUtility::$pageRecord[ $column] = implode(',', $relatedUids)

Definition at line 257 of file RootlineUtility.php.

◆ $pageRecord [2/2]

return TYPO3\CMS\Core\Utility\RootlineUtility::$pageRecord

Definition at line 260 of file RootlineUtility.php.

◆ $pageRepository

PageRepository TYPO3\CMS\Core\Utility\RootlineUtility::$pageRepository
protected

Database Query Object

Definition at line 92 of file RootlineUtility.php.

◆ $pageUid

int TYPO3\CMS\Core\Utility\RootlineUtility::$pageUid
protected

Definition at line 44 of file RootlineUtility.php.

◆ $parsedMountPointParameters

array TYPO3\CMS\Core\Utility\RootlineUtility::$parsedMountPointParameters = []
protected

Definition at line 49 of file RootlineUtility.php.

◆ $relatedUids

TYPO3\CMS\Core\Utility\RootlineUtility::$relatedUids = $relationHandler->getValueArray()

Definition at line 255 of file RootlineUtility.php.

◆ $rootlineFields

array TYPO3\CMS\Core\Utility\RootlineUtility::$rootlineFields
protected
Initial value:
= [
'pid',
'uid',
't3ver_oid',
't3ver_wsid',
't3ver_state',
'title',
'nav_title',
'media',
'layout',
'hidden',
'starttime',
'endtime',
'fe_group',
'extendToSubpages',
'doktype',
'TSconfig',
'tsconfig_includes',
'is_siteroot',
'mount_pid',
'mount_pid_ol',
'backend_layout_next_level',
]

Definition at line 65 of file RootlineUtility.php.

◆ $runtimeCache

FrontendInterface TYPO3\CMS\Core\Utility\RootlineUtility::$runtimeCache
protected

Definition at line 56 of file RootlineUtility.php.

◆ $workspaceUid

int TYPO3\CMS\Core\Utility\RootlineUtility::$workspaceUid = 0
protected

Definition at line 53 of file RootlineUtility.php.

◆ else

array<string, function processMountedPage(array $mountedPageData, array $mountPointPageData): array { $mountPid = $mountPointPageData['mount_pid'] ?? null; $uid = $mountedPageData['uid'] ?? null; if ((int)$mountPid !== (int)$uid) { throw new BrokenRootLineException('Broken rootline. Mountpoint parameter does not match the actual rootline. mount_pid (' . $mountPid . ') does not match page uid (' . $uid . ').', 1343464100); } $mountUid = $mountPointPageData['uid'] ?? null; if (!empty($mountPointPageData['mount_pid_ol'])) { $mountedPageData['_MOUNT_OL'] = true; $mountedPageData['_MOUNT_PAGE'] = [ 'uid' => TYPO3\CMS\Core\Utility\RootlineUtility::else
Initial value:
{
‪$mountedPageData = $mountPointPageData

Definition at line 365 of file RootlineUtility.php.

◆ RUNTIME_CACHE_TAG

const TYPO3\CMS\Core\Utility\RootlineUtility::RUNTIME_CACHE_TAG = 'rootline-utility'
‪TYPO3\CMS\Core\Utility\RootlineUtility\$mountedPageData
‪$mountedPageData['_MOUNTED_FROM']
Definition: RootlineUtility.php:369