diff --git a/Classes/PageLayoutView/ShortcutPreviewRenderer.php b/Classes/PageLayoutView/ShortcutPreviewRenderer.php index b890f10e..0b6e6dc3 100644 --- a/Classes/PageLayoutView/ShortcutPreviewRenderer.php +++ b/Classes/PageLayoutView/ShortcutPreviewRenderer.php @@ -37,6 +37,7 @@ use TYPO3\CMS\Core\Database\Query\Restriction\EndTimeRestriction; use TYPO3\CMS\Core\Database\Query\Restriction\HiddenRestriction; use TYPO3\CMS\Core\Database\Query\Restriction\StartTimeRestriction; +use TYPO3\CMS\Core\Domain\RecordFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; class ShortcutPreviewRenderer extends StandardContentPreviewRenderer implements PreviewRendererInterface @@ -47,17 +48,27 @@ class ShortcutPreviewRenderer extends StandardContentPreviewRenderer implements protected array $extensionConfiguration = []; protected Helper $helper; protected bool $showHidden = true; + protected ?RecordFactory $recordFactory = null; /** * @throws ExtensionConfigurationExtensionNotConfiguredException * @throws ExtensionConfigurationPathDoesNotExistException */ - public function __construct() + public function __construct(?RecordFactory $recordFactory = null) { /** @var array $emConf */ $emConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('paste_reference') ?? []; $this->extensionConfiguration = $emConf; $this->helper = GeneralUtility::makeInstance(Helper::class); + $this->recordFactory = $recordFactory; + } + + protected function getRecordFactory(): RecordFactory + { + if ($this->recordFactory === null) { + $this->recordFactory = GeneralUtility::makeInstance(RecordFactory::class); + } + return $this->recordFactory; } /** @@ -73,20 +84,21 @@ public function __construct() */ public function renderPageModulePreviewContent(GridColumnItem $item): string { - $record = $item->getRecord(); + $row = $item->getRow(); // Check if a Fluid-based preview template was defined for this CType // and render it via Fluid. Possible option: // mod.web_layout.tt_content.preview.media = EXT:site_mysite/Resources/Private/Templates/Preview/Media.html $infoArr = []; $this->getProcessedValue($item, 'header_position,header_layout,header_link', $infoArr); - $tsConfig = BackendUtility::getPagesTSconfig($record['pid'])['mod.']['web_layout.']['tt_content.']['preview.'] ?? []; + $tsConfig = BackendUtility::getPagesTSconfig($row['pid'])['mod.']['web_layout.']['tt_content.']['preview.'] ?? []; - if (!empty($record['records'])) { + if (!empty($row['records'])) { $shortCutRenderItems = $this->addShortcutRenderItems($item); $preview = ''; foreach ($shortCutRenderItems as $shortcutRecord) { - $shortcutItem = GeneralUtility::makeInstance(GridColumnItem::class, $item->getContext(), $item->getColumn(), $shortcutRecord); + $recordObject = $this->getRecordFactory()->createResolvedRecordFromDatabaseRow('tt_content', $shortcutRecord); + $shortcutItem = GeneralUtility::makeInstance(GridColumnItem::class, $item->getContext(), $item->getColumn(), $recordObject); $preview .= '

' . $this->getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:edit') . '

'; $preview .= '
' . $shortcutItem->getPreview() . '
'; } @@ -104,8 +116,8 @@ public function renderPageModulePreviewContent(GridColumnItem $item): string protected function addShortcutRenderItems(GridColumnItem $gridColumnItem): array { $renderItems = []; - $record = $gridColumnItem->getRecord(); - $shortcutItems = explode(',', $record['records']); + $row = $gridColumnItem->getRow(); + $shortcutItems = explode(',', $row['records']); $collectedItems = []; foreach ($shortcutItems as $shortcutItem) { $shortcutItem = trim($shortcutItem); @@ -113,28 +125,26 @@ protected function addShortcutRenderItems(GridColumnItem $gridColumnItem): array $this->collectContentDataFromPages( $shortcutItem, $collectedItems, - $record['uid'], - $record['sys_language_uid'] + (int)$row['uid'], + (int)$row['sys_language_uid'] ); } else { if (!str_contains($shortcutItem, '_') || str_contains($shortcutItem, 'tt_content_')) { $this->collectContentData( $shortcutItem, $collectedItems, - $record['uid'], - $record['sys_language_uid'] + (int)$row['uid'], + (int)$row['sys_language_uid'] ); } } } if (!empty($collectedItems)) { - $record['shortcutItems'] = []; foreach ($collectedItems as $item) { if ($item) { $renderItems[] = $item; } } - $gridColumnItem->setRecord($record); } return $renderItems; } diff --git a/composer.json b/composer.json index 6c891e8a..ef0b24fd 100644 --- a/composer.json +++ b/composer.json @@ -23,42 +23,41 @@ }, "require": { "php": "^8.2", - "typo3/cms-backend": "^13.4 || dev-main", - "typo3/cms-core": "^13.4 || dev-main" + "typo3/cms-backend": "^14.1 || dev-main", + "typo3/cms-core": "^14.1 || dev-main" }, "require-dev": { "ergebnis/composer-normalize": "^2.31", "friendsofphp/php-cs-fixer": "^3.64.0", "phpstan/phpstan": "^1.12.5", "phpstan/phpstan-phpunit": "^1.4.0", - "phpunit/phpunit": "^10.5.35", - "typo3/cms-adminpanel": "^13.4 || dev-main", - "typo3/cms-belog": "^13.4 || dev-main", - "typo3/cms-beuser": "^13.4 || dev-main", - "typo3/cms-dashboard": "^13.4 || dev-main", - "typo3/cms-extbase": "^13.4 || dev-main", - "typo3/cms-extensionmanager": "^13.4 || dev-main", - "typo3/cms-filelist": "^13.4 || dev-main", - "typo3/cms-fluid": "^13.4 || dev-main", - "typo3/cms-fluid-styled-content": "^13.4 || dev-main", - "typo3/cms-form": "^13.4 || dev-main", - "typo3/cms-frontend": "^13.4 || dev-main", - "typo3/cms-info": "^13.4 || dev-main", - "typo3/cms-install": "^13.4 || dev-main", - "typo3/cms-lowlevel": "^13.4 || dev-main", - "typo3/cms-opendocs": "^13.4 || dev-main", - "typo3/cms-recycler": "^13.4 || dev-main", - "typo3/cms-redirects": "^13.4 || dev-main", - "typo3/cms-reports": "^13.4 || dev-main", - "typo3/cms-rte-ckeditor": "^13.4 || dev-main", - "typo3/cms-scheduler": "^13.4 || dev-main", - "typo3/cms-seo": "^13.4 || dev-main", - "typo3/cms-setup": "^13.4 || dev-main", - "typo3/cms-styleguide": "^13.4", - "typo3/cms-tstemplate": "^13.4 || dev-main", - "typo3/cms-viewpage": "^13.4 || dev-main", - "typo3/cms-workspaces": "^13.4 || dev-main", - "typo3/testing-framework": "^8.2.2" + "typo3/cms-adminpanel": "^14.1 || dev-main", + "typo3/cms-belog": "^14.1 || dev-main", + "typo3/cms-beuser": "^14.1 || dev-main", + "typo3/cms-dashboard": "^14.1 || dev-main", + "typo3/cms-extbase": "^14.1 || dev-main", + "typo3/cms-extensionmanager": "^14.1 || dev-main", + "typo3/cms-filelist": "^14.1 || dev-main", + "typo3/cms-fluid": "^14.1 || dev-main", + "typo3/cms-fluid-styled-content": "^14.1 || dev-main", + "typo3/cms-form": "^14.1 || dev-main", + "typo3/cms-frontend": "^14.1 || dev-main", + "typo3/cms-info": "^14.1 || dev-main", + "typo3/cms-install": "^14.1 || dev-main", + "typo3/cms-lowlevel": "^14.1 || dev-main", + "typo3/cms-opendocs": "^14.1 || dev-main", + "typo3/cms-recycler": "^14.1 || dev-main", + "typo3/cms-redirects": "^14.1 || dev-main", + "typo3/cms-reports": "^14.1 || dev-main", + "typo3/cms-rte-ckeditor": "^14.1 || dev-main", + "typo3/cms-scheduler": "^14.1 || dev-main", + "typo3/cms-seo": "^14.1 || dev-main", + "typo3/cms-setup": "^14.1 || dev-main", + "typo3/cms-styleguide": "^14.1", + "typo3/cms-tstemplate": "^14.1 || dev-main", + "typo3/cms-viewpage": "^14.1 || dev-main", + "typo3/cms-workspaces": "^14.1 || dev-main", + "typo3/testing-framework": "^9.3.0" }, "conflict": { "gridelementsteam/gridelements": "*"