install/includes/payload.php
changeset 1227 bdac73ed481e
parent 1175 1e2c9819ede3
child 1240 2b6cdff92b09
--- a/install/includes/payload.php	Sun Mar 28 21:49:26 2010 -0400
+++ b/install/includes/payload.php	Sun Mar 28 23:10:46 2010 -0400
@@ -14,182 +14,182 @@
  */
 
 if ( !defined('IN_ENANO_INSTALL') )
-  die();
+	die();
 
 return true;
 
 function stg_sim_good()
 {
-  return true;
+	return true;
 }
 
 function stg_sim_bad()
 {
-  return true;
+	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 = hexdecode($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
+	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 = hexdecode($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;
+	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, $lang_id, $languages;
-  static $sql_parser = false;
-  
-  if ( is_object($sql_parser) )
-    return $sql_parser->parse();
-  
-  $aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
-  $hmac_secret = hexencode(AESCrypt::randkey(20), '', '');
-  
-  $site_key = stg_make_private_key();
-  $site_key = hexdecode($site_key);
-  $admin_pass_clean = stg_password_decode();
-  $admin_pass = hmac_sha1($admin_pass_clean, $hmac_secret);
-  
-  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'         => 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_PASS_SALT'      => $hmac_secret,
-      'ADMIN_EMAIL'          => $db->escape($_POST['email']),
-      'REAL_NAME'            => '', // This has always been stubbed.
-      'ADMIN_EMBED_PHP'      => strval(AUTH_DISALLOW),
-      'UNIX_TIME'            => strval(time()),
-      'IP_ADDRESS'           => $db->escape($_SERVER['REMOTE_ADDR'])
-    );
-  
-  $sql_parser->assign_vars($vars);
-  return true;
+	global $db, $dbdriver, $installer_version, $lang_id, $languages;
+	static $sql_parser = false;
+	
+	if ( is_object($sql_parser) )
+		return $sql_parser->parse();
+	
+	$aes = AESCrypt::singleton(AES_BITS, AES_BLOCKSIZE);
+	$hmac_secret = hexencode(AESCrypt::randkey(20), '', '');
+	
+	$site_key = stg_make_private_key();
+	$site_key = hexdecode($site_key);
+	$admin_pass_clean = stg_password_decode();
+	$admin_pass = hmac_sha1($admin_pass_clean, $hmac_secret);
+	
+	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'         => 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_PASS_SALT'      => $hmac_secret,
+			'ADMIN_EMAIL'          => $db->escape($_POST['email']),
+			'REAL_NAME'            => '', // This has always been stubbed.
+			'ADMIN_EMBED_PHP'      => strval(AUTH_DISALLOW),
+			'UNIX_TIME'            => strval(time()),
+			'IP_ADDRESS'           => $db->escape($_SERVER['REMOTE_ADDR'])
+		);
+	
+	$sql_parser->assign_vars($vars);
+	return true;
 }
 
 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;
+	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, $dbport;
-  $db_data = array(
-      'host' => str_replace("'", "\\'", $dbhost),
-      'user' => str_replace("'", "\\'", $dbuser),
-      'pass' => str_replace("'", "\\'", $dbpasswd),
-      'name' => str_replace("'", "\\'", $dbname),
-      'port' => intval($dbport),
-      '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 'tiny':
-      $sp_append = '/?/';
-      break;
-    case 'rewrite':
-      $sp_append = '/';
-      break;
-  }
-  
-  $scriptpath = scriptPath;
-  $contentpath = $scriptpath . $sp_append;
-  
-  $config_file = <<<EOF
+	global $dbhost, $dbuser, $dbpasswd, $dbname, $dbdriver, $dbport;
+	$db_data = array(
+			'host' => str_replace("'", "\\'", $dbhost),
+			'user' => str_replace("'", "\\'", $dbuser),
+			'pass' => str_replace("'", "\\'", $dbpasswd),
+			'name' => str_replace("'", "\\'", $dbname),
+			'port' => intval($dbport),
+			'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 'tiny':
+			$sp_append = '/?/';
+			break;
+		case 'rewrite':
+			$sp_append = '/';
+			break;
+	}
+	
+	$scriptpath = scriptPath;
+	$contentpath = $scriptpath . $sp_append;
+	
+	$config_file = <<<EOF
 <?php
 
 /**
@@ -227,30 +227,30 @@
 // 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 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 for encrypting various bits of information,
@@ -262,23 +262,23 @@
 \$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
+	
+	// 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
 #
@@ -297,217 +297,217 @@
 RewriteRule (.*) index.php?title=\$1 [L,QSA]
 
 EOF;
-    fwrite($hh, $hhc);
-    fclose($hh);
-  }
-  
-  return true;
+		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" );
-  
-  $q = $db->sql_query('SELECT lang_id FROM ' . table_prefix . 'language ORDER BY lang_id DESC LIMIT 1;');
-  if ( !$q )
-    $db->_die();
-  
-  list($lang_id_int) = $db->fetchrow_num();
-  $db->free_result();
-  setConfig('default_language', $lang_id_int);
-  
-  return true;
+	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" );
+	
+	$q = $db->sql_query('SELECT lang_id FROM ' . table_prefix . 'language ORDER BY lang_id DESC LIMIT 1;');
+	if ( !$q )
+		$db->_die();
+	
+	list($lang_id_int) = $db->fetchrow_num();
+	$db->free_result();
+	setConfig('default_language', $lang_id_int);
+	
+	return true;
 }
 
 function stg_add_content()
 {
-  global $db, $session, $paths, $template, $plugins; // Common objects
-  global $cache;
-  
-  global $languages;
-  global $lang_id;
-  $lang_info =& $languages[$lang_id];
-  if ( !is_array($lang_info) )
-    return false;
-  
-  if ( $_POST['default_content_type'] === 'tutorial' )
-  {
-    $dir = ENANO_ROOT . "/language/{$lang_info['dir']}/install/default-tutorial";
-  }
-  else
-  {
-    $dir = ENANO_ROOT . "/language/{$lang_info['dir']}/install/default-blank";
-  }
-  
-  if ( !$dr = @opendir($dir) )
-    return false;
-  
-  while ( $dh = @readdir($dr) )
-  {
-    if ( !preg_match('/\.txt$/', $dh) )
-      continue;
-    
-    $page_contents = @file_get_contents("$dir/$dh");
-    if ( empty($page_contents) )
-      return false;
-    
-    $page_name = preg_replace('/\.txt$/', '', $dh);
-    
-    if ( !install_primitive_page_creator($page_name, 'Article', $page_contents) )
-      return false;
-  }
-  
-  closedir($dr);
-  
-  $cache->purge('page_meta');
-  
-  return true;
+	global $db, $session, $paths, $template, $plugins; // Common objects
+	global $cache;
+	
+	global $languages;
+	global $lang_id;
+	$lang_info =& $languages[$lang_id];
+	if ( !is_array($lang_info) )
+		return false;
+	
+	if ( $_POST['default_content_type'] === 'tutorial' )
+	{
+		$dir = ENANO_ROOT . "/language/{$lang_info['dir']}/install/default-tutorial";
+	}
+	else
+	{
+		$dir = ENANO_ROOT . "/language/{$lang_info['dir']}/install/default-blank";
+	}
+	
+	if ( !$dr = @opendir($dir) )
+		return false;
+	
+	while ( $dh = @readdir($dr) )
+	{
+		if ( !preg_match('/\.txt$/', $dh) )
+			continue;
+		
+		$page_contents = @file_get_contents("$dir/$dh");
+		if ( empty($page_contents) )
+			return false;
+		
+		$page_name = preg_replace('/\.txt$/', '', $dh);
+		
+		if ( !install_primitive_page_creator($page_name, 'Article', $page_contents) )
+			return false;
+	}
+	
+	closedir($dr);
+	
+	$cache->purge('page_meta');
+	
+	return true;
 }
 
 function install_primitive_page_creator($page_id, $namespace, $content)
 {
-  global $db, $session, $paths, $template, $plugins; // Common objects
-  
-  $page_title = $db->escape(str_replace('_', ' ', dirtify_page_id($page_id)));
-  $author = $db->escape($_POST['username']);
-  $page_id = $db->escape($page_id);
-  $namespace = $db->escape($namespace);
-  // yes, we do probably want strip_all_php ON.
-  $content = RenderMan::preprocess_text($content, true, true);
-  $now = time();
-  
-  // query 1: logs
-  $q = $db->sql_query('INSERT INTO ' . table_prefix . "logs(time_id, date_string, log_type, action, page_id, namespace, author, page_text) VALUES\n"
-                    . "  ( $now, 'DEPRECATED', 'page', 'edit', '$page_id', '$namespace', '$author', '$content');");
-  if ( !$q )
-  {
-    echo $db->get_error();
-    return false;
-  }
-  
-  // query 2: page_text
-  $q = $db->sql_query('INSERT INTO ' . table_prefix . "page_text(page_id, namespace, page_text) VALUES\n"
-                    . "  ( '$page_id', '$namespace', '$content');");
-  if ( !$q )
-  {
-    echo $db->get_error();
-    return false;
-  }
-  
-  // query 3: pages
-  $q = $db->sql_query('INSERT INTO ' . table_prefix . "pages(page_order, name, urlname, namespace, special, visible, comments_on, protected, delvotes, delvote_ips) VALUES\n"
-                    . "  (NULL, '$page_title', '$page_id', '$namespace', 0, 1, 1, 1, 0, '');");
-  if ( !$q )
-  {
-    echo $db->get_error();
-    return false;
-  }
-  
-  return true;
+	global $db, $session, $paths, $template, $plugins; // Common objects
+	
+	$page_title = $db->escape(str_replace('_', ' ', dirtify_page_id($page_id)));
+	$author = $db->escape($_POST['username']);
+	$page_id = $db->escape($page_id);
+	$namespace = $db->escape($namespace);
+	// yes, we do probably want strip_all_php ON.
+	$content = RenderMan::preprocess_text($content, true, true);
+	$now = time();
+	
+	// query 1: logs
+	$q = $db->sql_query('INSERT INTO ' . table_prefix . "logs(time_id, date_string, log_type, action, page_id, namespace, author, page_text) VALUES\n"
+										. "  ( $now, 'DEPRECATED', 'page', 'edit', '$page_id', '$namespace', '$author', '$content');");
+	if ( !$q )
+	{
+		echo $db->get_error();
+		return false;
+	}
+	
+	// query 2: page_text
+	$q = $db->sql_query('INSERT INTO ' . table_prefix . "page_text(page_id, namespace, page_text) VALUES\n"
+										. "  ( '$page_id', '$namespace', '$content');");
+	if ( !$q )
+	{
+		echo $db->get_error();
+		return false;
+	}
+	
+	// query 3: pages
+	$q = $db->sql_query('INSERT INTO ' . table_prefix . "pages(page_order, name, urlname, namespace, special, visible, comments_on, protected, delvotes, delvote_ips) VALUES\n"
+										. "  (NULL, '$page_title', '$page_id', '$namespace', 0, 1, 1, 1, 0, '');");
+	if ( !$q )
+	{
+		echo $db->get_error();
+		return false;
+	}
+	
+	return true;
 }
 
 function stg_init_logs()
 {
-  global $db, $session, $paths, $template, $plugins; // Common objects
-  global $installer_version;
-  
-  $q = $db->sql_query('INSERT INTO ' . table_prefix . 'logs(log_type,action,time_id,date_string,author,author_uid,page_text,edit_summary) VALUES(\'security\', \'install_enano\', ' . time() . ', \'' . enano_date(ED_DATE | ED_TIME) . '\', \'' . $db->escape($_POST['username']) . '\', 2, \'' . $db->escape(enano_version()) . '\', \'' . $db->escape($_SERVER['REMOTE_ADDR']) . '\');');
-  if ( !$q )
-  {
-    echo '<p><tt>MySQL return: ' . $db->sql_error() . '</tt></p>';
-    return false;
-  }
-  
-  return true;
+	global $db, $session, $paths, $template, $plugins; // Common objects
+	global $installer_version;
+	
+	$q = $db->sql_query('INSERT INTO ' . table_prefix . 'logs(log_type,action,time_id,date_string,author,author_uid,page_text,edit_summary) VALUES(\'security\', \'install_enano\', ' . time() . ', \'' . enano_date(ED_DATE | ED_TIME) . '\', \'' . $db->escape($_POST['username']) . '\', 2, \'' . $db->escape(enano_version()) . '\', \'' . $db->escape($_SERVER['REMOTE_ADDR']) . '\');');
+	if ( !$q )
+	{
+		echo '<p><tt>MySQL return: ' . $db->sql_error() . '</tt></p>';
+		return false;
+	}
+	
+	return true;
 }
 
 function stg_aes_cleanup()
 {
-  global $db, $session, $paths, $template, $plugins; // Common objects
-  $q = $db->sql_query('DELETE FROM ' . table_prefix . 'config WHERE config_name = \'install_aes_key\' OR config_name = \'site_aes_key\';');
-  if ( !$q )
-    $db->_die();
-  return true;
+	global $db, $session, $paths, $template, $plugins; // Common objects
+	$q = $db->sql_query('DELETE FROM ' . table_prefix . 'config WHERE config_name = \'install_aes_key\' OR config_name = \'site_aes_key\';');
+	if ( !$q )
+		$db->_die();
+	return true;
 }
 
 function _stg_rename_config_revert()
 {
-  if ( file_exists('./config.php') )
-  {
-    @rename('./config.php', './config.new.php');
-  }
-  
-  $handle = @fopen('./config.php.new', 'w');
-  if ( !$handle )
-    return false;
-  $contents = '<?php $cryptkey = \'' . _INSTRESUME_AES_KEYBACKUP . '\'; ?>';
-  fwrite($handle, $contents);
-  fclose($handle);
-  return true;
+	if ( file_exists('./config.php') )
+	{
+		@rename('./config.php', './config.new.php');
+	}
+	
+	$handle = @fopen('./config.php.new', 'w');
+	if ( !$handle )
+		return false;
+	$contents = '<?php $cryptkey = \'' . _INSTRESUME_AES_KEYBACKUP . '\'; ?>';
+	fwrite($handle, $contents);
+	fclose($handle);
+	return true;
 }
 
 function stg_build_index()
 {
-  global $db, $session, $paths, $template, $plugins; // Common objects
-  if ( $paths->rebuild_search_index() )
-    return true;
-  return false;
+	global $db, $session, $paths, $template, $plugins; // Common objects
+	if ( $paths->rebuild_search_index() )
+		return true;
+	return false;
 }
 
 function stg_rename_config()
 {
-  if ( !@rename(ENANO_ROOT . '/config.new.php', ENANO_ROOT . '/config.php') )
-  {
-    echo '<p>Can\'t rename config.php</p>';
-    _stg_rename_config_revert();
-    return false;
-  }
-  
-  if ( @filesize(ENANO_ROOT . '/.htaccess.new') > 1 )
-  {
-    // rename/possibly concatenate .htaccess.new
-    $htaccess_base = '';
-    if ( file_exists(ENANO_ROOT . '/.htaccess') )
-      $htaccess_base .= @file_get_contents(ENANO_ROOT . '/.htaccess');
-    if ( strlen($htaccess_base) > 0 && !preg_match("/\n$/", $htaccess_base) )
-      $htaccess_base .= "\n\n";
-    $htaccess_base .= @file_get_contents(ENANO_ROOT . '/.htaccess.new');
-    if ( file_exists(ENANO_ROOT . '/.htaccess') )
-    {
-      $hh = @fopen(ENANO_ROOT . '/.htaccess', 'w');
-      if ( !$hh )
-        return false;
-      fwrite($hh, $htaccess_base);
-      fclose($hh);
-      @unlink(ENANO_ROOT . '/.htaccess.new');
-      return true;
-    }
-    else
-    {
-      return @rename(ENANO_ROOT . '/.htaccess.new', ENANO_ROOT . '/.htaccess');
-    }
-  }
-  else
-  {
-    @unlink(ENANO_ROOT . '/.htaccess.new');
-  }
-  return true;
+	if ( !@rename(ENANO_ROOT . '/config.new.php', ENANO_ROOT . '/config.php') )
+	{
+		echo '<p>Can\'t rename config.php</p>';
+		_stg_rename_config_revert();
+		return false;
+	}
+	
+	if ( @filesize(ENANO_ROOT . '/.htaccess.new') > 1 )
+	{
+		// rename/possibly concatenate .htaccess.new
+		$htaccess_base = '';
+		if ( file_exists(ENANO_ROOT . '/.htaccess') )
+			$htaccess_base .= @file_get_contents(ENANO_ROOT . '/.htaccess');
+		if ( strlen($htaccess_base) > 0 && !preg_match("/\n$/", $htaccess_base) )
+			$htaccess_base .= "\n\n";
+		$htaccess_base .= @file_get_contents(ENANO_ROOT . '/.htaccess.new');
+		if ( file_exists(ENANO_ROOT . '/.htaccess') )
+		{
+			$hh = @fopen(ENANO_ROOT . '/.htaccess', 'w');
+			if ( !$hh )
+				return false;
+			fwrite($hh, $htaccess_base);
+			fclose($hh);
+			@unlink(ENANO_ROOT . '/.htaccess.new');
+			return true;
+		}
+		else
+		{
+			return @rename(ENANO_ROOT . '/.htaccess.new', ENANO_ROOT . '/.htaccess');
+		}
+	}
+	else
+	{
+		@unlink(ENANO_ROOT . '/.htaccess.new');
+	}
+	return true;
 }
 
 /**
@@ -516,61 +516,61 @@
 
 function stg_lang_import()
 {
-  global $db, $languages, $do_langimport;
-  
-  define('IN_ENANO_UPGRADE_POST', 1);
-  
-  //
-  // IMPORT NEW STRINGS
-  //
-  
-  // for each installed language, look for the json files in the filesystem and if they're ok, import new strings from them
-  $q = $db->sql_query('SELECT lang_id, lang_code FROM ' . table_prefix . "language;");
-  if ( !$q )
-    $db->_die();
-  
-  while ( $row = $db->fetchrow($q) )
-  {
-    if ( isset($languages[$row['lang_code']]) )
-    {
-      // found a language and it's good on the filesystem; load it and call a reimport
-      $lang_local = new Language($row['lang_id']);
-      // call fetch to make sure we're up to date
-      $lang_local->fetch();
-      // import
-      foreach ( array('core', 'admin', 'user', 'tools') as $language_file )
-      {
-        // generate full path
-        $language_file = ENANO_ROOT . "/language/{$languages[$row['lang_code']]['dir']}/$language_file.json";
-        // setting the second parameter to bool(true) causes it to skip existing strings
-        if ( !$lang_local->import($language_file, ( !$do_langimport )) )
-          // on failure, report failure to libenanoinstall
-          return false;
-      }
-      // unload this lang_local object to save memory
-      unset($lang_local);
-    }
-  }
-  
-  return true;
+	global $db, $languages, $do_langimport;
+	
+	define('IN_ENANO_UPGRADE_POST', 1);
+	
+	//
+	// IMPORT NEW STRINGS
+	//
+	
+	// for each installed language, look for the json files in the filesystem and if they're ok, import new strings from them
+	$q = $db->sql_query('SELECT lang_id, lang_code FROM ' . table_prefix . "language;");
+	if ( !$q )
+		$db->_die();
+	
+	while ( $row = $db->fetchrow($q) )
+	{
+		if ( isset($languages[$row['lang_code']]) )
+		{
+			// found a language and it's good on the filesystem; load it and call a reimport
+			$lang_local = new Language($row['lang_id']);
+			// call fetch to make sure we're up to date
+			$lang_local->fetch();
+			// import
+			foreach ( array('core', 'admin', 'user', 'tools') as $language_file )
+			{
+				// generate full path
+				$language_file = ENANO_ROOT . "/language/{$languages[$row['lang_code']]['dir']}/$language_file.json";
+				// setting the second parameter to bool(true) causes it to skip existing strings
+				if ( !$lang_local->import($language_file, ( !$do_langimport )) )
+					// on failure, report failure to libenanoinstall
+					return false;
+			}
+			// unload this lang_local object to save memory
+			unset($lang_local);
+		}
+	}
+	
+	return true;
 }
 
 function stg_flush_cache()
 {
-  return purge_all_caches();
+	return purge_all_caches();
 }
 
 function stg_set_version()
 {
-  global $db, $session, $paths, $template, $plugins; // Common objects
-  // log the upgrade
-  $q = $db->sql_query('INSERT INTO '.table_prefix.'logs(log_type,action,time_id,date_string,author,author_uid,page_text,edit_summary) VALUES'
-         . '(\'security\', \'upgrade_enano\', ' . time() . ', \'[DEPRECATED]\', \'' . $db->escape($session->username) . '\', ' . $session->user_id . ', \'' . $db->escape(installer_enano_version()) . '\', \'' . $db->escape($_SERVER['REMOTE_ADDR']) . '\');');
-  if ( !$q )
-  {
-    $db->_die();
-    return false;
-  }
-  setConfig('enano_version', installer_enano_version());
-  return true;
+	global $db, $session, $paths, $template, $plugins; // Common objects
+	// log the upgrade
+	$q = $db->sql_query('INSERT INTO '.table_prefix.'logs(log_type,action,time_id,date_string,author,author_uid,page_text,edit_summary) VALUES'
+ 				. '(\'security\', \'upgrade_enano\', ' . time() . ', \'[DEPRECATED]\', \'' . $db->escape($session->username) . '\', ' . $session->user_id . ', \'' . $db->escape(installer_enano_version()) . '\', \'' . $db->escape($_SERVER['REMOTE_ADDR']) . '\');');
+	if ( !$q )
+	{
+		$db->_die();
+		return false;
+	}
+	setConfig('enano_version', installer_enano_version());
+	return true;
 }