From b69732357e0d30a8088d7bb4931ba57bdd47b738 Mon Sep 17 00:00:00 2001
From: Oliver Bartsch <bo@cedev.de>
Date: Sun, 8 Sep 2024 16:14:41 +0200
Subject: [PATCH] [TASK] Use TcaSchemaFactory in DataMapper

Resolves: #104857
Releases: main
Change-Id: Ic4cc5c951fa262c58804890a09114e3e11380557
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/85923
Tested-by: Oliver Bartsch <bo@cedev.de>
Tested-by: core-ci <typo3@b13.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Jochen Roth <rothjochen@gmail.com>
Tested-by: Jochen Roth <rothjochen@gmail.com>
Tested-by: Benni Mack <benni@typo3.org>
---
 .../Classes/Persistence/Generic/Mapper/DataMapper.php     | 8 +++++---
 .../Unit/Persistence/Generic/Mapper/DataMapperTest.php    | 1 +
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php
index 346773b0cbe9..dcb45be8aa5c 100644
--- a/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php
+++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php
@@ -24,6 +24,7 @@ use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\LanguageAspect;
 use TYPO3\CMS\Core\Database\Query\QueryHelper;
 use TYPO3\CMS\Core\Database\RelationHandler;
+use TYPO3\CMS\Core\Schema\TcaSchemaFactory;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject;
 use TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface;
@@ -71,6 +72,7 @@ class DataMapper
         private readonly QueryFactoryInterface $queryFactory,
         private readonly EventDispatcherInterface $eventDispatcher,
         private readonly InstantiatorInterface $instantiator,
+        private readonly TcaSchemaFactory $tcaSchemaFactory,
     ) {}
 
     public function setQuery(QueryInterface $query): void
@@ -201,7 +203,7 @@ class DataMapper
                 $object->_setProperty(AbstractDomainObject::PROPERTY_LOCALIZED_UID, (int)$row['_LOCALIZED_UID']);
             }
         }
-        if (!empty($row['_ORIG_uid']) && !empty($GLOBALS['TCA'][$dataMap->getTableName()]['ctrl']['versioningWS'])) {
+        if (!empty($row['_ORIG_uid']) && $this->tcaSchemaFactory->get($dataMap->getTableName())->isWorkspaceAware()) {
             $object->_setProperty(AbstractDomainObject::PROPERTY_VERSIONED_UID, (int)$row['_ORIG_uid']);
         }
         foreach ($classSchema->getDomainObjectProperties() as $property) {
@@ -606,10 +608,10 @@ class DataMapper
         $relationHandler->setUseLiveParentIds(true);
         $tableName = $dataMap->getTableName();
         $fieldName = $columnMap->getColumnName();
-        $fieldConfiguration = $GLOBALS['TCA'][$tableName]['columns'][$fieldName]['config'] ?? null;
-        if (!is_array($fieldConfiguration)) {
+        if (!$this->tcaSchemaFactory->get($tableName)->hasField($fieldName)) {
             return [];
         }
+        $fieldConfiguration = $this->tcaSchemaFactory->get($tableName)->getField($fieldName)->getConfiguration();
         $relationHandler->start(
             $fieldValue,
             $fieldConfiguration['allowed'] ?? $fieldConfiguration['foreign_table'] ?? '',
diff --git a/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Mapper/DataMapperTest.php b/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Mapper/DataMapperTest.php
index eeb59ec5529c..041f3a5e5033 100644
--- a/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Mapper/DataMapperTest.php
+++ b/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Mapper/DataMapperTest.php
@@ -72,6 +72,7 @@ final class DataMapperTest extends UnitTestCase
             $this->createMock(QueryFactory::class),
             $this->createMock(EventDispatcherInterface::class),
             $this->createMock(InstantiatorInterface::class),
+            $this->createMock(TcaSchemaFactory::class),
         );
     }
 
-- 
GitLab