From ca36ea17f9291df42d432a877d0dc64ba9d8568e Mon Sep 17 00:00:00 2001
From: Philipp Holzer <admin+github@philipp.info>
Date: Mon, 23 Sep 2019 12:47:58 +0200
Subject: [PATCH] Fix Auto-Installer

---
 src/Console/AutomaticInstallation.php | 21 +++++++++++--------
 src/Database/Database.php             | 29 ++++++++++++++++-----------
 2 files changed, 30 insertions(+), 20 deletions(-)

diff --git a/src/Console/AutomaticInstallation.php b/src/Console/AutomaticInstallation.php
index 0f1e7a742f..8815b98799 100644
--- a/src/Console/AutomaticInstallation.php
+++ b/src/Console/AutomaticInstallation.php
@@ -129,16 +129,13 @@ HELP;
 		$config_file = $this->getOption(['f', 'file']);
 
 		if (!empty($config_file)) {
-			if ($config_file != 'config' . DIRECTORY_SEPARATOR . 'local.config.php') {
-				// Copy config file
-				$this->out("Copying config file...\n");
-				if (!copy($basePathConf . DIRECTORY_SEPARATOR . $config_file, $basePathConf . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.config.php')) {
-					throw new RuntimeException("ERROR: Saving config file failed. Please copy '$config_file' to '" . $basePathConf . "'" . DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR . "local.config.php' manually.\n");
-				}
+
+			if (!file_exists($config_file)) {
+				throw new RuntimeException("ERROR: Config file does not exist.\n");
 			}
 
 			//reload the config cache
-			$loader = new ConfigFileLoader($basePathConf);
+			$loader = new ConfigFileLoader($config_file);
 			$loader->setupCache($configCache);
 
 		} else {
@@ -195,7 +192,7 @@ HELP;
 			$installer->createConfig($configCache);
 		}
 
-		$this->out(" Complete!\n\n");
+		$this->out("Complete!\n\n");
 
 		// Check database connection
 		$this->out("Checking database...\n");
@@ -219,6 +216,14 @@ HELP;
 			throw new RuntimeException($errorMessage);
 		}
 
+		if (!empty($config_file) && $config_file != 'config' . DIRECTORY_SEPARATOR . 'local.config.php') {
+			// Copy config file
+			$this->out("Copying config file...\n");
+			if (!copy($basePathConf . DIRECTORY_SEPARATOR . $config_file, $basePathConf . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.config.php')) {
+				throw new RuntimeException("ERROR: Saving config file failed. Please copy '$config_file' to '" . $basePathConf . "'" . DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR . "local.config.php' manually.\n");
+			}
+		}
+
 		$this->out(" Complete!\n\n");
 
 		// Install theme
diff --git a/src/Database/Database.php b/src/Database/Database.php
index d13b52848d..813d4e9853 100644
--- a/src/Database/Database.php
+++ b/src/Database/Database.php
@@ -90,9 +90,12 @@ class Database
 	public function connect()
 	{
 		if (!is_null($this->connection) && $this->connected()) {
-			return true;
+			return $this->connected;
 		}
 
+		// Reset connected state
+		$this->connected = false;
+
 		$port       = 0;
 		$serveraddr = trim($this->configCache->get('database', 'hostname'));
 		$serverdata = explode(':', $serveraddr);
@@ -187,19 +190,20 @@ class Database
 	 */
 	public function disconnect()
 	{
-		if (is_null($this->connection)) {
-			return;
+		if (!is_null($this->connection)) {
+			switch ($this->driver) {
+				case 'pdo':
+					$this->connection = null;
+					break;
+				case 'mysqli':
+					$this->connection->close();
+					$this->connection = null;
+					break;
+			}
 		}
 
-		switch ($this->driver) {
-			case 'pdo':
-				$this->connection = null;
-				break;
-			case 'mysqli':
-				$this->connection->close();
-				$this->connection = null;
-				break;
-		}
+		$this->driver    = null;
+		$this->connected = false;
 	}
 
 	/**
@@ -369,6 +373,7 @@ class Database
 				$connected = $this->connection->ping();
 				break;
 		}
+
 		return $connected;
 	}