From 4bb09190786236a189bf170460f886ff587106a1 Mon Sep 17 00:00:00 2001 From: Oliver Bartsch <bo@cedev.de> Date: Thu, 21 May 2020 21:17:13 +0200 Subject: [PATCH] [BUGFIX] Bring back record type icons for select items With the removal of `selicon_field_path` in #87937 also the automatic record type icon mapping was removed. As a result the record icon of a select item based on `foreign_table` is not resolved anymore. In addition, the `selectIcons` list is therefore no longer displayed. The previous functionality is now restored. Resolves: #91302 Relates: #87937 Releases: master Change-Id: If62f4ba65ef54ec2345131f6c117ce4336e76c4c Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64560 Tested-by: TYPO3com <noreply@typo3.com> Tested-by: Benni Mack <benni@typo3.org> Tested-by: Daniel Goerz <daniel.goerz@posteo.de> Reviewed-by: Markus Klein <markus.klein@typo3.org> Reviewed-by: Benni Mack <benni@typo3.org> Reviewed-by: Daniel Goerz <daniel.goerz@posteo.de> --- .../FormDataProvider/AbstractItemProvider.php | 4 ++++ .../FormDataProvider/TcaSelectItemsTest.php | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php index a767f3f6a9df..41b232a9ba3e 100644 --- a/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php +++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php @@ -544,6 +544,10 @@ abstract class AbstractItemProvider $icon = reset($references); $icon = $icon->getPublicUrl(); } + } else { + // Else, determine icon based on record type, or a generic fallback + $iconFactory = GeneralUtility::makeInstance(IconFactory::class); + $icon = $iconFactory->mapRecordTypeToIconIdentifier($foreignTable, $foreignRow); } // Add the item $items[] = [ diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php index 48a08a620892..52a1b21bf2c1 100644 --- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php +++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php @@ -2041,6 +2041,9 @@ class TcaSelectItemsTest extends UnitTestCase $fileRepositoryProphecy->findByRelation(Argument::cetera())->shouldNotBeCalled(); GeneralUtility::setSingletonInstance(FileRepository::class, $fileRepositoryProphecy->reveal()); + $iconFactoryProphecy = $this->prophesize(IconFactory::class); + GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal()); + /** @var BackendUserAuthentication|ObjectProphecy $backendUserProphecy */ $backendUserProphecy = $this->prophesize(BackendUserAuthentication::class); $GLOBALS['BE_USER'] = $backendUserProphecy->reveal(); @@ -2129,6 +2132,9 @@ class TcaSelectItemsTest extends UnitTestCase $fileRepositoryProphecy->findByRelation(Argument::cetera())->shouldNotBeCalled(); GeneralUtility::setSingletonInstance(FileRepository::class, $fileRepositoryProphecy->reveal()); + $iconFactoryProphecy = $this->prophesize(IconFactory::class); + GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal()); + $resourceStorageProphecy = $this->prophesize(ResourceStorage::class); $resourceStorageProphecy->getUid()->willReturn(1); @@ -2933,6 +2939,9 @@ class TcaSelectItemsTest extends UnitTestCase $fileRepositoryProphecy->findByRelation(Argument::cetera())->shouldNotBeCalled(); GeneralUtility::setSingletonInstance(FileRepository::class, $fileRepositoryProphecy->reveal()); + $iconFactoryProphecy = $this->prophesize(IconFactory::class); + GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal()); + /** @var BackendUserAuthentication|ObjectProphecy $backendUserProphecy */ $backendUserProphecy = $this->prophesize(BackendUserAuthentication::class); $GLOBALS['BE_USER'] = $backendUserProphecy->reveal(); @@ -3044,6 +3053,9 @@ class TcaSelectItemsTest extends UnitTestCase $fileRepositoryProphecy->findByRelation(Argument::cetera())->shouldNotBeCalled(); GeneralUtility::setSingletonInstance(FileRepository::class, $fileRepositoryProphecy->reveal()); + $iconFactoryProphecy = $this->prophesize(IconFactory::class); + GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal()); + /** @var BackendUserAuthentication|ObjectProphecy $backendUserProphecy */ $backendUserProphecy = $this->prophesize(BackendUserAuthentication::class); $GLOBALS['BE_USER'] = $backendUserProphecy->reveal(); @@ -3164,6 +3176,9 @@ class TcaSelectItemsTest extends UnitTestCase $fileRepositoryProphecy->findByRelation(Argument::cetera())->shouldNotBeCalled(); GeneralUtility::setSingletonInstance(FileRepository::class, $fileRepositoryProphecy->reveal()); + $iconFactoryProphecy = $this->prophesize(IconFactory::class); + GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal()); + /** @var BackendUserAuthentication|ObjectProphecy $backendUserProphecy */ $backendUserProphecy = $this->prophesize(BackendUserAuthentication::class); $GLOBALS['BE_USER'] = $backendUserProphecy->reveal(); @@ -3285,6 +3300,9 @@ class TcaSelectItemsTest extends UnitTestCase $fileRepositoryProphecy->findByRelation(Argument::cetera())->shouldNotBeCalled(); GeneralUtility::setSingletonInstance(FileRepository::class, $fileRepositoryProphecy->reveal()); + $iconFactoryProphecy = $this->prophesize(IconFactory::class); + GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal()); + /** @var BackendUserAuthentication|ObjectProphecy $backendUserProphecy */ $backendUserProphecy = $this->prophesize(BackendUserAuthentication::class); $GLOBALS['BE_USER'] = $backendUserProphecy->reveal(); -- GitLab