From b2794bb2c9587e5e5307a838b45f297067586772 Mon Sep 17 00:00:00 2001
From: fabrixxm <fabrix.xm@gmail.com>
Date: Tue, 9 Apr 2019 16:32:15 +0200
Subject: [PATCH 1/5] Allow set empty string storge class for legacy

Legacy storage is defined by an empty string.
`StorageManager::setBackend()` now accept an empty string as a valid
backend storage.
---
 src/Core/StorageManager.php | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/Core/StorageManager.php b/src/Core/StorageManager.php
index 0a8b35ce24..4b74035ee8 100644
--- a/src/Core/StorageManager.php
+++ b/src/Core/StorageManager.php
@@ -29,7 +29,8 @@ class StorageManager
 	}
 
 	/**
-	 * @brief Return current storage backend class
+	 * @brief Return current storage backend class 
+	 * 
 	 * @return string
 	 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
 	 */
@@ -52,6 +53,7 @@ class StorageManager
 
 	/**
 	 * @brief Set current storage backend class
+	 * If $class is an empty string, legacy db storage is used.
 	 *
 	 * @param string $class Backend class name
 	 * @return bool
@@ -59,7 +61,7 @@ class StorageManager
 	 */
 	public static function setBackend($class)
 	{
-		if (!in_array('Friendica\Model\Storage\IStorage', class_implements($class))) {
+		if ($class !== "" && !in_array('Friendica\Model\Storage\IStorage', class_implements($class))) {
 			return false;
 		}
 

From 72bee45079a82ff3e8b664cf7dd74452bc488cc8 Mon Sep 17 00:00:00 2001
From: fabrixxm <fabrix.xm@gmail.com>
Date: Wed, 10 Apr 2019 08:35:44 +0200
Subject: [PATCH 2/5] Revert b2794bb2c 'Allow set empty string storge class for
 legacy'

---
 src/Core/StorageManager.php | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/Core/StorageManager.php b/src/Core/StorageManager.php
index 4b74035ee8..8cd7d43953 100644
--- a/src/Core/StorageManager.php
+++ b/src/Core/StorageManager.php
@@ -29,8 +29,8 @@ class StorageManager
 	}
 
 	/**
-	 * @brief Return current storage backend class 
-	 * 
+	 * @brief Return current storage backend class
+	 *
 	 * @return string
 	 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
 	 */
@@ -53,7 +53,6 @@ class StorageManager
 
 	/**
 	 * @brief Set current storage backend class
-	 * If $class is an empty string, legacy db storage is used.
 	 *
 	 * @param string $class Backend class name
 	 * @return bool
@@ -61,7 +60,7 @@ class StorageManager
 	 */
 	public static function setBackend($class)
 	{
-		if ($class !== "" && !in_array('Friendica\Model\Storage\IStorage', class_implements($class))) {
+		if (!in_array('Friendica\Model\Storage\IStorage', class_implements($class))) {
 			return false;
 		}
 

From 47aa9daf5a08bbac4c5493265b49e1b4ca4a8505 Mon Sep 17 00:00:00 2001
From: fabrixxm <fabrix.xm@gmail.com>
Date: Wed, 10 Apr 2019 08:40:50 +0200
Subject: [PATCH 3/5] Tweak storage selection in admin page

Don't call `StorageManager::setBackend()` on save when legacy is selected,
dont't show legacy option in selectbox after backend is changed from legacy
---
 mod/admin.php | 54 ++++++++++++++++++++++++++++-----------------------
 1 file changed, 30 insertions(+), 24 deletions(-)

diff --git a/mod/admin.php b/mod/admin.php
index 0df907cbaa..7ee48f592e 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -1154,40 +1154,41 @@ function admin_page_site_post(App $a)
 	 * @var $storagebackend \Friendica\Model\Storage\IStorage
 	 */
 	$storagebackend    = Strings::escapeTags(trim(defaults($_POST, 'storagebackend', '')));
-	if (!StorageManager::setBackend($storagebackend)) {
-		info(L10n::t('Invalid storage backend setting value.'));
-	}
 
 	// save storage backend form
 	if (!is_null($storagebackend) && $storagebackend != "") {
-		$storage_opts = $storagebackend::getOptions();
-		$storage_form_prefix=preg_replace('|[^a-zA-Z0-9]|' ,'', $storagebackend);
-		$storage_opts_data = [];
-		foreach($storage_opts as $name => $info) {
-			$fieldname = $storage_form_prefix . '_' . $name;
-			switch ($info[0]) { // type
+		if (!StorageManager::setBackend($storagebackend)) {
+			info(L10n::t('Invalid storage backend setting value.'));
+		} else {
+			$storage_opts = $storagebackend::getOptions();
+			$storage_form_prefix=preg_replace('|[^a-zA-Z0-9]|' ,'', $storagebackend);
+			$storage_opts_data = [];
+			foreach($storage_opts as $name => $info) {
+				$fieldname = $storage_form_prefix . '_' . $name;
+				switch ($info[0]) { // type
 				case 'checkbox':
 				case 'yesno':
 					$value = !empty($_POST[$fieldname]);
 					break;
 				default:
 					$value = defaults($_POST, $fieldname, '');
+				}
+				$storage_opts_data[$name] = $value;
 			}
-			$storage_opts_data[$name] = $value;
-		}
-		unset($name);
-		unset($info);
-	
-		$storage_form_errors = $storagebackend::saveOptions($storage_opts_data);
-		if (count($storage_form_errors)) {
-			foreach($storage_form_errors as $name => $err) {
-				notice('Storage backend, ' . $storage_opts[$name][1] . ': ' . $err);
+			unset($name);
+			unset($info);
+
+			$storage_form_errors = $storagebackend::saveOptions($storage_opts_data);
+			if (count($storage_form_errors)) {
+				foreach($storage_form_errors as $name => $err) {
+					notice('Storage backend, ' . $storage_opts[$name][1] . ': ' . $err);
+				}
+				$a->internalRedirect('admin/site' . $active_panel);
 			}
-			$a->internalRedirect('admin/site' . $active_panel);
 		}
 	}
 
-	
+
 
 	// Has the directory url changed? If yes, then resubmit the existing profiles there
 	if ($global_directory != Config::get('system', 'directory') && ($global_directory != '')) {
@@ -1499,9 +1500,14 @@ function admin_page_site(App $a)
 	 */
 	$storage_current_backend = StorageManager::getBackend();
 
-	$storage_backends_choices = [
-		'' => L10n::t('Database (legacy)')
-	];
+	$storage_backends_choices = [];
+
+	// show legacy option only if it is the current backend:
+	// once changed can't be selected anymore
+	if ($storage_current_backend == '') {
+		$storage_backends_choices[''] = L10n::t('Database (legacy)');
+	};
+
 	foreach($storage_backends as $name=>$class) {
 		$storage_backends_choices[$class] = $name;
 	}
@@ -1509,7 +1515,7 @@ function admin_page_site(App $a)
 
 	// build storage config form,
 	$storage_form_prefix=preg_replace('|[^a-zA-Z0-9]|' ,'', $storage_current_backend);
-	
+
 	$storage_form = [];
 	if (!is_null($storage_current_backend) && $storage_current_backend != "") {
 		foreach ($storage_current_backend::getOptions() as $name => $info) {

From 5a07afbc14d31be8dd6cd50884bbbe1f52e8b331 Mon Sep 17 00:00:00 2001
From: fabrixxm <fabrix.xm@gmail.com>
Date: Wed, 10 Apr 2019 20:57:22 +0200
Subject: [PATCH 4/5] Use direct logic

---
 mod/admin.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/mod/admin.php b/mod/admin.php
index 7ee48f592e..fe06862962 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -1157,9 +1157,7 @@ function admin_page_site_post(App $a)
 
 	// save storage backend form
 	if (!is_null($storagebackend) && $storagebackend != "") {
-		if (!StorageManager::setBackend($storagebackend)) {
-			info(L10n::t('Invalid storage backend setting value.'));
-		} else {
+		if (StorageManager::setBackend($storagebackend)) {
 			$storage_opts = $storagebackend::getOptions();
 			$storage_form_prefix=preg_replace('|[^a-zA-Z0-9]|' ,'', $storagebackend);
 			$storage_opts_data = [];
@@ -1185,6 +1183,8 @@ function admin_page_site_post(App $a)
 				}
 				$a->internalRedirect('admin/site' . $active_panel);
 			}
+		} else {
+			info(L10n::t('Invalid storage backend setting value.'));
 		}
 	}
 

From d2e43619b330ca21f8eff51307c91a83add92e9b Mon Sep 17 00:00:00 2001
From: fabrixxm <fabrix.xm@gmail.com>
Date: Thu, 11 Apr 2019 10:44:28 +0200
Subject: [PATCH 5/5] Code standards

---
 mod/admin.php | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/mod/admin.php b/mod/admin.php
index fe06862962..343d6c76d9 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -1159,17 +1159,17 @@ function admin_page_site_post(App $a)
 	if (!is_null($storagebackend) && $storagebackend != "") {
 		if (StorageManager::setBackend($storagebackend)) {
 			$storage_opts = $storagebackend::getOptions();
-			$storage_form_prefix=preg_replace('|[^a-zA-Z0-9]|' ,'', $storagebackend);
+			$storage_form_prefix = preg_replace('|[^a-zA-Z0-9]|', '', $storagebackend);
 			$storage_opts_data = [];
-			foreach($storage_opts as $name => $info) {
+			foreach ($storage_opts as $name => $info) {
 				$fieldname = $storage_form_prefix . '_' . $name;
 				switch ($info[0]) { // type
-				case 'checkbox':
-				case 'yesno':
-					$value = !empty($_POST[$fieldname]);
-					break;
-				default:
-					$value = defaults($_POST, $fieldname, '');
+					case 'checkbox':
+					case 'yesno':
+						$value = !empty($_POST[$fieldname]);
+						break;
+					default:
+						$value = defaults($_POST, $fieldname, '');
 				}
 				$storage_opts_data[$name] = $value;
 			}
@@ -1178,7 +1178,7 @@ function admin_page_site_post(App $a)
 
 			$storage_form_errors = $storagebackend::saveOptions($storage_opts_data);
 			if (count($storage_form_errors)) {
-				foreach($storage_form_errors as $name => $err) {
+				foreach ($storage_form_errors as $name => $err) {
 					notice('Storage backend, ' . $storage_opts[$name][1] . ': ' . $err);
 				}
 				$a->internalRedirect('admin/site' . $active_panel);
@@ -1508,7 +1508,7 @@ function admin_page_site(App $a)
 		$storage_backends_choices[''] = L10n::t('Database (legacy)');
 	};
 
-	foreach($storage_backends as $name=>$class) {
+	foreach ($storage_backends as $name => $class) {
 		$storage_backends_choices[$class] = $name;
 	}
 	unset($storage_backends);