From dc47fd339692e2c3139e38e00e475b90bafd888f Mon Sep 17 00:00:00 2001
From: Simon Praetorius <simon@praetorius.me>
Date: Tue, 3 Sep 2024 20:10:30 +0200
Subject: [PATCH] [TASK] Avoid deprecated fillFromConfigurationArray()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

`fillFromConfigurationArray()` has been deprecated with
Fluid v2.15. Instead, we use the new ViewFactory to create
a Fluid view.

Resolves: #104822
Releases: main
Change-Id: I6b034452b27c8c66f72880f1608285053fcf6bf7
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/85861
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Stefan Bürk <stefan@buerk.tech>
Tested-by: core-ci <typo3@b13.com>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Stefan Bürk <stefan@buerk.tech>
Reviewed-by: Simon Praetorius <simon@praetorius.me>
Tested-by: Simon Praetorius <simon@praetorius.me>
---
 .../Classes/Controller/FormEditorController.php  | 16 ++++++++++------
 .../Controller/FormEditorControllerTest.php      |  3 +++
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/typo3/sysext/form/Classes/Controller/FormEditorController.php b/typo3/sysext/form/Classes/Controller/FormEditorController.php
index 394472d38963..c79c4db3b2ad 100644
--- a/typo3/sysext/form/Classes/Controller/FormEditorController.php
+++ b/typo3/sysext/form/Classes/Controller/FormEditorController.php
@@ -18,7 +18,6 @@ declare(strict_types=1);
 namespace TYPO3\CMS\Form\Controller;
 
 use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
 use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Backend\Template\Components\ButtonBar;
 use TYPO3\CMS\Backend\Template\ModuleTemplate;
@@ -33,11 +32,12 @@ use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
 use TYPO3\CMS\Core\Utility\ArrayUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\Utility\PathUtility;
+use TYPO3\CMS\Core\View\ViewFactoryData;
+use TYPO3\CMS\Core\View\ViewFactoryInterface;
 use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
 use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
 use TYPO3\CMS\Extbase\Mvc\RequestInterface;
 use TYPO3\CMS\Extbase\Mvc\View\JsonView;
-use TYPO3\CMS\Fluid\View\TemplateView;
 use TYPO3\CMS\Form\Domain\Configuration\ConfigurationService;
 use TYPO3\CMS\Form\Domain\Configuration\FormDefinitionConversionService;
 use TYPO3\CMS\Form\Domain\Exception\RenderingException;
@@ -70,6 +70,7 @@ class FormEditorController extends ActionController
         protected readonly ConfigurationService $configurationService,
         protected readonly UriBuilder $coreUriBuilder,
         protected readonly ArrayFormFactory $arrayFormFactory,
+        protected readonly ViewFactoryInterface $viewFactory,
     ) {}
 
     /**
@@ -425,10 +426,13 @@ class FormEditorController extends ActionController
             throw new RenderingException('The option partialRootPaths must be set.', 1480294722);
         }
         $insertRenderablesPanelConfiguration = $this->getInsertRenderablesPanelConfiguration($prototypeConfiguration, $formEditorDefinitions['formElements']);
-        $view = GeneralUtility::makeInstance(TemplateView::class);
-        $view->getRenderingContext()->setAttribute(ServerRequestInterface::class, $this->request);
-        $view->getRenderingContext()->getTemplatePaths()->fillFromConfigurationArray($fluidConfiguration);
-        $view->setTemplatePathAndFilename($fluidConfiguration['templatePathAndFilename']);
+        $viewFactoryData = new ViewFactoryData(
+            templatePathAndFilename: $fluidConfiguration['templatePathAndFilename'],
+            partialRootPaths: $fluidConfiguration['partialRootPaths'],
+            layoutRootPaths: $fluidConfiguration['layoutRootPaths'],
+            request: $this->request,
+        );
+        $view = $this->viewFactory->create($viewFactoryData);
         $view->assignMultiple([
             'insertRenderablesPanelConfiguration' => $insertRenderablesPanelConfiguration,
             'formEditorPartials' => $formEditorPartials,
diff --git a/typo3/sysext/form/Tests/Functional/Controller/FormEditorControllerTest.php b/typo3/sysext/form/Tests/Functional/Controller/FormEditorControllerTest.php
index b795f78868a8..1cb30d57dd35 100644
--- a/typo3/sysext/form/Tests/Functional/Controller/FormEditorControllerTest.php
+++ b/typo3/sysext/form/Tests/Functional/Controller/FormEditorControllerTest.php
@@ -22,6 +22,7 @@ use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Backend\Template\ModuleTemplateFactory;
 use TYPO3\CMS\Core\Imaging\IconFactory;
 use TYPO3\CMS\Core\Page\PageRenderer;
+use TYPO3\CMS\Core\View\ViewFactoryInterface;
 use TYPO3\CMS\Form\Controller\FormEditorController;
 use TYPO3\CMS\Form\Domain\Configuration\ConfigurationService;
 use TYPO3\CMS\Form\Domain\Configuration\FormDefinitionConversionService;
@@ -59,6 +60,7 @@ final class FormEditorControllerTest extends FunctionalTestCase
                 $this->createMock(ConfigurationService::class),
                 $this->createMock(UriBuilder::class),
                 $this->createMock(ArrayFormFactory::class),
+                $this->createMock(ViewFactoryInterface::class),
             ],
         );
         $prototypeConfiguration = [
@@ -151,6 +153,7 @@ final class FormEditorControllerTest extends FunctionalTestCase
                 $this->createMock(ConfigurationService::class),
                 $this->createMock(UriBuilder::class),
                 $this->createMock(ArrayFormFactory::class),
+                $this->createMock(ViewFactoryInterface::class),
             ],
         );
         $prototypeConfiguration = [
-- 
GitLab