[!!!][TASK] Deprecate useCacheHash/noCacheHash 74/60774/6
authorBenni Mack <benni@typo3.org>
Fri, 17 May 2019 11:11:54 +0000 (13:11 +0200)
committerGeorg Ringer <georg.ringer@gmail.com>
Wed, 22 May 2019 17:33:45 +0000 (19:33 +0200)
Having Site Handling in place, the option "useCacheHash"
rendered useless as it is added by TYPO3 Core automatically
when necessary with SiteHandling.

Any Fluid Arguments haven't been deprecated as this
was part of the the legacy functionality. Now the options
are still available, but trigger a deprecation message
that the option is superfluous and should be removed.

Calling typolink.useCacheHash will now trigger a
deprecation message.

Resolves: #88406
Releases: master
Change-Id: I2243a335188c3466b8f8f59e8d3e417f13bf854d
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/60774
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
29 files changed:
typo3/sysext/backend/Classes/Controller/EditDocumentController.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-88406-SetCacheHashnoCacheHashOptionsInViewHelpersAndUriBuilder.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-87433-AddChangefreqAndPriority.rst
typo3/sysext/extbase/Classes/Mvc/Web/Routing/UriBuilder.php
typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.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/fluid/Tests/Unit/ViewHelpers/Link/TypolinkViewHelperTest.php
typo3/sysext/frontend/Classes/ContentObject/Menu/AbstractMenuContentObject.php
typo3/sysext/frontend/Classes/Plugin/AbstractPlugin.php
typo3/sysext/frontend/Classes/Typolink/PageLinkBuilder.php
typo3/sysext/frontend/Tests/Functional/SiteHandling/AbstractTestCase.php
typo3/sysext/frontend/Tests/Functional/SiteHandling/SlugLinkGeneratorTest.php
typo3/sysext/frontend/Tests/Unit/ContentObject/Menu/AbstractMenuContentObjectTest.php
typo3/sysext/indexed_search/Classes/Controller/SearchController.php
typo3/sysext/indexed_search/Resources/Private/Templates/Search/Search.html
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/seo/Classes/XmlSitemap/RecordsXmlSitemapDataProvider.php
typo3/sysext/seo/Resources/Private/Templates/XmlSitemap/Index.xml
typo3/sysext/seo/Tests/Functional/Fixtures/content.typoscript
typo3/sysext/seo/Tests/Functional/Fixtures/records.typoscript
typo3/sysext/t3editor/Resources/Public/JavaScript/Mode/typoscript/typoscript.js

index 717b50a..01f28db 100644 (file)
@@ -48,7 +48,6 @@ use TYPO3\CMS\Core\Utility\HttpUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
 use TYPO3\CMS\Core\Utility\PathUtility;
 use TYPO3\CMS\Extbase\SignalSlot\Dispatcher;
-use TYPO3\CMS\Frontend\Page\CacheHashCalculator;
 use TYPO3\CMS\Frontend\Page\PageRepository;
 
 /**
@@ -860,15 +859,7 @@ class EditDocumentController
             $linkParameters = array_replace($linkParameters, $additionalGetParameters);
         }
 
-        if (!empty($previewConfiguration['useCacheHash'])) {
-            $cacheHashCalculator = GeneralUtility::makeInstance(CacheHashCalculator::class);
-            $fullLinkParameters = HttpUtility::buildQueryString(array_merge($linkParameters, ['id' => $previewPageId]), '&');
-            $cacheHashParameters = $cacheHashCalculator->getRelevantParameters($fullLinkParameters);
-            $linkParameters['cHash'] = $cacheHashCalculator->calculateCacheHash($cacheHashParameters);
-        } else {
-            $linkParameters['no_cache'] = 1;
-        }
-
+        $linkParameters['no_cache'] = 1;
         return HttpUtility::buildQueryString($linkParameters, '&');
     }
 
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-88406-SetCacheHashnoCacheHashOptionsInViewHelpersAndUriBuilder.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-88406-SetCacheHashnoCacheHashOptionsInViewHelpersAndUriBuilder.rst
new file mode 100644 (file)
index 0000000..4c735cc
--- /dev/null
@@ -0,0 +1,55 @@
+.. include:: ../../Includes.txt
+
+====================================================================================
+Deprecation: #88406 - setCacheHash/noCacheHash options in ViewHelpers and UriBuilder
+====================================================================================
+
+See :issue:`88406`
+
+Description
+===========
+
+Various Fluid ViewHelpers regarding linking have arguments similar to which are not evaluated anymore:
+- useCacheHash
+- noCacheHash
+
+Extbase's UriBuilder has the following options that have no effect anymore since the Site
+Handling concept automatically detects when to a cHash argument is necessary.
+
+- UriBuilder->setUseCacheHash()
+- UriBuilder->getUseCacheHash()
+
+Impact
+======
+
+Calling the UriBuilder methods will trigger a deprecation message.
+
+Using the arguments noCacheHash/useCacheHash in the following ViewHelpers will
+trigger a deprecation message:
+- f:form
+- f:link.action
+- f:link.page
+- f:link.typolink
+- f:uri.action
+- f:uri.page
+- f:uri.typolink
+- f:widget.link
+- f:widget.uri
+
+If the underlying TypoLink logic is accessed directly, it will trigger a deprecation message
+if `.useCacheHash` is set - without any effect either.
+
+
+Affected Installations
+======================
+
+Any TYPO3 installation with custom templates setting this argument in Fluid or extensions
+using Extbase's UriBuilder in a custom fashion.
+
+
+Migration
+=========
+
+Remove any usages within the Fluid templates or Extension code.
+
+.. index:: Fluid, PHP-API, TypoScript, PartiallyScanned
index f49d9c3..5305c28 100644 (file)
@@ -52,7 +52,6 @@ a decimal value between 0 and 1.
                            tx_extension_pi1.controller = News
                            tx_extension_pi1.action = detail
                         }
-                        useCacheHash = 1
                      }
                   }
                }
index a2ab001..306c803 100644 (file)
@@ -112,11 +112,6 @@ class UriBuilder
     protected $noCache = false;
 
     /**
-     * @var bool
-     */
-    protected $useCacheHash = true;
-
-    /**
      * @var string
      */
     protected $format = '';
@@ -446,7 +441,6 @@ class UriBuilder
 
     /**
      * by default FALSE; if TRUE, &no_cache=1 will be appended to the URI
-     * This overrules the useCacheHash setting
      *
      * @param bool $noCache
      * @return \TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder the current UriBuilder to allow method chaining
@@ -474,7 +468,7 @@ class UriBuilder
      */
     public function setUseCacheHash($useCacheHash)
     {
-        $this->useCacheHash = (bool)$useCacheHash;
+        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;
     }
 
@@ -483,7 +477,8 @@ class UriBuilder
      */
     public function getUseCacheHash()
     {
-        return $this->useCacheHash;
+        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;
     }
 
     /**
@@ -516,7 +511,6 @@ class UriBuilder
         $this->targetPageUid = null;
         $this->targetPageType = 0;
         $this->noCache = false;
-        $this->useCacheHash = true;
         $this->argumentPrefix = null;
         return $this;
     }
@@ -616,7 +610,7 @@ class UriBuilder
     /**
      * Builds the URI, backend flavour
      * The resulting URI is relative and starts with "index.php".
-     * The settings pageUid, pageType, noCache, useCacheHash & linkAccessRestrictedPages
+     * The settings pageUid, pageType, noCache & linkAccessRestrictedPages
      * will be ignored in the backend.
      *
      * @return string The URI
@@ -745,8 +739,6 @@ class UriBuilder
         }
         if ($this->noCache === true) {
             $typolinkConfiguration['no_cache'] = 1;
-        } elseif ($this->useCacheHash) {
-            $typolinkConfiguration['useCacheHash'] = 1;
         }
         if ($this->section !== '') {
             $typolinkConfiguration['section'] = $this->section;
index 8a1c445..61ffb83 100644 (file)
@@ -110,8 +110,7 @@ class UriBuilderTest extends UnitTestCase
             ->setLinkAccessRestrictedPages(true)
             ->setTargetPageUid(123)
             ->setTargetPageType(321)
-            ->setNoCache(true)
-            ->setUseCacheHash(false);
+            ->setNoCache(true);
         $this->assertEquals(['test' => 'arguments'], $this->uriBuilder->getArguments());
         $this->assertEquals('testSection', $this->uriBuilder->getSection());
         $this->assertEquals('testFormat', $this->uriBuilder->getFormat());
@@ -125,7 +124,6 @@ class UriBuilderTest extends UnitTestCase
         $this->assertEquals(123, $this->uriBuilder->getTargetPageUid());
         $this->assertEquals(321, $this->uriBuilder->getTargetPageType());
         $this->assertEquals(true, $this->uriBuilder->getNoCache());
-        $this->assertEquals(false, $this->uriBuilder->getUseCacheHash());
     }
 
     /**
@@ -204,16 +202,6 @@ class UriBuilderTest extends UnitTestCase
     /**
      * @test
      */
-    public function uriForDoesNotDisableCacheHashForNonCacheableActions()
-    {
-        $this->mockExtensionService->expects($this->any())->method('isActionCacheable')->will($this->returnValue(false));
-        $this->uriBuilder->uriFor('someNonCacheableAction', [], 'SomeController', 'SomeExtension');
-        $this->assertTrue($this->uriBuilder->getUseCacheHash());
-    }
-
-    /**
-     * @test
-     */
     public function buildBackendUriKeepsQueryParametersIfAddQueryStringIsSet()
     {
         $_GET['route'] = '/test/Path';
@@ -572,7 +560,7 @@ class UriBuilderTest extends UnitTestCase
      */
     public function resetSetsAllOptionsToTheirDefaultValue()
     {
-        $this->uriBuilder->setArguments(['test' => 'arguments'])->setSection('testSection')->setFormat('someFormat')->setCreateAbsoluteUri(true)->setAddQueryString(true)->setArgumentsToBeExcludedFromQueryString(['test' => 'addQueryStringExcludeArguments'])->setAddQueryStringMethod(null)->setArgumentPrefix('testArgumentPrefix')->setLinkAccessRestrictedPages(true)->setTargetPageUid(123)->setTargetPageType(321)->setNoCache(true)->setUseCacheHash(false);
+        $this->uriBuilder->setArguments(['test' => 'arguments'])->setSection('testSection')->setFormat('someFormat')->setCreateAbsoluteUri(true)->setAddQueryString(true)->setArgumentsToBeExcludedFromQueryString(['test' => 'addQueryStringExcludeArguments'])->setAddQueryStringMethod(null)->setArgumentPrefix('testArgumentPrefix')->setLinkAccessRestrictedPages(true)->setTargetPageUid(123)->setTargetPageType(321)->setNoCache(true);
         $this->uriBuilder->reset();
         $this->assertEquals([], $this->uriBuilder->getArguments());
         $this->assertEquals('', $this->uriBuilder->getSection());
@@ -586,7 +574,6 @@ class UriBuilderTest extends UnitTestCase
         $this->assertEquals(null, $this->uriBuilder->getTargetPageUid());
         $this->assertEquals(0, $this->uriBuilder->getTargetPageType());
         $this->assertEquals(false, $this->uriBuilder->getNoCache());
-        $this->assertEquals(true, $this->uriBuilder->getUseCacheHash());
     }
 
     /**
@@ -596,7 +583,7 @@ class UriBuilderTest extends UnitTestCase
     {
         $GLOBALS['TSFE']->id = 123;
         $this->uriBuilder->setTargetPageUid(321);
-        $expectedConfiguration = ['parameter' => 321, 'useCacheHash' => 1];
+        $expectedConfiguration = ['parameter' => 321];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
@@ -607,7 +594,7 @@ class UriBuilderTest extends UnitTestCase
     public function buildTypolinkConfigurationUsesCurrentPageUidIfTargetPageUidIsNotSet()
     {
         $GLOBALS['TSFE']->id = 123;
-        $expectedConfiguration = ['parameter' => 123, 'useCacheHash' => 1];
+        $expectedConfiguration = ['parameter' => 123];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
@@ -619,7 +606,7 @@ class UriBuilderTest extends UnitTestCase
     {
         $this->uriBuilder->setTargetPageUid(123);
         $this->uriBuilder->setArguments(['foo' => 'bar', 'baz' => ['extbase' => 'fluid']]);
-        $expectedConfiguration = ['parameter' => 123, 'useCacheHash' => 1, 'additionalParams' => '&foo=bar&baz%5Bextbase%5D=fluid'];
+        $expectedConfiguration = ['parameter' => 123, 'additionalParams' => '&foo=bar&baz%5Bextbase%5D=fluid'];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
@@ -631,7 +618,7 @@ class UriBuilderTest extends UnitTestCase
     {
         $this->uriBuilder->setTargetPageUid(123);
         $this->uriBuilder->setAddQueryString(true);
-        $expectedConfiguration = ['parameter' => 123, 'addQueryString' => 1, 'useCacheHash' => 1];
+        $expectedConfiguration = ['parameter' => 123, 'addQueryString' => 1];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
@@ -644,7 +631,7 @@ class UriBuilderTest extends UnitTestCase
         $this->uriBuilder->setTargetPageUid(123);
         $this->uriBuilder->setAddQueryString(true);
         $this->uriBuilder->setAddQueryStringMethod('GET,POST');
-        $expectedConfiguration = ['parameter' => 123, 'addQueryString' => 1, 'addQueryString.' => ['method' => 'GET,POST'], 'useCacheHash' => 1];
+        $expectedConfiguration = ['parameter' => 123, 'addQueryString' => 1, 'addQueryString.' => ['method' => 'GET,POST']];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
@@ -660,7 +647,7 @@ class UriBuilderTest extends UnitTestCase
         $mockDomainObject2->_set('uid', '321');
         $this->uriBuilder->setTargetPageUid(123);
         $this->uriBuilder->setArguments(['someDomainObject' => $mockDomainObject1, 'baz' => ['someOtherDomainObject' => $mockDomainObject2]]);
-        $expectedConfiguration = ['parameter' => 123, 'useCacheHash' => 1, 'additionalParams' => '&someDomainObject=123&baz%5BsomeOtherDomainObject%5D=321'];
+        $expectedConfiguration = ['parameter' => 123, 'additionalParams' => '&someDomainObject=123&baz%5BsomeOtherDomainObject%5D=321'];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
@@ -683,7 +670,7 @@ class UriBuilderTest extends UnitTestCase
             ->with('SomeExtensionNameFromRequest', 'txt')
             ->will($this->returnValue(2));
 
-        $expectedConfiguration = ['parameter' => '123,2', 'useCacheHash' => 1];
+        $expectedConfiguration = ['parameter' => '123,2'];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
@@ -704,7 +691,7 @@ class UriBuilderTest extends UnitTestCase
             ->with(null, 'txt')
             ->will($this->returnValue(0));
 
-        $expectedConfiguration = ['parameter' => '123,0', 'useCacheHash' => 1];
+        $expectedConfiguration = ['parameter' => '123,0'];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
 
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
@@ -727,7 +714,7 @@ class UriBuilderTest extends UnitTestCase
             ->with(null, 'txt')
             ->will($this->returnValue(0));
 
-        $expectedConfiguration = ['parameter' => '123,0', 'useCacheHash' => 1];
+        $expectedConfiguration = ['parameter' => '123,0'];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
 
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
@@ -748,23 +735,11 @@ class UriBuilderTest extends UnitTestCase
     /**
      * @test
      */
-    public function buildTypolinkConfigurationDoesNotSetUseCacheHashOptionIfUseCacheHashIsDisabled()
-    {
-        $this->uriBuilder->setTargetPageUid(123);
-        $this->uriBuilder->setUseCacheHash(false);
-        $expectedConfiguration = ['parameter' => 123];
-        $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
-        $this->assertEquals($expectedConfiguration, $actualConfiguration);
-    }
-
-    /**
-     * @test
-     */
     public function buildTypolinkConfigurationConsidersSection()
     {
         $this->uriBuilder->setTargetPageUid(123);
         $this->uriBuilder->setSection('SomeSection');
-        $expectedConfiguration = ['parameter' => 123, 'useCacheHash' => 1, 'section' => 'SomeSection'];
+        $expectedConfiguration = ['parameter' => 123, 'section' => 'SomeSection'];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
@@ -776,7 +751,7 @@ class UriBuilderTest extends UnitTestCase
     {
         $this->uriBuilder->setTargetPageUid(123);
         $this->uriBuilder->setLinkAccessRestrictedPages(true);
-        $expectedConfiguration = ['parameter' => 123, 'useCacheHash' => 1, 'linkAccessRestrictedPages' => 1];
+        $expectedConfiguration = ['parameter' => 123, 'linkAccessRestrictedPages' => 1];
         $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration');
         $this->assertEquals($expectedConfiguration, $actualConfiguration);
     }
index 719fec8..eb3d33a 100644 (file)
@@ -117,7 +117,8 @@ class FormViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewH
         $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);
-        $this->registerArgument('noCacheHash', 'bool', 'set this to suppress the cHash query parameter created by TypoLink. 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, []);
@@ -195,6 +196,10 @@ class FormViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewH
         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);
+            }
+
             $pageUid = (isset($this->arguments['pageUid']) && (int)$this->arguments['pageUid'] > 0) ? (int)$this->arguments['pageUid'] : null;
             $uriBuilder = $this->renderingContext->getControllerContext()->getUriBuilder();
             $formActionUri = $uriBuilder
@@ -202,7 +207,6 @@ class FormViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewH
                 ->setTargetPageUid($pageUid)
                 ->setTargetPageType($this->arguments['pageType'] ?? 0)
                 ->setNoCache($this->arguments['noCache'] ?? false)
-                ->setUseCacheHash(isset($this->arguments['noCacheHash']) ? !$this->arguments['noCacheHash'] : true)
                 ->setSection($this->arguments['section'] ?? '')
                 ->setCreateAbsoluteUri($this->arguments['absolute'] ?? false)
                 ->setArguments(isset($this->arguments['additionalParams']) ? (array)$this->arguments['additionalParams'] : [])
index ddbebdb..6a8e4b3 100644 (file)
@@ -57,7 +57,8 @@ 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.');
-        $this->registerArgument('noCacheHash', 'bool', 'Set this to suppress the cHash query parameter created by TypoLink. 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.');
@@ -74,6 +75,9 @@ 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'];
@@ -81,7 +85,6 @@ class ActionViewHelper extends AbstractTagBasedViewHelper
         $pageUid = (int)$this->arguments['pageUid'] ?: null;
         $pageType = (int)$this->arguments['pageType'];
         $noCache = (bool)$this->arguments['noCache'];
-        $noCacheHash = (bool)$this->arguments['noCacheHash'];
         $section = (string)$this->arguments['section'];
         $format = (string)$this->arguments['format'];
         $linkAccessRestrictedPages = (bool)$this->arguments['linkAccessRestrictedPages'];
@@ -97,7 +100,6 @@ class ActionViewHelper extends AbstractTagBasedViewHelper
             ->setTargetPageUid($pageUid)
             ->setTargetPageType($pageType)
             ->setNoCache($noCache)
-            ->setUseCacheHash(!$noCacheHash)
             ->setSection($section)
             ->setFormat($format)
             ->setLinkAccessRestrictedPages($linkAccessRestrictedPages)
index 6110213..9f63df0 100644 (file)
@@ -71,7 +71,8 @@ class PageViewHelper 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.');
-        $this->registerArgument('noCacheHash', 'bool', 'Set this to suppress the cHash query parameter created by TypoLink. 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.', 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)');
@@ -86,10 +87,12 @@ 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;
-        $noCacheHash = isset($this->arguments['noCacheHash']) ? (bool)$this->arguments['noCacheHash'] : false;
         $section = isset($this->arguments['section']) ? (string)$this->arguments['section'] : '';
         $linkAccessRestrictedPages = isset($this->arguments['linkAccessRestrictedPages']) ? (bool)$this->arguments['linkAccessRestrictedPages'] : false;
         $additionalParams = isset($this->arguments['additionalParams']) ? (array)$this->arguments['additionalParams'] : [];
@@ -102,7 +105,6 @@ class PageViewHelper extends AbstractTagBasedViewHelper
             ->setTargetPageUid($pageUid)
             ->setTargetPageType($pageType)
             ->setNoCache($noCache)
-            ->setUseCacheHash(!$noCacheHash)
             ->setSection($section)
             ->setLinkAccessRestrictedPages($linkAccessRestrictedPages)
             ->setArguments($additionalParams)
index 25e7fcc..79a8907 100644 (file)
@@ -76,7 +76,8 @@ class TypolinkViewHelper extends AbstractViewHelper
         $this->registerArgument('title', 'string', '', false, '');
         $this->registerArgument('additionalParams', 'string', '', false, '');
         $this->registerArgument('additionalAttributes', 'array', '', false, []);
-        $this->registerArgument('useCacheHash', 'bool', '', false, false);
+        // @deprecated
+        $this->registerArgument('useCacheHash', 'bool', '', false, null);
         $this->registerArgument('addQueryString', 'bool', '', false, false);
         $this->registerArgument('addQueryStringMethod', 'string', '', false, 'GET');
         $this->registerArgument('addQueryStringExclude', 'string', '', false, '');
@@ -95,13 +96,15 @@ 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'] ?? '';
         $target = $arguments['target'] ?? '';
         $class = $arguments['class'] ?? '';
         $title = $arguments['title'] ?? '';
         $additionalParams = $arguments['additionalParams'] ?? '';
         $additionalAttributes = $arguments['additionalAttributes'] ?? [];
-        $useCacheHash = $arguments['useCacheHash'] ?? false;
         $addQueryString = $arguments['addQueryString'] ?? false;
         $addQueryStringMethod = $arguments['addQueryStringMethod'] ?? 'GET';
         $addQueryStringExclude = $arguments['addQueryStringExclude'] ?? '';
@@ -130,7 +133,6 @@ class TypolinkViewHelper extends AbstractViewHelper
                     'typolink.' => [
                         'parameter' => $typolinkParameter,
                         'ATagParams' => $aTagParams,
-                        'useCacheHash' => $useCacheHash,
                         'addQueryString' => $addQueryString,
                         'addQueryString.' => [
                             'method' => $addQueryStringMethod,
index 1957129..59f85cf 100644 (file)
@@ -47,8 +47,9 @@ class ActionViewHelper extends AbstractViewHelper
         $this->registerArgument('pluginName', 'string', 'Target plugin. If empty, the current plugin name is used');
         $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, false);
-        $this->registerArgument('noCacheHash', 'bool', 'Set this to suppress the cHash query parameter created by TypoLink. You should not need this.', false, false);
+        $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);
@@ -70,7 +71,9 @@ class ActionViewHelper extends AbstractViewHelper
         $pageUid = $arguments['pageUid'];
         $pageType = $arguments['pageType'];
         $noCache = $arguments['noCache'];
-        $noCacheHash = $arguments['noCacheHash'];
+        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);
+        }
         $section = $arguments['section'];
         $format = $arguments['format'];
         $linkAccessRestrictedPages = $arguments['linkAccessRestrictedPages'];
@@ -90,7 +93,6 @@ class ActionViewHelper extends AbstractViewHelper
             ->setTargetPageUid($pageUid)
             ->setTargetPageType($pageType)
             ->setNoCache($noCache)
-            ->setUseCacheHash(!$noCacheHash)
             ->setSection($section)
             ->setFormat($format)
             ->setLinkAccessRestrictedPages($linkAccessRestrictedPages)
index 057c7fd..8da279b 100644 (file)
@@ -58,7 +58,8 @@ class PageViewHelper extends AbstractViewHelper
         $this->registerArgument('additionalParams', 'array', 'query parameters to be attached to the resulting URI', false, []);
         $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('noCacheHash', 'bool', 'set this to suppress the cHash query parameter created by TypoLink. 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 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);
@@ -79,7 +80,9 @@ class PageViewHelper extends AbstractViewHelper
         $additionalParams = $arguments['additionalParams'];
         $pageType = $arguments['pageType'];
         $noCache = $arguments['noCache'];
-        $noCacheHash = $arguments['noCacheHash'];
+        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'];
         $linkAccessRestrictedPages = $arguments['linkAccessRestrictedPages'];
         $absolute = $arguments['absolute'];
@@ -88,7 +91,7 @@ class PageViewHelper extends AbstractViewHelper
         $addQueryStringMethod = $arguments['addQueryStringMethod'];
 
         $uriBuilder = $renderingContext->getControllerContext()->getUriBuilder();
-        $uri = $uriBuilder->setTargetPageUid($pageUid)->setTargetPageType($pageType)->setNoCache($noCache)->setUseCacheHash(!$noCacheHash)->setSection($section)->setLinkAccessRestrictedPages($linkAccessRestrictedPages)->setArguments($additionalParams)->setCreateAbsoluteUri($absolute)->setAddQueryString($addQueryString)->setArgumentsToBeExcludedFromQueryString($argumentsToBeExcludedFromQueryString)->setAddQueryStringMethod($addQueryStringMethod)->build();
+        $uri = $uriBuilder->setTargetPageUid($pageUid)->setTargetPageType($pageType)->setNoCache($noCache)->setSection($section)->setLinkAccessRestrictedPages($linkAccessRestrictedPages)->setArguments($additionalParams)->setCreateAbsoluteUri($absolute)->setAddQueryString($addQueryString)->setArgumentsToBeExcludedFromQueryString($argumentsToBeExcludedFromQueryString)->setAddQueryStringMethod($addQueryStringMethod)->build();
         return $uri;
     }
 }
index 6c61286..0729e3e 100644 (file)
@@ -40,7 +40,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Full parameter usage::
  *
- *    <f:uri.typolink parameter="{link}" additionalParams="&u=b" useCacheHash="true" />
+ *    <f:uri.typolink parameter="{link}" additionalParams="&u=b" />
  *
  * ``index.php?id=19&X=y&u=b``
  */
@@ -55,7 +55,8 @@ class TypolinkViewHelper extends AbstractViewHelper
     {
         $this->registerArgument('parameter', 'string', 'stdWrap.typolink style parameter string', true);
         $this->registerArgument('additionalParams', 'string', 'stdWrap.typolink additionalParams', false, '');
-        $this->registerArgument('useCacheHash', 'bool', '', false, false);
+        // @deprecated
+        $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, '');
@@ -71,9 +72,11 @@ 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'];
         $additionalParams = $arguments['additionalParams'];
-        $useCacheHash = $arguments['useCacheHash'];
         $addQueryString = $arguments['addQueryString'];
         $addQueryStringMethod = $arguments['addQueryStringMethod'];
         $addQueryStringExclude = $arguments['addQueryStringExclude'];
@@ -85,7 +88,6 @@ class TypolinkViewHelper extends AbstractViewHelper
             $content = $contentObject->typoLink_URL(
                 [
                     'parameter' => self::createTypolinkParameterFromArguments($parameter, $additionalParams),
-                    'useCacheHash' => $useCacheHash,
                     'addQueryString' => $addQueryString,
                     'addQueryString.' => [
                         'method' => $addQueryStringMethod,
index 7e90d45..9e659a5 100644 (file)
@@ -50,7 +50,8 @@ 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');
-        $this->registerArgument('useCacheHash', 'bool', 'True whether the cache hash should be appended to the URL', false, false);
+        // @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, []);
@@ -114,10 +115,12 @@ 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);
+        }
         return $uriBuilder->reset()
             ->setArguments([$argumentPrefix => $arguments])
             ->setSection($this->arguments['section'])
-            ->setUseCacheHash($this->arguments['useCacheHash'])
             ->setAddQueryString(true)
             ->setAddQueryStringMethod($this->arguments['addQueryStringMethod'])
             ->setArgumentsToBeExcludedFromQueryString([$argumentPrefix, 'cHash'])
index 5ee1df0..636139f 100644 (file)
@@ -40,7 +40,8 @@ class UriViewHelper extends AbstractViewHelper
      */
     public function initializeArguments()
     {
-        $this->registerArgument('useCacheHash', 'bool', 'True whether the cache hash should be appended to the URL', false, false);
+        // @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, []);
@@ -107,10 +108,12 @@ 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);
+        }
         return $uriBuilder->reset()
             ->setArguments([$argumentPrefix => $parameters])
             ->setSection($arguments['section'])
-            ->setUseCacheHash($arguments['useCacheHash'])
             ->setAddQueryString(true)
             ->setAddQueryStringMethod($arguments['addQueryStringMethod'])
             ->setArgumentsToBeExcludedFromQueryString([$argumentPrefix, 'cHash'])
index 33c050d..1f2f809 100644 (file)
@@ -94,7 +94,6 @@ class TypolinkViewHelperTest extends ViewHelperBaseTestcase
                     'typolink.' => [
                         'parameter' => '42',
                         'ATagParams' => '',
-                        'useCacheHash' => false,
                         'addQueryString' => $addQueryString,
                         'addQueryString.' => [
                             'method' => $addQueryStringMethod,
index f182995..228536e 100644 (file)
@@ -20,7 +20,6 @@ use TYPO3\CMS\Core\Context\LanguageAspect;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\RelationHandler;
 use TYPO3\CMS\Core\Routing\SiteMatcher;
-use TYPO3\CMS\Core\Site\Entity\Site;
 use TYPO3\CMS\Core\Site\Entity\SiteInterface;
 use TYPO3\CMS\Core\TimeTracker\TimeTracker;
 use TYPO3\CMS\Core\TypoScript\TemplateService;
@@ -29,7 +28,6 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
 use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
 use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
-use TYPO3\CMS\Frontend\Page\CacheHashCalculator;
 use TYPO3\CMS\Frontend\Page\PageRepository;
 use TYPO3\CMS\Frontend\Typolink\PageLinkBuilder;
 
@@ -179,14 +177,6 @@ abstract class AbstractMenuContentObject
     protected $alternativeMenuTempArray = '';
 
     /**
-     * TRUE to use cHash in generated link (normally only for the language
-     * selector and if parameters exist in the URL).
-     *
-     * @var bool
-     */
-    protected $useCacheHash = false;
-
-    /**
      * Array key of the parentMenuItem in the parentMenuArr, if this menu is a subMenu.
      *
      * @var int|null
@@ -359,8 +349,6 @@ abstract class AbstractMenuContentObject
             return;
         }
 
-        $this->useCacheHash = false;
-
         // Initializing showAccessRestrictedPages
         $SAVED_where_groupAccess = '';
         if ($this->mconf['showAccessRestrictedPages']) {
@@ -623,7 +611,6 @@ abstract class AbstractMenuContentObject
                     [],
                     true
                 );
-                $this->analyzeCacheHashRequirements($getVars);
             }
             // Adding menu item:
             $menuItems[] = array_merge(
@@ -1153,31 +1140,6 @@ abstract class AbstractMenuContentObject
     }
 
     /**
-     * Analyzes the parameters to find if the link needs a cHash parameter.
-     *
-     * @param string $queryString
-     */
-    protected function analyzeCacheHashRequirements($queryString)
-    {
-        $parameters = GeneralUtility::explodeUrl2Array($queryString);
-        if (!empty($parameters)) {
-            if (!isset($parameters['id'])) {
-                $queryString .= '&id=' . $this->getTypoScriptFrontendController()->id;
-            }
-            /** @var CacheHashCalculator $cacheHashCalculator */
-            $cacheHashCalculator = GeneralUtility::makeInstance(CacheHashCalculator::class);
-            $cHashParameters = $cacheHashCalculator->getRelevantParameters($queryString);
-            if (count($cHashParameters) > 1) {
-                $this->useCacheHash = (
-                    $GLOBALS['TYPO3_CONF_VARS']['FE']['disableNoCacheParameter'] ||
-                    !isset($parameters['no_cache']) ||
-                    !$parameters['no_cache']
-                );
-            }
-        }
-    }
-
-    /**
      * Checks if a page is OK to include in the final menu item array. Pages can be excluded if the doktype is wrong,
      * if they are hidden in navigation, have a uid in the list of banned uids etc.
      *
@@ -1992,9 +1954,6 @@ abstract class AbstractMenuContentObject
         if (isset($page['_PAGES_OVERLAY_REQUESTEDLANGUAGE'])) {
             $conf['language'] = $page['_PAGES_OVERLAY_REQUESTEDLANGUAGE'];
         }
-        if ($this->useCacheHash) {
-            $conf['useCacheHash'] = true;
-        }
         if ($oTarget) {
             $conf['target'] = $oTarget;
         }
index 34f382e..03abf8d 100644 (file)
@@ -388,7 +388,6 @@ class AbstractPlugin
     public function pi_linkTP($str, $urlParameters = [], $cache = false, $altPageId = 0)
     {
         $conf = [];
-        $conf['useCacheHash'] = $this->pi_USER_INT_obj ? 0 : $cache;
         $conf['no_cache'] = $this->pi_USER_INT_obj ? 0 : !$cache;
         $conf['parameter'] = $altPageId ? $altPageId : ($this->pi_tmpPageId ? $this->pi_tmpPageId : $this->frontendController->id);
         $conf['additionalParams'] = $this->conf['parent.']['addParams'] . HttpUtility::buildQueryString($urlParameters, '&', true) . $this->pi_moreParams;
index e8b083c..5003dc4 100644 (file)
@@ -148,7 +148,8 @@ class PageLinkBuilder extends AbstractTypolinkBuilder
             }
         }
 
-        if ($conf['useCacheHash']) {
+        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);
         }
 
index d147985..1ebd2e6 100644 (file)
@@ -16,8 +16,6 @@ namespace TYPO3\CMS\Frontend\Tests\Functional\SiteHandling;
  */
 
 use TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait;
-use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Frontend\Page\CacheHashCalculator;
 use TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Fixtures\LinkHandlingController;
 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\Internal\ArrayValueInstruction;
 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
@@ -171,32 +169,6 @@ abstract class AbstractTestCase extends FunctionalTestCase
     }
 
     /**
-     * @param string $uri
-     * @return string
-     */
-    protected static function generateCacheHash(string $uri): string
-    {
-        if (!isset($GLOBALS['TYPO3_CONF_VARS'])) {
-            $GLOBALS['TYPO3_CONF_VARS'] = [];
-        }
-
-        $configuration = $GLOBALS['TYPO3_CONF_VARS'];
-        ArrayUtility::mergeRecursiveWithOverrule(
-            $GLOBALS['TYPO3_CONF_VARS'],
-            static::TYPO3_CONF_VARS
-        );
-
-        $calculator = new CacheHashCalculator();
-        $parameters = $calculator->getRelevantParameters(
-            parse_url($uri, PHP_URL_QUERY)
-        );
-        $cacheHash = $calculator->calculateCacheHash($parameters);
-
-        $GLOBALS['TYPO3_CONF_VARS'] = $configuration;
-        return $cacheHash;
-    }
-
-    /**
      * @param array $typoScript
      * @return ArrayValueInstruction
      */
index e1d41cf..c832f7b 100644 (file)
@@ -410,8 +410,7 @@ class SlugLinkGeneratorTest extends AbstractTestCase
                 ->withInstructions([
                     $this->createTypoLinkUrlInstruction([
                         'parameter' => $targetPageId,
-                        'additionalParams' => '&testing[value]=1',
-                        'useCacheHash' => 1,
+                        'additionalParams' => '&testing[value]=1'
                     ])
                 ]),
             $this->internalRequestContext
index c82032d..0269b62 100644 (file)
@@ -370,13 +370,11 @@ class AbstractMenuContentObjectTest extends UnitTestCase
             'standard parameter without access protected setting' => [
                 [
                     'parameter' => 1,
-                    'linkAccessRestrictedPages' => false,
-                    'useCacheHash' => true
+                    'linkAccessRestrictedPages' => false
                 ],
                 [
                     'showAccessRestrictedPages' => false
                 ],
-                true,
                 ['uid' => 1],
                 '',
                 0,
@@ -385,13 +383,11 @@ class AbstractMenuContentObjectTest extends UnitTestCase
             'standard parameter with access protected setting' => [
                 [
                     'parameter' => 10,
-                    'linkAccessRestrictedPages' => true,
-                    'useCacheHash' => true
+                    'linkAccessRestrictedPages' => true
                 ],
                 [
                     'showAccessRestrictedPages' => true
                 ],
-                true,
                 ['uid' => 10],
                 '',
                 0,
@@ -400,13 +396,11 @@ class AbstractMenuContentObjectTest extends UnitTestCase
             'standard parameter with access protected setting "NONE" casts to boolean linkAccessRestrictedPages (delegates resolving to typoLink method internals)' => [
                 [
                     'parameter' => 10,
-                    'linkAccessRestrictedPages' => true,
-                    'useCacheHash' => true
+                    'linkAccessRestrictedPages' => true
                 ],
                 [
                     'showAccessRestrictedPages' => 'NONE'
                 ],
-                true,
                 ['uid' => 10],
                 '',
                 0,
@@ -415,13 +409,11 @@ class AbstractMenuContentObjectTest extends UnitTestCase
             'standard parameter with access protected setting (int)67 casts to boolean linkAccessRestrictedPages (delegates resolving to typoLink method internals)' => [
                 [
                     'parameter' => 10,
-                    'linkAccessRestrictedPages' => true,
-                    'useCacheHash' => true
+                    'linkAccessRestrictedPages' => true
                 ],
                 [
                     'showAccessRestrictedPages' => 67
                 ],
-                true,
                 ['uid' => 10],
                 '',
                 0,
@@ -431,13 +423,11 @@ class AbstractMenuContentObjectTest extends UnitTestCase
                 [
                     'parameter' => 1,
                     'target' => '_blank',
-                    'linkAccessRestrictedPages' => false,
-                    'useCacheHash' => true
+                    'linkAccessRestrictedPages' => false
                 ],
                 [
                     'showAccessRestrictedPages' => false
                 ],
-                true,
                 ['uid' => 1],
                 '_blank',
                 0,
@@ -446,13 +436,11 @@ class AbstractMenuContentObjectTest extends UnitTestCase
             'parameter with typeOverride=10' => [
                 [
                     'parameter' => '10,10',
-                    'linkAccessRestrictedPages' => false,
-                    'useCacheHash' => true
+                    'linkAccessRestrictedPages' => false
                 ],
                 [
                     'showAccessRestrictedPages' => false
                 ],
-                true,
                 ['uid' => 10],
                 '',
                 '',
@@ -462,13 +450,11 @@ class AbstractMenuContentObjectTest extends UnitTestCase
                 [
                     'parameter' => '10,10',
                     'linkAccessRestrictedPages' => false,
-                    'useCacheHash' => true,
                     'target' => '_self'
                 ],
                 [
                     'showAccessRestrictedPages' => false
                 ],
-                true,
                 ['uid' => 10],
                 '_self',
                 '',
@@ -478,13 +464,11 @@ class AbstractMenuContentObjectTest extends UnitTestCase
                 [
                     'parameter' => 20,
                     'linkAccessRestrictedPages' => false,
-                    'useCacheHash' => true,
                     'target' => '_self'
                 ],
                 [
                     'showAccessRestrictedPages' => false
                 ],
-                true,
                 ['uid' => 20],
                 '_self',
                 '',
@@ -501,7 +485,6 @@ class AbstractMenuContentObjectTest extends UnitTestCase
                 [
                     'showAccessRestrictedPages' => false
                 ],
-                false,
                 [
                     'uid' => 10,
                     'sectionIndex_uid' => 'section-name'
@@ -520,7 +503,6 @@ class AbstractMenuContentObjectTest extends UnitTestCase
                 [
                     'showAccessRestrictedPages' => false
                 ],
-                false,
                 [
                     'uid' => 10,
                     'sectionIndex_uid' => 'section-name'
@@ -538,7 +520,6 @@ class AbstractMenuContentObjectTest extends UnitTestCase
                 [
                     'showAccessRestrictedPages' => false
                 ],
-                false,
                 [
                     'uid' => 10,
                     'sectionIndex_uid' => 'section-name'
@@ -556,14 +537,13 @@ class AbstractMenuContentObjectTest extends UnitTestCase
      * @dataProvider menuTypoLinkCreatesExpectedTypoLinkConfiurationDataProvider
      * @param array $expected
      * @param array $mconf
-     * @param bool $useCacheHash
      * @param array $page
      * @param mixed $oTarget
      * @param string $addParams
      * @param string $typeOverride
      * @param int $overrideId
      */
-    public function menuTypoLinkCreatesExpectedTypoLinkConfiguration(array $expected, array $mconf, $useCacheHash, array $page, $oTarget, $addParams = '', $typeOverride = '', int $overrideId = null)
+    public function menuTypoLinkCreatesExpectedTypoLinkConfiguration(array $expected, array $mconf, array $page, $oTarget, $addParams = '', $typeOverride = '', int $overrideId = null)
     {
         $cObject = $this->getMockBuilder(ContentObjectRenderer::class)
             ->setMethods(['typoLink'])
@@ -571,7 +551,6 @@ class AbstractMenuContentObjectTest extends UnitTestCase
         $cObject->expects($this->once())->method('typoLink')->with('|', $expected);
         $this->subject->_set('parent_cObj', $cObject);
         $this->subject->_set('mconf', $mconf);
-        $this->subject->_set('useCacheHash', $useCacheHash);
         $this->subject->_call('menuTypoLink', $page, $oTarget, $addParams, $typeOverride, $overrideId);
     }
 }
index f2d6c8e..06aa508 100644 (file)
@@ -1606,7 +1606,6 @@ class SearchController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionControlle
         $uri = $this->controllerContext->getUriBuilder()
                 ->setTargetPageUid($pageUid)
                 ->setTargetPageType($row['data_page_type'])
-                ->setUseCacheHash(true)
                 ->setArguments($urlParameters)
                 ->build();
 
index e0f5de0..e3a849c 100644 (file)
@@ -35,7 +35,7 @@
                             <f:for each="{result.affectedSections}" as="sectionData" key="sectionId">
                                 <tr>
                                     <td width="100%">--&gt;&nbsp;
-                                        <f:link.page section="anchor_{sectionId}" addQueryString="1" noCacheHash="1"
+                                        <f:link.page section="anchor_{sectionId}" addQueryString="1"
                                                                 argumentsToBeExcludedFromQueryString="{0: 'id'}">
                                             <f:if condition="{sectionData.0}">
                                                 <f:then>{sectionData.0}</f:then>
index 6d3264a..7fe89fe 100644 (file)
@@ -4140,4 +4140,18 @@ return [
             'Breaking-87305-UseConstructorInjectionInDataMapper.rst',
         ],
     ],
+    'TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder->setUseCacheHash' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-88406-SetCacheHashnoCacheHashOptionsInViewHelpersAndUriBuilder.rst'
+        ],
+    ],
+    'TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder->getUseCacheHash' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-88406-SetCacheHashnoCacheHashOptionsInViewHelpersAndUriBuilder.rst'
+        ],
+    ],
 ];
index 06d2845..75f2709 100644 (file)
@@ -147,7 +147,6 @@ class RecordsXmlSitemapDataProvider extends AbstractXmlSitemapDataProvider
             'parameter' => $pageId,
             'additionalParams' => $additionalParamsString ? '&' . $additionalParamsString : '',
             'forceAbsoluteUrl' => 1,
-            'useCacheHash' => $this->config['url']['useCacheHash'] ?? 0
         ];
 
         $data['loc'] = $this->cObj->typoLink_URL($typoLinkConfig);
index 1836434..a10862e 100644 (file)
@@ -5,8 +5,8 @@
         <sitemap>
             <f:spaceless>
                 <f:if condition="{sitemap.page}">
-                    <f:then><loc><f:uri.page pageType="{type}" additionalParams="{sitemap: sitemap.key, page: sitemap.page}" absolute="true" noCacheHash="false" /></loc></f:then>
-                    <f:else><loc><f:uri.page pageType="{type}" additionalParams="{sitemap: sitemap.key}" absolute="true" noCacheHash="false" /></loc></f:else>
+                    <f:then><loc><f:uri.page pageType="{type}" additionalParams="{sitemap: sitemap.key, page: sitemap.page}" absolute="true" /></loc></f:then>
+                    <f:else><loc><f:uri.page pageType="{type}" additionalParams="{sitemap: sitemap.key}" absolute="true" /></loc></f:else>
                 </f:if>
             </f:spaceless>
             <lastmod>{sitemap.lastMod -> f:format.date(format: 'c')}</lastmod>
index 8628716..f239dcd 100644 (file)
@@ -16,7 +16,6 @@ plugin.tx_seo {
               fieldToParameterMap {
                 uid = tx_example_content[id]
               }
-              useCacheHash = 1
             }
           }
         }
index 30e86e4..fa9a1c1 100644 (file)
@@ -14,7 +14,6 @@ plugin.tx_seo {
               fieldToParameterMap {
                 uid = tx_example_category[id]
               }
-              useCacheHash = 1
             }
           }
         }
index 6d70d76..c2cedf6 100644 (file)
         'upper': kw('upper'),
         'url': A,
         'us': B,
-        'useCacheHash': kw('useCacheHash'),
         'useLargestItemX': kw('useLargestItemX'),
         'useLargestItemY': kw('useLargestItemY'),
         'USER': kw('USER'),