From 00f5c62a9e001402cf232a8b7d0bded516c9d1b8 Mon Sep 17 00:00:00 2001
From: Stefan Froemken <froemken@gmail.com>
Date: Fri, 2 Oct 2015 16:39:37 +0200
Subject: [PATCH] [BUGFIX] FormEngine: Only evaluate Flexform display
 conditions once

Avoid evaluating the display conditions for fields on a Flexform sheet
more than once. Multiple evaluations of the same conditions can lead to
wrong result due to fields having been removed by the first evaluation.

Resolves: #70314
Releases: master
Change-Id: I412a8cc2acf67e2a72de1f37a0f8038110ca4c2e
Reviewed-on: http://review.typo3.org/43744
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../EvaluateDisplayConditions.php             |  4 ++--
 .../EvaluateDisplayConditionsTest.php         | 22 +++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php
index af0c25da7f94..4eabbcd1e02b 100644
--- a/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php
+++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php
@@ -115,8 +115,8 @@ class EvaluateDisplayConditions implements FormDataProviderInterface {
 			foreach ($result['processedTca']['columns'][$columnName]['config']['ds']['sheets'] as $sheetName => $sheetConfiguration) {
 				$flexFormSheetRowData = $flexFormRowData[$sheetName]['lDEF'];
 				$flexFormSheetRowData['parentRec'] = $result['databaseRow'];
-				$result['processedTca']['columns'][$columnName]['config']['ds']['sheets'] = $this->removeFlexformFieldsRecursive(
-					$result['processedTca']['columns'][$columnName]['config']['ds']['sheets'],
+				$result['processedTca']['columns'][$columnName]['config']['ds']['sheets'][$sheetName] = $this->removeFlexformFieldsRecursive(
+					$result['processedTca']['columns'][$columnName]['config']['ds']['sheets'][$sheetName],
 					$flexFormSheetRowData
 				);
 			}
diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php
index d9fe493c13ac..9d5a717be92c 100644
--- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php
+++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php
@@ -222,10 +222,32 @@ class EvaluateDisplayConditionsTest extends UnitTestCase {
 														'items' => [],
 													],
 												],
+												'mmUseCurl' => [
+													'displayCond' => 'FIELD:mmType:=:audio',
+													'config' => [
+														'type' => 'check',
+														'default' => '0',
+														'items' => [],
+													],
+												],
 											],
 											'sheetTitle' => 'aTitle',
 										],
 									],
+									'secondSheet' => [
+										'ROOT' => [
+											'type' => 'array',
+											'el' => [
+												'foo' => [
+													'config' => [
+														'type' => 'select',
+														'items' => [],
+													],
+												],
+											],
+											'sheetTitle' => 'bTitle',
+										],
+									],
 								],
 							],
 						],
-- 
GitLab