diff --git a/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelDataPersister.php b/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelDataPersister.php index 03eb2b32fbcced7cf4fac5caec630277e67379df..d7623566086bdd7fc3b672e064c4b0aae4b4a23e 100644 --- a/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelDataPersister.php +++ b/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelDataPersister.php @@ -45,7 +45,7 @@ class AdminPanelDataPersister implements MiddlewareInterface if ( !($response instanceof NullResponse) && $GLOBALS['TSFE'] instanceof TypoScriptFrontendController - && $GLOBALS['TSFE']->isOutputting() + && $GLOBALS['TSFE']->isOutputting(true) && StateUtility::isActivatedForUser() && StateUtility::isActivatedInTypoScript() && !StateUtility::isHiddenForUser() diff --git a/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelRenderer.php b/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelRenderer.php index d2afba1f57db2349cc89f97a4c9766b41ac2146d..dda2072129d6f485761cbfebeda39799b44137d4 100644 --- a/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelRenderer.php +++ b/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelRenderer.php @@ -47,7 +47,7 @@ class AdminPanelRenderer implements MiddlewareInterface if ( !($response instanceof NullResponse) && $GLOBALS['TSFE'] instanceof TypoScriptFrontendController - && $GLOBALS['TSFE']->isOutputting() + && $GLOBALS['TSFE']->isOutputting(true) && StateUtility::isActivatedForUser() && StateUtility::isActivatedInTypoScript() && !StateUtility::isHiddenForUser() diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst new file mode 100644 index 0000000000000000000000000000000000000000..2563279ba218f93738254efad6928b640757a1b9 --- /dev/null +++ b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst @@ -0,0 +1,66 @@ +.. include:: ../../Includes.txt + +=========================================================================== +Deprecation: #91012 - Various hooks related to TypoScriptFrontendController +=========================================================================== + +See :issue:`91012` + +Description +=========== + +The following hooks related to TypoScriptFrontendController +and frontend-rendering have been deprecated: + +* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['pageIndexing']` +* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['isOutputting']` +* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['tslib_fe-contentStrReplace']` +* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-output']` +* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_eofe']` + +The following methods have been deprecated as well, as they only +contain code relevant for executing the hooks: + +* :php:`TypoScriptFrontendController->isOutputting()` +* :php:`TypoScriptFrontendController->processContentForOutput()` + + +Impact +====== + +If third-party extensions are using the hooks, a PHP deprecation warning will be triggered when the hook is executed. + +Calling the two methods above will also trigger a deprecation warning. + + +Affected Installations +====================== + +TYPO3 installations with custom extensions using the hooks or mentioned above, which is likely common if they haven't been using +PSR-15 middlewares or other hooks instead. + + +Migration +========= + +The hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['pageIndexing']` should be replaced by the :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-cached']` hook to index pages. However, please note that `$TSFE->content` might contain UTF-8 content now, instead of content already converted to the defined character set related to `metaCharset` TypoScript property. + +Since TYPO3 v9, the emitter of HTTP responses is based on PSR-7, the hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['isOutputting']` can be removed, as +TYPO3 can be configured via PSR-15 middlewares to define whether +page content should be emitted / rendered or not. + +The hook to dynamically replace content via + :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['tslib_fe-contentStrReplace']` +is removed as it serves no purpose for TYPO3 Core anymore. If content should be dynamically modified, use a PSR-15 middleware instead. + +The hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-output']` is not needed as this can be built via a PSR-15 middleware instead, and +all content is returned via the RequestHandler of TYPO3 Frontend. + +Extensions using hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_eofe']` should be converted to PSR-15 middlewares, as this allows to modify content and headers of a PSR-7 Response object. + +The method :php:`TypoScriptFrontendController->isOutputting()` is obsolete and can be removed in third-party code. + +The same applies to :php:`TypoScriptFrontendController->processContentForOutput()` which should only be used to trigger +legacy hooks still applied in the system. + +.. index:: PHP-API, FullyScanned, ext:frontend \ No newline at end of file diff --git a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php index 407d2af48357f040f7dd6e97419d16a839ffb9df..a8588d3016e7ba64b0b944ff698dc76339912b9f 100644 --- a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php +++ b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php @@ -2860,6 +2860,9 @@ class TypoScriptFrontendController implements LoggerAwareInterface // to utf-8 so the content MUST be in metaCharset already! $this->content = $this->convOutputCharset($this->content); // Hook for indexing pages + if (!empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['pageIndexing'])) { + trigger_error('The hook $TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][pageIndexing] will be removed in TYPO3 v11.0. Use the contentPostProc-all hook and convert the content if the output charset does not match the internal format.', E_USER_DEPRECATED); + } foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['pageIndexing'] ?? [] as $className) { GeneralUtility::makeInstance($className)->hook_indexContent($this); } @@ -3169,10 +3172,18 @@ class TypoScriptFrontendController implements LoggerAwareInterface * Determines if content should be outputted. * Outputting content is done only if no URL handler is active and no hook disables the output. * + * @param bool $isCoreCall if set to "true" no deprecation warning will be triggered, because TYPO3 keeps calling this method to keep backwards-compatibility * @return bool Returns TRUE if no redirect URL is set and no hook disables the output. + * @deprecated will be removed in TYPO3 v11.0. Do not call this method anymore. */ - public function isOutputting() + public function isOutputting(bool $isCoreCall = false) { + if ($isCoreCall !== true) { + trigger_error('TypoScriptFrontendController->isOutputting will be removed in TYPO3 v11.0, do not depend on this method anymore. Definition of outputting can be configured via PSR-15 middlewares.', E_USER_DEPRECATED); + } + if (!empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['isOutputting'])) { + trigger_error('The hook $TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][isOutputting] will be removed in TYPO3 v11.0. This hook has various side-effects (as the method is called multiple times during one request) and the configuration if TYPO3 is outputting the content is handled via the Emitter / PSR-15 middlewares.', E_USER_DEPRECATED); + } // Initialize by status if there is a Redirect URL $enableOutput = true; // Call hook for possible disabling of output: @@ -3188,15 +3199,24 @@ class TypoScriptFrontendController implements LoggerAwareInterface * * This includes substituting the "username" comment. * Works on $this->content. + * + * @param bool $isCoreCall if set to "true" no deprecation warning will be triggered, because TYPO3 keeps calling this method to keep backwards-compatibility + * @deprecated this method will be removed in TYPO3 v11. Use a PSR-15 middleware for processing content. */ - public function processContentForOutput() + public function processContentForOutput(bool $isCoreCall = false) { + if ($isCoreCall !== true) { + trigger_error('TypoScriptFrontendController->processContentForOutput will be removed in TYPO3 v11.0, do not depend on this method anymore. Definition of outputting can be configured via PSR-15 middlewares.', E_USER_DEPRECATED); + } // Make substitution of eg. username/uid in content only if cache-headers for client/proxy caching is NOT sent! if (!$this->isClientCachable) { // Substitute various tokens in content. This should happen only if the content is not cached by proxies or client browsers. $search = []; $replace = []; // Hook for supplying custom search/replace data + if (!empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['tslib_fe-contentStrReplace'])) { + trigger_error('The hook $TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][tslib_fe-contentStrReplace] will be removed in TYPO3 v11.0. Use a custom PSR-15 middleware instead.', E_USER_DEPRECATED); + } foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['tslib_fe-contentStrReplace'] ?? [] as $_funcRef) { $_params = [ 'search' => &$search, @@ -3208,6 +3228,11 @@ class TypoScriptFrontendController implements LoggerAwareInterface $this->content = str_replace($search, $replace, $this->content); } } + // Hook for supplying custom search/replace data + if (!empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-output'])) { + trigger_error('The hook $TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][contentPostProc-output] will be removed in TYPO3 v11.0. Use a custom PSR-15 middleware instead.', E_USER_DEPRECATED); + } + // Hook for post-processing of page content before output: $_params = ['pObj' => &$this]; foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-output'] ?? [] as $_funcRef) { diff --git a/typo3/sysext/frontend/Classes/Hooks/FrontendHooks.php b/typo3/sysext/frontend/Classes/Hooks/FrontendHooks.php deleted file mode 100644 index 2d49ad2fda03b569cf76fdf61f142918c4695d4d..0000000000000000000000000000000000000000 --- a/typo3/sysext/frontend/Classes/Hooks/FrontendHooks.php +++ /dev/null @@ -1,76 +0,0 @@ -<?php -declare(strict_types=1); - -namespace TYPO3\CMS\Frontend\Hooks; - -/* - * 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! - */ - -use TYPO3\CMS\Core\Localization\LanguageService; -use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; - -/** - * Uses frontend hooks to show preview information - * @internal this is a concrete TYPO3 hook implementation and solely used for EXT:frontend and not part of TYPO3's Core API. - */ -class FrontendHooks -{ - /** - * Include the preview block in case we're looking at a hidden page - * in the LIVE workspace - * - * @param array $params - * @param TypoScriptFrontendController $controller - */ - public function displayPreviewInfoMessage($params, TypoScriptFrontendController $controller) - { - $isInPreviewMode = $controller->getContext()->hasAspect('frontend.preview') - && $controller->getContext()->getPropertyFromAspect('frontend.preview', 'isPreview'); - if (!$isInPreviewMode || $controller->doWorkspacePreview() || ($controller->config['config']['disablePreviewNotification'] ?? false)) { - return; - } - if ($controller->config['config']['message_preview']) { - $message = $controller->config['config']['message_preview']; - } else { - $label = $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_tsfe.xlf:preview'); - $styles = []; - $styles[] = 'position: fixed'; - $styles[] = 'top: 15px'; - $styles[] = 'right: 15px'; - $styles[] = 'padding: 8px 18px'; - $styles[] = 'background: #fff3cd'; - $styles[] = 'border: 1px solid #ffeeba'; - $styles[] = 'font-family: sans-serif'; - $styles[] = 'font-size: 14px'; - $styles[] = 'font-weight: bold'; - $styles[] = 'color: #856404'; - $styles[] = 'z-index: 20000'; - $styles[] = 'user-select: none'; - $styles[] = 'pointer-events: none'; - $styles[] = 'text-align: center'; - $styles[] = 'border-radius: 2px'; - $message = '<div id="typo3-preview-info" style="' . implode(';', $styles) . '">' . htmlspecialchars($label) . '</div>'; - } - if (!empty($message)) { - $controller->content = str_ireplace('</body>', $message . '</body>', $controller->content); - } - } - - /** - * @return LanguageService - */ - protected function getLanguageService() - { - return $GLOBALS['LANG']; - } -} diff --git a/typo3/sysext/frontend/Classes/Http/RequestHandler.php b/typo3/sysext/frontend/Classes/Http/RequestHandler.php index 92b883c88baf98149d3e98dd4cb1b4883971de77..83e50bb700bcdf4e68133511b1ff8fea57751125 100644 --- a/typo3/sysext/frontend/Classes/Http/RequestHandler.php +++ b/typo3/sysext/frontend/Classes/Http/RequestHandler.php @@ -24,6 +24,7 @@ use TYPO3\CMS\Core\Core\Environment; use TYPO3\CMS\Core\Http\NullResponse; use TYPO3\CMS\Core\Http\Response; use TYPO3\CMS\Core\Information\Typo3Information; +use TYPO3\CMS\Core\Localization\LanguageService; use TYPO3\CMS\Core\Page\AssetCollector; use TYPO3\CMS\Core\Page\PageRenderer; use TYPO3\CMS\Core\Site\Entity\SiteLanguage; @@ -152,19 +153,25 @@ class RequestHandler implements RequestHandlerInterface $response = new Response(); // Output content - $isOutputting = $controller->isOutputting(); + // The if() condition can be removed in TYPO3 v11, which means that TYPO3 will not return a NullResponse + // by default anymore, which it hasn't done without any extensions anyway already. + $isOutputting = $controller->isOutputting(true); if ($isOutputting) { $this->timeTracker->push('Print Content'); $response = $controller->applyHttpHeadersToResponse($response); - $controller->processContentForOutput(); + $controller->processContentForOutput(true); $this->timeTracker->pull(); } // Hook for "end-of-frontend" $_params = ['pObj' => &$controller]; + if (!empty($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_eofe'])) { + trigger_error('The hook $TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][hook_eofe] will be removed in TYPO3 v11.0. The same functionality can be achieved by using a PSR-15 middleware.', E_USER_DEPRECATED); + } foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_eofe'] ?? [] as $_funcRef) { GeneralUtility::callUserFunction($_funcRef, $_params, $controller); } + $this->displayPreviewInfoMessage($controller); if ($isOutputting) { $response->getBody()->write($controller->content); @@ -1057,4 +1064,52 @@ class RequestHandler implements RequestHandlerInterface $controller->additionalHeaderData[] = implode(LF, $data); } } + + /** + * Include the preview block in case we're looking at a hidden page in the LIVE workspace + * + * @param TypoScriptFrontendController $controller + * @internal this method might get moved to a PSR-15 middleware at some point + */ + protected function displayPreviewInfoMessage(TypoScriptFrontendController $controller) + { + $isInPreviewMode = $controller->getContext()->hasAspect('frontend.preview') + && $controller->getContext()->getPropertyFromAspect('frontend.preview', 'isPreview'); + if (!$isInPreviewMode || $controller->doWorkspacePreview() || ($controller->config['config']['disablePreviewNotification'] ?? false)) { + return; + } + if ($controller->config['config']['message_preview']) { + $message = $controller->config['config']['message_preview']; + } else { + $label = $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_tsfe.xlf:preview'); + $styles = []; + $styles[] = 'position: fixed'; + $styles[] = 'top: 15px'; + $styles[] = 'right: 15px'; + $styles[] = 'padding: 8px 18px'; + $styles[] = 'background: #fff3cd'; + $styles[] = 'border: 1px solid #ffeeba'; + $styles[] = 'font-family: sans-serif'; + $styles[] = 'font-size: 14px'; + $styles[] = 'font-weight: bold'; + $styles[] = 'color: #856404'; + $styles[] = 'z-index: 20000'; + $styles[] = 'user-select: none'; + $styles[] = 'pointer-events: none'; + $styles[] = 'text-align: center'; + $styles[] = 'border-radius: 2px'; + $message = '<div id="typo3-preview-info" style="' . implode(';', $styles) . '">' . htmlspecialchars($label) . '</div>'; + } + if (!empty($message)) { + $controller->content = str_ireplace('</body>', $message . '</body>', $controller->content); + } + } + + /** + * @return LanguageService + */ + protected function getLanguageService() + { + return $GLOBALS['LANG']; + } } diff --git a/typo3/sysext/frontend/Classes/Middleware/ContentLengthResponseHeader.php b/typo3/sysext/frontend/Classes/Middleware/ContentLengthResponseHeader.php index c758beac8a8aad3b6c9c7646bad279d2126f9894..a5a92ace37f0b84138337db51111e9f31b88f389 100644 --- a/typo3/sysext/frontend/Classes/Middleware/ContentLengthResponseHeader.php +++ b/typo3/sysext/frontend/Classes/Middleware/ContentLengthResponseHeader.php @@ -46,7 +46,7 @@ class ContentLengthResponseHeader implements MiddlewareInterface if ( !($response instanceof NullResponse) && $GLOBALS['TSFE'] instanceof TypoScriptFrontendController - && $GLOBALS['TSFE']->isOutputting()) { + && $GLOBALS['TSFE']->isOutputting(true)) { if ( (!isset($GLOBALS['TSFE']->config['config']['enableContentLengthHeader']) || $GLOBALS['TSFE']->config['config']['enableContentLengthHeader']) && !$GLOBALS['TSFE']->isBackendUserLoggedIn() && !$GLOBALS['TYPO3_CONF_VARS']['FE']['debug'] diff --git a/typo3/sysext/frontend/ext_localconf.php b/typo3/sysext/frontend/ext_localconf.php index 2e07efb00156a7e1f5675d5865cb99d18272761d..32d241c2f947d0080c42acaacd2a0c5bb932bb83 100644 --- a/typo3/sysext/frontend/ext_localconf.php +++ b/typo3/sysext/frontend/ext_localconf.php @@ -70,9 +70,6 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['proc $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass'][] = \TYPO3\CMS\Frontend\Hooks\TreelistCacheUpdateHooks::class; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['moveRecordClass'][] = \TYPO3\CMS\Frontend\Hooks\TreelistCacheUpdateHooks::class; -// Register hook to show preview info -$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_eofe']['preview-message'] = \TYPO3\CMS\Frontend\Hooks\FrontendHooks::class . '->displayPreviewInfoMessage'; - // Register for hooks to show preview of tt_content elements in page module $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem']['image'] = \TYPO3\CMS\Frontend\Hooks\PageLayoutView\ImagePreviewRenderer::class; diff --git a/typo3/sysext/indexed_search/Classes/Hook/TypoScriptFrontendHook.php b/typo3/sysext/indexed_search/Classes/Hook/TypoScriptFrontendHook.php index 8350b0cc9b3d64a5337643c4ec860adf3a6fe474..9d33234f66434c956950bbb6c41e2e26c7c6af8c 100644 --- a/typo3/sysext/indexed_search/Classes/Hook/TypoScriptFrontendHook.php +++ b/typo3/sysext/indexed_search/Classes/Hook/TypoScriptFrontendHook.php @@ -51,9 +51,10 @@ class TypoScriptFrontendHook /** * Trigger indexing of content, after evaluating if this page could / should be indexed. * + * @param array $parameters * @param TypoScriptFrontendController $tsfe */ - public function hook_indexContent(TypoScriptFrontendController $tsfe) + public function indexPageContent(array $parameters, TypoScriptFrontendController $tsfe) { // Determine if page should be indexed, and if so, configure and initialize indexer if (!$tsfe->config['config']['index_enable']) { @@ -75,10 +76,6 @@ class TypoScriptFrontendHook $timeTracker->setTSlogMessage('Index page? No, The "No Search" flag has been set in the page properties!'); return; } - if ($tsfe->no_cache) { - $timeTracker->setTSlogMessage('Index page? No, Ordinary Frontend indexing during rendering is disabled.'); - return; - } /** @var LanguageAspect $languageAspect */ $languageAspect = GeneralUtility::makeInstance(Context::class)->getAspect('language'); if ($languageAspect->getId() !== $languageAspect->getContentId()) { @@ -127,7 +124,7 @@ class TypoScriptFrontendHook $configuration['rootline_uids'][$rlkey] = $rldat['uid']; } // Content of page - $configuration['content'] = $tsfe->content; + $configuration['content'] = $this->convOutputCharset($tsfe->content, $tsfe->metaCharset); // Content string (HTML of TYPO3 page) $configuration['indexedDocTitle'] = $this->convOutputCharset($tsfe->indexedDocTitle, $tsfe->metaCharset); // Alternative title for indexing diff --git a/typo3/sysext/indexed_search/ext_localconf.php b/typo3/sysext/indexed_search/ext_localconf.php index ccbd257d9e061f95b77f9f259956c99081a6f296..2fc3d68010955f723ce391c22bca74b34a78b5ae 100644 --- a/typo3/sysext/indexed_search/ext_localconf.php +++ b/typo3/sysext/indexed_search/ext_localconf.php @@ -10,7 +10,7 @@ defined('TYPO3_MODE') or die(); ); // Attach to hooks: -$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['pageIndexing'][] = \TYPO3\CMS\IndexedSearch\Hook\TypoScriptFrontendHook::class; +$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-cached']['indexed_search'] = \TYPO3\CMS\IndexedSearch\Hook\TypoScriptFrontendHook::class . '->indexPageContent'; $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['headerNoCache']['tx_indexedsearch'] = \TYPO3\CMS\IndexedSearch\Hook\TypoScriptFrontendHook::class . '->headerNoCache'; // Register with "crawler" extension: $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['crawler']['procInstructions']['indexed_search'] = [ diff --git a/typo3/sysext/install/Configuration/ExtensionScanner/Php/ArrayDimensionMatcher.php b/typo3/sysext/install/Configuration/ExtensionScanner/Php/ArrayDimensionMatcher.php index 26c3acef6b4d1847a7502f5bd641fcbf12701948..33461d9e588c17457f13a17dec6dd5e795e8cfe6 100644 --- a/typo3/sysext/install/Configuration/ExtensionScanner/Php/ArrayDimensionMatcher.php +++ b/typo3/sysext/install/Configuration/ExtensionScanner/Php/ArrayDimensionMatcher.php @@ -391,4 +391,29 @@ return [ 'Deprecation-90937-VariousHooksInContentObjectRenderer.rst', ], ], + '$GLOBALS[\'TYPO3_CONF_VARS\'][\'SC_OPTIONS\'][\'tslib/class.tslib_fe.php\'][\'pageIndexing\']' => [ + 'restFiles' => [ + 'Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst', + ], + ], + '$GLOBALS[\'TYPO3_CONF_VARS\'][\'SC_OPTIONS\'][\'tslib/class.tslib_fe.php\'][\'isOutputting\']' => [ + 'restFiles' => [ + 'Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst', + ], + ], + '$GLOBALS[\'TYPO3_CONF_VARS\'][\'SC_OPTIONS\'][\'tslib/class.tslib_fe.php\'][\'tslib_fe-contentStrReplace\']' => [ + 'restFiles' => [ + 'Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst', + ], + ], + '$GLOBALS[\'TYPO3_CONF_VARS\'][\'SC_OPTIONS\'][\'tslib/class.tslib_fe.php\'][\'contentPostProc-output\']' => [ + 'restFiles' => [ + 'Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst', + ], + ], + '$GLOBALS[\'TYPO3_CONF_VARS\'][\'SC_OPTIONS\'][\'tslib/class.tslib_fe.php\'][\'hook_eofe\']' => [ + 'restFiles' => [ + 'Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst', + ], + ], ]; diff --git a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php index db55f3650012bf6b99ac33814b1b650c280e2245..18432131fa2ba98d9a6df1afb7fbfc736c5ed56f 100644 --- a/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php +++ b/typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php @@ -4483,4 +4483,18 @@ return [ 'Deprecation-90964-LanguageServiceFunctionalityAndInternalProperties.rst', ], ], + 'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->isOutputting' => [ + 'numberOfMandatoryArguments' => 0, + 'maximumNumberOfArguments' => 0, + 'restFiles' => [ + 'Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst', + ], + ], + 'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->processContentForOutput' => [ + 'numberOfMandatoryArguments' => 0, + 'maximumNumberOfArguments' => 0, + 'restFiles' => [ + 'Deprecation-91012-VariousHooksRelatedToTypoScriptFrontendController.rst', + ], + ], ]; diff --git a/typo3/sysext/workspaces/Classes/Middleware/WorkspacePreview.php b/typo3/sysext/workspaces/Classes/Middleware/WorkspacePreview.php index 2063410690922af9068953eca05ff4107538ffb1..37bbad1533111e6965b2b37b439570bdac88b20b 100644 --- a/typo3/sysext/workspaces/Classes/Middleware/WorkspacePreview.php +++ b/typo3/sysext/workspaces/Classes/Middleware/WorkspacePreview.php @@ -119,7 +119,7 @@ class WorkspacePreview implements MiddlewareInterface } // Add an info box to the frontend content - if ($GLOBALS['TSFE']->doWorkspacePreview() && $GLOBALS['TSFE']->isOutputting()) { + if ($GLOBALS['TSFE']->doWorkspacePreview() && $GLOBALS['TSFE']->isOutputting(true)) { $previewInfo = $this->renderPreviewInfo($GLOBALS['TSFE'], $request->getAttribute('normalizedParams')); $body = $response->getBody(); $body->rewind();