From 97debdc138b527bfc0c12e802f93ae551af42163 Mon Sep 17 00:00:00 2001
From: Andreas Fernandez <a.fernandez@scripting-base.de>
Date: Fri, 4 Aug 2017 16:55:25 +0200
Subject: [PATCH] [BUGFIX] New values created by AddController are added
 correctly

New values created by AddController are now added again to the FlexForm
value by fixing the value parsing.

Additionally, the mixed up append/prepend values of `setValue` are fixed.

Resolves: #82049
Resolves: #82050
Releases: master, 8.7
Change-Id: Ifc2a4bf4ddd39a1b004db9945f832ca6cf9d765d
Reviewed-on: https://review.typo3.org/53646
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Sebastian Fischer <typo3@evoweb.de>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Joerg Boesche <typo3@joergboesche.de>
Tested-by: Joerg Boesche <typo3@joergboesche.de>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
---
 .../Controller/Wizard/AddController.php       | 20 +++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/typo3/sysext/backend/Classes/Controller/Wizard/AddController.php b/typo3/sysext/backend/Classes/Controller/Wizard/AddController.php
index 2b55abbbd0d5..0e8a22cf800d 100644
--- a/typo3/sysext/backend/Classes/Controller/Wizard/AddController.php
+++ b/typo3/sysext/backend/Classes/Controller/Wizard/AddController.php
@@ -198,22 +198,30 @@ class AddController extends AbstractWizardController
                     // If the field is a flexForm field, work with the XML structure instead:
                     if ($this->P['flexFormPath']) {
                         // Current value of flexForm path:
-                        $currentFlexFormData = GeneralUtility::xml2array($currentParentRow[$this->P['field']]);
+                        $currentFlexFormData = $currentParentRow[$this->P['field']];
                         /** @var FlexFormTools $flexFormTools */
                         $flexFormTools = GeneralUtility::makeInstance(FlexFormTools::class);
-                        $currentFlexFormValue = $flexFormTools->getArrayValueByPath(
+                        $currentFlexFormValueByPath = $flexFormTools->getArrayValueByPath(
                             $this->P['flexFormPath'],
                             $currentFlexFormData
                         );
+
+                        // Compile currentFlexFormData to functional string
+                        $currentFlexFormValues = [];
+                        foreach ($currentFlexFormValueByPath as $value) {
+                            $currentFlexFormValues[] = $value['table'] . '_' . $value['uid'];
+                        }
+                        $currentFlexFormValue = implode(',', $currentFlexFormValues);
+
                         $insertValue = '';
                         switch ((string)$this->P['params']['setValue']) {
                             case 'set':
                                 $insertValue = $recordId;
                                 break;
-                            case 'prepend':
+                            case 'append':
                                 $insertValue = $currentFlexFormValue . ',' . $recordId;
                                 break;
-                            case 'append':
+                            case 'prepend':
                                 $insertValue = $recordId . ',' . $currentFlexFormValue;
                                 break;
                         }
@@ -236,10 +244,10 @@ class AddController extends AbstractWizardController
                             case 'set':
                                 $data[$this->P['table']][$this->P['uid']][$this->P['field']] = $recordId;
                                 break;
-                            case 'prepend':
+                            case 'append':
                                 $data[$this->P['table']][$this->P['uid']][$this->P['field']] = $currentValue . ',' . $recordId;
                                 break;
-                            case 'append':
+                            case 'prepend':
                                 $data[$this->P['table']][$this->P['uid']][$this->P['field']] = $recordId . ',' . $currentValue;
                                 break;
                         }
-- 
GitLab