Browse Source

Merge pull request #1444 from Alkarex/cli-install-sqlite

Fix CLI install bug with SQLite
Alexandre Alapetite 9 years ago
parent
commit
c67180530b
2 changed files with 53 additions and 23 deletions
  1. 22 19
      cli/do-install.php
  2. 31 4
      lib/lib_install.php

+ 22 - 19
cli/do-install.php

@@ -37,25 +37,6 @@ if (empty($options['default_user'])) {
 
 fwrite(STDERR, 'FreshRSS install…' . "\n");
 
-$requirements = checkRequirements();
-if ($requirements['all'] !== 'ok') {
-	$message = 'FreshRSS install failed requirements:' . "\n";
-	foreach ($requirements as $requirement => $check) {
-		if ($check !== 'ok' && $requirement !== 'all') {
-			$message .= '• ' . $requirement . "\n";
-		}
-	}
-	fail($message);
-}
-
-if (!FreshRSS_user_Controller::checkUsername($options['default_user'])) {
-	fail('FreshRSS invalid default username (must be ASCII alphanumeric): ' . $options['default_user']);
-}
-
-if (isset($options['auth_type']) && !in_array($options['auth_type'], array('form', 'http_auth', 'none'))) {
-	fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }: ' . $options['auth_type']);
-}
-
 $config = array(
 		'salt' => generateSalt(),
 		'db' => FreshRSS_Context::$system_conf->db,
@@ -80,6 +61,28 @@ foreach ($dBparams as $dBparam) {
 	}
 }
 
+$requirements = checkRequirements($config['db']['type']);
+if ($requirements['all'] !== 'ok') {
+	$message = 'FreshRSS install failed requirements:' . "\n";
+	foreach ($requirements as $requirement => $check) {
+		if ($check !== 'ok' && !in_array($requirement, array('all', 'pdo', 'message'))) {
+			$message .= '• ' . $requirement . "\n";
+		}
+	}
+	if (!empty($requirements['message'])) {
+		$message .= '• ' . $requirements['message'] . "\n";
+	}
+	fail($message);
+}
+
+if (!FreshRSS_user_Controller::checkUsername($options['default_user'])) {
+	fail('FreshRSS invalid default username (must be ASCII alphanumeric): ' . $options['default_user']);
+}
+
+if (isset($options['auth_type']) && !in_array($options['auth_type'], array('form', 'http_auth', 'none'))) {
+	fail('FreshRSS invalid authentication method (auth_type must be one of { form, http_auth, none }: ' . $options['auth_type']);
+}
+
 if (file_put_contents(join_path(DATA_PATH, 'config.php'), "<?php\n return " . var_export($config, true) . ";\n") === false) {
 	fail('FreshRSS could not write configuration file!: ' . join_path(DATA_PATH, 'config.php'));
 }

+ 31 - 4
lib/lib_install.php

@@ -5,14 +5,36 @@ define('BCRYPT_COST', 9);
 Minz_Configuration::register('default_system', join_path(DATA_PATH, 'config.default.php'));
 Minz_Configuration::register('default_user', join_path(USERS_PATH, '_', 'config.default.php'));
 
-function checkRequirements() {
+function checkRequirements($dbType = '') {
 	$php = version_compare(PHP_VERSION, '5.3.3') >= 0;
 	$minz = file_exists(join_path(LIB_PATH, 'Minz'));
 	$curl = extension_loaded('curl');
 	$pdo_mysql = extension_loaded('pdo_mysql');
 	$pdo_sqlite = extension_loaded('pdo_sqlite');
 	$pdo_pgsql = extension_loaded('pdo_pgsql');
-	$pdo = $pdo_mysql || $pdo_sqlite || $pdo_pgsql;
+	$message = '';
+	switch ($dbType) {
+		case 'mysql':
+			$pdo_sqlite = $pdo_pgsql = true;
+			$pdo = $pdo_mysql;
+			break;
+		case 'sqlite':
+			$pdo_mysql = $pdo_pgsql = true;
+			$pdo = $pdo_sqlite;
+			break;
+		case 'pgsql':
+			$pdo_mysql = $pdo_sqlite = true;
+			$pdo = $pdo_pgsql;
+			break;
+		case '':
+			$pdo = $pdo_mysql || $pdo_sqlite || $pdo_pgsql;
+			break;
+		default:
+			$pdo_mysql = $pdo_sqlite = $pdo_pgsql = true;
+			$pdo = false;
+			$message = 'Invalid database type!';
+			break;
+	}
 	$pcre = extension_loaded('pcre');
 	$ctype = extension_loaded('ctype');
 	$fileinfo = extension_loaded('fileinfo');
@@ -44,8 +66,9 @@ function checkRequirements() {
 		'users' => $users ? 'ok' : 'ko',
 		'favicons' => $favicons ? 'ok' : 'ko',
 		'http_referer' => $http_referer ? 'ok' : 'ko',
+		'message' => $message ?: 'ok',
 		'all' => $php && $minz && $curl && $pdo && $pcre && $ctype && $fileinfo && $dom && $xml &&
-		         $data && $cache && $users && $favicons && $http_referer ?
+		         $data && $cache && $users && $favicons && $http_referer && $message == '' ?
 		         'ok' : 'ko'
 	);
 }
@@ -77,7 +100,11 @@ function checkDb(&$dbOptions) {
 			break;
 		case 'sqlite':
 			include_once(APP_PATH . '/SQL/install.sql.sqlite.php');
-			$dsn = 'sqlite:' . join_path(USERS_PATH, $dbOptions['default_user'], 'db.sqlite');
+			$path = join_path(USERS_PATH, $dbOptions['default_user']);
+			if (!is_dir($path)) {
+				mkdir($path);
+			}
+			$dsn = 'sqlite:' . join_path($path, 'db.sqlite');
 			$driver_options = array(
 				PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
 			);