summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--index.php15
-rwxr-xr-xinstaller/package.php239
-rw-r--r--modules/gallery/controllers/package.php163
3 files changed, 173 insertions, 244 deletions
diff --git a/index.php b/index.php
index 3acbea74..f5b24ee7 100644
--- a/index.php
+++ b/index.php
@@ -48,11 +48,16 @@ define('SYSPATH', strtr(realpath('system') . '/', DIRECTORY_SEPARATOR, '/'));
// Force a test run if we're in command line mode.
if (PHP_SAPI == 'cli') {
- array_splice($_SERVER['argv'], 1, 0, 'gallery_unit_test');
- define('TEST_MODE', 1);
- @mkdir('test/var/logs', 0777, true);
- define('VARPATH', strtr(realpath('test/var') . '/', DIRECTORY_SEPARATOR, '/'));
- @copy("var/database.php", VARPATH . "database.php");
+ if ($_SERVER['argv'][1] != "package") {
+ array_splice($_SERVER['argv'], 1, 0, 'gallery_unit_test');
+ define('TEST_MODE', 1);
+ @mkdir('test/var/logs', 0777, true);
+ define('VARPATH', strtr(realpath('test/var') . '/', DIRECTORY_SEPARATOR, '/'));
+ @copy("var/database.php", VARPATH . "database.php");
+ } else {
+ define('TEST_MODE', 0);
+ define('VARPATH', strtr(realpath('var') . '/', DIRECTORY_SEPARATOR, '/'));
+ }
} else {
define('TEST_MODE', 0);
define('VARPATH', strtr(realpath('var') . '/', DIRECTORY_SEPARATOR, '/'));
diff --git a/installer/package.php b/installer/package.php
deleted file mode 100755
index 591f12d0..00000000
--- a/installer/package.php
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/usr/bin/php -f
-<?php
-define('EXT', '.php');
-define("DOCROOT", realpath("../") . "/");
-define("VARPATH", DOCROOT . "var/");
-
-// Define application and system paths
-define("SYSPATH", DOCROOT . "system/");
-define('APPPATH', DOCROOT . "application/");
-define('MODPATH', DOCROOT . "modules/");
-define('THEMEPATH', DOCROOT . "themes/");
-
-$modules_list = null;
-$active_modules = null;
-
-function setup($config) {
- system("rm -rf tmp");
- mkdir("tmp");
-
- // Lets backup the database
- $conn = $config["connection"];
- do_system("mysqldump -u{$conn['user']} -p{$conn['pass']} -h{$conn['host']} --add-drop-table " .
- "--compact {$conn['database']} > tmp/dump.sql");
-
- $db = Database::instance();
- // Drop all tables
- foreach ($db->list_tables() as $table) {
- $db->query("DROP TABLE IF EXISTS `$table`");
- }
-
- // Now the var directory
- rename (VARPATH, realpath("tmp/var"));
- mkdir(VARPATH);
- copy(realpath("tmp/var/database.php"), VARPATH . "database.php");
-
- $db->clear_cache();
- $modules_list = module::$modules;
- $active_modules = module::$active;
-
- module::$modules = array();
- module::$active = array();
-
- // Use a known random seed so that subsequent packaging runs will reuse the same random
- // numbers, keeping our install.sql file more stable.
- srand(0);
-}
-
-function reset_install($config) {
- // Reset the var path
- system("rm -rf " . VARPATH);
- rename (realpath("tmp/var"), VARPATH);
-
- $db = Database::instance();
- // Drop all tables
- foreach ($db->list_tables() as $table) {
- $db->query("DROP TABLE IF EXISTS `$table`");
- }
-
- // Lets restorep the database
- $conn = $config["connection"];
- do_system("mysql -u{$conn['user']} -p{$conn['pass']} {$conn['database']} " .
- " < tmp/dump.sql");
-
- // Clear any database caching
- $db->clear_cache();
-
- module::$modules = $modules_list;
- module::$active = $active_modules;
-}
-
-function do_system($command) {
- exec($command, $output, $status);
- if ($status) {
- throw new Exception("$command\nFailed to dump database\n" . implode("\n", $output));
- }
-}
-
-function kohana_bootstrap() {
- define('KOHANA_VERSION', '2.3.3');
- define('KOHANA_CODENAME', 'aegolius');
-
- // Test of Kohana is running in Windows
- define('KOHANA_IS_WIN', DIRECTORY_SEPARATOR === '\\');
-
- // Kohana benchmarks are prefixed to prevent collisions
- define('SYSTEM_BENCHMARK', 'system_benchmark');
-
- // Load benchmarking support
- require SYSPATH.'core/Benchmark'.EXT;
-
- // Start total_execution
- Benchmark::start(SYSTEM_BENCHMARK.'_total_execution');
-
- // Start kohana_loading
- Benchmark::start(SYSTEM_BENCHMARK.'_kohana_loading');
-
- // Load core files
- require SYSPATH.'core/utf8'.EXT;
- require SYSPATH.'core/Event'.EXT;
- require SYSPATH.'core/Kohana'.EXT;
-
- // Prepare the environment
- Kohana::setup();
- // End kohana_loading
- Benchmark::stop(SYSTEM_BENCHMARK.'_kohana_loading');
-
- // Prepare the system
- Event::run('system.ready');
-
- // Clean up and exit (this basically shuts down output buffering
- Event::run('system.shutdown');
-}
-
-function install() {
- gallery_installer::install(true);
- module::load_modules();
-
- foreach (array("user", "comment", "organize", "info", "rss",
- "search", "slideshow", "tag") as $module_name) {
- module::install($module_name);
- module::activate($module_name);
- }
-}
-
-function dump_database() {
- // We now have a clean install with just the packages that we want. Make sure that the
- // database is clean too.
- $db = Database::instance();
- $db->query("TRUNCATE {sessions}");
- $db->query("TRUNCATE {logs}");
- $db->query("DELETE FROM {vars} WHERE `module_name` = 'gallery' AND `name` = '_cache'");
- $db->update("users", array("password" => ""), array("id" => 1));
- $db->update("users", array("password" => ""), array("id" => 2));
-
- $dbconfig = Kohana::config('database.default');
- $conn = $dbconfig["connection"];
- $pass = $conn["pass"] ? "-p{$conn['pass']}" : "";
- $sql_file = DOCROOT . "installer/install.sql";
- if (!is_writable($sql_file)) {
- throw new Exception("$sql_file is not writeable");
- return;
- }
- do_system("mysqldump --compact --add-drop-table -h{$conn['host']} " .
- "-u{$conn['user']} $pass {$conn['database']} > $sql_file");
-
- // Post-process the sql file
- $buf = "";
- $root = ORM::factory("item", 1);
- $root_created_timestamp = $root->created;
- $root_updated_timestamp = $root->updated;
- foreach (file($sql_file) as $line) {
- // Prefix tables
- $line = preg_replace(
- "/(CREATE TABLE|IF EXISTS|INSERT INTO) `{$dbconfig['table_prefix']}(\w+)`/", "\\1 {\\2}",
- $line);
-
- // Normalize dates
- $line = preg_replace("/,$root_created_timestamp,/", ",UNIX_TIMESTAMP(),", $line);
- $line = preg_replace("/,$root_updated_timestamp,/", ",UNIX_TIMESTAMP(),", $line);
- $buf .= $line;
- }
- $fd = fopen($sql_file, "wb");
- fwrite($fd, $buf);
- fclose($fd);
-}
-
-function dump_var() {
- $objects = new RecursiveIteratorIterator(
- new RecursiveDirectoryIterator(VARPATH),
- RecursiveIteratorIterator::SELF_FIRST);
-
- $var_file = DOCROOT . "installer/init_var.php";
- if (!is_writable($var_file)) {
- throw new Exception("$var_file is not writeable");
- return;
- }
-
- $paths = array();
- foreach($objects as $name => $file) {
- if ($file->getBasename() == "database.php") {
- continue;
- } else if (basename($file->getPath()) == "logs") {
- continue;
- }
-
- if ($file->isDir()) {
- $paths[] = "VARPATH . \"" . substr($name, strlen(VARPATH)) . "\"";
- } else {
- // @todo: serialize non-directories
- throw new Exception("Unknown file: $name");
- }
- }
- // Sort the paths so that the var file is stable
- sort($paths);
-
- $fd = fopen($var_file, "w");
- fwrite($fd, "<?php defined(\"SYSPATH\") or die(\"No direct script access.\") ?>\n");
- fwrite($fd, "<?php\n");
- foreach ($paths as $path) {
- fwrite($fd, "!file_exists($path) && mkdir($path);\n");
- }
- fclose($fd);
-}
-
-// Bootstrap kohana so we can use it as we need it
-kohana_bootstrap();
-
-$config = Kohana::config("database.default");
-
-try {
- // Empty the tmp directory, backup the database, and copy the var directory
- setup($config);
-} catch (Exception $e) {
- print $e->getTrace();
- return;
-}
-
-try {
- // Install the standard modules
- install();
-
- // Dump the empty gallery3 database and format it for the installer
- dump_database();
-
- // Dump the var directory
- dump_var();
-} catch (Exception $e) {
- print $e->getTrace();
-}
-
-try {
- // Reset the Gallery3 installation
- reset_install($config);
-} catch (Exception $e) {
- print $e->getTrace();
-}
-
-system("rm -rf tmp");
-?> \ No newline at end of file
diff --git a/modules/gallery/controllers/package.php b/modules/gallery/controllers/package.php
new file mode 100644
index 00000000..7b702498
--- /dev/null
+++ b/modules/gallery/controllers/package.php
@@ -0,0 +1,163 @@
+<?php defined("SYSPATH") or die("No direct script access.");
+/**
+ * Gallery - a web based photo album viewer and editor
+ * Copyright (C) 2000-2009 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 Package_Controller extends Controller {
+ function index() {
+ if (PHP_SAPI != 'cli') {
+ Kohana::show_404();
+ }
+
+ $this->auto_render = false;
+
+ $this->_reset(); // empty and reinstall the standard modules
+
+ $this->_dump_database(); // Dump the database
+
+ $this->_dump_var(); // Dump the var directory
+ print t("Successfully wrote install.sql and init_var.php\n");
+ }
+
+ private function _reset() {
+ $db = Database::instance();
+
+ // Drop all tables
+ foreach ($db->list_tables() as $table) {
+ $db->query("DROP TABLE IF EXISTS `$table`");
+ }
+
+ // Clean out data
+ dir::unlink(VARPATH . "uploads");
+ dir::unlink(VARPATH . "albums");
+ dir::unlink(VARPATH . "resizes");
+ dir::unlink(VARPATH . "thumbs");
+ dir::unlink(VARPATH . "modules");
+ dir::unlink(VARPATH . "tmp");
+
+ $db->clear_cache();
+ module::$modules = array();
+ module::$active = array();
+
+ // Use a known random seed so that subsequent packaging runs will reuse the same random
+ // numbers, keeping our install.sql file more stable.
+ srand(0);
+
+ try {
+ gallery_installer::install(true);
+ module::load_modules();
+
+ foreach (array("user", "comment", "organize", "info", "rss",
+ "search", "slideshow", "tag") as $module_name) {
+ module::install($module_name);
+ module::activate($module_name);
+ }
+ } catch (Exception $e) {
+ Kohana::log("error", $e->getTraceAsString());
+ print $e->getTrace();
+ throw $e;
+ }
+ }
+
+ private function _dump_database() {
+ // We now have a clean install with just the packages that we want. Make sure that the
+ // database is clean too.
+ $db = Database::instance();
+ $db->query("TRUNCATE {sessions}");
+ $db->query("TRUNCATE {logs}");
+ $db->query("DELETE FROM {vars} WHERE `module_name` = 'core' AND `name` = '_cache'");
+ $db->update("users", array("password" => ""), array("id" => 1));
+ $db->update("users", array("password" => ""), array("id" => 2));
+
+ $dbconfig = Kohana::config('database.default');
+ $conn = $dbconfig["connection"];
+ $pass = $conn["pass"] ? "-p{$conn['pass']}" : "";
+ $sql_file = DOCROOT . "installer/install.sql";
+ if (!is_writable($sql_file)) {
+ print "$sql_file is not writeable";
+ return;
+ }
+ $command = "mysqldump --compact --add-drop-table -h{$conn['host']} " .
+ "-u{$conn['user']} $pass {$conn['database']} > $sql_file";
+ exec($command, $output, $status);
+ if ($status) {
+ print "<pre>";
+ print "$command\n";
+ print "Failed to dump database\n";
+ print implode("\n", $output);
+ return;
+ }
+
+ // Post-process the sql file
+ $buf = "";
+ $root_timestamp = ORM::factory("item", 1)->created;
+ foreach (file($sql_file) as $line) {
+ // Prefix tables
+ $line = preg_replace(
+ "/(CREATE TABLE|IF EXISTS|INSERT INTO) `{$dbconfig['table_prefix']}(\w+)`/", "\\1 {\\2}",
+ $line);
+
+ // Normalize dates
+ $line = preg_replace("/,$root_timestamp,/", ",UNIX_TIMESTAMP(),", $line);
+ $buf .= $line;
+ }
+ $fd = fopen($sql_file, "wb");
+ fwrite($fd, $buf);
+ fclose($fd);
+ }
+
+ private function _dump_var() {
+ $this->auto_render = false;
+
+ $objects = new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator(VARPATH),
+ RecursiveIteratorIterator::SELF_FIRST);
+
+ $var_file = DOCROOT . "installer/init_var.php";
+ if (!is_writable($var_file)) {
+ print "$var_file is not writeable";
+ return;
+ }
+
+ $paths = array();
+ foreach($objects as $name => $file){
+ if ($file->getBasename() == "database.php") {
+ continue;
+ } else if (basename($file->getPath()) == "logs") {
+ continue;
+ }
+
+ if ($file->isDir()) {
+ $paths[] = "VARPATH . \"" . substr($name, strlen(VARPATH)) . "\"";
+ } else {
+ // @todo: serialize non-directories
+ print "Unknown file: $name";
+ return;
+ }
+ }
+ // Sort the paths so that the var file is stable
+ sort($paths);
+
+ $fd = fopen($var_file, "w");
+ fwrite($fd, "<?php defined(\"SYSPATH\") or die(\"No direct script access.\") ?>\n");
+ fwrite($fd, "<?php\n");
+ foreach ($paths as $path) {
+ fwrite($fd, "!file_exists($path) && mkdir($path);\n");
+ }
+ fclose($fd);
+ }
+} \ No newline at end of file