summaryrefslogtreecommitdiff
path: root/installer
diff options
context:
space:
mode:
Diffstat (limited to 'installer')
-rw-r--r--installer/controllers/installer.php80
-rw-r--r--installer/database_config.php45
-rw-r--r--installer/index.php67
-rw-r--r--installer/init_var.php (renamed from installer/data/init_var.php)0
-rw-r--r--installer/install.sql (renamed from installer/data/install.sql)0
-rw-r--r--installer/installer.php531
-rw-r--r--installer/views/database.php.php44
-rw-r--r--installer/views/installer.html.php49
-rw-r--r--installer/views/installer.txt.php51
9 files changed, 188 insertions, 679 deletions
diff --git a/installer/controllers/installer.php b/installer/controllers/installer.php
deleted file mode 100644
index 9c9491b7..00000000
--- a/installer/controllers/installer.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php defined("SYSPATH") or die("No direct script access.");
-/**
- * Gallery - a web based photo album viewer and editor
- * Copyright (C) 2000-2008 Bharat Mediratta
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
- */
-class Installer_Controller extends Template_Controller {
- public $template = "welcome.html";
-
- function index() {
- $this->template->syscheck = new View("install.html");
- $this->template->syscheck->errors = $this->_get_config_errors();
- $this->template->syscheck->modules = array();
- }
-
- private function _get_config_errors() {
- $errors = array();
- if (!file_exists(VARPATH)) {
- $error = new stdClass();
- $error->message = "Missing: " . VARPATH;
- $error->instructions[] = "mkdir " . VARPATH;
- $error->instructions[] = "chmod 777 " . VARPATH;
- $errors[] = $error;
- } else if (!is_writable(VARPATH)) {
- $error = new stdClass();
- $error->message = "Not writable: " . VARPATH;
- $error->instructions[] = "chmod 777 " . VARPATH;
- $errors[] = $error;
- }
-
- $db_php = VARPATH . "database.php";
- if (!file_exists($db_php)) {
- $error = new stdClass();
- $error->message = "Missing: $db_php <br/> Run the following commands...";
- $error->instructions[] = "cp " . DOCROOT . "kohana/config/database.php $db_php";
- $error->instructions[] = "chmod 644 $db_php";
- $error->message2 = "...then edit this file and enter your database configuration settings.";
- $errors[] = $error;
- } else if (!is_readable($db_php)) {
- $error = new stdClass();
- $error->message = "Not readable: $db_php";
- $error->instructions[] = "chmod 644 $db_php";
- $error->message2 = "Then edit this file and enter your database configuration settings.";
- $errors[] = $error;
- } else {
- $old_handler = set_error_handler(array("Welcome_Controller", "_error_handler"));
- try {
- Database::instance()->connect();
- } catch (Exception $e) {
- $error = new stdClass();
- $error->message = "Database error: {$e->getMessage()}";
- $db_name = Kohana::config("database.default.connection.database");
- if (strchr($error->message, "Unknown database")) {
- $error->instructions[] = "mysqladmin -uroot create $db_name";
- } else {
- $error->instructions = array();
- $error->message2 = "Check " . VARPATH . "database.php";
- }
- $errors[] = $error;
- }
- set_error_handler($old_handler);
- }
-
- return $errors;
- }
-
-} \ No newline at end of file
diff --git a/installer/database_config.php b/installer/database_config.php
new file mode 100644
index 00000000..78492eba
--- /dev/null
+++ b/installer/database_config.php
@@ -0,0 +1,45 @@
+<?php defined('SYSPATH') OR die('No direct access allowed.'); ?>
+<?= "<?php" ?> defined('SYSPATH') OR die('No direct access allowed.');
+
+/**
+ * @package Database
+ *
+ * Database connection settings, defined as arrays, or "groups". If no group
+ * name is used when loading the database library, the group named "default"
+ * will be used.
+ *
+ * Each group can be connected to independently, and multiple groups can be
+ * connected at once.
+ *
+ * Group Options:
+ * benchmark - Enable or disable database benchmarking
+ * persistent - Enable or disable a persistent connection
+ * connection - Array of connection specific parameters; alternatively,
+ * you can use a DSN though it is not as fast and certain
+ * characters could create problems (like an '@' character
+ * in a password):
+ * 'connection' => 'mysql://dbuser:secret@localhost/kohana'
+ * character_set - Database character set
+ * table_prefix - Database table prefix
+ * object - Enable or disable object results
+ * cache - Enable or disable query caching
+ * escape - Enable automatic query builder escaping
+ */
+$config["default"] = array(
+ "benchmark" => false,
+ "persistent" => false,
+ "connection" => array(
+ "type" => "<?= $type ?>",
+ "user" => "<?= $user ?>",
+ "pass" => "<?= $password ?>",
+ "host" => "<?= $host ?>",
+ "port" => false,
+ "socket" => false,
+ "database" => "<?= $dbname ?>"
+ ),
+ "character_set" => "utf8",
+ "table_prefix" => "<?= $prefix ?>",
+ "object" => true,
+ "cache" => false,
+ "escape" => true
+); \ No newline at end of file
diff --git a/installer/index.php b/installer/index.php
index 7999a76a..b0a4d417 100644
--- a/installer/index.php
+++ b/installer/index.php
@@ -26,66 +26,13 @@
* -d Database name (default: gallery3)
* -t Table prefix (default: )
* -m Modules to install (default: core, user)
- * -f Response file (default: not used)
- * The response file is a php file that contains the following syntax;
- * $config[key] = value;
- * Where key is one of "host", "user", "password", "dbname", "prefix". Values specified
- * on the command line will override values contained in this file
*/
+define("DOCROOT", dirname(dirname(__FILE__)) . "/");
+define("VARPATH", DOCROOT . "var/");
-define("DOCROOT", dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR);
-
-// Define application and system paths
-define('APPPATH', DOCROOT . 'core' . DIRECTORY_SEPARATOR);
-define('MODPATH', DOCROOT . 'modules' . DIRECTORY_SEPARATOR);
-define('THEMEPATH', DOCROOT . 'themes' . DIRECTORY_SEPARATOR);
-define('SYSPATH', DOCROOT . 'kohana' . DIRECTORY_SEPARATOR);
-
-define('VARPATH', DOCROOT . 'var' . DIRECTORY_SEPARATOR);
-define('TEST_MODE', 0);
-define('EXT', ".php");
-
-include DOCROOT . "installer/installer.php";
-
-if (PHP_SAPI == "cli") {
- installer::command_line();
- exit;
-}
-
-if (file_exists(VARPATH . "installed")) {
- header("Location: ../index.php/albums/1");
- exit;
-}
-
-set_error_handler(create_function('$errno, $errstr, $errfile, $errline',
- 'throw new ErrorException($errstr, 0, $errno, $errfile, $errline);'));
-
-// Set exception handler
-set_exception_handler(array("installer", "print_exception"));
-
-// @todo Log the results of failed call
-if (!installer::environment_check()) {
- installer::display_requirements();
- die;
-}
-
-installer::parse_cli_parms($argv);
-
-$config_valid = true;
-
-try {
- $config_valid = installer::check_database_authorization();
-} catch (Exception $e) {
- installer::print_exception($e);
- die("Specifed User does not have sufficient authority to install Gallery3\n");
-}
-
-$config_valid &= installer::check_docroot_writable();
-
-installer::display_requirements(!$config_valid);
-
-if ($config_valid) {
- print installer::install();
-}
-
+// Define this to get the preamable to pass
+// @todo: change all preambles to key off of VARPATH instead
+define("SYSPATH", "anything");
+require(DOCROOT . "installer/installer.php");
+installer::command_line();
diff --git a/installer/data/init_var.php b/installer/init_var.php
index 42d50c0a..42d50c0a 100644
--- a/installer/data/init_var.php
+++ b/installer/init_var.php
diff --git a/installer/data/install.sql b/installer/install.sql
index f87b930f..f87b930f 100644
--- a/installer/data/install.sql
+++ b/installer/install.sql
diff --git a/installer/installer.php b/installer/installer.php
index 986c7794..5266ec3b 100644
--- a/installer/installer.php
+++ b/installer/installer.php
@@ -18,496 +18,237 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class installer {
- private static $messages = array();
- private static $config = array();
- private static $database = null;
- private static $config_errors = false;
-
static function command_line() {
- // remove the script name from the arguments
- array_shift($_SERVER["argv"]);
-
- //$_SERVER["HTTP_USER_AGENT"] = phpversion();
- //date_default_timezone_set('America/Los_Angeles');
-
+ // Set error handlers
set_error_handler(create_function('$errno, $errstr, $errfile, $errline',
'throw new ErrorException($errstr, 0, $errno, $errfile, $errline);'));
-
- // Set exception handler
set_exception_handler(array("installer", "print_exception"));
- // @todo Log the results of failed call
- if (!installer::environment_check()) {
- self::display_requirements();
- die;
- }
-
- self::parse_cli_parms($_SERVER["argv"]);
-
- $config_valid = true;
-
+ $config = self::parse_cli_params();
try {
- $config_valid = self::check_database_authorization();
- } catch (Exception $e) {
- self::print_exception($e);
- die("Specifed User does not have sufficient authority to install Gallery3\n");
- }
-
- $config_valid &= self::check_docroot_writable();
-
- self::display_requirements(!$config_valid);
-
- if ($config_valid) {
- print self::install();
+ self::environment_check();
+ self::setup_database($config);
+ self::setup_varpath();
+ self::install($config);
+ list ($user, $password) = self::create_admin($config);
+ print "Successfully installed your Gallery 3!\n";
+ print "Log in with:\n username: admin\n password: $password\n";
+ } catch (InstallException $e) {
+ self::display_errors($e->errors());
}
}
static function environment_check() {
- $failed = false;
- $section = array("header" => "Environment Test",
- "description" => "The following tests have been run to determine if " .
- "Gallery3 will work in your environment. If any of the tests have " .
- "failed, consult the documention on http://gallery.menalto.com for " .
- "more information on how to correct the problem.",
- "msgs" => array());
+ $errors = array();
if (version_compare(PHP_VERSION, "5.2", "<")) {
- $section["msgs"]["PHP Version"] = array("error" => true,
- "text" => sprintf("Gallery3 requires PHP 5.2 or newer, current version: %s.", PHP_VERSION));
- $failed = true;
- } else {
- $section["msgs"]["PHP Version"] = array("error" => false,
- "text" => PHP_VERSION);
- }
-
-
- if (!(is_dir(SYSPATH) AND is_file(SYSPATH.'core/Bootstrap'.EXT))) {
- $section["msgs"]["Kohana Directory"] = array("error" => true,
- "text" => "The configured Kohana directory does not exist or does not contain the required files.");
- } else {
- $section["msgs"]["Kohana Directory"] = array("error" => false,
- "text" => SYSPATH);
- }
-
- if (!(is_dir(APPPATH) AND is_file(APPPATH.'config/config'.EXT))) {
- $section["msgs"]["Application Directory"] = array("error" => true,
- "text" => "The configured Gallery3 application directory does not exist or does not contain the required files.");
- $failed = true;
- } else {
- $section["msgs"]["Application Directory"] = array("error" => false,
- "text" => APPPATH);
- }
-
- if (!(is_dir(MODPATH))) {
- $section["msgs"]["Modules Directory"] = array("error" => true,
- "text" => "The configured Gallery3 modules directory does not exist or does not contain the required files.");
- $failed = true;
- } else {
- $section["msgs"]["Modules Directory"] = array("error" => false,
- "text" => MODPATH);
- }
-
- if (!(is_dir(THEMEPATH))) {
- $section["msgs"]["Theme Directory"] = array("error" => true,
- "text" => "The configured Gallery3 themes directory does not exist or does not contain the required files.");
- $failed = true;
- } else {
- $section["msgs"]["Themes Directory"] = array("error" => false,
- "text" => THEMEPATH);
+ $errors["PHP Version"] = sprintf(
+ "Gallery3 requires PHP 5.2 or newer, current version: %s.", PHP_VERSION);
}
if (!@preg_match("/^.$/u", utf8_encode("\xF1"))) {
- $section["msgs"]["PCRE UTF-8"] = array("error" => true,
- "text" => "Perl-Compatible Regular Expressions has not been compiled with UTF-8 support.",
- "html" => "<a href=\"http://php.net/pcre\">PCRE</a> has not been compiled with UTF-8 support.");
- $failed = true;
- } else if (!@preg_match("/^\pL$/u", utf8_encode("\xF1"))) {
- $section["msgs"]["PCRE UTF-8"] = array("error" => true,
- "text" => "Perl-Compatible Regular Expressions has not been compiled with Unicode support.",
- "html" => "<a href=\"http://php.net/pcre\">PCRE</a> has not been compiled with Unicode property support.");
- $failed = true;
- } else {
- $section["msgs"]["PCRE UTF-8"] = array("error" => false,
- "text" => "Pass");
+ $errors["PCRE UTF-8"] =
+ "PHP is missing Perl-Compatible Regular Expression support (http://php.net/pcre)";
}
if (!(class_exists("ReflectionClass"))) {
- $section["msgs"]["Reflection Enabled"] = array("error" => true,
- "text" => "PHP relection is either not loaded or not compiled in.",
- "html" => "PHP <a href=\"http://php.net/reflection\">relection<a> is either not loaded or not compiled in.");
- $failed = true;
- } else {
- $section["msgs"]["Reflection Enabled"] = array("error" => false,
- "text" => "Pass");
+ $errors["PHP Reflection"] = "PHP is missing Reflection support (http://php.net/reflection)";
}
if (!(function_exists("filter_list"))) {
- $section["msgs"]["Filters Enabled"] = array("error" => true,
- "text" => "The filter extension is either not loaded or not compiled in.",
- "html" => "The <a href=\"http://php.net/filter\">filter</a> extension is either not loaded or not compiled in.");
- $failed = true;
- } else {
- $section["msgs"]["Filters Enabled"] = array("error" => false,
- "text" => "Pass");
+ $errors["Filters"] = "PHP is missing the filter extension (http://php.net/filter)";
}
if (!(extension_loaded("iconv"))) {
- $section["msgs"]["Iconv Loaded"] = array("error" => true,
- "text" => "The iconv extension is not loaded.",
- "html" => "The <a href=\"http://php.net/iconv\">iconv</a> extension is not loaded.");
- $failed = true;
- } else {
- $section["msgs"]["Iconv Enabled"] = array("error" => false,
- "text" => "Pass");
+ $errors["iconv"] = "PHP is missing the iconv extension (http://php.net/iconv)";
}
if (extension_loaded("mbstring") &&
(ini_get("mbstring.func_overload") & MB_OVERLOAD_STRING)) {
- $section["msgs"]["Mbstring Overloaded"] = array("error" => true,
- "text" => "The mbstring extension is overloading PHP's native string functions.",
- "html" => "The <a href=\"http://php.net/mbstring\">mbstring</a> extension is overloading PHP's native string functions.");
- $failed = true;
- } else {
- $section["msgs"]["MbString Overloaded"] = array("error" => false,
- "text" => "Pass");
+ $errors["Multibyte Strings"] =
+ "The mbstring extension is overloading PHP's native string functions " .
+ "(http://php.net/mbstring)";
}
if (!(isset($_SERVER["REQUEST_URI"]) || isset($_SERVER["PHP_SELF"]))) {
- $section["msgs"]["URI Determination"] = array("error" => true,
- "text" => "Neither \$_SERVER['REQUEST_URI'] or \$_SERVER['PHP_SELF'] is available.",
- "html" => "Neither <code>\$_SERVER['REQUEST_URI']</code> or <code>\$_SERVER['PHP_SELF']<code> is available.");
- $failed = true;
- } else {
- $section["msgs"]["URI Determination"] = array("error" => false,
- "text" => "Pass");
+ $errors["URL Detection"] =
+ "Neither \$_SERVER['REQUEST_URI'] or \$_SERVER['PHP_SELF'] is available";
}
$short_tags = ini_get("short_open_tag");
if (empty($short_tags)) {
- $section["msgs"]["Short Tags"] = array("error" => true,
- "text" => "Gallery3 requires that PHP short tags be enabled.",
- "html" => "Gallery3 requires that PHP <a href=\"http://ca2.php.net/manual/en/ini.core.php\">short tags</a> be enabled");
- $failed = true;
- } else {
- $section["msgs"]["Short Tags"] = array("error" => false,
- "text" => "Pass");
+ $errors["Short Tags"] =
+ "PHP short tag support is disabled. (http://php.net/manual/en/ini.core.php)";
}
- self::$messages[] = $section;
- return !$failed;
+ if ($errors) {
+ throw new InstallException($errors);
+ }
}
- static function display_requirements($errors=false) {
- self::$config_errors = $errors;
- if (PHP_SAPI == 'cli') {
- print self::_render("installer/views/installer.txt");
+ static function parse_cli_params() {
+ $config = array("host" => "localhost",
+ "user" => "root",
+ "password" => "",
+ "dbname" => "gallery3",
+ "prefix" => "");
+
+ if (function_exists("mysqli")) {
+ $config["type"] = "mysqli";
} else {
- print self::_render("installer/views/installer.html");
+ $config["type"] = "mysql";
}
- }
- static function parse_cli_parms($argv) {
- $section = array("header" => "Installation Parameters",
- "description" => "The following parameters will be used to install and " .
- "configure your Gallery3 installation.",
- "msgs" => array());
- $arguments = array();
- for ($i=0; $i < count($argv); $i++) {
+ $argv = $_SERVER["argv"];
+ for ($i = 1; $i < count($argv); $i++) {
switch (strtolower($argv[$i])) {
case "-d":
- $arguments["dbname"] = $argv[++$i];
+ $config["dbname"] = $argv[++$i];
break;
case "-h":
- $arguments["host"] = $argv[++$i];
+ $config["host"] = $argv[++$i];
break;
case "-u":
- $arguments["user"] = $argv[++$i];
+ $config["user"] = $argv[++$i];
break;
case "-p":
- $arguments["password"] = $argv[++$i];
+ $config["password"] = $argv[++$i];
break;
case "-t":
- $arguments["prefix"] = $argv[++$i];
- break;
- case "-f":
- $arguments["file"] = $argv[++$i];
- break;
- case "-i":
- $arguments["type"] = $argv[++$i];
- break;
- case "-m":
- $arguments["modules"] = $argv[++$i];
+ $config["prefix"] = $argv[++$i];
break;
}
}
- $config = array("host" => "localhost", "user" => "root", "password" => "",
- "modules" => array("core" => 1, "user" => 1), "type" => "mysqli",
- "dbname" => "gallery3", "prefix" => "");
-
- if (!empty($arguments["file"])) {
- if (file_exists($arguments["file"])) {
- $save_modules = $config["modules"];
- include $arguments["file"];
- if (!is_array($config["modules"])) {
- $modules = explode(",", $config["modules"]);
- $config["modules"] = array_merge($save_modules, array_fill_keys($modules, 1));
- }
- }
- unset($arguments["file"]);
- }
-
- if (!empty($arguments["modules"])) {
- $modules = explode(",", $arguments["modules"]);
+ return $config;
+ }
- $config["modules"] = array_merge($config["modules"], array_fill_keys($modules, 1));
- unset($arguments["modules"]);
+ static function setup_database($config) {
+ $errors = array();
+ if (!mysql_connect($config["host"], $config["user"], $config["password"])) {
+ $errors["Database"] =
+ "Unable to connect to your database with the credentials provided. Error details:\n" .
+ mysql_error();
+ return;
}
- foreach (array_keys($config["modules"]) as $module) {
- unset($config["modules"][$module]);
- $config["modules"][trim($module)] = 1;
+ if (!mysql_select_db($config["dbname"]) && !mysql_create_db($config["dbname"])) {
+ $errors["Database"] = sprintf(
+ "Database '%s' is not defined and can't be created",
+ $config["dbname"]);
}
- self::$config = array_merge($config, $arguments);
+ if (mysql_num_rows(mysql_query("SHOW TABLES FROM {$config['dbname']}"))) {
+ $errors["Database"] = sprintf(
+ "Database '%s' exists and has tables in it, continuing may overwrite an existing install",
+ $config["dbname"]);
+ }
- foreach (self::$config as $key => $value) {
- if ($key == "modules") {
- $value = implode(", ", array_keys($value));
- }
- $section["msgs"][$key] = array("text" => $value, "error" => false);
+ if ($errors) {
+ throw new InstallException($errors);
}
- self::$messages[] = $section;
}
- static function check_database_authorization() {
- $section = array("header" => "Database Configuration",
- "description" => "Gallery3 requires the following database configuration.",
- "msgs" => array());
- if (!mysql_connect(self::$config["host"], self::$config["user"], self::$config["password"])) {
- throw new Exception(mysql_error());
+ static function setup_varpath() {
+ $errors = array();
+ if (is_writable(VARPATH)) {
+ return;
}
- /*
- * If we got this far, then the user/password combination is valid and we can now
- * a little more information for the individual that is running the script. We can also
- * connect to the database and ask for more information
- */
-
- $db_config_valid = true;
- if (!mysql_select_db(self::$config["dbname"]) && !mysql_create_db(self::$config["dbname"])) {
- $db_config_valid = false;
- $section["msgs"]["Database"] = array(
- "text" => "Database '$dbname' is not defined and can't be created",
- "error" => true);
+ if (is_writable(dirname(VARPATH)) && !mkdir(VARPATH)) {
+ $errors["Filesystem"] =
+ sprintf("The %s directory doesn't exist and can't be created", VARPATH);
}
- if (mysql_num_rows(mysql_query("SHOW TABLES FROM " . self::$config["dbname"]))) {
- $db_config_valid = false;
- $section["msgs"]["Database Empty"] = array("text" => "Database '$dbname' is not empty",
- "error" => true);
+ if ($errors) {
+ throw new InstallException($errors);
}
-
- self::$messages[] = $section;
- return $db_config_valid;
}
- static function check_docroot_writable() {
- $section = array("header" => "File System Access",
- "description" => "The requires the following file system configuration.",
- "msgs" => array());
- if (is_writable(DOCROOT)) {
- $writable = true;
- $section["msgs"]["Permissions"] =
- array("text" => "The installation directory '" . DOCROOT . "' is writable.",
- "error" => false);
- } else {
- $writable = false;
- $section["msgs"]["Permissions"] =
- array("text" => "The current user is unable to write to '" . DOCROOT . "'.",
- "error" => true);
- }
- self::$messages[] = $section;
- return $writable;
- }
+ static function install($config) {
+ $errors = array();
- static function install() {
- ob_start();
- $step = 0;
- $modules[] = array();
- try {
- include(DOCROOT . "installer/data/init_var.php");
-
- $db_config_file = realpath("var") . "/database.php";
- $data = array("type" => strtolower(self::$config["type"]),
- "user" => self::$config["user"],
- "password" => self::$config["password"],
- "host" => self::$config["host"],
- "database" => self::$config["dbname"],
- "prefix" => self::$config["prefix"]);
-
- $config = self::_render("installer/views/database.php", $data);
- if (file_put_contents($db_config_file, $config) !== false) {
- print "'var/database.php' created\n";
- } else {
- throw new Exception("'var/database.php' was not created");
- }
+ include(DOCROOT . "installer/init_var.php");
- $buf = "";
- foreach (file("installer/data/install.sql") as $line) {
- $buf .= $line;
- if (preg_match("/;$/", $buf)) {
- mysql_query($buf);
- $buf = "";
- }
- }
+ $db_config_file = VARPATH . "database.php";
+ $output = self::_render("installer/database_config.php", $config);
- if (file_put_contents("var/installed", "installed")) {
- print "Gallery3 installed\n";
- } else {
- throw new Exception("Unable to write 'var/installed'");
- }
- } catch (Exception $e) {
- self::print_exception($e);
+ if (!file_put_contents($db_config_file, $output) !== false) {
+ $errors["Config"] = "Unable to create " . VARPATH . "database.php";
}
- $return = ob_get_contents();
- ob_clean();
- return $return;
- }
- static function print_exception($exception) {
- // Beautify backtrace
- try {
- $trace = self::_backtrace($exception);
- } catch(Exception $e) {
- print_r($e);
+ $buf = "";
+ foreach (file("installer/install.sql") as $line) {
+ $buf .= $line;
+ if (preg_match("/;$/", $buf)) {
+ if (!mysql_query($buf)) {
+ $errors["Database"] = "Unable to install database tables. Error details:\n" .
+ mysql_error();
+ break;
+ }
+ $buf = "";
+ }
}
- $type = get_class($exception);
- $message = $exception->getMessage();
- $file = $exception->getFile();
- $line = $exception->getLine();
+ system("chmod -R 777 " . VARPATH);
- print "$type Occurred: $message \nin {$file}[$line]\n$trace";
- // Turn off error reporting
- error_reporting(0);
+ if ($errors) {
+ throw new InstallException($errors);
+ }
}
- /**
- * Install a module.
- */
- private static function _module_install($module_name) {
- $installer_class = "{$module_name}_installer";
- print "$installer_class install (initial)\n";
- if ($module_name != "core") {
- require_once(DOCROOT . "modules/${module_name}/helpers/{$installer_class}.php");
+ static function create_admin($config) {
+ $errors = array();
+ $salt = "";
+ for ($i = 0; $i < 4; $i++) {
+ $char = mt_rand(48, 109);
+ $char += ($char > 90) ? 13 : ($char > 57) ? 7 : 0;
+ $salt .= chr($char);
+ }
+ $password = substr(md5(time() * rand()), 0, 6);
+ $hashed_password = $salt . md5($salt . $password);
+ if (mysql_query("UPDATE `users` SET `password` = '$hashed_password' WHERE `id` = 2")) {
} else {
- require_once(DOCROOT . "core/helpers/core_installer.php");
+ $errors["Database"] = "Unable to set admin password. Error details:\n" . mysql_error();
}
- $core_config = Kohana::config_load("core");
- $kohana_modules = $core_config["modules"];
- $kohana_modules[] = MODPATH . $module_name;
- Kohana::config_set("core.modules", $kohana_modules);
-
-
- call_user_func(array($installer_class, "install"));
+ if ($errors) {
+ throw new InstallException($errors);
+ }
- //if (method_exists($installer_class, "install")) {
- // call_user_func_array(array($installer_class, "install"), array());
- //}
- print "Installed module $module_name\n";
+ return array("admin", $password);
}
- private static function _render($view, $data=null) {
- if ($view == '')
- return;
-
- // Buffering on
+ private static function _render($view, $data) {
+ extract($data);
ob_start();
-
- try {
- // Views are straight HTML pages with embedded PHP, so importing them
- // this way insures that $this can be accessed as if the user was in
- // the controller, which gives the easiest access to libraries in views
- include realpath($view . EXT);
- } catch (Exception $e) {
- // Display the exception using its internal __toString method
- echo $e;
- }
-
- // Fetch the output and close the buffer
+ include($view);
return ob_get_clean();
}
- /**
- * Displays nice backtrace information.
- * @see http://php.net/debug_backtrace
- *
- * @param array backtrace generated by an exception or debug_backtrace
- * @return string
- */
- private static function _backtrace($exception) {
- $trace = $exception->getTrace();
- if ( ! is_array($trace)) {
- return;
- }
-
- // Final output
- $output = array();
- $cli = PHP_SAPI == "cli";
+ static function print_exception($exception) {
+ print $exception->getMessage() . "\n";
+ print $exception->getTraceAsString();
+ }
- $args = array();
- // Remove the first entry of debug_backtrace(), it is the exception_handler call
- if ($exception instanceof ErrorException) {
- $last = array_shift($trace);
- $args = !empty($last["args"]) ? $last["args"] : $args;
+ static function display_errors($errors) {
+ print "Errors\n";
+ foreach ($errors as $title => $error) {
+ print "$title\n";
+ print " $error\n\n";
}
+ }
+}
- foreach ($trace as $entry) {
- $temp = $cli ? "" : "<li>";
-
- if (isset($entry["file"])) {
- $format = $cli ? "%s[%s]" : "<tt>%s <strong>[%s]:</strong></tt>";
- $temp .= sprintf($format, preg_replace("!^".preg_quote(DOCROOT)."!", "",
- $entry["file"]), $entry["line"]);
- }
-
- $temp .= $cli ? "\n\t" : "<pre>";
-
- if (isset($entry["class"])) {
- // Add class and call type
- $temp .= $entry["class"].$entry["type"];
- }
-
- // Add function
- $temp .= $entry["function"]."(";
-
- // Add function args
- if (isset($entry["args"]) AND is_array($entry["args"])) {
- // Separator starts as nothing
- $sep = "";
-
- while ($arg = array_shift($args)) {
- if (is_string($arg) AND is_file($arg)) {
- // Remove docroot from filename
- $arg = preg_replace("!^".preg_quote(DOCROOT)."!", "", $arg);
- }
-
- $temp .= $sep . ($cli ? print_r($arg, TRUE) : html::specialchars(print_r($arg, TRUE)));
-
- // Change separator to a comma
- $sep = ", ";
- }
- $args = $entry["args"];
- }
-
- $temp .= ")" . ($cli ? "\n" : "</pre></li>");
+class InstallException extends Exception {
+ var $errors;
- $output[] = $temp;
- }
+ function __construct($errors) {
+ parent::__construct();
+ $this->errors = $errors;
+ }
- $output = implode("\n", $output);
- return $cli ? $output : "<ul class=\"backtrace\">" . $output . "</ul>";
+ function errors() {
+ return $this->errors;
}
-} \ No newline at end of file
+}
diff --git a/installer/views/database.php.php b/installer/views/database.php.php
deleted file mode 100644
index 42268422..00000000
--- a/installer/views/database.php.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php defined('SYSPATH') OR die('No direct access allowed.');
-print "<?php defined('SYSPATH') OR die('No direct access allowed.');\n";
-print "/**\n";
-print " * @package Database\n";
-print " *\n";
-print " * Database connection settings, defined as arrays, or \"groups\". If no group\n";
-print " * name is used when loading the database library, the group named \"default\"\n";
-print " * will be used.\n";
-print " *\n";
-print " * Each group can be connected to independently, and multiple groups can be\n";
-print " * connected at once.\n";
-print " *\n";
-print " * Group Options:\n";
-print " * benchmark - Enable or disable database benchmarking\n";
-print " * persistent - Enable or disable a persistent connection\n";
-print " * connection - Array of connection specific parameters; alternatively,\n";
-print " * you can use a DSN though it is not as fast and certain\n";
-print " * characters could create problems (like an '@' character\n";
-print " * in a password):\n";
-print " * 'connection' => 'mysql://dbuser:secret@localhost/kohana'\n";
-print " * character_set - Database character set\n";
-print " * table_prefix - Database table prefix\n";
-print " * object - Enable or disable object results\n";
-print " * cache - Enable or disable query caching\n";
-print " * escape - Enable automatic query builder escaping\n";
-print " */\n";
-print "\$config['default'] = array(\n";
-print " 'benchmark' => FALSE,\n";
-print " 'persistent' => FALSE,\n";
-print " 'connection' => array(\n";
-print " 'type' => '{$data['type']}',\n";
-print " 'user' => '{$data['user']}',\n";
-print " 'pass' => '{$data['password']}',\n";
-print " 'host' => '{$data['host']}',\n";
-print " 'port' => FALSE,\n";
-print " 'socket' => FALSE,\n";
-print " 'database' => '{$data['database']}'\n";
-print " ),\n";
-print " 'character_set' => 'utf8',\n";
-print " 'table_prefix' => '{$data['prefix']}',\n";
-print " 'object' => TRUE,\n";
-print " 'cache' => FALSE,\n";
-print " 'escape' => TRUE\n";
-print ");\n";
diff --git a/installer/views/installer.html.php b/installer/views/installer.html.php
deleted file mode 100644
index 43692846..00000000
--- a/installer/views/installer.html.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php defined("SYSPATH") or die("No direct script access.") ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
-
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-
- <title>Gallery3 Requirements Verification</title>
-
- <style type="text/css">
- body { width: 42em; margin: 0 auto; font-family: sans-serif; font-size: 90%; }
-
- #tests table { border-collapse: collapse; width: 100%; }
- #tests table th,
- #tests table td { padding: 0.2em 0.4em; text-align: left; vertical-align: top; }
- #tests table th { width: 12em; font-weight: normal; font-size: 1.2em; }
- #tests table tr:nth-child(odd) { background: #eee; }
- #tests table td.pass { color: #191; }
- #tests table td.fail { color: #911; }
- #tests #results { color: #fff; }
- #tests #results p { padding: 0.8em 0.4em; }
- #tests #results p.pass { background: #191; }
- #tests #results p.fail { background: #911; }
- </style>
-
- </head>
- <body>
- <?php foreach (self::$messages as $section) : ?>
- <h1><?php print $section["header"] ?></h1>
-
- <p><?php print $section["description"] ?></p>
-
- <div id="tests">
-
- <table cellspacing="0">
- <?php foreach ($section["msgs"] as $header => $msg): ?>
-
- <tr>
- <th><?php echo $header ?></th>
- <td class="<?php echo empty($msg["error"]) ? "pass" : "fail" ?>">
- <?php echo empty($msg["html"]) ? $msg["text"] : $msg["html"] ?>
- </td>
- </tr>
- <?php endforeach ?>
- </table>
- </div>
- <?php endforeach ?>
- </body>
- </html> \ No newline at end of file
diff --git a/installer/views/installer.txt.php b/installer/views/installer.txt.php
deleted file mode 100644
index 986b9297..00000000
--- a/installer/views/installer.txt.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php defined("SYSPATH") or die("No direct script access.") ?>
-<?php
-function green_start() {
- return "\x1B[32m";
-}
-
-function color_end() {
- return "\x1B[0m";
-}
-
-function red_start() {
- return "\x1B[31m";
-}
-
-function magenta_start() {
- return "\x1B[35m";
-}
-
-function print_msg($header, $msg, $error) {
- $format = "| %-21.21s | %-81.81s |\n";
- foreach (explode("\n", wordwrap($msg, 72)) as $text) {
- if ($error) {
- printf($format, $header, red_start() . $text . color_end());
- } else {
- printf($format, $header, green_start() . $text . color_end());
- }
- $header = "";
- }
-}
-
-foreach (self::$messages as $section) {
- echo "+", str_repeat("-", 98), "+\n";
- printf("| %-96.96s |\n", $section["header"]);
- foreach (explode("\n", wordwrap($section["description"], 92)) as $text) {
- printf("| %-96.96s |\n", $text);
- }
- echo "+", str_repeat("-", 98), "+\n";
-
- foreach ($section["msgs"] as $header => $msg) {
- print_msg($header, $msg["text"], $msg["error"]);
- }
-}
-
-echo "+", str_repeat("-", 98), "+\n";
-
-if (self::$config_errors) {
- printf("| %-96.96s |\n", magenta_start() .
- "Please fix the identified issues before attempting the install" . color_end());
- echo "+", str_repeat("-", 98), "+\n";
-}
-flush(); \ No newline at end of file