From 7d23f31086b70190af454f695923986a1db3b214 Mon Sep 17 00:00:00 2001 From: Claus Due <claus@namelesscoder.net> Date: Fri, 24 Feb 2017 18:01:33 +0100 Subject: [PATCH] [BUGFIX] Restore operability for USER displayConds Parsing of the displayCond value was referencing the incorrect array, causing the parsed displayCond to no longer be correct. Referencing the correct array solves the problem by generating the correct "named condition array" based on the input. Change-Id: Ia0cae240387ec8f24ea66b593b6824f9bb6b6dc5 Resolves: #79822 Releases: master Reviewed-on: https://review.typo3.org/51837 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl> 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 | 8 ++-- .../EvaluateDisplayConditionsTest.php | 41 +++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php index 5544c45a9eb8..59df135acc99 100644 --- a/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php +++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php @@ -415,10 +415,10 @@ class EvaluateDisplayConditions implements FormDataProviderInterface 1481382954 ); } - $namedConditionArray['function'] = $namedConditionArray[1]; - array_shift($namedConditionArray); - array_shift($namedConditionArray); - $namedConditionArray['parameters'] = $namedConditionArray; + $namedConditionArray['function'] = $conditionArray[1]; + array_shift($conditionArray); + array_shift($conditionArray); + $namedConditionArray['parameters'] = $conditionArray; $namedConditionArray['record'] = $databaseRow; break; default: diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php index 235b7bd8a249..9c8a0235eece 100644 --- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php +++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php @@ -494,6 +494,47 @@ class EvaluateDisplayConditionsTest extends \TYPO3\TestingFramework\Core\Unit\Un (new EvaluateDisplayConditions())->addData($input); } + /** + * @test + */ + public function addDataEvaluatesUserCondition() + { + $input = [ + 'databaseRow' => [], + 'processedTca' => [ + 'columns' => [ + 'field_1' => [ + 'displayCond' => 'USER:' . self::class . '->addDataEvaluatesUserConditionCallback:more:arguments', + ], + ], + ], + ]; + $this->expectException(\RuntimeException::class); + $this->expectExceptionCode(1488130499); + (new EvaluateDisplayConditions())->addData($input); + } + + /** + * Callback method of addDataEvaluatesUserCondition. A USER condition + * Throws an exception if data is correct! + * + * @throws \RuntimeException if data is ok + */ + public function addDataEvaluatesUserConditionCallback(array $parameter) + { + $expected = [ + 'record' => [], + 'flexformValueKey' => 'vDEF', + 'conditionParameters' => [ + 0 => 'more', + 1 => 'arguments', + ] + ]; + if ($expected === $parameter) { + throw new \RuntimeException('testing', 1488130499); + } + } + /** * @test */ -- GitLab