More progress on the installer. At this point it can install and import the language, but does not rename config files. Still much work to be done, most notably localization and creation of MySQL users and databases.
authorDan
Thu, 17 Jan 2008 02:03:33 -0500
changeset 349 fdaf9070566c
parent 348 87e08a6e4fec
child 350 dd7cbc97f681
child 351 8978cb3541ca
More progress on the installer. At this point it can install and import the language, but does not rename config files. Still much work to be done, most notably localization and creation of MySQL users and databases.
includes/http.php
includes/template.php
install/includes/common.php
install/includes/payload.php
install/includes/payloads/common.php
install/includes/payloads/mysql.php
install/includes/payloads/postgresql.php
install/includes/stages/install.php
install/schemas/mysql_stage2.sql
install/schemas/postgresql_stage2.sql
--- a/includes/http.php	Wed Jan 16 13:55:49 2008 -0500
+++ b/includes/http.php	Thu Jan 17 02:03:33 2008 -0500
@@ -324,24 +324,11 @@
   
   function _sock_open(&$connection)
   {
-    if ( $this->debug )
-    {
-      echo '<hr /><div style="white-space: nowrap;">';
-      echo '<p><b>' . __CLASS__ . ': Sending request</b></p><p>Request parameters:</p>';
-      echo "<p><b>Headers:</b></p><pre>$headers</pre>";
-      echo "<p><b>Cookies:</b> $cookies</p>";
-      echo "<p><b>GET URI:</b> " . htmlspecialchars($get) . "</p>";
-      echo "<p><b>POST DATA:</b> " . htmlspecialchars($post) . "</p>";
-    }
-    
     // Open connection
     $connection = fsockopen($this->host, $this->port);
     if ( !$connection )
       die(__CLASS__ . '::' . __METHOD__ . ': Could not make connection');
     
-    if ( $this->debug )
-      echo '<p>Connection opened. Writing main request to socket. Raw socket data follows.</p><pre>';
-    
     // 1 = socket open
     $this->state = 1;
   }
@@ -355,6 +342,20 @@
   {
     $newline = "\r\n";
     
+    if ( $this->debug )
+      echo '<p>Connection opened. Writing main request to socket. Raw socket data follows.</p><pre>';
+    
+    if ( $this->debug )
+    {
+      echo '<hr /><div style="white-space: nowrap;">';
+      echo '<p><b>' . __CLASS__ . ': Sending request</b></p><p>Request parameters:</p>';
+      echo "<p><b>Headers:</b></p><pre>$headers</pre>";
+      echo "<p><b>Cookies:</b> $cookies</p>";
+      echo "<p><b>GET URI:</b> " . htmlspecialchars($this->uri . $get) . "</p>";
+      echo "<p><b>POST DATA:</b> " . htmlspecialchars($post) . "</p>";
+    }
+    echo "<pre>";
+    
     $this->_fputs($connection, "{$this->method} {$this->uri}{$get} HTTP/1.1{$newline}");
     $this->_fputs($connection, "Host: {$this->host}{$newline}");
     $this->_fputs($connection, $headers);
@@ -393,7 +394,7 @@
     if ( $this->debug )
     {
       echo '<p>Response fetched. Closing connection. Response text follows.</p><pre>';
-      echo htmlspecialchars($buffer);
+      echo htmlspecialchars($this->response);
       echo '</pre></div><hr />';
     }
     
--- a/includes/template.php	Wed Jan 16 13:55:49 2008 -0500
+++ b/includes/template.php	Thu Jan 17 02:03:33 2008 -0500
@@ -306,7 +306,7 @@
       $tb .= $button->run();
     }
     // Edit button
-    if($session->get_permissions('read') && ($paths->namespace != 'Special' && $paths->namespace != 'Admin') && ( $session->get_permissions('edit_page') && ( ( $paths->page_protected && $session->get_permissions('even_when_protected') ) || !$paths->page_protected ) ) )
+    if($session->get_permissions('read') && ($paths->namespace != 'Special' && $paths->namespace != 'Admin' && $paths->namespace != 'Anonymous') && ( $session->get_permissions('edit_page') && ( ( $paths->page_protected && $session->get_permissions('even_when_protected') ) || !$paths->page_protected ) ) )
     {
       $button->assign_vars(array(
         'FLAGS' => 'onclick="if ( !KILL_SWITCH ) { void(ajaxEditor()); return false; }" title="' . $lang->get('onpage_tip_edit') . '" accesskey="e"',
@@ -317,7 +317,7 @@
       $tb .= $button->run();
     // View source button
     }
-    else if($session->get_permissions('view_source') && ( !$session->get_permissions('edit_page') || !$session->get_permissions('even_when_protected') && $paths->page_protected ) && $paths->namespace != 'Special' && $paths->namespace != 'Admin') 
+    else if($session->get_permissions('view_source') && ( !$session->get_permissions('edit_page') || !$session->get_permissions('even_when_protected') && $paths->page_protected ) && $paths->namespace != 'Special' && $paths->namespace != 'Admin' && $paths->namespace != 'Anonymous') 
     {
       $button->assign_vars(array(
         'FLAGS' => 'onclick="if ( !KILL_SWITCH ) { void(ajaxEditor()); return false; }" title="' . $lang->get('onpage_tip_viewsource') . '" accesskey="e"',
@@ -1942,9 +1942,9 @@
     $tpl_strings = Array(
       'PAGE_NAME'=>$this_page,
       'PAGE_URLNAME'=>'Null',
-      'SITE_NAME'=>$lang->get('meta_site_name'),
+      'SITE_NAME'=> ( defined('IN_ENANO_INSTALL') ) ? $lang->get('meta_site_name') : 'Critical error',
       'USERNAME'=>'admin',
-      'SITE_DESC'=>$lang->get('meta_site_desc'),
+      'SITE_DESC'=>( defined('IN_ENANO_INSTALL') ) ? $lang->get('meta_site_desc') : 'This site is experiencing a problem and cannot load.',
       'TOOLBAR'=>$tb,
       'SCRIPTPATH'=>scriptPath,
       'CONTENTPATH'=>contentPath,
@@ -1953,7 +1953,7 @@
       'ADMIN_SID_AMP_HTML'=>'',
       'ADDITIONAL_HEADERS'=>$this->additional_headers,
       'SIDEBAR_EXTRA'=>'',
-      'COPYRIGHT'=>$lang->get('meta_enano_copyright'),
+      'COPYRIGHT'=>( defined('IN_ENANO_INSTALL') ) ? $lang->get('meta_enano_copyright') : ( defined('ENANO_CONFIG_FETCHED') ? getConfig('copyright_notice') : '' ),
       'TOOLBAR_EXTRAS'=>'',
       'REQUEST_URI'=>( isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '' ).$_SERVER['REQUEST_URI'],
       'STYLE_LINK'=>$slink,
--- a/install/includes/common.php	Wed Jan 16 13:55:49 2008 -0500
+++ b/install/includes/common.php	Thu Jan 17 02:03:33 2008 -0500
@@ -113,6 +113,7 @@
     {
       $languages[$meta['lang_code']] = array(
           'name' => $meta['lang_name_native'],
+          'name_eng' => $meta['lang_name_english'],
           'dir' => $dh
         );
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/install/includes/payload.php	Thu Jan 17 02:03:33 2008 -0500
@@ -0,0 +1,312 @@
+<?php
+
+/*
+ * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
+ * Version 1.1.1
+ * Copyright (C) 2006-2007 Dan Fuhry
+ * Installation package
+ * payload.php - Installer payload (the installation logic)
+ *
+ * This program is Free Software; you can redistribute 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 details.
+ */
+
+if ( !defined('IN_ENANO_INSTALL') )
+  die();
+
+return true;
+
+function stg_sim_good()
+{
+  return true;
+}
+
+function stg_sim_bad()
+{
+  return true;
+}
+
+function stg_password_decode()
+{
+  global $db;
+  static $pass = false;
+  
+  if ( $pass )
+    return $pass;
+  
+  if ( !isset($_POST['crypt_data']) && !empty($_POST['password']) && $_POST['password'] === $_POST['password_confirm'] )
+    $pass = $_POST['password'];
+  
+  $aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
+  // retrieve encryption key
+  $q = $db->sql_query('SELECT config_value FROM ' . table_prefix . 'config WHERE config_name=\'install_aes_key\';');
+  if ( !$q )
+    $db->_die();
+  if ( $db->numrows() < 1 )
+    return false;
+  list($aes_key) = $db->fetchrow_num();
+  $aes_key = $aes->hextostring($aes_key);
+  
+  $pass = $aes->decrypt($_POST['crypt_data'], $aes_key, ENC_HEX);
+  if ( !$pass )
+    return false;
+  
+  return $pass; // Will be true if the password isn't crapped
+}
+
+function stg_make_private_key()
+{
+  global $db;
+  static $site_key = false;
+  
+  if ( $site_key )
+    return $site_key;
+  
+  // Is there already a key cached in the database?
+  $q = $db->sql_query('SELECT config_value FROM ' . table_prefix . 'config WHERE config_name=\'site_aes_key\';');
+  if ( !$q )
+    $db->_die();
+  
+  if ( $db->numrows() > 0 )
+  {
+    list($site_key) = $db->fetchrow_num();
+    $db->free_result();
+    return $site_key;
+  }
+  
+  $aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
+  // This will use /dev/urandom if possible
+  $site_key = $aes->gen_readymade_key();
+  
+  // Stash it in the database, don't check for errors though because we can always regenerate it
+  $db->sql_query('INSERT INTO ' . table_prefix . 'config ( config_name, config_value ) VALUES ( \'site_aes_key\', \'' . $site_key . '\' );');
+  
+  return $site_key;
+}
+
+function stg_load_schema()
+{
+  global $db, $dbdriver, $installer_version;
+  static $sql_parser = false;
+  
+  if ( is_object($sql_parser) )
+    return $sql_parser->parse();
+  
+  $aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
+  
+  $site_key = stg_make_private_key();
+  $site_key = $aes->hextostring($site_key);
+  $admin_pass_clean = stg_password_decode();
+  $admin_pass = $aes->encrypt($admin_pass_clean, $site_key, ENC_HEX);
+  
+  unset($admin_pass_clean); // Security
+  
+  try
+  {
+    $sql_parser = new SQL_Parser( ENANO_ROOT . "/install/schemas/{$dbdriver}_stage2.sql" );
+  }
+  catch ( Exception $e )
+  {
+    echo "<pre>$e</pre>";
+    return false;
+  }
+  
+  $vars = array(
+      'TABLE_PREFIX'         => $_POST['table_prefix'],
+      'SITE_NAME'            => $db->escape($_POST['site_name']),
+      'SITE_DESC'            => $db->escape($_POST['site_desc']),
+      'COPYRIGHT'            => $db->escape($_POST['copyright']),
+      // FIXME: update form
+      'WIKI_MODE'            => ( isset($_POST['wiki_mode']) ? '1' : '0' ),
+      'ENABLE_CACHE'         => ( is_writable( ENANO_ROOT . '/cache/' ) ? '1' : '0' ),
+      'VERSION'              => $installer_version['version'],
+      'ADMIN_USER'           => $db->escape($_POST['username']),
+      'ADMIN_PASS'           => $admin_pass,
+      'ADMIN_EMAIL'          => $db->escape($_POST['email']),
+      'REAL_NAME'            => '', // This has always been stubbed.
+      'ADMIN_EMBED_PHP'      => strval(AUTH_DISALLOW),
+      'UNIX_TIME'            => strval(time())
+    );
+  
+  $sql_parser->assign_vars($vars);
+  return $sql_parser->parse();
+}
+
+function stg_deliver_payload()
+{
+  global $db;
+  $schema = stg_load_schema();
+  foreach ( $schema as $sql )
+  {
+    if ( !$db->sql_query($sql) )
+    {
+      echo $db->get_error();
+      return false;
+    }
+  }
+  return true;
+}
+
+function stg_write_config()
+{
+  global $dbhost, $dbuser, $dbpasswd, $dbname, $dbdriver;
+  $db_data = array(
+      'host' => str_replace("'", "\\'", $dbhost),
+      'user' => str_replace("'", "\\'", $dbuser),
+      'pass' => str_replace("'", "\\'", $dbpasswd),
+      'name' => str_replace("'", "\\'", $dbname),
+      'tp' => table_prefix,
+      'drv' => $dbdriver
+    );
+  
+  // Retrieves the existing key
+  $site_key = stg_make_private_key();
+  
+  // Determine contentPath
+  switch ( @$_POST['url_scheme'] )
+  {
+    case 'standard':
+    default:
+      $sp_append = 'index.php?title=';
+      break;
+    case 'shortened':
+      $sp_append = 'index.php/';
+      break;
+    case 'rewrite':
+      $sp_append = '/';
+      break;
+  }
+  
+  $scriptpath = scriptPath;
+  $contentpath = $scriptpath . $sp_append;
+  
+  $config_file = <<<EOF
+<?php
+
+/**
+ * Enano site configuration
+ * NOTE ON EDITING: You should almost never need to change anything in this
+ * file. The only exceptions are when your DB password/other info is changed
+ * or if you are moving your Enano installation to another directory.
+ */
+
+//
+// DATABASE INFO
+//
+
+// Database type to use, currently mysql and postgresql are supported
+\$dbdriver = '{$db_data['drv']}';
+
+// Hostname of your database server, probably localhost
+\$dbhost = '{$db_data['host']}';
+
+// Username used to connect to the database
+\$dbuser = '{$db_data['user']}';
+// Database password
+\$dbpasswd = '{$db_data['pass']}';
+
+// Name of the database
+\$dbname = '{$db_data['name']}';
+
+//
+// CONSTANTS
+//
+
+// if they're already defined, no use re-defining them
+if ( !defined('ENANO_CONSTANTS') )
+{
+  // The prefix for the tables in the database. Useful for holding more than
+  // one Enano installation in the same database.
+  define('table_prefix', '{$db_data['tp']}');
+  
+  // The path to Enano's files on your server, from the document root. If
+  // Enano is installed in your document root this will be blank; installing
+  // Enano in /enano/ will result in "/enano" here, etc.
+  define('scriptPath', '$scriptpath');
+  
+  // The authoritative prefix for pages. This should be very literal: to
+  // generate a URL on the site, the format is basically
+  // contentPath . \$page_name. This is based off of scriptPath and the URL
+  // scheme selected during installation. Pattern:
+  //
+  //    * Standard URLs:  scriptPath . '/index.php?title='
+  //    * Shortened URLs: scriptPath . '/index.php/'
+  //    * mod_rewrite:    scriptPath . '/'
+  
+  define('contentPath', '$contentpath');
+  
+  // Tell the Enano API that we're installed and that this file is complete
+  define('ENANO_INSTALLED', 'You bet!');
+  
+  define('ENANO_CONSTANTS', '');
+}
+
+// The AES encryption key used to store passwords. We have a very specific
+// reason for doing this; see the rationale at:
+//   http://docs.enanocms.org/Help:Appendix_B
+\$crypto_key = '$site_key';
+
+EOF;
+  
+  // Write config file
+  
+  $ch = @fopen ( ENANO_ROOT . '/config.new.php', 'w' );
+  if ( !$ch )
+    return false;
+  
+  fwrite($ch, $config_file);
+  fclose($ch);
+  
+  // If we are using mod_rewrite, also append any existing .htaccess
+  if ( @$_POST['url_scheme'] === 'rewrite' )
+  {
+    $hh = @fopen ( ENANO_ROOT . '/.htaccess.new', 'w' );
+    if ( !$hh )
+      return false;
+    $hhc = <<<EOF
+#
+# START ENANO RULES
+#
+
+# Enable mod_rewrite
+RewriteEngine on
+
+# Don't rewrite if the user requested a real directory or file
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+
+# Main rule - short and sweet
+RewriteRule (.*) index.php?title=\$1
+
+EOF;
+    fwrite($hh, $hhc);
+    fclose($hh);
+  }
+  
+  return true;
+}
+
+function stg_language_setup()
+{
+  global $languages, $db;
+  global $lang_id;
+  $lang_info =& $languages[$lang_id];
+  if ( !is_array($lang_info) )
+    return false;
+  
+  // Install the language
+  // ($lang_code, $lang_name_neutral, $lang_name_local, $lang_file = false)
+  $result = install_language($lang_id, $lang_info['name_eng'], $lang_info['name'], ENANO_ROOT . "/language/{$lang_info['dir']}/core.json");
+  if ( !$result )
+    return false;
+  
+  $lang_local = new Language($lang_id);
+  $lang_local->import( ENANO_ROOT . "/language/{$lang_info['dir']}/user.json" );
+  $lang_local->import( ENANO_ROOT . "/language/{$lang_info['dir']}/tools.json" );
+  $lang_local->import( ENANO_ROOT . "/language/{$lang_info['dir']}/admin.json" );
+  
+  return true;
+}
--- a/install/includes/payloads/common.php	Wed Jan 16 13:55:49 2008 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-<?php
-
-/*
- * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
- * Version 1.1.1
- * Copyright (C) 2006-2007 Dan Fuhry
- * Installation package
- * payloads/common.php - Installer payload, common stages
- *
- * This program is Free Software; you can redistribute 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 details.
- */
-
-if ( !defined('IN_ENANO_INSTALL') )
-  die();
-
-return true;
-
-function stg_sim_good()
-{
-  return true;
-}
-
-function stg_sim_bad()
-{
-  return true;
-}
-
-function stg_password_decode()
-{
-  global $db;
-  static $pass = false;
-  
-  if ( $pass )
-    return $pass;
-  
-  if ( !isset($_POST['crypt_data']) && !empty($_POST['password']) && $_POST['password'] === $_POST['password_confirm'] )
-    $pass = $_POST['password'];
-  
-  $aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
-  // retrieve encryption key
-  $q = $db->sql_query('SELECT config_value FROM ' . table_prefix . 'config WHERE config_name=\'install_aes_key\';');
-  if ( !$q )
-    $db->_die();
-  if ( $db->numrows() < 1 )
-    return false;
-  list($aes_key) = $db->fetchrow_num();
-  $aes_key = $aes->hextostring($aes_key);
-  
-  $pass = $aes->decrypt($_POST['crypt_data'], $aes_key, ENC_HEX);
-  if ( !$pass )
-    return false;
-  
-  return $pass; // Will be true if the password isn't crapped
-}
-
-function stg_make_private_key()
-{
-  global $db;
-  static $site_key = false;
-  
-  if ( $site_key )
-    return $site_key;
-  
-  // Is there already a key cached in the database?
-  $q = $db->sql_query('SELECT config_value FROM ' . table_prefix . 'config WHERE config_name=\'site_aes_key\';');
-  if ( !$q )
-    $db->_die();
-  
-  if ( $db->numrows() > 0 )
-  {
-    list($site_key) = $db->fetchrow_num();
-    $db->free_result();
-    return $site_key;
-  }
-  
-  $aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
-  // This will use /dev/urandom if possible
-  $site_key = $aes->gen_readymade_key();
-  
-  // Stash it in the database, don't check for errors though because we can always regenerate it
-  $db->sql_query('INSERT INTO ' . table_prefix . 'config ( config_name, config_value ) VALUES ( \'site_aes_key\', \'' . $site_key . '\' );');
-  
-  return $site_key;
-}
-
-function stg_load_schema()
-{
-  global $db, $dbdriver, $installer_version;
-  static $sql_parser = false;
-  
-  if ( is_object($sql_parser) )
-    return $sql_parser->parse();
-  
-  $aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
-  
-  $site_key = stg_make_private_key();
-  $site_key = $aes->hextostring($site_key);
-  $admin_pass_clean = stg_password_decode();
-  $admin_pass = $aes->encrypt($admin_pass_clean, $site_key, ENC_HEX);
-  
-  unset($admin_pass_clean); // Security
-  
-  try
-  {
-    $sql_parser = new SQL_Parser( ENANO_ROOT . "/install/schemas/{$dbdriver}_stage2.sql" );
-  }
-  catch ( Exception $e )
-  {
-    echo "<pre>$e</pre>";
-    return false;
-  }
-  
-  $vars = array(
-      'TABLE_PREFIX'         => $_POST['table_prefix'],
-      'SITE_NAME'            => $db->escape($_POST['site_name']),
-      'SITE_DESC'            => $db->escape($_POST['site_desc']),
-      'COPYRIGHT'            => $db->escape($_POST['copyright']),
-      // FIXME: update form
-      'WIKI_MODE'            => ( isset($_POST['wiki_mode']) ? '1' : '0' ),
-      'ENABLE_CACHE'         => ( is_writable( ENANO_ROOT . '/cache/' ) ? '1' : '0' ),
-      'VERSION'              => $installer_version['version'],
-      'ADMIN_USER'           => $db->escape($_POST['username']),
-      'ADMIN_PASS'           => $admin_pass,
-      'ADMIN_EMAIL'          => $db->escape($_POST['email']),
-      'REAL_NAME'            => '', // This has always been stubbed.
-      'ADMIN_EMBED_PHP'      => strval(AUTH_DISALLOW),
-      'UNIX_TIME'            => strval(time())
-    );
-  
-  $sql_parser->assign_vars($vars);
-  return $sql_parser->parse();
-}
-
-function stg_deliver_payload()
-{
-  global $db;
-  $schema = stg_load_schema();
-  foreach ( $schema as $sql )
-  {
-    if ( !$db->sql_query($sql) )
-    {
-      echo $db->get_error();
-      return false;
-    }
-  }
-  return true;
-}
-
--- a/install/includes/payloads/mysql.php	Wed Jan 16 13:55:49 2008 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
- * Version 1.1.1
- * Copyright (C) 2006-2007 Dan Fuhry
- * Installation package
- * payloads/mysql.php - Installer payload, MySQL-specific
- *
- * This program is Free Software; you can redistribute 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 details.
- */
-
-if ( !defined('IN_ENANO_INSTALL') )
-  die();
-
-return true;
-
--- a/install/includes/payloads/postgresql.php	Wed Jan 16 13:55:49 2008 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
- * Version 1.1.1
- * Copyright (C) 2006-2007 Dan Fuhry
- * Installation package
- * payloads/mysql.php - Installer payload, PostgreSQL-specific
- *
- * This program is Free Software; you can redistribute 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 details.
- */
-
-if ( !defined('IN_ENANO_INSTALL') )
-  die();
-
-return true;
-
--- a/install/includes/stages/install.php	Wed Jan 16 13:55:49 2008 -0500
+++ b/install/includes/stages/install.php	Thu Jan 17 02:03:33 2008 -0500
@@ -73,10 +73,7 @@
 function stg_load_files()
 {
   global $dbdriver;
-  if ( !@include( ENANO_ROOT . "/install/includes/payloads/common.php" ) )
-    return false;
-  
-  if ( !@include( ENANO_ROOT . "/install/includes/payloads/$dbdriver.php" ) )
+  if ( !@include( ENANO_ROOT . "/install/includes/payload.php" ) )
     return false;
   
   return true;
@@ -90,6 +87,25 @@
 run_installer_stage('genaes', 'Generate private key', 'stg_make_private_key', 'Couldn\'t generate a private key for the site. This really shouldn\'t happen.');
 run_installer_stage('sqlparse', 'Prepare database schema', 'stg_load_schema', 'Couldn\'t load or parse the schema file. This really shouldn\'t happen.');
 run_installer_stage('payload', 'Install database', 'stg_deliver_payload', 'There was a problem with an SQL query.');
+run_installer_stage('writeconfig', $lang->get('install_stg_writeconfig_title'), 'stg_write_config', $lang->get('install_stg_writeconfig_body'));
+
+// Now that the config is written, shutdown our primitive API and startup the full Enano API
+$db->close();
+
+@define('ENANO_ALLOW_LOAD_NOLANG', 1);
+require(ENANO_ROOT . '/includes/common.php');
+        
+if ( is_object($db) && is_object($session) )
+{
+  run_installer_stage('startapi', $lang->get('install_stg_startapi_title'), 'stg_sim_good', '...', false);
+}
+else
+{
+  run_installer_stage('startapi', $lang->get('install_stg_startapi_title'), 'stg_sim_bad', $lang->get('install_stg_startapi_body'), false);
+}
+
+// Import languages
+run_installer_stage('importlang', $lang->get('install_stg_importlang_title'), 'stg_language_setup', $lang->get('install_stg_importlang_body'));
 
 close_install_table();
 
--- a/install/schemas/mysql_stage2.sql	Wed Jan 16 13:55:49 2008 -0500
+++ b/install/schemas/mysql_stage2.sql	Thu Jan 17 02:03:33 2008 -0500
@@ -277,8 +277,6 @@
   PRIMARY KEY ( string_id )
 );
 
-DELETE FROM {{TABLE_PREFIX}}config;
-
 INSERT INTO {{TABLE_PREFIX}}config(config_name, config_value) VALUES
   ('site_name', '{{SITE_NAME}}'),
   ('main_page', 'Main_Page'),
--- a/install/schemas/postgresql_stage2.sql	Wed Jan 16 13:55:49 2008 -0500
+++ b/install/schemas/postgresql_stage2.sql	Thu Jan 17 02:03:33 2008 -0500
@@ -271,8 +271,6 @@
   string_content text NOT NULL
 );
 
-DELETE FROM {{TABLE_PREFIX}}config;
-
 INSERT INTO {{TABLE_PREFIX}}config(config_name, config_value) VALUES
   ('site_name', '{{SITE_NAME}}'),
   ('main_page', 'Main_Page'),