From cdab5786bbd03fb5451c80eb9719b4e482af8325 Mon Sep 17 00:00:00 2001 From: Benjamin Kott Date: Fri, 11 Oct 2024 15:00:20 +0200 Subject: [PATCH] [TASK] Avoid deprecated calls to get request in ViewHelpers (#1520) --- Build/phpstan-baseline-v13.neon | 39 ------------------- .../ViewHelpers/Data/PaginateViewHelper.php | 31 ++++++++++++--- .../ViewHelpers/Link/PaginateViewHelper.php | 20 ++++++++-- .../TypoScript/ConstantViewHelper.php | 19 ++++++++- 4 files changed, 59 insertions(+), 50 deletions(-) diff --git a/Build/phpstan-baseline-v13.neon b/Build/phpstan-baseline-v13.neon index c922dd907..bc09fae1b 100644 --- a/Build/phpstan-baseline-v13.neon +++ b/Build/phpstan-baseline-v13.neon @@ -1,24 +1,5 @@ parameters: ignoreErrors: - - - message: """ - #^Call to deprecated method getRequest\\(\\) of class TYPO3\\\\CMS\\\\Fluid\\\\Core\\\\Rendering\\\\RenderingContext\\: - since TYPO3 v13, will be removed in TYPO3 v14\\. - Use \\$renderingContext\\-\\>hasAttribute\\(ServerRequestInterface\\:\\:class\\) and - \\$renderingContext\\-\\>getAttribute\\(ServerRequestInterface\\:\\:class\\) instead\\.$# - """ - count: 3 - path: ../Classes/ViewHelpers/Data/PaginateViewHelper.php - - - - message: """ - #^Call to deprecated method setRequest\\(\\) of class TYPO3\\\\CMS\\\\Fluid\\\\Core\\\\Rendering\\\\RenderingContext\\: - since TYPO3 v13, will be removed in TYPO3 v14\\. - Use RenderingContextFactory\\-\\>create\\(\\$pathArray, \\$request\\) instead\\.$# - """ - count: 1 - path: ../Classes/ViewHelpers/Data/PaginateViewHelper.php - - message: """ #^Fetching class constant class of deprecated class TYPO3\\\\CMS\\\\Fluid\\\\View\\\\StandaloneView\\: @@ -75,26 +56,6 @@ parameters: count: 1 path: ../Classes/ViewHelpers/FrameViewHelper.php - - - message: """ - #^Call to deprecated method getRequest\\(\\) of class TYPO3\\\\CMS\\\\Fluid\\\\Core\\\\Rendering\\\\RenderingContext\\: - since TYPO3 v13, will be removed in TYPO3 v14\\. - Use \\$renderingContext\\-\\>hasAttribute\\(ServerRequestInterface\\:\\:class\\) and - \\$renderingContext\\-\\>getAttribute\\(ServerRequestInterface\\:\\:class\\) instead\\.$# - """ - count: 2 - path: ../Classes/ViewHelpers/Link/PaginateViewHelper.php - - - - message: """ - #^Call to deprecated method getRequest\\(\\) of class TYPO3\\\\CMS\\\\Fluid\\\\Core\\\\Rendering\\\\RenderingContext\\: - since TYPO3 v13, will be removed in TYPO3 v14\\. - Use \\$renderingContext\\-\\>hasAttribute\\(ServerRequestInterface\\:\\:class\\) and - \\$renderingContext\\-\\>getAttribute\\(ServerRequestInterface\\:\\:class\\) instead\\.$# - """ - count: 2 - path: ../Classes/ViewHelpers/TypoScript/ConstantViewHelper.php - - message: """ #^Fetching deprecated class constant FILETYPE_IMAGE of class TYPO3\\\\CMS\\\\Core\\\\Resource\\\\File\\: diff --git a/Classes/ViewHelpers/Data/PaginateViewHelper.php b/Classes/ViewHelpers/Data/PaginateViewHelper.php index 3d02827e0..4ede4d734 100644 --- a/Classes/ViewHelpers/Data/PaginateViewHelper.php +++ b/Classes/ViewHelpers/Data/PaginateViewHelper.php @@ -9,6 +9,7 @@ namespace BK2K\BootstrapPackage\ViewHelpers\Data; +use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Core\Pagination\ArrayPaginator; use TYPO3\CMS\Core\Pagination\SimplePagination; use TYPO3\CMS\Core\Utility\ArrayUtility; @@ -20,6 +21,7 @@ use TYPO3\CMS\Fluid\Core\Rendering\RenderingContext; use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory; use TYPO3\CMS\Fluid\View\StandaloneView; +use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface; use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; /** @@ -43,8 +45,8 @@ public function initializeArguments(): void public function render(): string { $renderingContext = $this->renderingContext; - if ($renderingContext instanceof RenderingContext && $renderingContext->getRequest() !== null) { - $request = $renderingContext->getRequest(); + $request = $this->getRequestFromRenderingContext($renderingContext); + if ($request !== null) { $objects = $this->arguments['objects']; if (!($objects instanceof QueryResultInterface || is_array($objects))) { throw new \UnexpectedValueException('Supplied file object type ' . get_class($objects) . ' must be QueryResultInterface or be an array.', 1623322979); @@ -69,7 +71,7 @@ public function render(): string } $pagination = new SimplePagination($paginator); - $paginationView = $this->getTemplateObject($renderingContext); + $paginationView = $this->getTemplateObject($renderingContext, $request); $paginationView->assignMultiple([ 'id' => $id, 'paginator' => $paginator, @@ -97,12 +99,17 @@ public function render(): string ); } - protected function getTemplateObject(RenderingContext $renderingContext): StandaloneView + protected function getTemplateObject(RenderingContextInterface $renderingContext, ServerRequestInterface $request): StandaloneView { $setup = $this->getConfigurationManager()->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); - $context = GeneralUtility::makeInstance(RenderingContextFactory::class)->create(); - $context->setRequest($renderingContext->getRequest()); + /** @phpstan-ignore-next-line */ + $context = GeneralUtility::makeInstance(RenderingContextFactory::class)->create([], $request); + if ((new \ReflectionMethod(RenderingContextFactory::class, 'create'))->getNumberOfParameters() === 1) { + /** @phpstan-ignore-next-line */ + $context->setRequest($request); + } + /** @var StandaloneView $view */ $view = GeneralUtility::makeInstance(StandaloneView::class, $context); @@ -143,4 +150,16 @@ protected function getConfigurationManager(): ConfigurationManagerInterface return $configurationManager; } + + protected function getRequestFromRenderingContext(RenderingContextInterface $renderingContext): ?ServerRequestInterface + { + if ($renderingContext->hasAttribute(ServerRequestInterface::class)) { + return $renderingContext->getAttribute(ServerRequestInterface::class); + } elseif ($renderingContext instanceof RenderingContext) { + /** @phpstan-ignore-next-line */ + return $renderingContext->getRequest(); + } + + return null; + } } diff --git a/Classes/ViewHelpers/Link/PaginateViewHelper.php b/Classes/ViewHelpers/Link/PaginateViewHelper.php index 576272219..8bb959255 100644 --- a/Classes/ViewHelpers/Link/PaginateViewHelper.php +++ b/Classes/ViewHelpers/Link/PaginateViewHelper.php @@ -9,6 +9,7 @@ namespace BK2K\BootstrapPackage\ViewHelpers\Link; +use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Core\Http\ApplicationType; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\HttpUtility; @@ -16,6 +17,7 @@ use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; use TYPO3\CMS\Frontend\Typolink\LinkFactory; use TYPO3\CMS\Frontend\Typolink\UnableToLinkException; +use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface; use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper; class PaginateViewHelper extends AbstractTagBasedViewHelper @@ -45,8 +47,8 @@ public function render(): string } $renderingContext = $this->renderingContext; - if ($renderingContext instanceof RenderingContext && $renderingContext->getRequest() !== null) { - $request = $renderingContext->getRequest(); + $request = $this->getRequestFromRenderingContext($renderingContext); + if ($request !== null) { $applicationType = ApplicationType::fromRequest($request); if ($applicationType->isFrontend()) { try { @@ -76,7 +78,7 @@ public function render(): string ); } - private function renderLink(string $uri): string + protected function renderLink(string $uri): string { $content = strval($this->renderChildren()); if (trim($uri) === '') { @@ -88,4 +90,16 @@ private function renderLink(string $uri): string $this->tag->forceClosingTag(true); return $this->tag->render(); } + + protected function getRequestFromRenderingContext(RenderingContextInterface $renderingContext): ?ServerRequestInterface + { + if ($renderingContext->hasAttribute(ServerRequestInterface::class)) { + return $renderingContext->getAttribute(ServerRequestInterface::class); + } elseif ($renderingContext instanceof RenderingContext) { + /** @phpstan-ignore-next-line */ + return $renderingContext->getRequest(); + } + + return null; + } } diff --git a/Classes/ViewHelpers/TypoScript/ConstantViewHelper.php b/Classes/ViewHelpers/TypoScript/ConstantViewHelper.php index 2ea0a9ba5..e1189a835 100644 --- a/Classes/ViewHelpers/TypoScript/ConstantViewHelper.php +++ b/Classes/ViewHelpers/TypoScript/ConstantViewHelper.php @@ -11,7 +11,9 @@ namespace BK2K\BootstrapPackage\ViewHelpers\TypoScript; use BK2K\BootstrapPackage\Utility\TypoScriptUtility; +use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Fluid\Core\Rendering\RenderingContext; +use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface; use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; /** @@ -35,9 +37,10 @@ public function initializeArguments(): void public function render(): string { $renderingContext = $this->renderingContext; - if ($renderingContext instanceof RenderingContext && $renderingContext->getRequest() !== null) { + $request = $this->getRequestFromRenderingContext($renderingContext); + if ($request !== null) { $constant = $this->arguments['constant'] ?? ''; - return TypoScriptUtility::getConstants($renderingContext->getRequest())[$constant] ?? ''; + return TypoScriptUtility::getConstants($request)[$constant] ?? ''; } throw new \RuntimeException( @@ -45,4 +48,16 @@ public function render(): string 1639819269 ); } + + protected function getRequestFromRenderingContext(RenderingContextInterface $renderingContext): ?ServerRequestInterface + { + if ($renderingContext->hasAttribute(ServerRequestInterface::class)) { + return $renderingContext->getAttribute(ServerRequestInterface::class); + } elseif ($renderingContext instanceof RenderingContext) { + /** @phpstan-ignore-next-line */ + return $renderingContext->getRequest(); + } + + return null; + } }