diff options
| author | Tim Almdal <tnalmdal@shaw.ca> | 2009-05-31 23:28:27 -0700 | 
|---|---|---|
| committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-05-31 23:28:27 -0700 | 
| commit | 463b3454ae7633815e24cdf86e81c57409dd15a9 (patch) | |
| tree | 8d3ae7c26120c135b33001517e52a6e68be678de /installer/package.php | |
| parent | 0a5ca7a76644e6535bed49736f3e848cac6c7211 (diff) | |
Move the sql packaging code from installer into the gallery module. It must be run from the command line and will throw a 404 if it is run as a web request.
Diffstat (limited to 'installer/package.php')
| -rwxr-xr-x | installer/package.php | 239 | 
1 files changed, 0 insertions, 239 deletions
| 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 | 
