From 6419148b82b0e30b9a5366df6deb57ed3d3401ce Mon Sep 17 00:00:00 2001
From: Marc Egger <marc.egger@uzh.ch>
Date: Mon, 12 Oct 2020 15:22:49 +0200
Subject: [PATCH] Config.php replace old style config variables when migrating
 to json

---
 extension/Classes/Core/Helper/OnArray.php | 19 +++++++++++++++++++
 extension/Classes/Core/Store/Config.php   |  9 +++++++++
 2 files changed, 28 insertions(+)

diff --git a/extension/Classes/Core/Helper/OnArray.php b/extension/Classes/Core/Helper/OnArray.php
index 18def73c2..5a13cee87 100644
--- a/extension/Classes/Core/Helper/OnArray.php
+++ b/extension/Classes/Core/Helper/OnArray.php
@@ -462,4 +462,23 @@ class OnArray {
     {
         return array_filter($keys, function($key) use ($array) {return !isset($array[$key]);});
     }
+
+    /**
+     * Rename keys according to the associative array given as first argument (only if the key exists).
+     * Return changed array.
+     *
+     * @param array $renameMap old-key => new-key
+     * @param array $array
+     * @param bool $overwrite overwrite value from existing new-key with value of old-key
+     * @return array
+     */
+    public static function renameKeys(array $renameMap, array $array, bool $overwrite = false) {
+        foreach ($renameMap as $keyOld => $keyNew) {
+            if (isset($array[$keyOld]) && (!isset($array[$keyNew]) || $overwrite)) {
+                $array[$keyNew] = $array[$keyOld];
+                unset($array[$keyOld]);
+            }
+        }
+        return $array;
+    }
 }
\ No newline at end of file
diff --git a/extension/Classes/Core/Store/Config.php b/extension/Classes/Core/Store/Config.php
index a9139375a..79d14545b 100644
--- a/extension/Classes/Core/Store/Config.php
+++ b/extension/Classes/Core/Store/Config.php
@@ -11,6 +11,7 @@ namespace IMATHUZH\Qfq\Core\Store;
 use IMATHUZH\Qfq\Core\Exception\Thrower;
 use IMATHUZH\Qfq\Core\Helper\HelperFile;
 use IMATHUZH\Qfq\Core\Helper\Logger;
+use IMATHUZH\Qfq\Core\Helper\OnArray;
 use IMATHUZH\Qfq\Core\Helper\Path;
 use IMATHUZH\Qfq\Core\Helper\Support;
 use IMATHUZH\Qfq\Core\Helper\OnString;
@@ -172,6 +173,14 @@ class Config {
         HelperFile::enforce_writable($cwdToOldConfigFile);  // so we can delete it.
         $config = include($cwdToOldConfigFile);
 
+        // In case the database credentials are given in the old style: rename the keys
+        $config = OnArray::renameKeys([
+            SYSTEM_DB_USER => SYSTEM_DB_1_USER,
+            SYSTEM_DB_SERVER => SYSTEM_DB_1_SERVER,
+            SYSTEM_DB_PASSWORD => SYSTEM_DB_1_PASSWORD,
+            SYSTEM_DB_NAME => SYSTEM_DB_1_NAME
+            ], $config);
+
         // write new qfq.config.json
         self::writeConfig($config);
 
-- 
GitLab