[!!!][TASK] Remove cHash options from UriBuilders, ViewHelper + Routing 00/64600/4
authorBenni Mack <benni@typo3.org>
Fri, 29 May 2020 12:11:24 +0000 (14:11 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Fri, 29 May 2020 19:33:28 +0000 (21:33 +0200)
The cHash options in ViewHelpers and UriBuilders were a no-op
in TYPO3 v10 and Site Handling, and triggered deprecations.

They can now be removed without any side-effects, as cHash generation
is solely coordinated with the PageRouter and resolving is done within
1 PSR-15 middleware.

Resolves: #91522
Related: #91473
Releases: master
Change-Id: Ic209f376088622d95a8eb3bee0d7bcc941df2247
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64600
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
15 files changed:
typo3/sysext/core/Documentation/Changelog/master/Breaking-91473-DeprecatedFunctionalityRemoved.rst
typo3/sysext/extbase/Classes/Mvc/Web/FrontendRequestHandler.php
typo3/sysext/extbase/Classes/Mvc/Web/Routing/UriBuilder.php
typo3/sysext/fluid/Classes/ViewHelpers/FormViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Link/ActionViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Link/PageViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Link/TypolinkViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Uri/ActionViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Uri/PageViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Uri/TypolinkViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Widget/LinkViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Widget/UriViewHelper.php
typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
typo3/sysext/frontend/Classes/Typolink/PageLinkBuilder.php
typo3/sysext/frontend/Tests/UnitDeprecated/Controller/TypoScriptFrontendControllerTest.php [deleted file]

index 85ada85..62e14d5 100644 (file)
@@ -27,8 +27,11 @@ The following PHP class methods that have been previously deprecated for v10 hav
 - :php:`\TYPO3\CMS\Core\DataHandling\DataHandler->setTSconfigPermissions`
 - :php:`\TYPO3\CMS\Core\Localization\LanguageService->getLabelsWithPrefix`
 - :php:`\TYPO3\CMS\Extbase\Mvc\Controller\ActionController->emitBeforeCallActionMethodSignal`
+- :php:`\TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder->setUseCacheHash`
+- :php:`\TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder->getUseCacheHash`
 - :php:`\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->isOutputting`
 - :php:`\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->processContentForOutput`
+- :php:`\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->reqCHash`
 - :php:`\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->settingLocale`
 
 
@@ -69,6 +72,8 @@ The following public class properties have been dropped:
 
 - :php:`\TYPO3\CMS\Core\DataHandling\DataHandler->defaultPermissions`
 - :php:`\TYPO3\CMS\Core\DataHandling\DataHandler->pMap`
+- :php:`\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->cHash`
+- :php:`\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->cHash_array`
 
 The following class methods have changed visibility:
 
@@ -82,12 +87,25 @@ The following class properties have changed visibility:
 
 The following ViewHelpers have changed:
 
+- :html:`<f:form>` ViewHelper argument "noCacheHash" is dropped
+- :html:`<f:link.action>` ViewHelper argument "noCacheHash" is dropped
+- :html:`<f:link.page>` ViewHelper argument "noCacheHash" is dropped
+- :html:`<f:link.typolink>` ViewHelper argument "useCacheHash" is dropped
+- :html:`<f:uri.action>` ViewHelper argument "noCacheHash" is dropped
+- :html:`<f:uri.page>` ViewHelper argument "noCacheHash" is dropped
+- :html:`<f:uri.typolink>` ViewHelper argument "useCacheHash" is dropped
+- :html:`<f:widget.link>` ViewHelper argument "useCacheHash" is dropped
+- :html:`<f:widget.uri>` ViewHelper argument "useCacheHash" is dropped
+
 The following scheduler tasks have been removed:
 
 The following user TSconfig options have been dropped:
 
 The following TypoScript options have been dropped:
 
+- Extbase TypoScript option `requireCHashArgumentForActionArguments` for any plugin
+- `typolink.useCacheHash`
+
 The following constants have been dropped:
 
 - :php:`FILE_DENY_PATTERN_DEFAULT`
index d70a6cc..c8b2ad2 100644 (file)
@@ -57,10 +57,6 @@ class FrontendRequestHandler extends AbstractRequestHandler
             $request->setIsCached(false);
         }
 
-        if ($this->configurationManager->isFeatureEnabled('requireCHashArgumentForActionArguments')) {
-            trigger_error('The option requireCHashArgumentForActionArguments is removed', E_USER_DEPRECATED);
-        }
-
         /** @var \TYPO3\CMS\Extbase\Mvc\ResponseInterface $response */
         $response = $this->objectManager->get(Response::class);
         $this->dispatcher->dispatch($request, $response);
index a4bf70f..697eb62 100644 (file)
@@ -511,28 +511,6 @@ class UriBuilder
     }
 
     /**
-     * by default TRUE; if FALSE, no cHash parameter will be appended to the URI
-     * If noCache is set, this setting will be ignored.
-     *
-     * @return static the current UriBuilder to allow method chaining
-     */
-    public function setUseCacheHash(): UriBuilder
-    {
-        trigger_error('Calling UriBuilder->setUseCacheHash() will be removed in TYPO3 v11.0. TYPO3 Core routing is taking care of handling this argument. Simply remove the line to avoid the notice.', E_USER_DEPRECATED);
-        return $this;
-    }
-
-    /**
-     * @return bool
-     * @internal
-     */
-    public function getUseCacheHash(): bool
-    {
-        trigger_error('Calling UriBuilder->getUseCacheHash() will be removed in TYPO3 v11.0. TYPO3 Core routing is taking care of handling this argument. Simply remove the line to avoid the notice.', E_USER_DEPRECATED);
-        return true;
-    }
-
-    /**
      * Returns the arguments being used for the last URI being built.
      * This is only set after build() / uriFor() has been called.
      *
index 7027658..edb3cf2 100644 (file)
@@ -126,8 +126,6 @@ class FormViewHelper extends AbstractFormViewHelper
         $this->registerArgument('object', 'mixed', 'Object to use for the form. Use in conjunction with the "property" attribute on the sub tags');
         $this->registerArgument('pageType', 'int', 'Target page type', false, 0);
         $this->registerArgument('noCache', 'bool', 'set this to disable caching for the target page. You should not need this.', false, false);
-        // @deprecated
-        $this->registerArgument('noCacheHash', 'bool', 'Deprecated: Set this to suppress the cHash query parameter created by TypoLink. You should not need this.', false, null);
         $this->registerArgument('section', 'string', 'The anchor to be added to the action URI (only active if $actionUri is not set)', false, '');
         $this->registerArgument('format', 'string', 'The requested format (e.g. ".html") of the target page (only active if $actionUri is not set)', false, '');
         $this->registerArgument('additionalParams', 'array', 'additional action URI query parameters that won\'t be prefixed like $arguments (overrule $arguments) (only active if $actionUri is not set)', false, []);
@@ -205,9 +203,6 @@ class FormViewHelper extends AbstractFormViewHelper
         if ($this->hasArgument('actionUri')) {
             $formActionUri = $this->arguments['actionUri'];
         } else {
-            if (isset($this->arguments['noCacheHash'])) {
-                trigger_error('Using the argument "noCacheHash" in <f:form> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-            }
             /** @var UriBuilder $uriBuilder */
             $uriBuilder = $this->renderingContext->getControllerContext()->getUriBuilder();
             $uriBuilder
index 5620445..6256328 100644 (file)
@@ -60,8 +60,6 @@ class ActionViewHelper extends AbstractTagBasedViewHelper
         $this->registerArgument('pageUid', 'int', 'Target page. See TypoLink destination');
         $this->registerArgument('pageType', 'int', 'Type of the target page. See typolink.parameter');
         $this->registerArgument('noCache', 'bool', 'Set this to disable caching for the target page. You should not need this.');
-        // @deprecated
-        $this->registerArgument('noCacheHash', 'bool', 'Deprecated: Set this to suppress the cHash query parameter created by TypoLink. You should not need this.');
         $this->registerArgument('section', 'string', 'The anchor to be added to the URI');
         $this->registerArgument('format', 'string', 'The requested format, e.g. ".html');
         $this->registerArgument('linkAccessRestrictedPages', 'bool', 'If set, links pointing to access restricted pages will still link to the page even though the page cannot be accessed.');
@@ -78,9 +76,6 @@ class ActionViewHelper extends AbstractTagBasedViewHelper
      */
     public function render()
     {
-        if (isset($this->arguments['noCacheHash'])) {
-            trigger_error('Using the argument "noCacheHash" in <f:link.action> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-        }
         $action = $this->arguments['action'];
         $controller = $this->arguments['controller'];
         $extensionName = $this->arguments['extensionName'];
index ca1746a..57fcc02 100644 (file)
@@ -84,8 +84,6 @@ class PageViewHelper extends AbstractTagBasedViewHelper
         $this->registerArgument('pageType', 'int', 'Type of the target page. See typolink.parameter');
         $this->registerArgument('noCache', 'bool', 'Set this to disable caching for the target page. You should not need this.');
         $this->registerArgument('language', 'string', 'link to a specific language - defaults to the current language, use a language ID or "current" to enforce a specific language', false, null);
-        // @deprecated
-        $this->registerArgument('noCacheHash', 'bool', 'Deprecated: Set this to suppress the cHash query parameter created by TypoLink. You should not need this.', false);
         $this->registerArgument('section', 'string', 'The anchor to be added to the URI');
         $this->registerArgument('linkAccessRestrictedPages', 'bool', 'If set, links pointing to access restricted pages will still link to the page even though the page cannot be accessed.');
         $this->registerArgument('additionalParams', 'array', 'Additional query parameters that won\'t be prefixed like $arguments (overrule $arguments)');
@@ -100,9 +98,6 @@ class PageViewHelper extends AbstractTagBasedViewHelper
      */
     public function render()
     {
-        if (isset($this->arguments['noCacheHash'])) {
-            trigger_error('Using the argument "noCacheHash" in <f:link.page> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-        }
         $pageUid = isset($this->arguments['pageUid']) ? (int)$this->arguments['pageUid'] : null;
         $pageType = isset($this->arguments['pageType']) ? (int)$this->arguments['pageType'] : 0;
         $noCache = isset($this->arguments['noCache']) ? (bool)$this->arguments['noCache'] : false;
index 4458bea..effb6fb 100644 (file)
@@ -60,7 +60,6 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *        target="_blank"
  *        class="ico-class" title="some title"
  *        additionalAttributes="{type:'button'}"
- *        useCacheHash="true"
  *    >
  *       Linktext
  *    </f:link.typolink>
@@ -96,8 +95,6 @@ class TypolinkViewHelper extends AbstractViewHelper
         $this->registerArgument('language', 'string', 'link to a specific language - defaults to the current language, use a language ID or "current" to enforce a specific language', false, null);
         $this->registerArgument('additionalParams', 'string', '', false, '');
         $this->registerArgument('additionalAttributes', 'array', '', false, []);
-        // @deprecated useCacheHash
-        $this->registerArgument('useCacheHash', 'bool', 'Deprecated: You should not need this.', false, null);
         $this->registerArgument('addQueryString', 'bool', '', false, false);
         $this->registerArgument('addQueryStringMethod', 'string', '', false, 'GET');
         $this->registerArgument('addQueryStringExclude', 'string', '', false, '');
@@ -117,9 +114,6 @@ class TypolinkViewHelper extends AbstractViewHelper
      */
     public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
     {
-        if (isset($arguments['useCacheHash'])) {
-            trigger_error('Using the argument "useCacheHash" in <f:link.typolink> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-        }
         $parameter = $arguments['parameter'] ?? '';
         $partsAs = $arguments['parts-as'] ?? 'typoLinkParts';
 
index 095ace3..620b671 100644 (file)
@@ -51,8 +51,6 @@ class ActionViewHelper extends AbstractViewHelper
         $this->registerArgument('pageUid', 'int', 'Target page. See TypoLink destination');
         $this->registerArgument('pageType', 'int', 'Type of the target page. See typolink.parameter', false, 0);
         $this->registerArgument('noCache', 'bool', 'Set this to disable caching for the target page. You should not need this.', false, null);
-        // @deprecated
-        $this->registerArgument('noCacheHash', 'bool', 'Deprecated: Set this to suppress the cHash query parameter created by TypoLink. You should not need this.', false, null);
         $this->registerArgument('section', 'string', 'The anchor to be added to the URI', false, '');
         $this->registerArgument('format', 'string', 'The requested format, e.g. ".html', false, '');
         $this->registerArgument('linkAccessRestrictedPages', 'bool', 'If set, links pointing to access restricted pages will still link to the page even though the page cannot be accessed.', false, false);
@@ -77,9 +75,6 @@ class ActionViewHelper extends AbstractViewHelper
         $pageType = $arguments['pageType'] ?? 0;
         /** @var bool $noCache */
         $noCache = $arguments['noCache'] ?? false;
-        if (isset($arguments['noCacheHash'])) {
-            trigger_error('Using the argument "noCacheHash" in <f:uri.action> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-        }
         /** @var string|null $section */
         $section = $arguments['section'] ?? null;
         /** @var string|null $format */
index f08c838..317a6a1 100644 (file)
@@ -74,8 +74,6 @@ class PageViewHelper extends AbstractViewHelper
         $this->registerArgument('pageType', 'int', 'type of the target page. See typolink.parameter', false, 0);
         $this->registerArgument('noCache', 'bool', 'set this to disable caching for the target page. You should not need this.', false, false);
         $this->registerArgument('language', 'string', 'link to a specific language - defaults to the current language, use a language ID or "current" to enforce a specific language', false, null);
-        // @deprecated
-        $this->registerArgument('noCacheHash', 'bool', 'Deprecated: Set this to suppress the cHash query parameter created by TypoLink. You should not need this.', false, null);
         $this->registerArgument('section', 'string', 'the anchor to be added to the URI', false, '');
         $this->registerArgument('linkAccessRestrictedPages', 'bool', 'If set, links pointing to access restricted pages will still link to the page even though the page cannot be accessed.', false, false);
         $this->registerArgument('absolute', 'bool', 'If set, the URI of the rendered link is absolute', false, false);
@@ -96,9 +94,6 @@ class PageViewHelper extends AbstractViewHelper
         $additionalParams = $arguments['additionalParams'];
         $pageType = $arguments['pageType'];
         $noCache = $arguments['noCache'];
-        if (isset($arguments['noCacheHash'])) {
-            trigger_error('Using the argument "noCacheHash" in <f:uri.page> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-        }
         $section = $arguments['section'];
         $language = $arguments['language'] ?? null;
         $linkAccessRestrictedPages = $arguments['linkAccessRestrictedPages'];
index 05537a4..5c81645 100644 (file)
@@ -68,8 +68,6 @@ class TypolinkViewHelper extends AbstractViewHelper
         $this->registerArgument('parameter', 'string', 'stdWrap.typolink style parameter string', true);
         $this->registerArgument('additionalParams', 'string', 'stdWrap.typolink additionalParams', false, '');
         $this->registerArgument('language', 'string', 'link to a specific language - defaults to the current language, use a language ID or "current" to enforce a specific language', false, null);
-        // @deprecated useCacheHash
-        $this->registerArgument('useCacheHash', 'bool', 'Deprecated: You should not need this.', false);
         $this->registerArgument('addQueryString', 'bool', '', false, false);
         $this->registerArgument('addQueryStringMethod', 'string', '', false, 'GET');
         $this->registerArgument('addQueryStringExclude', 'string', '', false, '');
@@ -84,9 +82,6 @@ class TypolinkViewHelper extends AbstractViewHelper
      */
     public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
     {
-        if (isset($arguments['useCacheHash'])) {
-            trigger_error('Using the argument "noCacheHash" in <f:uri.typolink> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-        }
         $parameter = $arguments['parameter'];
 
         $typoLinkCodec = GeneralUtility::makeInstance(TypoLinkCodecService::class);
index 1ece889..a5c8dd6 100644 (file)
@@ -52,8 +52,6 @@ class LinkViewHelper extends AbstractTagBasedViewHelper
         $this->registerTagAttribute('rel', 'string', 'Specifies the relationship between the current document and the linked document');
         $this->registerTagAttribute('rev', 'string', 'Specifies the relationship between the linked document and the current document');
         $this->registerTagAttribute('target', 'string', 'Specifies where to open the linked document');
-        // @deprecated
-        $this->registerArgument('useCacheHash', 'bool', 'Deprecated: True whether the cache hash should be appended to the URL', false, null);
         $this->registerArgument('addQueryStringMethod', 'string', 'Method to be used for query string');
         $this->registerArgument('action', 'string', 'Target action');
         $this->registerArgument('arguments', 'array', 'Arguments', false, []);
@@ -118,9 +116,6 @@ class LinkViewHelper extends AbstractTagBasedViewHelper
         if ($this->hasArgument('format') && $this->arguments['format'] !== '') {
             $arguments['format'] = $this->arguments['format'];
         }
-        if (isset($arguments['useCacheHash'])) {
-            trigger_error('Using the argument "useCacheHash" in <f:widget.link> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-        }
         $uriBuilder->reset()
             ->setArguments([$argumentPrefix => $arguments])
             ->setSection($this->arguments['section'])
index f864fde..c3fc992 100644 (file)
@@ -43,8 +43,6 @@ class UriViewHelper extends AbstractViewHelper
      */
     public function initializeArguments()
     {
-        // @deprecated
-        $this->registerArgument('useCacheHash', 'bool', 'Deprecated: True whether the cache hash should be appended to the URL', false, null);
         $this->registerArgument('addQueryStringMethod', 'string', 'Method to be used for query string');
         $this->registerArgument('action', 'string', 'Target action');
         $this->registerArgument('arguments', 'array', 'Arguments', false, []);
@@ -112,9 +110,6 @@ class UriViewHelper extends AbstractViewHelper
         if (($arguments['format'] ?? '') !== '') {
             $parameters['format'] = $arguments['format'];
         }
-        if (isset($arguments['useCacheHash'])) {
-            trigger_error('Using the argument "useCacheHash" in <f:widget.uri> ViewHelper has no effect anymore. Remove the argument in your fluid template, as it will result in a fatal error.', E_USER_DEPRECATED);
-        }
         $uriBuilder->reset()
             ->setArguments([$argumentPrefix => $parameters])
             ->setSection($arguments['section'])
index 7f3eefc..8c4c25b 100644 (file)
@@ -128,14 +128,6 @@ class TypoScriptFrontendController implements LoggerAwareInterface
     protected $language;
 
     /**
-     * The submitted cHash
-     * @var string
-     * @internal
-     * @deprecated will be removed in TYPO3 v11.0. don't use it anymore, as this is now within the PageArguments property.
-     */
-    protected $cHash = '';
-
-    /**
      * @var PageArguments
      * @internal
      */
@@ -351,14 +343,6 @@ class TypoScriptFrontendController implements LoggerAwareInterface
     private $forceTemplateParsing = false;
 
     /**
-     * The array which cHash_calc is based on, see PageArgumentValidator class.
-     * @var array
-     * @internal
-     * @deprecated will be removed in TYPO3 v11.0. don't use it anymore, see getRelevantParametersForCachingFromPageArguments()
-     */
-    protected $cHash_array = [];
-
-    /**
      * May be set to the pagesTSconfig
      * @var array|string
      * @internal
@@ -1591,36 +1575,6 @@ class TypoScriptFrontendController implements LoggerAwareInterface
      * Template and caching related functions.
      *
      *******************************************/
-    /**
-     * Will disable caching if the cHash value was not set when having dynamic arguments in GET query parameters.
-     * This function should be called to check the _existence_ of "&cHash" whenever a plugin generating cacheable output is using extra GET variables. If there _is_ a cHash value the validation of it automatically takes place in makeCacheHash() (see above)
-     *
-     * @deprecated since TYPO3 v10.2, will be removed in TYPO3 v11. The PSR-15 middleware PageArgumentValidator is already taking care of this.
-     */
-    public function reqCHash()
-    {
-        trigger_error('TypoScriptFrontendController->reqCHash() is not needed anymore, as all functionality is handled via the PSR-15 PageArgumentValidator middleware already.', E_USER_DEPRECATED);
-        if (!empty($this->pageArguments->getArguments()['cHash']) || empty($this->pageArguments->getDynamicArguments())) {
-            return;
-        }
-        $queryParams = $this->pageArguments->getDynamicArguments();
-        $queryParams['id'] = $this->pageArguments->getPageId();
-        $argumentsThatWouldRequireCacheHash = GeneralUtility::makeInstance(CacheHashCalculator::class)
-                ->getRelevantParameters(HttpUtility::buildQueryString($queryParams));
-        if (empty($argumentsThatWouldRequireCacheHash)) {
-            return;
-        }
-        if ($GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFoundOnCHashError']) {
-            $response = GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
-                $GLOBALS['TYPO3_REQUEST'],
-                'Request parameters could not be validated (&cHash empty)',
-                ['code' => PageAccessFailureReasons::CACHEHASH_EMPTY]
-            );
-            throw new ImmediateResponseException($response, 1533931354);
-        }
-        $this->disableCache();
-        $this->getTimeTracker()->setTSlogMessage('TSFE->reqCHash(): No &cHash parameter was sent for GET vars though required so caching is disabled', 2);
-    }
 
     protected function setPageArguments(PageArguments $pageArguments): void
     {
@@ -3779,13 +3733,6 @@ class TypoScriptFrontendController implements LoggerAwareInterface
             case 'domainStartPage':
                 trigger_error('Property $TSFE->domainStartPage is not in use anymore as this information is now stored within the Site object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
                 return  true;
-            case 'cHash':
-                trigger_error('Property $TSFE->cHash is not in use anymore as this information is now stored within the PageArguments object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
-                return isset($this->pageArguments->getArguments()['cHash']);
-            case 'cHash_array':
-                trigger_error('Property $TSFE->cHash_array is not in use anymore as this information is now stored within the PageArguments object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
-                $value = $this->getRelevantParametersForCachingFromPageArguments($this->pageArguments);
-                return !empty($value);
             case 'sys_language_isocode':
                 trigger_error('Property $TSFE->sys_language_isocode is not in use anymore as this information is now stored within the SiteLanguage object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
                 return isset($this->$propertyName);
@@ -3817,12 +3764,6 @@ class TypoScriptFrontendController implements LoggerAwareInterface
             case 'domainStartPage':
                 trigger_error('Property $TSFE->domainStartPage is not in use anymore as this information is now stored within the Site object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
                 return $this->site->getRootPageId();
-            case 'cHash':
-                trigger_error('Property $TSFE->cHash is not in use anymore as this information is now stored within the PageArguments object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
-                return $this->pageArguments->getArguments()['cHash'] ?? false;
-            case 'cHash_array':
-                trigger_error('Property $TSFE->cHash_array is not in use anymore as this information is now stored within the PageArguments object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
-                return $this->getRelevantParametersForCachingFromPageArguments($this->pageArguments);
             case 'sys_language_isocode':
                 trigger_error('Property $TSFE->sys_language_isocode is not in use anymore as this information is now stored within the SiteLanguage object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
                 return $this->sys_language_isocode ?? $this->language->getTwoLetterIsoCode();
@@ -3862,12 +3803,6 @@ class TypoScriptFrontendController implements LoggerAwareInterface
             case 'domainStartPage':
                 trigger_error('Property $TSFE->domainStartPage is not in use anymore as this information is now stored within the Site object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
                 break;
-            case 'cHash':
-                trigger_error('Property $TSFE->cHash is not in use anymore as this information is now stored within the PageArguments object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
-                break;
-            case 'cHash_array':
-                trigger_error('Property $TSFE->cHash_array is not in use anymore as this information is now stored within the PageArguments object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
-                break;
             case 'sys_language_isocode':
                 trigger_error('Property $TSFE->sys_language_isocode is not in use anymore as this information is now stored within the SiteLanguage object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
                 break;
@@ -3897,12 +3832,6 @@ class TypoScriptFrontendController implements LoggerAwareInterface
             case 'domainStartPage':
                 trigger_error('Property $TSFE->domainStartPage is not in use anymore as this information is now stored within the Site object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
                 break;
-            case 'cHash':
-                trigger_error('Property $TSFE->cHash is not in use anymore as this information is now stored within the PageArguments object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
-                break;
-            case 'cHash_array':
-                trigger_error('Property $TSFE->cHash_array is not in use anymore as this information is now stored within the PageArguments object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
-                break;
             case 'sys_language_isocode':
                 trigger_error('Property $TSFE->sys_language_isocode is not in use anymore as this information is now stored within the SiteLanguage object. Will be removed in TYPO3 v11.0.', E_USER_DEPRECATED);
                 break;
index 864bf12..534b294 100644 (file)
@@ -150,11 +150,6 @@ class PageLinkBuilder extends AbstractTypolinkBuilder
             }
         }
 
-        if (isset($conf['useCacheHash'])) {
-            // This option will be removed in TYPO3 v11.0.
-            trigger_error('Setting typolink.useCacheHash has no effect anymore. Remove the option in all your TypoScript code and Fluid templates.', E_USER_DEPRECATED);
-        }
-
         // get config.linkVars and prepend them before the actual GET parameters
         $queryParameters = [];
         parse_str($addQueryParams, $queryParameters);
diff --git a/typo3/sysext/frontend/Tests/UnitDeprecated/Controller/TypoScriptFrontendControllerTest.php b/typo3/sysext/frontend/Tests/UnitDeprecated/Controller/TypoScriptFrontendControllerTest.php
deleted file mode 100644 (file)
index 52101d3..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-<?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\Tests\UnitDeprecated\Controller;
-
-use TYPO3\CMS\Core\Context\Context;
-use TYPO3\CMS\Core\Domain\Repository\PageRepository;
-use TYPO3\CMS\Core\Http\ImmediateResponseException;
-use TYPO3\CMS\Core\Http\ServerRequest;
-use TYPO3\CMS\Core\Information\Typo3Information;
-use TYPO3\CMS\Core\Page\PageRenderer;
-use TYPO3\CMS\Core\Routing\PageArguments;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class TypoScriptFrontendControllerTest extends UnitTestCase
-{
-    /**
-     * @var bool Reset singletons created by subject
-     */
-    protected $resetSingletonInstances = true;
-
-    /**
-     * @var \PHPUnit\Framework\MockObject\MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface|TypoScriptFrontendController
-     */
-    protected $subject;
-
-    protected function setUp(): void
-    {
-        parent::setUp();
-        $this->subject = $this->getAccessibleMock(TypoScriptFrontendController::class, ['dummy'], [], '', false);
-        $this->subject->_set('context', new Context());
-        $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] = '170928423746123078941623042360abceb12341234231';
-
-        $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
-        $this->subject->sys_page = $pageRepository;
-
-        $pageRenderer = $this->getMockBuilder(PageRenderer::class)->getMock();
-        $this->subject->_set('pageRenderer', $pageRenderer);
-    }
-
-    public function requireCacheHashValidateRelevantParametersDataProvider(): array
-    {
-        return [
-            'no extra params' => [
-                [],
-                false,
-            ],
-            'with required param' => [
-                [
-                    'abc' => 1,
-                ],
-                true,
-            ],
-            'with required params' => [
-                [
-                    'abc' => 1,
-                    'abcd' => 1,
-                ],
-                true,
-            ],
-            'with not required param' => [
-                [
-                    'fbclid' => 1,
-                ],
-                false,
-            ],
-            'with not required params' => [
-                [
-                    'fbclid' => 1,
-                    'gclid' => 1,
-                    'foo' => [
-                        'bar' => 1,
-                    ],
-                ],
-                false,
-            ],
-            'with combined params' => [
-                [
-                    'abc' => 1,
-                    'fbclid' => 1,
-                ],
-                true,
-            ],
-            'with multiple combined params' => [
-                [
-                    'abc' => 1,
-                    'fbclid' => 1,
-                    'abcd' => 1,
-                    'gclid' => 1
-                ],
-                true,
-            ]
-        ];
-    }
-
-    /**
-     * @test
-     *
-     * @dataProvider requireCacheHashValidateRelevantParametersDataProvider
-     * @param array $remainingArguments
-     * @param bool $expected
-     */
-    public function requireCacheHashValidateRelevantParameters(array $remainingArguments, bool $expected): void
-    {
-        $GLOBALS['TYPO3_REQUEST'] = new ServerRequest();
-        $GLOBALS['TYPO3_CONF_VARS']['FE']['pageNotFoundOnCHashError'] = true;
-        $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'] = ['gclid', 'fbclid', 'foo[bar]'];
-
-        $this->subject = $this->getAccessibleMock(TypoScriptFrontendController::class, ['dummy'], [], '', false);
-        $this->subject->_set('pageArguments', new PageArguments(1, '0', ['tx_test' => 1], ['tx_test' => 1], $remainingArguments));
-
-        if ($expected) {
-            $typo3InformationProphecy = $this->prophesize(Typo3Information::class);
-            $typo3InformationProphecy->getCopyrightYear()->willReturn('1999-20XX');
-            GeneralUtility::addInstance(Typo3Information::class, $typo3InformationProphecy->reveal());
-            static::expectException(ImmediateResponseException::class);
-        }
-        $this->subject->reqCHash();
-    }
-}