require_once('install_functions.php');
+// Start by destroying session to avoid wrong logins from previous installations
+// cookie part
+$cookiedir = '';
+if (dirname($_SERVER['SCRIPT_NAME'])!='/') {
+ $cookiedir = dirname($_SERVER["SCRIPT_NAME"]).'/';
+}
+
+if (isset($_SERVER['HTTP_COOKIE'])) {
+ $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
+ foreach($cookies as $cookie) {
+ $parts = explode('=', $cookie);
+ $name = trim($parts[0]);
+ setcookie($name, '', time()-1000);
+ setcookie($name, '', time()-1000, $cookiedir);
+ }
+}
+// session part
+if (isset($_SESSION['poche_user'])) {
+ unset($_SESSION['poche_user']);
+}
+
if (isset($_GET['clean'])) {
if (is_dir('install')){
delTree('install', true);
$errors[] = 'Impossible to create the SQLite database file. Please check your file permissions.';
}
else {
- $db_path = 'sqlite:' . realpath('') . '/db/poche.sqlite';
- $handle = new PDO($db_path);
- $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- $sql_structure = "";
+ try {
+ $db_path = 'sqlite:' . realpath('') . '/db/poche.sqlite';
+ $handle = new PDO($db_path);
+ $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+ $sql_structure = "";
+ } catch (PDOException $e) {
+ $errors[] = "SQLite has encountered an issue : " . $e->getMessage();
+ }
}
} else {
// MySQL and Postgre
try {
if ($_POST['db_engine'] == 'mysql') {
- if ($_POST['mysql_server'] != "") {$server = $_POST['mysql_server'];}
+ if ($_POST['mysql_server'] != "") {$server = $_POST['mysql_server'];} // if server and database are filled
if ($_POST['mysql_database'] != "") {$database = $_POST['mysql_database'];}
+ $sql_structure = file_get_contents('install/mysql.sql');
+
if (isset($_POST['mysql_utf8_mb4'])) {
//with UTF8-MB4
$db_path = 'mysql:host=' . $server . ';dbname=' . $database . ';charset=utf8mb4';
));
$content = str_replace("define ('MYSQL_USE_UTF8MB4', FALSE);", "define ('MYSQL_USE_UTF8MB4', TRUE);", $content);
} else { // regular UTF8
+ $sql_structure = str_replace(" DEFAULT CHARSET=utf8mb4", "", $sql_structure); // replace the UTF8-MB4 occurences inside the mysql.sql file
$db_path = 'mysql:host=' . $server . ';dbname=' . $database;
$handle = new PDO($db_path, $_POST['mysql_user'], $_POST['mysql_password']);
}
$moreQueries[] = "INSERT INTO `tags` (`id`, `value`) VALUES (1, 'opensource');";
$moreQueries[] = "INSERT INTO `tags_entries` (`id`, `entry_id`, `tag_id`) VALUES (1, 2, 1);";
- $sql_structure = file_get_contents('install/mysql.sql');
}
else if ($_POST['db_engine'] == 'postgres') {
if ($_POST['pg_server'] != "") {$server = $_POST['pg_server'];}
$sql_structure = file_get_contents('install/postgres.sql');
}
// create database structure
- $query = $handle->exec($sql_structure);
-
- $usertest = executeQuery($handle,"SELECT * from users WHERE username = ?", array($username));
- if (!empty($usertest)) {
- $continue = false;
- $errors[] = "An user already exists with this username in database.";
- }
+ if (!$handle) {
+ $continue = false;
+ $errors[] = "Couldn't connect to your database server. Please check credentials.";
+ } else {
+ $query = $handle->exec($sql_structure);
+
+ $usertest = executeQuery($handle,"SELECT * from users WHERE username = ?", array($username));
+ if (!empty($usertest)) {
+ $continue = false;
+ $errors[] = "An user already exists with this username in database.";
+ }
+ }
} catch (PDOException $e) {
- $errors[] = $e->getMessage();
+ /* Error codes :
+ / 7 : PostgreSQL issues
+ / 1045 : Access denied to the user : user doesn't exists
+ / 1044 : Access denied to the user : user doesn't have the rights to connect to this database
+ / 2005 : Unknown database server
+ */
+ switch ($e->getCode()) {
+ case 7:
+ $errors[] = "PostgreSQL has encountered an issue : " . $e->getMessage();
+ break;
+ case 1045:
+ $errors[] = "The password for this user is incorrect, or this user doesn't exist.";
+ break;
+ case 1044:
+ $errors[] = "The user isn't allowed to use this database.";
+ break;
+ case 2005:
+ $errors[] = "The server can't be reached.";
+ break;
+ default:
+ $errors[] = "A error happened while connecting to your database : " . $e->getMessage();
+ break;
+ }
$continue = false;
}
}
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="themes/baggy/img/apple-touch-icon-144x144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="themes/baggy/img/apple-touch-icon-72x72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="themes/baggy/img/apple-touch-icon-precomposed.png">
- <link href='//fonts.googleapis.com/css?family=PT+Sans:700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="themes/baggy/css/ratatouille.css" media="all">
<link rel="stylesheet" href="themes/baggy/css/font.css" media="all">
<link rel="stylesheet" href="themes/baggy/css/main.css" media="all">
<p>All fields have to be filled.</p>
</div>
<ul id="mysql_infos">
- <li><label for="mysql_server">Server</label> <input type="text" placeholder="localhost" id="mysql_server" name="mysql_server" /></li>
- <li><label for="mysql_database">Existing database</label> <input type="text" placeholder="wallabag" id="mysql_database" name="mysql_database" /></li>
+ <li><label for="mysql_server">Server</label> <input type="text" placeholder="eg : localhost" id="mysql_server" name="mysql_server" /></li>
+ <li><label for="mysql_database">Existing database</label> <input type="text" placeholder="eg : wallabag" id="mysql_database" name="mysql_database" /></li>
<li><label for="mysql_user">User</label> <input type="text" placeholder="user" id="mysql_user" name="mysql_user" /></li>
<li><label for="mysql_password">Password</label> <input type="password" placeholder="p4ssw0rd" id="mysql_password" name="mysql_password" /></li>
<li><label for="mysql_utf8_mb4">Use UTF-8 MB4</label> <input id="mysql_utf8_mb4" type="checkbox" name="mysql_utf8_mb4">
<p>All fields have to be filled.</p>
</div>
<ul id="pg_infos">
- <li><label for="pg_server">Server</label> <input type="text" placeholder="localhost" id="pg_server" name="pg_server" /></li>
- <li><label for="pg_database">Existing database</label> <input type="text" placeholder="wallabag" id="pg_database" name="pg_database" /></li>
+ <li><label for="pg_server">Server</label> <input type="text" placeholder="eg : localhost" id="pg_server" name="pg_server" /></li>
+ <li><label for="pg_database">Existing database</label> <input type="text" placeholder="eg : wallabag" id="pg_database" name="pg_database" /></li>
<li><label for="pg_user">User</label> <input type="text" placeholder="user" id="pg_user" name="pg_user" /></li>
<li><label for="pg_password">Password</label> <input type="password" placeholder="p4ssw0rd" id="pg_password" name="pg_password" /></li>
</ul>