From b240427ef20a5d3f865da616f81b87bb6508e96d Mon Sep 17 00:00:00 2001 From: Achim Fritz Date: Wed, 29 Jul 2026 08:56:41 +0200 Subject: [PATCH] [BUGFIX] get contentDefenderConfiguration of container record Fixes: #757 --- Build/Scripts/setupAcceptanceComposer.sh | 1 + Build/acceptance_tests/composer.13.json | 2 +- Build/acceptance_tests/composer.14.json | 2 +- Build/acceptance_tests/setup.sh | 3 ++- Classes/Tca/Registry.php | 2 +- .../Backend/ContentDefenderCest.php | 22 +++++++++++++++++++ .../Fixtures/pageWithNestedContainer.csv | 9 ++++++++ .../Extension/BackendContainerEnvironment.php | 1 + composer.json | 2 +- 9 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 Tests/Acceptance/Fixtures/pageWithNestedContainer.csv diff --git a/Build/Scripts/setupAcceptanceComposer.sh b/Build/Scripts/setupAcceptanceComposer.sh index e72a0a47..bf0a06ae 100755 --- a/Build/Scripts/setupAcceptanceComposer.sh +++ b/Build/Scripts/setupAcceptanceComposer.sh @@ -88,4 +88,5 @@ vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithWorkspace.csv" vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithWorkspace-movedContainer.csv" vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithWorkspace-changedContainer.csv" vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithContainerAndContentElementOutside.csv" +vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithNestedContainer.csv" echo "finished" \ No newline at end of file diff --git a/Build/acceptance_tests/composer.13.json b/Build/acceptance_tests/composer.13.json index 01cc756b..119fcd16 100644 --- a/Build/acceptance_tests/composer.13.json +++ b/Build/acceptance_tests/composer.13.json @@ -14,7 +14,7 @@ "ichhabrecht/content-defender": "*", "typo3tests/dataset-import": "@dev", "typo3/testing-framework": "^9.1", - "b13/container-example": "dev-master" + "b13/container-example": "dev-task/conf" }, "config": { "allow-plugins": { diff --git a/Build/acceptance_tests/composer.14.json b/Build/acceptance_tests/composer.14.json index 1b9d5b44..ce566aac 100644 --- a/Build/acceptance_tests/composer.14.json +++ b/Build/acceptance_tests/composer.14.json @@ -13,7 +13,7 @@ "b13/container": "@dev", "typo3tests/dataset-import": "@dev", "typo3/testing-framework": "^9.1", - "b13/container-example": "dev-master" + "b13/container-example": "dev-task/conf" }, "config": { "allow-plugins": { diff --git a/Build/acceptance_tests/setup.sh b/Build/acceptance_tests/setup.sh index 2bac0543..4e6d86f5 100755 --- a/Build/acceptance_tests/setup.sh +++ b/Build/acceptance_tests/setup.sh @@ -74,4 +74,5 @@ vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithWorkspace.csv" vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithWorkspace-movedContainer.csv" vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithWorkspace-changedContainer.csv" vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithContainerAndContentElementOutside.csv" -echo "finished" \ No newline at end of file +vendor/bin/typo3 dataset:import "${FIXTURES}/pageWithNestedContainer.csv" +echo "finished" diff --git a/Classes/Tca/Registry.php b/Classes/Tca/Registry.php index f38c1b8f..439d5a7a 100644 --- a/Classes/Tca/Registry.php +++ b/Classes/Tca/Registry.php @@ -140,7 +140,7 @@ public function recordIsAllowedInContainerColumn(RecordInterface $record): bool public function isAllowedInColumn(string $cType, int $colPos, string $containerCType): bool { - $contentDefenderConfiguration = $this->getContentDefenderConfiguration($cType, $colPos); + $contentDefenderConfiguration = $this->getContentDefenderConfiguration($containerCType, $colPos); $disallowed = GeneralUtility::trimExplode(',', $contentDefenderConfiguration['disallowedContentTypes'] ?? '', true); if (in_array($cType, $disallowed)) { return false; diff --git a/Tests/Acceptance/Backend/ContentDefenderCest.php b/Tests/Acceptance/Backend/ContentDefenderCest.php index 031470e9..c6de81d8 100644 --- a/Tests/Acceptance/Backend/ContentDefenderCest.php +++ b/Tests/Acceptance/Backend/ContentDefenderCest.php @@ -180,4 +180,26 @@ public function seeEditDocumentWhenAddingChildrenToColposWhereOnlyHeaderIsAllowe $I->see('header', 'select'); $I->dontSee('Images Only', 'select'); } + + #[Group('content_defender')] + public function nestedContainerOfDisallowedContentTypeIsMarkedAsNotAllowed(BackendTester $I, PageTree $pageTree): void + { + $I->clickLayoutModuleButton(); + $pageTree->openPath(['home', 'pageWithNestedContainer']); + $I->wait(0.5); + $I->switchToContentFrame(); + $I->waitForElement('#element-tt_content-1003'); + $I->seeElement('#element-tt_content-1003.t3-page-ce-warning'); + } + + #[Group('content_defender')] + public function nestedContainerOfDifferentTypeIsNotMarkedAsNotAllowed(BackendTester $I, PageTree $pageTree): void + { + $I->clickLayoutModuleButton(); + $pageTree->openPath(['home', 'pageWithNestedContainer']); + $I->wait(0.5); + $I->switchToContentFrame(); + $I->waitForElement('#element-tt_content-1001'); + $I->dontSeeElement('#element-tt_content-1001.t3-page-ce-warning'); + } } diff --git a/Tests/Acceptance/Fixtures/pageWithNestedContainer.csv b/Tests/Acceptance/Fixtures/pageWithNestedContainer.csv new file mode 100644 index 00000000..d1503053 --- /dev/null +++ b/Tests/Acceptance/Fixtures/pageWithNestedContainer.csv @@ -0,0 +1,9 @@ +"pages" +,"uid","pid","is_siteroot","title","perms_everybody","sys_language_uid","l10n_parent","l10n_source" +,51,1,,"pageWithNestedContainer",17,,, +"tt_content" +,"uid","pid","CType","header","colPos","tx_container_parent","l18n_parent","sys_language_uid","t3ver_wsid","t3ver_oid","l10n_source","t3ver_state" +,1000,51,"b13-2cols",,,,,,,,, +,1001,51,"b13-1col",,200,1000,,,,,,, +,1002,51,"b13-1col",,,,,,,,,, +,1003,51,"b13-1col",,200,1002,,,,,,, diff --git a/Tests/Acceptance/Support/Extension/BackendContainerEnvironment.php b/Tests/Acceptance/Support/Extension/BackendContainerEnvironment.php index 2d4d0c4c..f615d0fd 100644 --- a/Tests/Acceptance/Support/Extension/BackendContainerEnvironment.php +++ b/Tests/Acceptance/Support/Extension/BackendContainerEnvironment.php @@ -62,6 +62,7 @@ class BackendContainerEnvironment extends BackendEnvironment __DIR__ . '/../../Fixtures/pageWithWorkspace-movedContainer.csv', __DIR__ . '/../../Fixtures/pageWithContainerAndContentElementOutside.csv', __DIR__ . '/../../Fixtures/pageWithWorkspace-changedContainer.csv', + __DIR__ . '/../../Fixtures/pageWithNestedContainer.csv', __DIR__ . '/../../Fixtures/pages.csv', __DIR__ . '/../../Fixtures/sys_workspace.csv', __DIR__ . '/../../Fixtures/be_groups.csv', diff --git a/composer.json b/composer.json index 0f7f56e4..a915a7b8 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ } }, "require-dev": { - "b13/container-example": "dev-master", + "b13/container-example": "dev-task/conf", "typo3/cms-install": "^13.4 || ^14.3", "typo3/cms-fluid-styled-content": "^13.4 || ^14.3", "typo3/cms-info": "^13.4 || ^14.3",