diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php index 5937c0104bf6514054ffec3e5e6512853c646a94..af0c25da7f942877f4fae042fadac3b0e1b48059 100644 --- a/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php +++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/EvaluateDisplayConditions.php @@ -332,6 +332,9 @@ class EvaluateDisplayConditions implements FormDataProviderInterface { $result = FALSE; switch ($operator) { case 'REQ': + if (is_array($fieldValue) && count($fieldValue) === 1) { + $fieldValue = array_shift($fieldValue); + } if (strtoupper($operand) === 'TRUE') { $result = (bool)$fieldValue; } else { @@ -339,19 +342,34 @@ class EvaluateDisplayConditions implements FormDataProviderInterface { } break; case '>': + if (is_array($fieldValue) && count($fieldValue) === 1) { + $fieldValue = array_shift($fieldValue); + } $result = $fieldValue > $operand; break; case '<': + if (is_array($fieldValue) && count($fieldValue) === 1) { + $fieldValue = array_shift($fieldValue); + } $result = $fieldValue < $operand; break; case '>=': + if (is_array($fieldValue) && count($fieldValue) === 1) { + $fieldValue = array_shift($fieldValue); + } $result = $fieldValue >= $operand; break; case '<=': + if (is_array($fieldValue) && count($fieldValue) === 1) { + $fieldValue = array_shift($fieldValue); + } $result = $fieldValue <= $operand; break; case '-': case '!-': + if (is_array($fieldValue) && count($fieldValue) === 1) { + $fieldValue = array_shift($fieldValue); + } list($minimum, $maximum) = explode('-', $operand); $result = $fieldValue >= $minimum && $fieldValue <= $maximum; if ($operator[0] === '!') { diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php index 9201236b29f1eed031131164249661377fa27c63..d9fe493c13ac7f66c604e101302f907a0b0df1bf 100644 --- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php +++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/EvaluateDisplayConditionsTest.php @@ -601,6 +601,36 @@ class EvaluateDisplayConditionsTest extends UnitTestCase { $this->assertSame($expected, $this->subject->addData($input)); } + /** + * @param string $condition + * @param array $record + * @param string $expectedResult + * + * @dataProvider conditionStringDataProvider + * @test + */ + public function matchConditionStringsWithRecordTestFieldBeingArray($condition, array $record, $expectedResult) { + $input = [ + 'processedTca' => [ + 'columns' => [ + 'testField' => [ + 'displayCond' => $condition, + 'config' => [ + 'type' => 'input', + ], + ], + ], + ], + ]; + $input['databaseRow'] = $record ?: ['testField' => ['key' => $record['testField']]]; + + $expected = $input; + if (!$expectedResult) { + unset($expected['processedTca']['columns']['testField']); + } + $this->assertSame($expected, $this->subject->addData($input)); + } + /** * Returns data sets for the test matchConditionStrings * Each data set is an array with the following elements: