From 792097fb6a6507201ec41f90201ad05ad8c38870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Tue, 18 Feb 2014 21:22:34 +0100 Subject: [PATCH] [add] script to make the install more user friendly #466 --- check_setup.php | 40 +++++ index.php | 1 + install/index.php | 283 ++++++++++++++++++++++++++++++++ themes/baggy/css/messages.css | 19 +++ wallabag_compatibility_test.php | 2 +- 5 files changed, 344 insertions(+), 1 deletion(-) create mode 100644 check_setup.php create mode 100644 install/index.php diff --git a/check_setup.php b/check_setup.php new file mode 100644 index 0000000..96dd0f7 --- /dev/null +++ b/check_setup.php @@ -0,0 +1,40 @@ + "short_open_tag = On"'); + } +} + +// Check PDO Sqlite +if (! extension_loaded('pdo_sqlite')) { + die('PHP extension required: pdo_sqlite'); +} + +// Check ZIP +if (! extension_loaded('zip')) { + die('PHP extension required: zip'); +} + +// Check if /cache is writeable +if (! is_writable('cache')) { + die('The directory "cache" must be writeable by your web server user'); +} + +// Check if /db is writeable +if (! is_writable('db')) { + die('The directory "db" must be writeable by your web server user'); +} + +// install folder still present, need to install wallabag +if (is_dir('install')) { + require('install/index.php'); + exit; +} \ No newline at end of file diff --git a/index.php b/index.php index 1a595ec..7ded3bd 100644 --- a/index.php +++ b/index.php @@ -9,6 +9,7 @@ */ define ('POCHE', '1.5.0'); +require 'check_setup.php'; require_once 'inc/poche/global.inc.php'; session_start(); diff --git a/install/index.php b/install/index.php new file mode 100644 index 0000000..d213717 --- /dev/null +++ b/install/index.php @@ -0,0 +1,283 @@ +download it here manually<∕a> and unzip it in your wallabag folder.'; + } + else { + if (extension_loaded('zip')) { + $zip = new ZipArchive(); + if ($zip->open("cache/vendor.zip") !== TRUE){ + $errors[] = 'Impossible to open cache/vendor.zip. Please unzip it manually in your wallabag folder.'; + } + if ($zip->extractTo(realpath(''))) { + @unlink("cache/vendor.zip"); + $successes[] = 'twig is now installed, you can install wallabag.'; + } + else { + $errors[] = 'Impossible to extract cache/vendor.zip. Please unzip it manually in your wallabag folder.'; + } + $zip->close(); + } + else { + $errors[] = 'zip extension is not enabled in your PHP configuration. Please unzip cache/vendor.zip in your wallabag folder.'; + } + } +} +else if ($_POST['install']) { + if (!is_dir('vendor')) { + $errors[] = 'You must install twig before.'; + } + else { + $continue = true; + // Create config.inc.php + if (!copy('inc/poche/config.inc.php.new', 'inc/poche/config.inc.php')) { + $errors[] = 'Installation aborted, impossible to create inc/poche/config.inc.php file. Maybe you don\'t have write access to create it.'; + $continue = false; + } + else { + function generate_salt() { + mt_srand(microtime(true)*100000 + memory_get_usage(true)); + return md5(uniqid(mt_rand(), true)); + } + + $content = file_get_contents('inc/poche/config.inc.php'); + $salt = generate_salt(); + $content = str_replace("define ('SALT', '');", "define ('SALT', '".$salt."');", $content); + file_put_contents('inc/poche/config.inc.php', $content); + } + + if ($continue) { + + // User informations + $username = trim($_POST['username']); + $password = trim($_POST['password']); + $salted_password = sha1($password . $username . $salt); + + // Database informations + if ($_POST['db_engine'] == 'sqlite') { + if (!copy('install/poche.sqlite', 'db/poche.sqlite')) { + $errors[] = 'Impossible to create inc/poche/config.inc.php file.'; + $continue = false; + } + else { + $db_path = 'sqlite:' . realpath('') . '/db/poche.sqlite'; + $handle = new PDO($db_path); + } + } + else { + $content = file_get_contents('inc/poche/config.inc.php'); + + if ($_POST['db_engine'] == 'mysql') { + $db_path = 'mysql:host=' . $_POST['mysql_server'] . ';dbname=' . $_POST['mysql_database']; + $content = str_replace("define ('STORAGE_SERVER', 'localhost');", "define ('STORAGE_SERVER', '".$_POST['mysql_server']."');", $content); + $content = str_replace("define ('STORAGE_DB', 'poche');", "define ('STORAGE_DB', '".$_POST['mysql_database']."');", $content); + $content = str_replace("define ('STORAGE_USER', 'poche');", "define ('STORAGE_USER', '".$_POST['mysql_user']."');", $content); + $content = str_replace("define ('STORAGE_PASSWORD', 'poche');", "define ('STORAGE_PASSWORD', '".$_POST['mysql_password']."');", $content); + $handle = new PDO($db_path, $_POST['mysql_user'], $_POST['mysql_password']); + + $sql_structure = file_get_contents('install/mysql.sql'); + } + else if ($_POST['db_engine'] == 'postgresql') { + $db_path = 'pgsql:host=' . $_POST['pg_server'] . ';dbname=' . $_POST['pg_database']; + $content = str_replace("define ('STORAGE_SERVER', 'localhost');", "define ('STORAGE_SERVER', '".$_POST['pg_server']."');", $content); + $content = str_replace("define ('STORAGE_DB', 'poche');", "define ('STORAGE_DB', '".$_POST['pg_database']."');", $content); + $content = str_replace("define ('STORAGE_USER', 'poche');", "define ('STORAGE_USER', '".$_POST['pg_user']."');", $content); + $content = str_replace("define ('STORAGE_PASSWORD', 'poche');", "define ('STORAGE_PASSWORD', '".$_POST['pg_password']."');", $content); + $handle = new PDO($db_path, $_POST['pg_user'], $_POST['pg_password']); + + $sql_structure = file_get_contents('install/postgres.sql'); + } + + $content = str_replace("define ('STORAGE', 'sqlite');", "define ('STORAGE', '".$_POST['db_engine']."');", $content); + file_put_contents('inc/poche/config.inc.php', $content); + } + + if ($continue) { + + function executeQuery($handle, $sql, $params) { + try + { + $query = $handle->prepare($sql); + $query->execute($params); + return $query->fetchAll(); + } + catch (Exception $e) + { + return FALSE; + } + } + + // create database structure + $query = executeQuery($handle, $sql_structure, array()); + + // Create user + $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + $sql = 'INSERT INTO users (username, password, name) VALUES (?, ?, ?)'; + $params = array($username, $salted_password, $username); + $query = executeQuery($handle, $sql, $params); + + $id_user = $handle->lastInsertId(); + + $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)'; + $params = array($id_user, 'pager', '10'); + $query = executeQuery($handle, $sql, $params); + + $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)'; + $params = array($id_user, 'language', 'en_EN.UTF8'); + $query = executeQuery($handle, $sql, $params); + + $successes[] = 'wallabag is now installed. Don\'t forget to delete install folder.'; + } + } + } +} +?> + + + + + + + wallabag — installation + + + + + + + + + + + + + + +
+

+ logo poche +

+
+
+ + + +
+

Errors during installation:

+

+

    + +
  • + +
+

+

Please reload this page when you think you resolved these problems.

+
+ + +
+

+

    + +
  • + +
+

+
+ +

To install wallabag, you just have to fill the following fields. That's all.

+

Don't forget to check your server compatibility here.

+
+
+ Technical settings + +
wallabag needs twig, a template engine (?). Two ways to install it: +
    +
  • automatically download and extract vendor.zip into your wallabag folder. +

    + + Be careful, zip extension is not enabled in your PHP configuration. You'll have to unzip vendor.zip manually. + + This method is mainly recommended if you don't have a dedicated server.
  • +
  • use Composer :
    curl -s http://getcomposer.org/installer | php
    +php composer.phar install
  • +
+
+ +

+ Database engine: +

    +
  • +
  • + +
      +
    • +
    • +
    • +
    • +
    +
  • +
  • + +
      +
    • +
    • +
    • + id
    • +
    +
  • +
+

+
+ +
+ User settings +

+ + +

+

+ + +

+

+ +

+
+ + +
+
+ + + \ No newline at end of file diff --git a/themes/baggy/css/messages.css b/themes/baggy/css/messages.css index e69de29..0cd89a9 100755 --- a/themes/baggy/css/messages.css +++ b/themes/baggy/css/messages.css @@ -0,0 +1,19 @@ +.messages.error { + border: 1px solid #c42608; + color: #c00 !important; + background: #fff0ef; + text-align: left; +} + +.messages.notice { + border: 1px solid #ebcd41; + color: #000; + background: #fffcd3; + text-align: left; +} + +.messages.success { + border: 1px solid #6dc70c; + background: #e0fbcc; + text-align: left; +} \ No newline at end of file diff --git a/wallabag_compatibility_test.php b/wallabag_compatibility_test.php index fd28504..26dce01 100644 --- a/wallabag_compatibility_test.php +++ b/wallabag_compatibility_test.php @@ -176,7 +176,7 @@ div.chunk { PHP - 5.2.0 or higher + 5.3.3 or higher