Skip to content

Commit

Permalink
[TASK] Use PreviewRenderer instead of PageLayoutView hooks
Browse files Browse the repository at this point in the history
As the PageLayoutView is marked as deprecated all usages must be
changed. This patch migrates the hooks from PageLayoutView into
PreviewRenderer.

Resolves: #92926
Releases: master

Change-Id: Ieed06e08c3a3896ad574a3d54d89716c8e8ed808
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/66692
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Benni Mack <benni@typo3.org>
  • Loading branch information
georgringer authored and bmack committed Dec 8, 2020
1 parent d711596 commit 795102d
Show file tree
Hide file tree
Showing 14 changed files with 270 additions and 357 deletions.
129 changes: 55 additions & 74 deletions typo3/sysext/form/Classes/Hooks/FormPagePreviewRenderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@

namespace TYPO3\CMS\Form\Hooks;

use TYPO3\CMS\Backend\View\PageLayoutView;
use TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface;
use TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer;
use TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumnItem;
use TYPO3\CMS\Core\Error\Exception;
use TYPO3\CMS\Core\Localization\LanguageService;
use TYPO3\CMS\Core\Messaging\AbstractMessage;
Expand All @@ -38,98 +38,79 @@
* Contains a preview rendering for the page module of CType="form_formframework"
* @internal
*/
class FormPagePreviewRenderer implements PageLayoutViewDrawItemHookInterface
class FormPagePreviewRenderer extends StandardContentPreviewRenderer
{
/**
* Localisation prefix
*/
const L10N_PREFIX = 'LLL:EXT:form/Resources/Private/Language/Database.xlf:';
private const L10N_PREFIX = 'LLL:EXT:form/Resources/Private/Language/Database.xlf:';

/**
* Preprocesses the preview rendering of the content element "form_formframework".
*
* @param \TYPO3\CMS\Backend\View\PageLayoutView $parentObject Calling parent object
* @param bool $drawItem Whether to draw the item using the default functionalities
* @param string $headerContent Header content
* @param string $itemContent Item content
* @param array $row Record row of tt_content
*/
public function preProcess(
PageLayoutView &$parentObject,
&$drawItem,
&$headerContent,
&$itemContent,
array &$row
) {
if ($row['CType'] === 'form_formframework') {
$contentType = $parentObject->CType_labels[$row['CType']];
$itemContent .= $parentObject->linkEditContent('<strong>' . htmlspecialchars($contentType) . '</strong>', $row) . '<br />';
public function renderPageModulePreviewContent(GridColumnItem $item): string
{
$row = $item->getRecord();
$itemContent = $this->linkEditContent('<strong>' . htmlspecialchars($item->getContext()->getContentTypeLabels()['form_formframework']) . '</strong>', $row) . '<br />';

$flexFormData = GeneralUtility::makeInstance(FlexFormService::class)
->convertFlexFormContentToArray($row['pi_flexform']);
$flexFormData = GeneralUtility::makeInstance(FlexFormService::class)
->convertFlexFormContentToArray($row['pi_flexform']);

$persistenceIdentifier = $flexFormData['settings']['persistenceIdentifier'];
if (!empty($persistenceIdentifier)) {
try {
$formPersistenceManager = GeneralUtility::makeInstance(ObjectManager::class)->get(FormPersistenceManagerInterface::class);
$persistenceIdentifier = $flexFormData['settings']['persistenceIdentifier'];
if (!empty($persistenceIdentifier)) {
try {
$formPersistenceManager = GeneralUtility::makeInstance(ObjectManager::class)->get(FormPersistenceManagerInterface::class);

try {
if (
StringUtility::endsWith($persistenceIdentifier, FormPersistenceManager::FORM_DEFINITION_FILE_EXTENSION)
|| strpos($persistenceIdentifier, 'EXT:') === 0
) {
$formDefinition = $formPersistenceManager->load($persistenceIdentifier);
$formLabel = $formDefinition['label'];
} else {
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.inaccessiblePersistenceIdentifier'),
$persistenceIdentifier
);
}
} catch (ParseErrorException $e) {
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.invalidPersistenceIdentifier'),
$persistenceIdentifier
);
} catch (PersistenceManagerException $e) {
try {
if (
StringUtility::endsWith($persistenceIdentifier, FormPersistenceManager::FORM_DEFINITION_FILE_EXTENSION)
|| strpos($persistenceIdentifier, 'EXT:') === 0
) {
$formDefinition = $formPersistenceManager->load($persistenceIdentifier);
$formLabel = $formDefinition['label'];
} else {
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.inaccessiblePersistenceIdentifier'),
$persistenceIdentifier
);
} catch (Exception $e) {
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.notExistingdPersistenceIdentifier'),
$persistenceIdentifier
);
}
} catch (NoSuchFileException $e) {
$this->addInvalidFrameworkConfigurationFlashMessage($e);
} catch (ParseErrorException $e) {
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.notExistingdPersistenceIdentifier'),
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.invalidPersistenceIdentifier'),
$persistenceIdentifier
);
} catch (ParseErrorException $e) {
$this->addInvalidFrameworkConfigurationFlashMessage($e);
} catch (PersistenceManagerException $e) {
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.invalidFrameworkConfiguration'),
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.inaccessiblePersistenceIdentifier'),
$persistenceIdentifier
);
} catch (Exception $e) {
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.notExistingdPersistenceIdentifier'),
$persistenceIdentifier
);
} catch (\Exception $e) {
// Top level catch - FAL throws top level exceptions on missing files, eg. in getFileInfoByIdentifier() of LocalDriver
$this->addInvalidFrameworkConfigurationFlashMessage($e);
$formLabel = $e->getMessage();
}
} else {
$formLabel = $this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.noPersistenceIdentifier');
} catch (NoSuchFileException $e) {
$this->addInvalidFrameworkConfigurationFlashMessage($e);
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.notExistingdPersistenceIdentifier'),
$persistenceIdentifier
);
} catch (ParseErrorException $e) {
$this->addInvalidFrameworkConfigurationFlashMessage($e);
$formLabel = sprintf(
$this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.invalidFrameworkConfiguration'),
$persistenceIdentifier
);
} catch (\Exception $e) {
// Top level catch - FAL throws top level exceptions on missing files, eg. in getFileInfoByIdentifier() of LocalDriver
$this->addInvalidFrameworkConfigurationFlashMessage($e);
$formLabel = $e->getMessage();
}
} else {
$formLabel = $this->getLanguageService()->sL(self::L10N_PREFIX . 'tt_content.preview.noPersistenceIdentifier');
}

$itemContent .= $parentObject->linkEditContent(
$parentObject->renderText($formLabel),
$row
) . '<br />';
$itemContent .= $this->linkEditContent(
htmlspecialchars($formLabel),
$row
) . '<br />';

$drawItem = false;
}
return $itemContent;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@
namespace TYPO3\CMS\Form\ViewHelpers\Be;

use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Backend\View\PageLayoutView;
use TYPO3\CMS\Backend\View\BackendLayout\BackendLayout;
use TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumn;
use TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumnItem;
use TYPO3\CMS\Backend\View\PageLayoutContext;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
Expand Down Expand Up @@ -65,8 +68,12 @@ public static function renderStatic(array $arguments, \Closure $renderChildrenCl
$contentElementUid = $arguments['contentElementUid'];
$contentRecord = BackendUtility::getRecord('tt_content', $contentElementUid);
if (!empty($contentRecord)) {
$pageLayoutView = GeneralUtility::makeInstance(PageLayoutView::class);
$content = $pageLayoutView->tt_content_drawItem($contentRecord);
$backendLayout = GeneralUtility::makeInstance(BackendLayout::class, 'dummy', 'dummy', []);
$pageRow = BackendUtility::getRecord('pages', $contentRecord['pid']);
$pageLayoutContext = GeneralUtility::makeInstance(PageLayoutContext::class, $pageRow, $backendLayout);
$gridColumn = GeneralUtility::makeInstance(GridColumn::class, $pageLayoutContext, []);
$columnItem = GeneralUtility::makeInstance(GridColumnItem::class, $pageLayoutContext, $gridColumn, $contentRecord);
return $columnItem->getPreview();
}
return $content;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes']['form_formframework'] = 'content-form';

$GLOBALS['TCA']['tt_content']['types']['form_formframework']['previewRenderer'] = \TYPO3\CMS\Form\Hooks\FormPagePreviewRenderer::class;
$GLOBALS['TCA']['tt_content']['types']['form_formframework']['showitem'] = '
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
--palette--;;general,
Expand Down
4 changes: 0 additions & 4 deletions typo3/sysext/form/ext_localconf.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['softRefParser']['formPersistenceIdentifier'] =
\TYPO3\CMS\Form\Hooks\SoftReferenceParserHook::class;

// Register for hook to show preview of tt_content element of CType="form_formframework" in page module
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem']['form_formframework'] =
\TYPO3\CMS\Form\Hooks\FormPagePreviewRenderer::class;

// Add new content element wizard entry
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(
"@import 'EXT:form/Configuration/TsConfig/Page/Mod/Wizards/NewContentElement.tsconfig'"
Expand Down

This file was deleted.

This file was deleted.

0 comments on commit 795102d

Please sign in to comment.