255 lines
6.9 KiB
PHP
255 lines
6.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* This file is part of the TYPO3 CMS project.
|
|
*
|
|
* It is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU General Public License, either version 2
|
|
* of the License, or any later version.
|
|
*
|
|
* For the full copyright and license information, please read the
|
|
* LICENSE.txt file that was distributed with this source code.
|
|
*
|
|
* The TYPO3 project - inspiring people to share!
|
|
*/
|
|
|
|
namespace TYPO3\CMS\Frontend\Page;
|
|
|
|
use TYPO3\CMS\Core\Page\PageLayout;
|
|
|
|
/**
|
|
* This DTO carries various Frontend rendering related page information. It is
|
|
* set up by a Frontend middleware and attached to as 'frontend.page.information'
|
|
* Request attribute.
|
|
*/
|
|
final class PageInformation
|
|
{
|
|
private int $id;
|
|
private array $pageRecord;
|
|
private string $mountPoint = '';
|
|
private int $contentFromPid;
|
|
|
|
/**
|
|
* Gets set when we are processing a page of type shortcut in the early stages
|
|
* of the request, used later in a middleware to resolve the shortcut and redirect again.
|
|
*/
|
|
private ?array $originalShortcutPageRecord = null;
|
|
|
|
/**
|
|
* Gets set when we are processing a page of type mountpoint with enabled overlay in getPageAndRootline()
|
|
* Used later in a middleware to determine the final target URL where the user should be redirected to.
|
|
*/
|
|
private ?array $originalMountPointPageRecord = null;
|
|
|
|
/**
|
|
* Rootline of page records all the way to the root.
|
|
*
|
|
* Both language and version overlays are applied to these page records:
|
|
* All "data" fields are set to language / version overlay values, *except* uid and
|
|
* pid, which are the default-language and live-version ids.
|
|
*
|
|
* First array row with the highest key is the deepest page (the requested page),
|
|
* then parent pages with descending keys until (but not including) the
|
|
* project root pseudo page 0.
|
|
*
|
|
* When page uid 5 is called in this example:
|
|
* [0] Project name
|
|
* |- [2] An organizational page, probably with is_siteroot=1 and a site config
|
|
* |- [3] Site root with a sys_template having "root" flag set
|
|
* |- [5] Here you are
|
|
*
|
|
* This $absoluteRootLine is:
|
|
* [3] => [uid = 5, pid = 3, title = Here you are, ...]
|
|
* [2] => [uid = 3, pid = 2, title = Site root with a sys_template having "root" flag set, ...]
|
|
* [1] => [uid = 2, pid = 0, title = An organizational page, probably with is_siteroot=1 and a site config, ...]
|
|
*
|
|
* Read-only! Extensions may read but never write this property!
|
|
*
|
|
* @var array<int, array<string, mixed>>
|
|
*/
|
|
private array $rootLine;
|
|
|
|
/**
|
|
* This is the "local" rootline of a deep page that stops at the first parent
|
|
* sys_template record that has "root" flag set, in natural parent-child order.
|
|
*
|
|
* Both language and version overlays are applied to these page records:
|
|
* All "data" fields are set to language / version overlay values, *except* uid and
|
|
* pid, which are the default-language and live-version ids.
|
|
*
|
|
* When page uid 5 is called in this example:
|
|
* [0] Project name
|
|
* |- [2] An organizational page, probably with is_siteroot=1 and a site config
|
|
* |- [3] Site root with a sys_template having "root" flag set
|
|
* |- [5] Here you are
|
|
*
|
|
* This rootLine is:
|
|
* [0] => [uid = 3, pid = 2, title = Site root with a sys_template having "root" flag set, ...]
|
|
* [1] => [uid = 5, pid = 3, title = Here you are, ...]
|
|
*
|
|
* @var array<int, array<string, mixed>>
|
|
*/
|
|
private array $localRootLine;
|
|
|
|
/**
|
|
* List of all sys_template rows attached to rootLine pages.
|
|
*
|
|
* @var array<int, array<string, mixed>>
|
|
*/
|
|
private array $sysTemplateRows;
|
|
|
|
/**
|
|
* The resolved PageLayout of the page (selected backend layout)
|
|
*
|
|
* @var PageLayout|null
|
|
*/
|
|
private ?PageLayout $pageLayout = null;
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setId(int $id): void
|
|
{
|
|
$this->id = $id;
|
|
}
|
|
|
|
public function getId(): int
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setPageRecord(array $pageRecord): void
|
|
{
|
|
$this->pageRecord = $pageRecord;
|
|
}
|
|
|
|
public function getPageRecord(): array
|
|
{
|
|
return $this->pageRecord;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setMountPoint(string $mountPoint): void
|
|
{
|
|
$this->mountPoint = $mountPoint;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be read by core
|
|
*/
|
|
public function getMountPoint(): string
|
|
{
|
|
return $this->mountPoint;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setRootLine(array $rootLine): void
|
|
{
|
|
$this->rootLine = $rootLine;
|
|
}
|
|
|
|
public function getRootLine(): array
|
|
{
|
|
return $this->rootLine;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setLocalRootLine(array $localRootLine): void
|
|
{
|
|
$this->localRootLine = $localRootLine;
|
|
}
|
|
|
|
public function getLocalRootLine(): array
|
|
{
|
|
return $this->localRootLine;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setSysTemplateRows(array $sysTemplateRows): void
|
|
{
|
|
$this->sysTemplateRows = $sysTemplateRows;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be read by core
|
|
*/
|
|
public function getSysTemplateRows(): array
|
|
{
|
|
return $this->sysTemplateRows;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setOriginalShortcutPageRecord(array $originalShortcutPageRecord): void
|
|
{
|
|
$this->originalShortcutPageRecord = $originalShortcutPageRecord;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be read by core
|
|
*/
|
|
public function getOriginalShortcutPageRecord(): ?array
|
|
{
|
|
return $this->originalShortcutPageRecord;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setOriginalMountPointPageRecord(array $originalMountPointPageRecord): void
|
|
{
|
|
$this->originalMountPointPageRecord = $originalMountPointPageRecord;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be read by core
|
|
*/
|
|
public function getOriginalMountPointPageRecord(): ?array
|
|
{
|
|
return $this->originalMountPointPageRecord;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setContentFromPid(int $contentFromPid): void
|
|
{
|
|
$this->contentFromPid = $contentFromPid;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be read by core
|
|
*/
|
|
public function getContentFromPid(): int
|
|
{
|
|
return $this->contentFromPid;
|
|
}
|
|
|
|
/**
|
|
* @internal Only to be set by core
|
|
*/
|
|
public function setPageLayout(PageLayout $pageLayout): void
|
|
{
|
|
$this->pageLayout = $pageLayout;
|
|
}
|
|
|
|
public function getPageLayout(): ?PageLayout
|
|
{
|
|
return $this->pageLayout;
|
|
}
|
|
}
|