<?php
/**
* Copyright (C) 2008-2010 FluxBB
* based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
* License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
* Localized by adaur
*/
// The FluxBB version this script installs
define('FORUM_VERSION', '1.4.2');
define('FORUM_DB_REVISION', 8);
define('FORUM_SI_REVISION', 1);
define('FORUM_PARSER_REVISION', 1);
define('MIN_PHP_VERSION', '4.3.0');
define('MIN_MYSQL_VERSION', '4.1.2');
define('MIN_PGSQL_VERSION', '7.0.0');
define('PUN_SEARCH_MIN_WORD', 3);
define('PUN_SEARCH_MAX_WORD', 20);
define('PUN_ROOT', './');
// We try to get the admin's language
$language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$language = $language{0}.$language{1};
// Load the install.php language file - maybe this could be improved?
if ($language == 'en' && file_exists(PUN_ROOT.'lang/English/install.php'))
{
require PUN_ROOT.'lang/English/install.php';
$defaut_language = 'English';
}
elseif ($language == 'fr' && file_exists(PUN_ROOT.'lang/French/install.php'))
{
require PUN_ROOT.'lang/French/install.php';
$defaut_language = 'French';
}
elseif ($language == 'ru' && file_exists(PUN_ROOT.'lang/Russian/install.php'))
{
require PUN_ROOT.'lang/Russian/install.php';
$defaut_language = 'Russian';
}
elseif ($language == 'de' && file_exists(PUN_ROOT.'lang/German/install.php'))
{
require PUN_ROOT.'lang/German/install.php';
$defaut_language = 'German';
}
else
{
require PUN_ROOT.'lang/English/install.php';
$defaut_language = 'English';
}
if (file_exists(PUN_ROOT.'config.php'))
{
// Check to see whether FluxBB is already installed
include PUN_ROOT.'config.php';
// If we have the 1.3-legacy constant defined, define the proper 1.4 constant so we don't get an incorrect "need to install" message
if (defined('FORUM'))
define('PUN', FORUM);
// If PUN is defined, config.php is probably valid and thus the software is installed
if (defined('PUN'))
exit($lang_install['Already installed']);
}
// Define PUN because email.php requires it
define('PUN', 1);
// Make sure we are running at least MIN_PHP_VERSION
if (!function_exists('version_compare') || version_compare(PHP_VERSION, MIN_PHP_VERSION, '<'))
exit($lang_install['You are running'].PHP_VERSION.'. FluxBB '.FORUM_VERSION.' '.$lang_install['Requires at least'].' '.MIN_PHP_VERSION.' '.$lang_install['Upgrade']);
// Load the functions script
require PUN_ROOT.'include/functions.php';
// Load UTF-8 functions
require PUN_ROOT.'include/utf8/utf8.php';
// Strip out "bad" UTF-8 characters
forum_remove_bad_characters();
// Reverse the effect of register_globals
forum_unregister_globals();
// Disable error reporting for uninitialized variables
error_reporting(E_ALL);
// Force POSIX locale (to prevent functions such as strtolower() from messing up UTF-8 strings)
setlocale(LC_CTYPE, 'C');
// Turn off magic_quotes_runtime
if (get_magic_quotes_runtime())
set_magic_quotes_runtime(0);
// Strip slashes from GET/POST/COOKIE (if magic_quotes_gpc is enabled)
if (get_magic_quotes_gpc())
{
function stripslashes_array($array)
{
return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
}
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
$_COOKIE = stripslashes_array($_COOKIE);
$_REQUEST = stripslashes_array($_REQUEST);
}
// Turn off PHP time limit
@set_time_limit(0);
//
// Generate output to be used for config.php
//
function generate_config_file()
{
global $db_type, $db_host, $db_name, $db_username, $db_password1, $db_prefix, $cookie_name, $cookie_seed;
return '<?php'."\n\n".'$db_type = \''.$db_type."';\n".'$db_host = \''.$db_host."';\n".'$db_name = \''.addslashes($db_name)."';\n".'$db_username = \''.addslashes($db_username)."';\n".'$db_password = \''.addslashes($db_password1)."';\n".'$db_prefix = \''.addslashes($db_prefix)."';\n".'$p_connect = false;'."\n\n".'$cookie_name = '."'".$cookie_name."';\n".'$cookie_domain = '."'';\n".'$cookie_path = '."'/';\n".'$cookie_secure = 0;'."\n".'$cookie_seed = \''.random_key(16, false, true)."';\n\ndefine('PUN', 1);\n";
}
if (isset($_POST['generate_config']))
{
header('Content-Type: text/x-delimtext; name="config.php"');
header('Content-disposition: attachment; filename=config.php');
$db_type = $_POST['db_type'];
$db_host = $_POST['db_host'];
$db_name = $_POST['db_name'];
$db_username = $_POST['db_username'];
$db_password1 = $_POST['db_password1'];
$db_prefix = $_POST['db_prefix'];
$cookie_name = $_POST['cookie_name'];
$cookie_seed = $_POST['cookie_seed'];
echo generate_config_file();
exit;
}
if (!isset($_POST['form_sent']))
{
// Make an educated guess regarding base_url
$base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://'; // protocol
$base_url .= preg_replace('/:(80|443)$/', '', $_SERVER['HTTP_HOST']); // host[:port]
$base_url .= str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME'])); // path
if (substr($base_url, -1) == '/')
$base_url = substr($base_url, 0, -1);
$db_type = $db_name = $db_username = $db_prefix = $username = $email = '';
$db_host = 'localhost';
$title = $lang_install['My FluxBB Forum'];
$description = '<p><span>'.$lang_install['Description'].'</span></p>';
$default_lang = $defaut_language;
$default_style = 'Air';
}
else
{
$db_type = $_POST['req_db_type'];
$db_host = pun_trim($_POST['req_db_host']);
$db_name = pun_trim($_POST['req_db_name']);
$db_username = pun_trim($_POST['db_username']);
$db_password1 = pun_trim($_POST['db_password1']);
$db_password2 = pun_trim($_POST['db_password2']);
$db_prefix = pun_trim($_POST['db_prefix']);
$username = pun_trim($_POST['req_username']);
$email = strtolower(pun_trim($_POST['req_email']));
$password1 = pun_trim($_POST['req_password1']);
$password2 = pun_trim($_POST['req_password2']);
$title = pun_trim($_POST['req_title']);
$description = pun_trim($_POST['desc']);
$base_url = pun_trim($_POST['req_base_url']);
$default_lang = pun_trim($_POST['req_default_lang']);
$default_style = pun_trim($_POST['req_default_style']);
$alerts = array();
// Make sure base_url doesn't end with a slash
if (substr($base_url, -1) == '/')
$base_url = substr($base_url, 0, -1);
// Validate database password
if ($db_password1 != $db_password2)
$alerts[] = $lang_install['Database wrong password'];
// Validate username and passwords
if (pun_strlen($username) < 2)
$alerts[] = $lang_install['Username 1'];
else if (pun_strlen($username) > 25) // This usually doesn't happen since the form element only accepts 25 characters
$alerts[] = $lang_install['Username 2'];
else if (!strcasecmp($username, 'Guest'))
$alerts[] = $lang_install['Username 3'];
else if (preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/', $username) || preg_match('/((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))/', $username))
$alerts[] = $lang_install['Username 4'];
else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
$alerts[] = $lang_install['Username 5'];
else if (preg_match('/(?:\[\/?(?:b|u|i|h|colou?r|quote|code|img|url|email|list)\]|\[(?:code|quote|list)=)/i', $username))
$alerts[] = $lang_install['Username 6'];
if (pun_strlen($password1) < 4)
$alerts[] = $lang_install['Short password'];
else if ($password1 != $password2)
$alerts[] = $lang_install['Passwords not match'];
// Validate email
require PUN_ROOT.'include/email.php';
if (!is_valid_email($email))
$alerts[] = $lang_install['Wrong mail'];
if ($title == '')
$alerts[] = $lang_install['No board title'];
$default_lang = preg_replace('#[\.\\\/]#', '', $default_lang);
if (!file_exists(PUN_ROOT.'lang/'.$default_lang.'/common.php'))
$alerts[] = $lang_install['Error default language'];
$default_style = preg_replace('#[\.\\\/]#', '', $default_style);
if (!file_exists(PUN_ROOT.'style/'.$default_style.'.css'))
$alerts[] = $lang_install['Error default style'];
}
if (!isset($_POST['form_sent']) || !empty($alerts))
{
// Determine available database extensions
$dual_mysql = false;
$db_extensions = array();
$mysql_innodb = false;
if (function_exists('mysqli_connect'))
{
$db_extensions[] = array('mysqli', 'MySQL Improved');
$db_extensions[] = array('mysqli_innodb', 'MySQL Improved (InnoDB)');
$mysql_innodb = true;
}
if (function_exists('mysql_connect'))
{
$db_extensions[] = array('mysql', 'MySQL Standard');
$db_extensions[] = array('mysql_innodb', 'MySQL Standard (InnoDB)');
$mysql_innodb = true;
if (count($db_extensions) > 2)
$dual_mysql = true;
}
if (function_exists('sqlite_open'))
$db_extensions[] = array('sqlite', 'SQLite');
if (function_exists('pg_connect'))
$db_extensions[] = array('pgsql', 'PostgreSQL');
if (empty($db_extensions))
exit($lang_install['No DB extensions']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $lang_install['FluxBB Installation'] ?></title>
<link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
<script type="text/javascript">
function process_form(the_form)
{
var element_names = new Object()
element_names["req_db_type"] = "<?php echo $lang_install['Database type'] ?>"
element_names["req_db_host"] = "<?php echo $lang_install['Database server hostname'] ?>"
element_names["req_db_name"] = "<?php echo $lang_install['Database name'] ?>"
element_names["db_prefix"] = "<?php echo $lang_install['Table prefix'] ?>"
element_names["req_username"] = "<?php echo $lang_install['Administrator username'] ?>"
element_names["req_password1"] = "<?php echo $lang_install['Administrator password 1'] ?>"
element_names["req_password2"] = "<?php echo $lang_install['Administrator password 2'] ?>"
element_names["req_email"] = "<?php echo $lang_install['Administrator email'] ?>"
element_names["req_title"] = "<?php echo $lang_install['Board title'] ?>"
element_names["req_base_url"] = "<?php echo $lang_install['Base URL'] ?>"
if (document.all || document.getElementById)
{
for (var i = 0; i < the_form.length; ++i)
{
var elem = the_form.elements[i]
if (elem.name && elem.name.substring(0, 4) == "req_")
{
if (elem.type && (elem.type=="text" || elem.type=="textarea" || elem.type=="password" || elem.type=="file") && elem.value=='')
{
alert("\"" + element_names[elem.name] + "\" <?php echo $lang_install['Required field'] ?>")
elem.focus()
return false
}
}
}
}
return true
}
</script>
</head>
<body onload="document.getElementById('install').req_db_type.focus();document.getElementById('install').start.disabled=false;">
<div id="puninstall" class="pun">
<div class="top-box"><div><!-- Top Corners --></div></div>
<div class="punwrap">
<div id="brdheader" class="block">
<div class="box">
<div id="brdtitle" class="inbox">
<h1><span><?php echo $lang_install['FluxBB Installation'] ?></span></h1>
<div id="brddesc"><p><?php echo $lang_install['Welcome'] ?></p></div>
</div>
</div>
</div>
<div id="brdmain">
<div class="blockform">
<h2><span><?php echo $lang_install['Install'] ?></span></h2>
<div class="box">
<form id="install" method="post" action="install.php" onsubmit="this.start.disabled=true;if(process_form(this)){return true;}else{this.start.disabled=false;return false;}">
<div><input type="hidden" name="form_sent" value="1" /></div>
<div class="inform">
<?php if (!empty($alerts)): ?> <div class="forminfo error-info">
<h3><?php echo $lang_install['Errors'] ?></h3>
<ul class="error-list">
<?php
foreach ($alerts as $cur_alert)
echo "\t\t\t\t\t\t".'<li><strong>'.$cur_alert.'</strong></li>'."\n";
?>
</ul>
</div>
<?php endif; ?> </div>
<div class="inform">
<div class="forminfo">
<h3><?php echo $lang_install['Database setup'] ?></h3>
<p><?php echo $lang_install['Info 1'] ?></p>
</div>
<fieldset>
<legend><?php echo $lang_install['Select database'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 2'] ?></p>
<?php if ($dual_mysql): ?> <p><?php echo $lang_install['Dual MySQL'] ?></p>
<?php endif; ?><?php if ($mysql_innodb): ?> <p><?php echo $lang_install['InnoDB'] ?></p>
<?php endif; ?> <label class="required"><strong><?php echo $lang_install['Database type'] ?> <span><?php echo $lang_install['Required'] ?></span></strong>
<br /><select name="req_db_type">
<?php
foreach ($db_extensions as $temp)
{
if ($temp[0] == $db_type)
echo "\t\t\t\t\t\t\t".'<option value="'.$temp[0].'" selected="selected">'.$temp[1].'</option>'."\n";
else
echo "\t\t\t\t\t\t\t".'<option value="'.$temp[0].'">'.$temp[1].'</option>'."\n";
}
?>
</select>
<br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Database hostname'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 3'] ?></p>
<label class="required"><strong><?php echo $lang_install['Database server hostname'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><input type="text" name="req_db_host" value="<?php echo pun_htmlspecialchars($db_host) ?>" size="50" maxlength="100" /><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Database enter name'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 4'] ?></p>
<label class="required"><strong><?php echo $lang_install['Database name'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><input id="req_db_name" type="text" name="req_db_name" value="<?php echo pun_htmlspecialchars($db_name) ?>" size="30" maxlength="50" /><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Database enter informations'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 5'] ?></p>
<label class="conl"><?php echo $lang_install['Database username'] ?><br /><input type="text" name="db_username" value="<?php echo pun_htmlspecialchars($db_username) ?>" size="30" maxlength="50" /><br /></label>
<label class="conl"><?php echo $lang_install['Database password'] ?><br /><input type="password" name="db_password1" size="30" maxlength="50" /><br /></label>
<label class="conl"><?php echo $lang_install['Database confirm password'] ?><br /><input type="password" name="db_password2" size="30" maxlength="50" /><br /></label>
<div class="clearer"></div>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Database enter prefix'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 6'] ?></p>
<label><?php echo $lang_install['Table prefix'] ?><br /><input id="db_prefix" type="text" name="db_prefix" value="<?php echo pun_htmlspecialchars($db_prefix) ?>" size="20" maxlength="30" /><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<div class="forminfo">
<h3><?php echo $lang_install['Administration setup'] ?></h3>
<p><?php echo $lang_install['Info 7'] ?></p>
</div>
<fieldset>
<legend><?php echo $lang_install['Admin enter username'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 8'] ?></p>
<label class="required"><strong><?php echo $lang_install['Administrator username'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><input type="text" name="req_username" value="<?php echo pun_htmlspecialchars($username) ?>" size="25" maxlength="25" /><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Admin enter password'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 9'] ?></p>
<label class="conl required"><strong><?php echo $lang_install['Password'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><input id="req_password1" type="password" name="req_password1" size="16" /><br /></label>
<label class="conl required"><strong><?php echo $lang_install['Confirm password'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><input type="password" name="req_password2" size="16" /><br /></label>
<div class="clearer"></div>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Admin enter email'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 10'] ?></p>
<label class="required"><strong><?php echo $lang_install['Administrator email'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><input id="req_email" type="text" name="req_email" value="<?php echo pun_htmlspecialchars($email) ?>" size="50" maxlength="80" /><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<div class="forminfo">
<h3><?php echo $lang_install['Board setup'] ?></h3>
<p><?php echo $lang_install['Info 11'] ?></p>
</div>
<fieldset>
<legend><?php echo $lang_install['Enter board title'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 12'] ?></p>
<label class="required"><strong><?php echo $lang_install['Board title'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><input id="req_title" type="text" name="req_title" value="<?php echo pun_htmlspecialchars($title) ?>" size="60" maxlength="255" /><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Enter board description'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 13'] ?></p>
<label><strong><?php echo $lang_install['Board description'] ?></strong><br /><input id="desc" type="text" name="desc" value="<?php echo pun_htmlspecialchars($description) ?>" size="60" maxlength="255" /><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Enter base URL'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 14'] ?></p>
<label class="required"><strong><?php echo $lang_install['Base URL'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><input id="req_base_url" type="text" name="req_base_url" value="<?php echo pun_htmlspecialchars($base_url) ?>" size="60" maxlength="100" /><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Choose the default language'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 15'] ?></p>
<label class="required"><strong><?php echo $lang_install['Default language'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><select id="req_default_lang" name="req_default_lang">
<?php
$languages = forum_list_langs();
foreach ($languages as $temp)
{
if ($temp == $default_lang)
echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.$temp.'</option>'."\n";
else
echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.$temp.'</option>'."\n";
}
?>
</select><br /></label>
</div>
</fieldset>
</div>
<div class="inform">
<fieldset>
<legend><?php echo $lang_install['Choose the default style'] ?></legend>
<div class="infldset">
<p><?php echo $lang_install['Info 16'] ?></p>
<label class="required"><strong><?php echo $lang_install['Default style'] ?> <span><?php echo $lang_install['Required'] ?></span></strong><br /><select id="req_default_style" name="req_default_style">
<?php
$styles = forum_list_styles();
foreach ($styles as $temp)
{
if ($temp == $default_style)
echo "\t\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.str_replace('_', ' ', $temp).'</option>'."\n";
else
echo "\t\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.str_replace('_', ' ', $temp).'</option>'."\n";
}
?>
</select><br /></label>
</div>
</fieldset>
</div>
<p class="buttons"><input type="submit" name="start" value="<?php echo $lang_install['Start install'] ?>" /></p>
</form>
</div>
</div>
</div>
</div>
<div class="end-box"><div><!-- Bottom Corners --></div></div>
</div>
</body>
</html>
<?php
}
else
{
// Load the appropriate DB layer class
switch ($db_type)
{
case 'mysql':
require PUN_ROOT.'include/dblayer/mysql.php';
break;
case 'mysql_innodb':
require PUN_ROOT.'include/dblayer/mysql_innodb.php';
break;
case 'mysqli':
require PUN_ROOT.'include/dblayer/mysqli.php';
break;
case 'mysqli_innodb':
require PUN_ROOT.'include/dblayer/mysqli_innodb.php';
break;
case 'pgsql':
require PUN_ROOT.'include/dblayer/pgsql.php';
break;
case 'sqlite':
require PUN_ROOT.'include/dblayer/sqlite.php';
break;
default:
error('\''.pun_htmlspecialchars($db_type).'\''.$lang_install['DB type not valid']);
}
// Create the database object (and connect/select db)
$db = new DBLayer($db_host, $db_username, $db_password1, $db_name, $db_prefix, false);
// Validate prefix
if (strlen($db_prefix) > 0 && (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $db_prefix) || strlen($db_prefix) > 40))
error($lang_install['The table prefix'].'\''.$db->prefix.'\''.$lang_install['Error prefix']);
// Do some DB type specific checks
switch ($db_type)
{
case 'mysql':
case 'mysqli':
case 'mysql_innodb':
case 'mysqli_innodb':
$mysql_info = $db->get_version();
if (version_compare($mysql_info['version'], MIN_MYSQL_VERSION, '<'))
error($lang_install['You are running'].$mysql_version.'. FluxBB '.FORUM_VERSION.' '.$lang_install['Requires at least'].' '.MIN_MYSQL_VERSION.' '.$lang_install['Upgrade']);
break;
case 'pgsql':
$pgsql_info = $db->get_version();
if (version_compare($pgsql_info['version'], MIN_PGSQL_VERSION, '<'))
error($lang_install['You are running'].$pgsql_info.'. FluxBB '.FORUM_VERSION.' '.$lang_install['Requires at least'].' '.MIN_PGSQL_VERSION.' '.$lang_install['Upgrade']);
break;
case 'sqlite':
if (strtolower($db_prefix) == 'sqlite_')
error($lang_install['Prefix reserved']);
break;
}
// Make sure FluxBB isn't already installed
$result = $db->query('SELECT 1 FROM '.$db_prefix.'users WHERE id=1');
if ($db->num_rows($result))
error($lang_install['A table called 1'].$db_prefix.$lang_install['A table called 2'].$db_name.$lang_install['A table called 3']);
// Check if InnoDB is available
if ($db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
{
$result = $db->query('SHOW VARIABLES LIKE \'have_innodb\'');
list (, $result) = $db->fetch_row($result);
if ((strtoupper($result) != 'YES'))
error($lang_install['InnoDB off']);
}
// Start a transaction
$db->start_transaction();
// Create all tables
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'username' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => true
),
'ip' => array(
'datatype' => 'VARCHAR(255)',
'allow_null' => true
),
'email' => array(
'datatype' => 'VARCHAR(80)',
'allow_null' => true
),
'message' => array(
'datatype' => 'VARCHAR(255)',
'allow_null' => true
),
'expire' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'ban_creator' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
)
),
'PRIMARY KEY' => array('id'),
'INDEXES' => array(
'username_idx' => array('username')
)
);
if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
$schema['INDEXES']['username_idx'] = array('username(25)');
$db->create_table('bans', $schema) or error('Unable to create bans table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'cat_name' => array(
'datatype' => 'VARCHAR(80)',
'allow_null' => false,
'default' => '\'New Category\''
),
'disp_position' => array(
'datatype' => 'INT(10)',
'allow_null' => false,
'default' => '0'
)
),
'PRIMARY KEY' => array('id')
);
$db->create_table('categories', $schema) or error('Unable to create categories table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'search_for' => array(
'datatype' => 'VARCHAR(60)',
'allow_null' => false,
'default' => '\'\''
),
'replace_with' => array(
'datatype' => 'VARCHAR(60)',
'allow_null' => false,
'default' => '\'\''
)
),
'PRIMARY KEY' => array('id')
);
$db->create_table('censoring', $schema) or error('Unable to create censoring table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'conf_name' => array(
'datatype' => 'VARCHAR(255)',
'allow_null' => false,
'default' => '\'\''
),
'conf_value' => array(
'datatype' => 'TEXT',
'allow_null' => true
)
),
'PRIMARY KEY' => array('conf_name')
);
$db->create_table('config', $schema) or error('Unable to create config table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'group_id' => array(
'datatype' => 'INT(10)',
'allow_null' => false,
'default' => '0'
),
'forum_id' => array(
'datatype' => 'INT(10)',
'allow_null' => false,
'default' => '0'
),
'read_forum' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'post_replies' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'post_topics' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
)
),
'PRIMARY KEY' => array('group_id', 'forum_id')
);
$db->create_table('forum_perms', $schema) or error('Unable to create forum_perms table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'forum_name' => array(
'datatype' => 'VARCHAR(80)',
'allow_null' => false,
'default' => '\'New forum\''
),
'forum_desc' => array(
'datatype' => 'TEXT',
'allow_null' => true
),
'redirect_url' => array(
'datatype' => 'VARCHAR(100)',
'allow_null' => true
),
'moderators' => array(
'datatype' => 'TEXT',
'allow_null' => true
),
'num_topics' => array(
'datatype' => 'MEDIUMINT(8) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'num_posts' => array(
'datatype' => 'MEDIUMINT(8) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'last_post' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'last_post_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'last_poster' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => true
),
'sort_by' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'disp_position' => array(
'datatype' => 'INT(10)',
'allow_null' => false,
'default' => '0'
),
'cat_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
)
),
'PRIMARY KEY' => array('id')
);
$db->create_table('forums', $schema) or error('Unable to create forums table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'g_id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'g_title' => array(
'datatype' => 'VARCHAR(50)',
'allow_null' => false,
'default' => '\'\''
),
'g_user_title' => array(
'datatype' => 'VARCHAR(50)',
'allow_null' => true
),
'g_moderator' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'g_mod_edit_users' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'g_mod_rename_users' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'g_mod_change_passwords' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'g_mod_ban_users' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'g_read_board' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_view_users' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_post_replies' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_post_topics' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_edit_posts' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_delete_posts' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_delete_topics' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_set_title' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_search' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_search_users' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_send_email' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'g_post_flood' => array(
'datatype' => 'SMALLINT(6)',
'allow_null' => false,
'default' => '30'
),
'g_search_flood' => array(
'datatype' => 'SMALLINT(6)',
'allow_null' => false,
'default' => '30'
),
'g_email_flood' => array(
'datatype' => 'SMALLINT(6)',
'allow_null' => false,
'default' => '60'
)
),
'PRIMARY KEY' => array('g_id')
);
$db->create_table('groups', $schema) or error('Unable to create groups table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'user_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '1'
),
'ident' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => false,
'default' => '\'\''
),
'logged' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'idle' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'last_post' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'last_search' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
),
'UNIQUE KEYS' => array(
'user_id_ident_idx' => array('user_id', 'ident')
),
'INDEXES' => array(
'ident_idx' => array('ident'),
'logged_idx' => array('logged')
),
'ENGINE' => 'HEAP'
);
if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
{
$schema['UNIQUE KEYS']['user_id_ident_idx'] = array('user_id', 'ident(25)');
$schema['INDEXES']['ident_idx'] = array('ident(25)');
}
if ($db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
$schema['ENGINE'] = 'InnoDB';
$db->create_table('online', $schema) or error('Unable to create online table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'poster' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => false,
'default' => '\'\''
),
'poster_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '1'
),
'poster_ip' => array(
'datatype' => 'VARCHAR(39)',
'allow_null' => true
),
'poster_email' => array(
'datatype' => 'VARCHAR(80)',
'allow_null' => true
),
'message' => array(
'datatype' => 'MEDIUMTEXT',
'allow_null' => true
),
'hide_smilies' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'posted' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'edited' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'edited_by' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => true
),
'topic_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
)
),
'PRIMARY KEY' => array('id'),
'INDEXES' => array(
'topic_id_idx' => array('topic_id'),
'multi_idx' => array('poster_id', 'topic_id')
)
);
$db->create_table('posts', $schema) or error('Unable to create posts table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'rank' => array(
'datatype' => 'VARCHAR(50)',
'allow_null' => false,
'default' => '\'\''
),
'min_posts' => array(
'datatype' => 'MEDIUMINT(8) UNSIGNED',
'allow_null' => false,
'default' => '0'
)
),
'PRIMARY KEY' => array('id')
);
$db->create_table('ranks', $schema) or error('Unable to create ranks table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'post_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'topic_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'forum_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'reported_by' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'created' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'message' => array(
'datatype' => 'TEXT',
'allow_null' => true
),
'zapped' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'zapped_by' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
)
),
'PRIMARY KEY' => array('id'),
'INDEXES' => array(
'zapped_idx' => array('zapped')
)
);
$db->create_table('reports', $schema) or error('Unable to create reports table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'ident' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => false,
'default' => '\'\''
),
'search_data' => array(
'datatype' => 'MEDIUMTEXT',
'allow_null' => true
)
),
'PRIMARY KEY' => array('id'),
'INDEXES' => array(
'ident_idx' => array('ident')
)
);
if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
$schema['INDEXES']['ident_idx'] = array('ident(8)');
$db->create_table('search_cache', $schema) or error('Unable to create search_cache table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'post_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'word_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'subject_match' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
)
),
'INDEXES' => array(
'word_id_idx' => array('word_id'),
'post_id_idx' => array('post_id')
)
);
$db->create_table('search_matches', $schema) or error('Unable to create search_matches table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'word' => array(
'datatype' => 'VARCHAR(20)',
'allow_null' => false,
'default' => '\'\'',
'collation' => 'bin'
)
),
'PRIMARY KEY' => array('word'),
'INDEXES' => array(
'id_idx' => array('id')
)
);
if ($db_type == 'sqlite')
{
$schema['PRIMARY KEY'] = array('id');
$schema['UNIQUE KEYS'] = array('word_idx' => array('word'));
}
$db->create_table('search_words', $schema) or error('Unable to create search_words table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'user_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'topic_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
)
),
'PRIMARY KEY' => array('user_id', 'topic_id')
);
$db->create_table('subscriptions', $schema) or error('Unable to create subscriptions table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'poster' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => false,
'default' => '\'\''
),
'subject' => array(
'datatype' => 'VARCHAR(255)',
'allow_null' => false,
'default' => '\'\''
),
'posted' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'first_post_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'last_post' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'last_post_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'last_poster' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => true
),
'num_views' => array(
'datatype' => 'MEDIUMINT(8) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'num_replies' => array(
'datatype' => 'MEDIUMINT(8) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'closed' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'sticky' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'moved_to' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'forum_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
)
),
'PRIMARY KEY' => array('id'),
'INDEXES' => array(
'forum_id_idx' => array('forum_id'),
'moved_to_idx' => array('moved_to'),
'last_post_idx' => array('last_post'),
'first_post_id_idx' => array('first_post_id')
)
);
$db->create_table('topics', $schema) or error('Unable to create topics table', __FILE__, __LINE__, $db->error());
$schema = array(
'FIELDS' => array(
'id' => array(
'datatype' => 'SERIAL',
'allow_null' => false
),
'group_id' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '3'
),
'username' => array(
'datatype' => 'VARCHAR(200)',
'allow_null' => false,
'default' => '\'\''
),
'password' => array(
'datatype' => 'VARCHAR(40)',
'allow_null' => false,
'default' => '\'\''
),
'email' => array(
'datatype' => 'VARCHAR(80)',
'allow_null' => false,
'default' => '\'\''
),
'title' => array(
'datatype' => 'VARCHAR(50)',
'allow_null' => true
),
'realname' => array(
'datatype' => 'VARCHAR(40)',
'allow_null' => true
),
'url' => array(
'datatype' => 'VARCHAR(100)',
'allow_null' => true
),
'jabber' => array(
'datatype' => 'VARCHAR(80)',
'allow_null' => true
),
'icq' => array(
'datatype' => 'VARCHAR(12)',
'allow_null' => true
),
'msn' => array(
'datatype' => 'VARCHAR(80)',
'allow_null' => true
),
'aim' => array(
'datatype' => 'VARCHAR(30)',
'allow_null' => true
),
'yahoo' => array(
'datatype' => 'VARCHAR(30)',
'allow_null' => true
),
'location' => array(
'datatype' => 'VARCHAR(30)',
'allow_null' => true
),
'signature' => array(
'datatype' => 'TEXT',
'allow_null' => true
),
'disp_topics' => array(
'datatype' => 'TINYINT(3) UNSIGNED',
'allow_null' => true
),
'disp_posts' => array(
'datatype' => 'TINYINT(3) UNSIGNED',
'allow_null' => true
),
'email_setting' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'notify_with_post' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'auto_notify' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'show_smilies' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'show_img' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'show_img_sig' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'show_avatars' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'show_sig' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '1'
),
'timezone' => array(
'datatype' => 'FLOAT',
'allow_null' => false,
'default' => '0'
),
'dst' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'time_format' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'date_format' => array(
'datatype' => 'TINYINT(1)',
'allow_null' => false,
'default' => '0'
),
'language' => array(
'datatype' => 'VARCHAR(25)',
'allow_null' => false,
'default' => '\'English\''
),
'style' => array(
'datatype' => 'VARCHAR(25)',
'allow_null' => false,
'default' => '\''.$db->escape($default_style).'\''
),
'num_posts' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'last_post' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'last_search' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'last_email_sent' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => true
),
'registered' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'registration_ip' => array(
'datatype' => 'VARCHAR(39)',
'allow_null' => false,
'default' => '\'0.0.0.0\''
),
'last_visit' => array(
'datatype' => 'INT(10) UNSIGNED',
'allow_null' => false,
'default' => '0'
),
'admin_note' => array(
'datatype' => 'VARCHAR(30)',
'allow_null' => true
),
'activate_string' => array(
'datatype' => 'VARCHAR(80)',
'allow_null' => true
),
'activate_key' => array(
'datatype' => 'VARCHAR(8)',
'allow_null' => true
),
),
'PRIMARY KEY' => array('id'),
'UNIQUE KEYS' => array(
'username_idx' => array('username')
),
'INDEXES' => array(
'registered_idx' => array('registered')
)
);
if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
$schema['UNIQUE KEYS']['username_idx'] = array('username(25)');
$db->create_table('users', $schema) or error('Unable to create users table', __FILE__, __LINE__, $db->error());
$now = time();
// Insert the four preset groups
$db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_send_email, g_post_flood, g_search_flood, g_email_flood) VALUES('.($db_type != 'pgsql' ? '1, ' : '')."'Administrators', 'Administrator', 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0)") or error('Unable to add group', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_send_email, g_post_flood, g_search_flood, g_email_flood) VALUES('.($db_type != 'pgsql' ? '2, ' : '').$lang_install['Moderators'].', '.$lang_install['Moderator']."', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0)") or error('Unable to add group', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_send_email, g_post_flood, g_search_flood, g_email_flood) VALUES('.($db_type != 'pgsql' ? '3, ' : '').$lang_install['Guest']."', NULL, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 60, 30, 0)") or error('Unable to add group', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_send_email, g_post_flood, g_search_flood, g_email_flood) VALUES('.($db_type != 'pgsql' ? '4, ' : '').$lang_install['Member']."', NULL, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 60, 30, 60)") or error('Unable to add group', __FILE__, __LINE__, $db->error());
// Insert guest and first admin user
$db->query('INSERT INTO '.$db_prefix."users (group_id, username, password, email) VALUES(3, '".$lang_install['Member']."', '".$lang_install['Member']."', '".$lang_install['Member']."')")
or error('Unable to add guest user. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db_prefix."users (group_id, username, password, email, num_posts, last_post, registered, registration_ip, last_visit) VALUES(1, '".$db->escape($username)."', '".pun_hash($password1)."', '$email', 1, ".$now.", ".$now.", '127.0.0.1', ".$now.')')
or error('Unable to add administrator user. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
// Enable/disable avatars depending on file_uploads setting in PHP configuration
$avatars = in_array(strtolower(@ini_get('file_uploads')), array('on', 'true', '1')) ? 1 : 0;
// Insert config data
$config = array(
'o_cur_version' => "'".FORUM_VERSION."'",
'o_database_revision' => "'".FORUM_DB_REVISION."'",
'o_searchindex_revision' => "'".FORUM_SI_REVISION."'",
'o_parser_revision' => "'".FORUM_PARSER_REVISION."'",
'o_board_title' => "'".$db->escape($title)."'",
'o_board_desc' => "'".$db->escape($description)."'",
'o_default_timezone' => "'0'",
'o_time_format' => "'H:i:s'",
'o_date_format' => "'Y-m-d'",
'o_timeout_visit' => "'1800'",
'o_timeout_online' => "'300'",
'o_redirect_delay' => "'1'",
'o_show_version' => "'0'",
'o_show_user_info' => "'1'",
'o_show_post_count' => "'1'",
'o_signatures' => "'1'",
'o_smilies' => "'1'",
'o_smilies_sig' => "'1'",
'o_make_links' => "'1'",
'o_default_lang' => "'".$db->escape($default_lang)."'",
'o_default_style' => "'".$db->escape($default_style)."'",
'o_default_user_group' => "'4'",
'o_topic_review' => "'15'",
'o_disp_topics_default' => "'30'",
'o_disp_posts_default' => "'25'",
'o_indent_num_spaces' => "'4'",
'o_quote_depth' => "'3'",
'o_quickpost' => "'1'",
'o_users_online' => "'1'",
'o_censoring' => "'0'",
'o_ranks' => "'1'",
'o_show_dot' => "'0'",
'o_topic_views' => "'1'",
'o_quickjump' => "'1'",
'o_gzip' => "'0'",
'o_additional_navlinks' => "''",
'o_report_method' => "'0'",
'o_regs_report' => "'0'",
'o_default_email_setting' => "'1'",
'o_mailing_list' => "'".$email."'",
'o_avatars' => "'".$avatars."'",
'o_avatars_dir' => "'img/avatars'",
'o_avatars_width' => "'60'",
'o_avatars_height' => "'60'",
'o_avatars_size' => "'10240'",
'o_search_all_forums' => "'1'",
'o_base_url' => "'".$db->escape($base_url)."'",
'o_admin_email' => "'".$email."'",
'o_webmaster_email' => "'".$email."'",
'o_subscriptions' => "'1'",
'o_smtp_host' => "NULL",
'o_smtp_user' => "NULL",
'o_smtp_pass' => "NULL",
'o_smtp_ssl' => "'0'",
'o_regs_allow' => "'1'",
'o_regs_verify' => "'0'",
'o_announcement' => "'0'",
'o_announcement_message' => "'".$lang_install['Announcement']."'",
'o_rules' => "'0'",
'o_rules_message' => "'".$lang_install['Rules']."'",
'o_maintenance' => "'0'",
'o_maintenance_message' => "'".$lang_install['Maintenance message']."'",
'o_default_dst' => "'0'",
'o_feed_type' => "'2'",
'p_message_bbcode' => "'1'",
'p_message_img_tag' => "'1'",
'p_message_all_caps' => "'1'",
'p_subject_all_caps' => "'1'",
'p_sig_all_caps' => "'1'",
'p_sig_bbcode' => "'1'",
'p_sig_img_tag' => "'0'",
'p_sig_length' => "'400'",
'p_sig_lines' => "'4'",
'p_allow_banned_email' => "'1'",
'p_allow_dupe_email' => "'0'",
'p_force_guest_email' => "'1'"
);
foreach ($config as $conf_name => $conf_value)
{
$db->query('INSERT INTO '.$db_prefix."config (conf_name, conf_value) VALUES('$conf_name', $conf_value)")
or error('Unable to insert into table '.$db_prefix.'config. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
}
// Insert some other default data
$subject = $lang_install['Test post'];
$message = $lang_install['Message'];
$db->query('INSERT INTO '.$db_prefix."ranks (rank, min_posts) VALUES('New member', 0)")
or error('Unable to insert into table '.$db_prefix.'ranks. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db_prefix."ranks (rank, min_posts) VALUES('".$lang_install['Member']."', 10)")
or error('Unable to insert into table '.$db_prefix.'ranks. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db_prefix."categories (cat_name, disp_position) VALUES('".$lang_install['Test category']."', 1)")
or error('Unable to insert into table '.$db_prefix.'categories. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db_prefix."forums (forum_name, forum_desc, num_topics, num_posts, last_post, last_post_id, last_poster, disp_position, cat_id) VALUES('".$lang_install['Test forum']."', '".$lang_install['This is just a test forum']."', 1, 1, ".$now.", 1, '".$db->escape($username)."', 1, 1)")
or error('Unable to insert into table '.$db_prefix.'forums. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db_prefix."topics (poster, subject, posted, first_post_id, last_post, last_post_id, last_poster, forum_id) VALUES('".$db->escape($username)."', '".$db->escape($subject)."', ".$now.", 1, ".$now.", 1, '".$db->escape($username)."', 1)")
or error('Unable to insert into table '.$db_prefix.'topics. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
$db->query('INSERT INTO '.$db_prefix."posts (poster, poster_id, poster_ip, message, posted, topic_id) VALUES('".$db->escape($username)."', 2, '127.0.0.1', '".$db->escape($message)."', ".$now.', 1)')
or error('Unable to insert into table '.$db_prefix.'posts. Please check your configuration and try again', __FILE__, __LINE__, $db->error());
// Index the test post so searching for it works
require PUN_ROOT.'include/search_idx.php';
$pun_config['o_default_lang'] = $default_lang;
update_search_index('post', 1, $message, $subject);
$db->end_transaction();
$alerts = array();
// Check if the cache directory is writable
if (!@is_writable('./cache/'))
$alerts[] = $lang_install['Alert cache'];
// Check if default avatar directory is writable
if (!@is_writable('./img/avatars/'))
$alerts[] = $lang_install['Alert avatar'];
// Check if we disabled uploading avatars because file_uploads was disabled
if ($avatars == '0')
$alerts[] = $lang_install['Alert upload'];
// Add some random bytes at the end of the cookie name to prevent collisions
$cookie_name = 'pun_cookie_'.random_key(6, false, true);
// Generate the config.php file data
$config = generate_config_file();
// Attempt to write config.php and serve it up for download if writing fails
$written = false;
if (is_writable(PUN_ROOT))
{
$fh = @fopen(PUN_ROOT.'config.php', 'wb');
if ($fh)
{
fwrite($fh, $config);
fclose($fh);
$written = true;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $lang_install['FluxBB Installation'] ?></title>
<link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
</head>
<body>
<div id="puninstall" class="pun">
<div class="top-box"><div><!-- Top Corners --></div></div>
<div class="punwrap">
<div id="brdheader" class="block">
<div class="box">
<div id="brdtitle" class="inbox">
<h1><span><?php echo $lang_install['FluxBB Installation'] ?></span></h1>
<div id="brddesc"><p><?php echo $lang_install['FluxBB has been installed'] ?></p></div>
</div>
</div>
</div>
<div id="brdmain">
<div class="blockform">
<h2><span><?php echo $lang_install['Final instructions'] ?></span></h2>
<div class="box">
<?php
if (!$written)
{
?>
<form method="post" action="install.php">
<div class="inform">
<div class="forminfo">
<p><?php echo $lang_install['Info 17'] ?></p>
<p><?php echo $lang_install['Info 18'] ?></p>
</div>
<input type="hidden" name="generate_config" value="1" />
<input type="hidden" name="db_type" value="<?php echo $db_type; ?>" />
<input type="hidden" name="db_host" value="<?php echo $db_host; ?>" />
<input type="hidden" name="db_name" value="<?php echo pun_htmlspecialchars($db_name); ?>" />
<input type="hidden" name="db_username" value="<?php echo pun_htmlspecialchars($db_username); ?>" />
<input type="hidden" name="db_password1" value="<?php echo pun_htmlspecialchars($db_password1); ?>" />
<input type="hidden" name="db_prefix" value="<?php echo pun_htmlspecialchars($db_prefix); ?>" />
<input type="hidden" name="cookie_name" value="<?php echo pun_htmlspecialchars($cookie_name); ?>" />
<input type="hidden" name="cookie_seed" value="<?php echo pun_htmlspecialchars($cookie_seed); ?>" />
<?php if (!empty($alerts)): ?> <div class="forminfo error-info">
<ul class="error-list">
<?php
foreach ($alerts as $cur_alert)
echo "\t\t\t\t\t".'<li>'.$cur_alert.'</li>'."\n";
?>
</ul>
</div>
<?php endif; ?> </div>
<p class="buttons"><input type="submit" value="<?php echo $lang_install['Download config.php file'] ?>" /></p>
</form>
<?php
}
else
{
?>
<div class="fakeform">
<div class="inform">
<div class="forminfo">
<p><?php echo $lang_install['FluxBB has been fully installed'] ?></p>
</div>
</div>
</div>
<?php
}
?>
</div>
</div>
</div>
</div>
<div class="end-box"><div><!-- Bottom Corners --></div></div>
</div>
</body>
</html>
<?php
}