From bee5a1d7dcaa10cd14e05eec5ecc78654ab0b4f0 Mon Sep 17 00:00:00 2001
From: Claus Due <claus@namelesscoder.net>
Date: Sun, 18 Oct 2015 02:08:23 +0200
Subject: [PATCH] [TASK] Avoid redundant condition blocking arrays as form
 object

Values of arrays (if formObject) can now be accessed with
property paths e.g. "key1.vars.special"

Change-Id: I578d2ca2d0c5cc5a5ba965e9b7209e88f4af3a88
Resolves: #66533
Releases: master
Reviewed-on: https://review.typo3.org/44137
Reviewed-by: Oliver Eglseder <oliver.eglseder@in2code.de>
Tested-by: Oliver Eglseder <oliver.eglseder@in2code.de>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
---
 .../Form/AbstractFormFieldViewHelper.php      |  6 +----
 .../Form/AbstractFormFieldViewHelperTest.php  | 27 +++++++++++++++++++
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/AbstractFormFieldViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/AbstractFormFieldViewHelper.php
index 8a30786c5880..abfe5bb75b0d 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/AbstractFormFieldViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/AbstractFormFieldViewHelper.php
@@ -331,11 +331,7 @@ abstract class AbstractFormFieldViewHelper extends AbstractFormViewHelper
         $formObject = $this->viewHelperVariableContainer->get(
             \TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObject'
         );
-        $propertyName = $this->arguments['property'];
-        if (is_array($formObject)) {
-            return isset($formObject[$propertyName]) ? $formObject[$propertyName] : null;
-        }
-        return ObjectAccess::getPropertyPath($formObject, $propertyName);
+        return ObjectAccess::getPropertyPath($formObject, $this->arguments['property']);
     }
 
     /**
diff --git a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Form/AbstractFormFieldViewHelperTest.php b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Form/AbstractFormFieldViewHelperTest.php
index a4a26d942ee5..1315f9bca825 100644
--- a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Form/AbstractFormFieldViewHelperTest.php
+++ b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Form/AbstractFormFieldViewHelperTest.php
@@ -565,4 +565,31 @@ class AbstractFormFieldViewHelperTest extends \TYPO3\CMS\Fluid\Tests\Unit\ViewHe
         $actual = $formViewHelper->_call('renderHiddenFieldForEmptyValue');
         $this->assertEquals($expected, $actual);
     }
+
+    /**
+     * @test
+     */
+    public function getPropertyValueReturnsArrayValueByPropertyPath()
+    {
+        $formFieldViewHelper = $this->getAccessibleMock(
+            \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper::class,
+            ['renderHiddenIdentityField'],
+            [],
+            '',
+            false
+        );
+
+        $this->injectDependenciesIntoViewHelper($formFieldViewHelper);
+        $formFieldViewHelper->_set('arguments', ['property' => 'key1.key2']);
+
+        $this->viewHelperVariableContainer->expects($this->at(0))->method('exists')->with(
+            \TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObject'
+        )->will($this->returnValue(true));
+        $this->viewHelperVariableContainer->expects($this->at(1))->method('get')->with(
+            \TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::class, 'formObject'
+        )->will($this->returnValue(['key1' => ['key2' => 'valueX']]));
+
+        $actual = $formFieldViewHelper->_call('getPropertyValue');
+        $this->assertEquals('valueX', $actual);
+    }
 }
-- 
GitLab