From 89ebf650f849894bc0076ca1a50b625b2f9198b2 Mon Sep 17 00:00:00 2001
From: Carsten  Rose <carsten.rose@math.uzh.ch>
Date: Thu, 25 Jun 2020 18:35:54 +0200
Subject: [PATCH] Fixes #10641. Fehler beim Anlegen mehrerer neuen Tags
 gleichzeitig

---
 extension/Classes/Core/Save.php                | 1 +
 extension/Classes/Core/Store/FillStoreForm.php | 7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/extension/Classes/Core/Save.php b/extension/Classes/Core/Save.php
index 5e9cca3c8..4aa8efff8 100644
--- a/extension/Classes/Core/Save.php
+++ b/extension/Classes/Core/Save.php
@@ -373,6 +373,7 @@ class Save {
 
         // Create glue records
         foreach ($result as $id => $value) {
+
             $this->store->setVar(VAR_TAG_ID, $id, STORE_VAR);
             $this->store->setVar(VAR_TAG_VALUE, $value, STORE_VAR);
 
diff --git a/extension/Classes/Core/Store/FillStoreForm.php b/extension/Classes/Core/Store/FillStoreForm.php
index 144726696..7ded5a153 100644
--- a/extension/Classes/Core/Store/FillStoreForm.php
+++ b/extension/Classes/Core/Store/FillStoreForm.php
@@ -295,12 +295,19 @@ class FillStoreForm {
                     (isset($formElement[FE_PROCESS_READ_ONLY]) && $formElement[FE_PROCESS_READ_ONLY] != '0')) {
 
                     if (HelperFormElement::booleParameter($formElement[FE_TYPEAHEAD_TAG] ?? '-')) {
+                        // TypeAhead Tags received as JSON key/value
+                        $cntNew = 0;
+
                         // TYPEAHEAD_TAG will be delivered as JSON. Check and sanitize every key/value pair.
                         $arr = json_decode($clientValues[$clientFieldName], true);
                         $arrTmp = array();
                         foreach ($arr as $row) {
 
                             $arrKey = $this->doValue($formElement, $formMode, $row['key']);
+                            // New Tags always get '0' >> make them uniq by adding a counter.
+                            if ($arrKey == "0") {
+                                $arrKey = "0-" . ++$cntNew;
+                            }
                             $arrValue = $this->doValue($formElement, $formMode, $row['value']);
                             $arrTmp[$arrKey] = $arrValue;
                         }
-- 
GitLab