Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 23 additions & 13 deletions Classes/PageLayoutView/ShortcutPreviewRenderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<non-empty-string, string|int|float|bool|null> $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;
}

/**
Expand All @@ -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 .= '<p class="pt-2 small"><b><a href="' . $shortcutItem->getEditUrl() . '">' . $this->getLanguageService()->sL('LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:edit') . '</a></b></p>';
$preview .= '<div class="mb-2 p-2 border position-relative reference">' . $shortcutItem->getPreview() . '<div class="reference-overlay bg-primary-subtle opacity-25 position-absolute top-0 start-0 w-100 h-100 pe-none"></div></div>';
}
Expand All @@ -104,37 +116,35 @@ 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);
if (str_contains($shortcutItem, 'pages_')) {
$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;
}
Expand Down
59 changes: 29 additions & 30 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": "*"
Expand Down