diff options
| author | Michael Save <savetheinternet@tinyboard.org> | 2012-04-12 02:49:22 +1000 |
|---|---|---|
| committer | Michael Save <savetheinternet@tinyboard.org> | 2012-04-12 02:49:22 +1000 |
| commit | c9423a2c34a5b93bf9cf2c506acca713781e60b6 (patch) | |
| tree | 16f4a569d34fc67365b453bafe561524fce87b22 /install.php | |
| parent | 88092e4f9e50e94f094e55c54a6150df104043b1 (diff) | |
large cleanup
Diffstat (limited to 'install.php')
| -rw-r--r-- | install.php | 948 |
1 files changed, 473 insertions, 475 deletions
diff --git a/install.php b/install.php index c76c1061..3cd8a5b7 100644 --- a/install.php +++ b/install.php @@ -1,522 +1,520 @@ <?php - // Installation/upgrade file - define('VERSION', 'v0.9.6-dev-1'); + +// Installation/upgrade file +define('VERSION', 'v0.9.6-dev-1'); + +require 'inc/functions.php'; + +$step = isset($_GET['step']) ? round($_GET['step']) : 0; +$page = Array( + 'config' => $config, + 'title' => 'Install', + 'body' => '', + 'nojavascript' => true +); + +// this breaks the dispaly of licenses if enabled +$config['minify_html'] = false; + +if(file_exists($config['has_installed'])) { - require 'inc/functions.php'; - require 'inc/display.php'; - require 'inc/template.php'; - require 'inc/database.php'; - require 'inc/user.php'; - $step = isset($_GET['step']) ? round($_GET['step']) : 0; - $page = Array( - 'config' => $config, - 'title' => 'Install', - 'body' => '', - 'nojavascript' => true - ); + // Check the version number + $version = trim(file_get_contents($config['has_installed'])); + if(empty($version)) + $version = 'v0.9.1'; - // this breaks the dispaly of licenses if enabled - $config['minify_html'] = false; + $boards = listBoards(); - if(file_exists($config['has_installed'])) { - - // Check the version number - $version = trim(file_get_contents($config['has_installed'])); - if(empty($version)) - $version = 'v0.9.1'; - - $boards = listBoards(); - - switch($version) { - case 'v0.9': - case 'v0.9.1': - // Upgrade to v0.9.2-dev - - foreach($boards as &$_board) { - // Add `capcode` field after `trip` - query(sprintf("ALTER TABLE `posts_%s` ADD `capcode` VARCHAR( 50 ) NULL AFTER `trip`", $_board['uri'])) or error(db_error()); - - // Resize `trip` to 15 characters - query(sprintf("ALTER TABLE `posts_%s` CHANGE `trip` `trip` VARCHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL", $_board['uri'])) or error(db_error()); - } - case 'v0.9.2-dev': - // Upgrade to v0.9.2-dev-1 - - // New table: `theme_settings` - query("CREATE TABLE IF NOT EXISTS `theme_settings` ( `name` varchar(40) NOT NULL, `value` text, UNIQUE KEY `name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;") or error(db_error()); - - // New table: `news` - query("CREATE TABLE IF NOT EXISTS `news` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` text NOT NULL, `time` int(11) NOT NULL, `subject` text NOT NULL, `body` text NOT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;") or error(db_error()); - case 'v0.9.2.1-dev': - case 'v0.9.2-dev-1': - // Fix broken version number/mistake - $version = 'v0.9.2-dev-1'; - // Upgrade to v0.9.2-dev-2 - - foreach($boards as &$_board) { - // Increase field sizes - query(sprintf("ALTER TABLE `posts_%s` CHANGE `subject` `subject` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL", $_board['uri'])) or error(db_error()); - query(sprintf("ALTER TABLE `posts_%s` CHANGE `name` `name` VARCHAR( 35 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL", $_board['uri'])) or error(db_error()); - } - case 'v0.9.2-dev-2': - // Upgrade to v0.9.2-dev-3 (v0.9.2) - - foreach($boards as &$_board) { - // Add `custom_fields` field - query(sprintf("ALTER TABLE `posts_%s` ADD `embed` TEXT NULL", $_board['uri'])) or error(db_error()); - } - case 'v0.9.2-dev-3': // v0.9.2-dev-3 == v0.9.2 - case 'v0.9.2': - // Upgrade to v0.9.3-dev-1 - - // Upgrade `theme_settings` table - query("TRUNCATE TABLE `theme_settings`") or error(db_error()); - query("ALTER TABLE `theme_settings` ADD `theme` VARCHAR( 40 ) NOT NULL FIRST") or error(db_error()); - query("ALTER TABLE `theme_settings` CHANGE `name` `name` VARCHAR( 40 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL") or error(db_error()); - query("ALTER TABLE `theme_settings` DROP INDEX `name`") or error(db_error()); - case 'v0.9.3-dev-1': - query("ALTER TABLE `mods` ADD `boards` TEXT NOT NULL") or error(db_error()); - query("UPDATE `mods` SET `boards` = '*'") or error(db_error()); - case 'v0.9.3-dev-2': - foreach($boards as &$_board) { - query(sprintf("ALTER TABLE `posts_%s` CHANGE `filehash` `filehash` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL", $_board['uri'])) or error(db_error()); - } - case 'v0.9.3-dev-3': - // Board-specifc bans - query("ALTER TABLE `bans` ADD `board` SMALLINT NULL AFTER `reason`") or error(db_error()); - case 'v0.9.3-dev-4': - // add ban ID - query("ALTER TABLE `bans` ADD `id` INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( `id` ), ADD UNIQUE (`id`)"); - case 'v0.9.3-dev-5': - foreach($boards as &$_board) { - // Increase subject field size - query(sprintf("ALTER TABLE `posts_%s` CHANGE `subject` `subject` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL", $_board['uri'])) or error(db_error()); - } - case 'v0.9.3-dev-6': - // change to MyISAM - $tables = Array( - 'bans', 'boards', 'ip_notes', 'modlogs', 'mods', 'mutes', 'noticeboard', 'pms', 'reports', 'robot', 'theme_settings', 'news' - ); - foreach($boards as &$board) { - $tables[] = "posts_{$board['uri']}"; - } + switch($version) { + case 'v0.9': + case 'v0.9.1': + // Upgrade to v0.9.2-dev + + foreach($boards as &$_board) { + // Add `capcode` field after `trip` + query(sprintf("ALTER TABLE `posts_%s` ADD `capcode` VARCHAR( 50 ) NULL AFTER `trip`", $_board['uri'])) or error(db_error()); - foreach($tables as &$table) { - query("ALTER TABLE `{$table}` ENGINE = MYISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci") or error(db_error()); - } - case 'v0.9.3-dev-7': - foreach($boards as &$board) { - query(sprintf("ALTER TABLE `posts_%s` CHANGE `filename` `filename` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL", $board['uri'])) or error(db_error()); - } - case 'v0.9.3-dev-8': - foreach($boards as &$board) { - query(sprintf("ALTER TABLE `posts_%s` ADD INDEX ( `thread` )", $board['uri'])) or error(db_error()); - } - case 'v0.9.3-dev-9': - foreach($boards as &$board) { - query(sprintf("ALTER TABLE `posts_%s`ADD INDEX ( `time` )", $board['uri'])) or error(db_error()); - query(sprintf("ALTER TABLE `posts_%s`ADD FULLTEXT (`body`)", $board['uri'])) or error(db_error()); - } - case 'v0.9.3-dev-10': - case 'v0.9.3': - query("ALTER TABLE `bans` DROP INDEX `id`") or error(db_error()); - query("ALTER TABLE `pms` DROP INDEX `id`") or error(db_error()); - query("ALTER TABLE `boards` DROP PRIMARY KEY") or error(db_error()); - query("ALTER TABLE `reports` DROP INDEX `id`") or error(db_error()); - query("ALTER TABLE `boards` DROP INDEX `uri`") or error(db_error()); + // Resize `trip` to 15 characters + query(sprintf("ALTER TABLE `posts_%s` CHANGE `trip` `trip` VARCHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL", $_board['uri'])) or error(db_error()); + } + case 'v0.9.2-dev': + // Upgrade to v0.9.2-dev-1 + + // New table: `theme_settings` + query("CREATE TABLE IF NOT EXISTS `theme_settings` ( `name` varchar(40) NOT NULL, `value` text, UNIQUE KEY `name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;") or error(db_error()); + + // New table: `news` + query("CREATE TABLE IF NOT EXISTS `news` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` text NOT NULL, `time` int(11) NOT NULL, `subject` text NOT NULL, `body` text NOT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;") or error(db_error()); + case 'v0.9.2.1-dev': + case 'v0.9.2-dev-1': + // Fix broken version number/mistake + $version = 'v0.9.2-dev-1'; + // Upgrade to v0.9.2-dev-2 + + foreach($boards as &$_board) { + // Increase field sizes + query(sprintf("ALTER TABLE `posts_%s` CHANGE `subject` `subject` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL", $_board['uri'])) or error(db_error()); + query(sprintf("ALTER TABLE `posts_%s` CHANGE `name` `name` VARCHAR( 35 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL", $_board['uri'])) or error(db_error()); + } + case 'v0.9.2-dev-2': + // Upgrade to v0.9.2-dev-3 (v0.9.2) + + foreach($boards as &$_board) { + // Add `custom_fields` field + query(sprintf("ALTER TABLE `posts_%s` ADD `embed` TEXT NULL", $_board['uri'])) or error(db_error()); + } + case 'v0.9.2-dev-3': // v0.9.2-dev-3 == v0.9.2 + case 'v0.9.2': + // Upgrade to v0.9.3-dev-1 + + // Upgrade `theme_settings` table + query("TRUNCATE TABLE `theme_settings`") or error(db_error()); + query("ALTER TABLE `theme_settings` ADD `theme` VARCHAR( 40 ) NOT NULL FIRST") or error(db_error()); + query("ALTER TABLE `theme_settings` CHANGE `name` `name` VARCHAR( 40 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL") or error(db_error()); + query("ALTER TABLE `theme_settings` DROP INDEX `name`") or error(db_error()); + case 'v0.9.3-dev-1': + query("ALTER TABLE `mods` ADD `boards` TEXT NOT NULL") or error(db_error()); + query("UPDATE `mods` SET `boards` = '*'") or error(db_error()); + case 'v0.9.3-dev-2': + foreach($boards as &$_board) { + query(sprintf("ALTER TABLE `posts_%s` CHANGE `filehash` `filehash` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL", $_board['uri'])) or error(db_error()); + } + case 'v0.9.3-dev-3': + // Board-specifc bans + query("ALTER TABLE `bans` ADD `board` SMALLINT NULL AFTER `reason`") or error(db_error()); + case 'v0.9.3-dev-4': + // add ban ID + query("ALTER TABLE `bans` ADD `id` INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( `id` ), ADD UNIQUE (`id`)"); + case 'v0.9.3-dev-5': + foreach($boards as &$_board) { + // Increase subject field size + query(sprintf("ALTER TABLE `posts_%s` CHANGE `subject` `subject` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL", $_board['uri'])) or error(db_error()); + } + case 'v0.9.3-dev-6': + // change to MyISAM + $tables = Array( + 'bans', 'boards', 'ip_notes', 'modlogs', 'mods', 'mutes', 'noticeboard', 'pms', 'reports', 'robot', 'theme_settings', 'news' + ); + foreach($boards as &$board) { + $tables[] = "posts_{$board['uri']}"; + } + + foreach($tables as &$table) { + query("ALTER TABLE `{$table}` ENGINE = MYISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci") or error(db_error()); + } + case 'v0.9.3-dev-7': + foreach($boards as &$board) { + query(sprintf("ALTER TABLE `posts_%s` CHANGE `filename` `filename` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL", $board['uri'])) or error(db_error()); + } + case 'v0.9.3-dev-8': + foreach($boards as &$board) { + query(sprintf("ALTER TABLE `posts_%s` ADD INDEX ( `thread` )", $board['uri'])) or error(db_error()); + } + case 'v0.9.3-dev-9': + foreach($boards as &$board) { + query(sprintf("ALTER TABLE `posts_%s`ADD INDEX ( `time` )", $board['uri'])) or error(db_error()); + query(sprintf("ALTER TABLE `posts_%s`ADD FULLTEXT (`body`)", $board['uri'])) or error(db_error()); + } + case 'v0.9.3-dev-10': + case 'v0.9.3': + query("ALTER TABLE `bans` DROP INDEX `id`") or error(db_error()); + query("ALTER TABLE `pms` DROP INDEX `id`") or error(db_error()); + query("ALTER TABLE `boards` DROP PRIMARY KEY") or error(db_error()); + query("ALTER TABLE `reports` DROP INDEX `id`") or error(db_error()); + query("ALTER TABLE `boards` DROP INDEX `uri`") or error(db_error()); + + query("ALTER IGNORE TABLE `robot` ADD PRIMARY KEY (`hash`)") or error(db_error()); + query("ALTER TABLE `bans` ADD FULLTEXT (`ip`)") or error(db_error()); + query("ALTER TABLE `ip_notes` ADD INDEX (`ip`)") or error(db_error()); + query("ALTER TABLE `modlogs` ADD INDEX (`time`)") or error(db_error()); + query("ALTER TABLE `boards` ADD PRIMARY KEY(`uri`)") or error(db_error()); + query("ALTER TABLE `mutes` ADD INDEX (`ip`)") or error(db_error()); + query("ALTER TABLE `news` ADD INDEX (`time`)") or error(db_error()); + query("ALTER TABLE `theme_settings` ADD INDEX (`theme`)") or error(db_error()); + case 'v0.9.4-dev-1': + foreach($boards as &$board) { + query(sprintf("ALTER TABLE `posts_%s` ADD `sage` INT( 1 ) NOT NULL AFTER `locked`", $board['uri'])) or error(db_error()); + } + case 'v0.9.4-dev-2': + if(!isset($_GET['confirm'])) { + $page['title'] = 'License Change'; + $page['body'] = '<p style="text-align:center">You are upgrading to a version which uses an amended license. The licenses included with Tinyboard distributions prior to this version (v0.9.4-dev-2) are still valid for those versions, but no longer apply to this and newer versions.</p>' . + '<textarea style="width:700px;height:370px;margin:auto;display:block;background:white;color:black" disabled>' . htmlentities(file_get_contents('LICENSE.md')) . '</textarea> + <p style="text-align:center"> + <a href="?confirm=1">I have read and understood the agreement. Proceed to upgrading.</a> + </p>'; - query("ALTER IGNORE TABLE `robot` ADD PRIMARY KEY (`hash`)") or error(db_error()); - query("ALTER TABLE `bans` ADD FULLTEXT (`ip`)") or error(db_error()); - query("ALTER TABLE `ip_notes` ADD INDEX (`ip`)") or error(db_error()); - query("ALTER TABLE `modlogs` ADD INDEX (`time`)") or error(db_error()); - query("ALTER TABLE `boards` ADD PRIMARY KEY(`uri`)") or error(db_error()); - query("ALTER TABLE `mutes` ADD INDEX (`ip`)") or error(db_error()); - query("ALTER TABLE `news` ADD INDEX (`time`)") or error(db_error()); - query("ALTER TABLE `theme_settings` ADD INDEX (`theme`)") or error(db_error()); - case 'v0.9.4-dev-1': - foreach($boards as &$board) { - query(sprintf("ALTER TABLE `posts_%s` ADD `sage` INT( 1 ) NOT NULL AFTER `locked`", $board['uri'])) or error(db_error()); - } - case 'v0.9.4-dev-2': - if(!isset($_GET['confirm'])) { - $page['title'] = 'License Change'; - $page['body'] = '<p style="text-align:center">You are upgrading to a version which uses an amended license. The licenses included with Tinyboard distributions prior to this version (v0.9.4-dev-2) are still valid for those versions, but no longer apply to this and newer versions.</p>' . - '<textarea style="width:700px;height:370px;margin:auto;display:block;background:white;color:black" disabled>' . htmlentities(file_get_contents('LICENSE.md')) . '</textarea> - <p style="text-align:center"> - <a href="?confirm=1">I have read and understood the agreement. Proceed to upgrading.</a> - </p>'; - - file_write($config['has_installed'], 'v0.9.4-dev-2'); - - break; - } - case 'v0.9.4-dev-3': - case 'v0.9.4-dev-4': - case 'v0.9.4': - foreach($boards as &$board) { - query(sprintf("ALTER TABLE `posts_%s` - CHANGE `subject` `subject` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL , - CHANGE `email` `email` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL , - CHANGE `name` `name` VARCHAR( 35 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL", $board['uri'])) or error(db_error()); - } - case 'v0.9.5-dev-1': - foreach($boards as &$board) { - query(sprintf("ALTER TABLE `posts_%s` ADD `body_nomarkup` TEXT NULL AFTER `body`", $board['uri'])) or error(db_error()); - } - query("CREATE TABLE IF NOT EXISTS `cites` ( `board` varchar(8) NOT NULL, `post` int(11) NOT NULL, `target_board` varchar(8) NOT NULL, `target` int(11) NOT NULL, KEY `target` (`target_board`,`target`), KEY `post` (`board`,`post`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;") or error(db_error()); - case 'v0.9.5-dev-2': - query("ALTER TABLE `boards` - CHANGE `uri` `uri` VARCHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - CHANGE `title` `title` VARCHAR( 40 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - CHANGE `subtitle` `subtitle` VARCHAR( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL") or error(db_error()); - case 'v0.9.5-dev-3': - // v0.9.5 - case 'v0.9.5': - query("ALTER TABLE `boards` - CHANGE `uri` `uri` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - CHANGE `title` `title` TINYTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, - CHANGE `subtitle` `subtitle` TINYTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL") or error(db_error()); - case false: - // Update version number - file_write($config['has_installed'], VERSION); + file_write($config['has_installed'], 'v0.9.4-dev-2'); - $page['title'] = 'Upgraded'; - $page['body'] = '<p style="text-align:center">Successfully upgraded from ' . $version . ' to <strong>' . VERSION . '</strong>.</p>'; break; - default: - $page['title'] = 'Unknown version'; - $page['body'] = '<p style="text-align:center">Tinyboard was unable to determine what version is currently installed.</p>'; - break; - case VERSION: - $page['title'] = 'Already installed'; - $page['body'] = '<p style="text-align:center">It appears that Tinyboard is already installed (' . $version . ') and there is nothing to upgrade! Delete <strong>' . $config['has_installed'] . '</strong> to reinstall.</p>'; - break; - } + } + case 'v0.9.4-dev-3': + case 'v0.9.4-dev-4': + case 'v0.9.4': + foreach($boards as &$board) { + query(sprintf("ALTER TABLE `posts_%s` + CHANGE `subject` `subject` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL , + CHANGE `email` `email` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL , + CHANGE `name` `name` VARCHAR( 35 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL", $board['uri'])) or error(db_error()); + } + case 'v0.9.5-dev-1': + foreach($boards as &$board) { + query(sprintf("ALTER TABLE `posts_%s` ADD `body_nomarkup` TEXT NULL AFTER `body`", $board['uri'])) or error(db_error()); + } + query("CREATE TABLE IF NOT EXISTS `cites` ( `board` varchar(8) NOT NULL, `post` int(11) NOT NULL, `target_board` varchar(8) NOT NULL, `target` int(11) NOT NULL, KEY `target` (`target_board`,`target`), KEY `post` (`board`,`post`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;") or error(db_error()); + case 'v0.9.5-dev-2': + query("ALTER TABLE `boards` + CHANGE `uri` `uri` VARCHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + CHANGE `title` `title` VARCHAR( 40 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + CHANGE `subtitle` `subtitle` VARCHAR( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL") or error(db_error()); + case 'v0.9.5-dev-3': + // v0.9.5 + case 'v0.9.5': + query("ALTER TABLE `boards` + CHANGE `uri` `uri` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + CHANGE `title` `title` TINYTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + CHANGE `subtitle` `subtitle` TINYTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL") or error(db_error()); + case false: + // Update version number + file_write($config['has_installed'], VERSION); + + $page['title'] = 'Upgraded'; + $page['body'] = '<p style="text-align:center">Successfully upgraded from ' . $version . ' to <strong>' . VERSION . '</strong>.</p>'; + break; + default: + $page['title'] = 'Unknown version'; + $page['body'] = '<p style="text-align:center">Tinyboard was unable to determine what version is currently installed.</p>'; + break; + case VERSION: + $page['title'] = 'Already installed'; + $page['body'] = '<p style="text-align:center">It appears that Tinyboard is already installed (' . $version . ') and there is nothing to upgrade! Delete <strong>' . $config['has_installed'] . '</strong> to reinstall.</p>'; + break; + } + + die(Element('page.html', $page)); +} + +if($step == 0) { + // Agreeement + $page['body'] = ' + <textarea style="width:700px;height:370px;margin:auto;display:block;background:white;color:black" disabled>' . htmlentities(file_get_contents('LICENSE.md')) . '</textarea> + <p style="text-align:center"> + <a href="?step=1">I have read and understood the agreement. Proceed to installation.</a> + </p>'; + + echo Element('page.html', $page); +} elseif($step == 1) { + $page['title'] = 'Pre-installation test'; + + $page['body'] = '<table class="test">'; + + function rheader($item) { + global $page, $config; - die(Element('page.html', $page)); + $page['body'] .= '<tr class="h"><th colspan="2">' . $item . '</th></tr>'; } - if($step == 0) { - // Agreeement - $page['body'] = ' - <textarea style="width:700px;height:370px;margin:auto;display:block;background:white;color:black" disabled>' . htmlentities(file_get_contents('LICENSE.md')) . '</textarea> - <p style="text-align:center"> - <a href="?step=1">I have read and understood the agreement. Proceed to installation.</a> - </p>'; - - echo Element('page.html', $page); - } elseif($step == 1) { - $page['title'] = 'Pre-installation test'; + function row($item, $result) { + global $page, $config, $__is_error; + if(!$result) + $__is_error = true; + $page['body'] .= '<tr><th>' . $item . '</th><td><img style="width:16px;height:16px" src="' . $config['dir']['static'] . ($result ? 'ok.png' : 'error.png') . '" /></td></tr>'; + } + + + // Required extensions + rheader('PHP extensions'); + row('PDO', extension_loaded('pdo')); + row('GD', extension_loaded('gd')); + + // GD tests + rheader('GD tests'); + row('JPEG', function_exists('imagecreatefromjpeg')); + row('PNG', function_exists('imagecreatefrompng')); + row('GIF', function_exists('imagecreatefromgif')); + + // Database drivers + $drivers = PDO::getAvailableDrivers(); + + rheader('PDO drivers <em>(currently installed drivers)</em>'); + foreach($drivers as &$driver) { + row($driver, true); + } + + // Permissions + rheader('File permissions'); + row('<em>root directory</em> (' . getcwd() . ')', is_writable('.')); + + $page['body'] .= '</table> + <p style="text-align:center"> + <a href="?step=2"' . + (isset($__is_error) ? ' onclick="return confirm(\'Are you sure you want to continue when errors exist?\')"' : '') . + '>Continue' . (isset($__is_error) ? ' anyway' : '') . '</a> + </p>'; + + echo Element('page.html', $page); +} elseif($step == 2) { + // Basic config + $page['title'] = 'Configuration'; + + function create_salt() { + return substr(base64_encode(sha1(rand())), 0, rand(25, 31)); + } + + $page['body'] = ' +<form action="?step=3" method="post"> + <fieldset> + <legend>Database</legend> + <label for="db_type">Type:</label> + <select id="db_type" name="db[type]">'; - $page['body'] = '<table class="test">'; + $drivers = PDO::getAvailableDrivers(); - function rheader($item) { - global $page, $config; - - $page['body'] .= '<tr class="h"><th colspan="2">' . $item . '</th></tr>'; + foreach($drivers as &$driver) { + $driver_txt = $driver; + switch($driver) { + case 'cubrid': + $driver_txt = 'Cubrid'; + break; + case 'dblib': + $driver_txt = 'FreeTDS / Microsoft SQL Server / Sybase'; + break; + case 'firebird': + $driver_txt = 'Firebird/Interbase 6'; + break; + case 'ibm': + $driver_txt = 'IBM DB2'; + break; + case 'informix': + $driver_txt = 'IBM Informix Dynamic Server'; + break; + case 'mysql': + $driver_txt = 'MySQL'; + break; + case 'oci': + $driver_txt = 'OCI'; + break; + case 'odbc': + $driver_txt = 'ODBC v3 (IBM DB2, unixODBC)'; + break; + case 'pgsql': + $driver_txt = 'PostgreSQL'; + break; + case 'sqlite': + $driver_txt = 'SQLite 3'; + break; + case 'sqlite2': + $driver_txt = 'SQLite 2'; + break; + } + $page['body'] .= '<option value="' . $driver . '">' . $driver_txt . '</option>'; } - function row($item, $result) { - global $page, $config, $__is_error; - if(!$result) - $__is_error = true; - $page['body'] .= '<tr><th>' . $item . '</th><td><img style="width:16px;height:16px" src="' . $config['dir']['static'] . ($result ? 'ok.png' : 'error.png') . '" /></td></tr>'; - } + $page['body'] .= ' + </select> + <label for="db_server">Server:</label> + <input type="text" id="db_server" name="db[server]" value="localhost" /> - // Required extensions - rheader('PHP extensions'); - row('PDO', extension_loaded('pdo')); - row('GD', extension_loaded('gd')); + <label for="db_db">Database:</label> + <input type="text" id="db_db" name="db[database]" value="" /> - // GD tests - rheader('GD tests'); - row('JPEG', function_exists('imagecreatefromjpeg')); - row('PNG', function_exists('imagecreatefrompng')); - row('GIF', function_exists('imagecreatefromgif')); + <label for="db_user">Username:</label> + <input type="text" id="db_user" name="db[user]" value="" /> - // Database drivers - $drivers = PDO::getAvailableDrivers(); + <label for="db_pass">Password:</label> + <input type="password" id="db_pass" name="db[password]" value="" /> + </fieldset> + <p style="text-align:center" class="unimportant">The following is all later configurable. For more options, <a href="http://tinyboard.org/docs/?p=Config">edit your configuration files</a> after installing.</p> + <fieldset> + <legend>Cookies</legend> + <label for="cookies_mod">Moderator cookie:</label> + <input type="text" id="cookies_mod" name="cookies[mod]" value="' . $config['cookies']['mod'] . '" /> - rheader('PDO drivers <em>(currently installed drivers)</em>'); - foreach($drivers as &$driver) { - row($driver, true); - } + <label for="cookies_salt">Secure salt:</label> + <input type="text" id="cookies_salt" name="cookies[salt]" value="' . create_salt() . '" size="40" /> + </fieldset> + + <fieldset> + <legend>Flood control</legend> + <label for="flood_time">Seconds before each post:</label> + <input type="text" id="flood_time" name="flood_time" value="' . $config['flood_time'] . '" /> - // Permissions - rheader('File permissions'); - row('<em>root directory</em> (' . getcwd() . ')', is_writable('.')); + <label for="flood_time_ip">Seconds before you can repost something (post the exact same text):</label> + <input type="text" id="flood_time_ip" name="flood_time_ip" value="' . $config['flood_time_ip'] . '" /> - $page['body'] .= '</table> - <p style="text-align:center"> - <a href="?step=2"' . - (isset($__is_error) ? ' onclick="return confirm(\'Are you sure you want to continue when errors exist?\')"' : '') . - '>Continue' . (isset($__is_error) ? ' anyway' : '') . '</a> - </p>'; + <label for="flood_time_same">Same as above, but with a different IP address:</label> + <input type="text" id="flood_time_same" name="flood_time_same" value="' . $config['flood_time_same'] . '" /> - echo Element('page.html', $page); - } elseif($step == 2) { - // Basic config - $page['title'] = 'Configuration'; + <label for="max_body">Maximum post body length:</label> + <input type="text" id="max_body" name="max_body" value="' . $config['max_body'] . '" /> - function create_salt() { - return substr(base64_encode(sha1(rand())), 0, rand(25, 31)); - } + <label for="reply_limit">Replies in a thread before it can no longer be bumped:</label> + <input type="text" id="reply_limit" name="reply_limit" value="' . $config['reply_limit'] . '" /> - $page['body'] = ' - <form action="?step=3" method="post"> - <fieldset> - <legend>Database</legend> - <label for="db_type">Type:</label> - <select id="db_type" name="db[type]">'; - - $drivers = PDO::getAvailableDrivers(); - - foreach($drivers as &$driver) { - $driver_txt = $driver; - switch($driver) { - case 'cubrid': - $driver_txt = 'Cubrid'; - break; - case 'dblib': - $driver_txt = 'FreeTDS / Microsoft SQL Server / Sybase'; - break; - case 'firebird': - $driver_txt = 'Firebird/Interbase 6'; - break; - case 'ibm': - $driver_txt = 'IBM DB2'; - break; - case 'informix': - $driver_txt = 'IBM Informix Dynamic Server'; - break; - case 'mysql': - $driver_txt = 'MySQL'; - break; - case 'oci': - $driver_txt = 'OCI'; - break; - case 'odbc': - $driver_txt = 'ODBC v3 (IBM DB2, unixODBC)'; - break; - case 'pgsql': - $driver_txt = 'PostgreSQL'; - break; - case 'sqlite': - $driver_txt = 'SQLite 3'; - break; - case 'sqlite2': - $driver_txt = 'SQLite 2'; - break; - } - $page['body'] .= '<option value="' . $driver . '">' . $driver_txt . '</option>'; - } - - $page['body'] .= ' - </select> - - <label for="db_server">Server:</label> - <input type="text" id="db_server" name="db[server]" value="localhost" /> - - <label for="db_db">Database:</label> - <input type="text" id="db_db" name="db[database]" value="" /> - - <label for="db_user">Username:</label> - <input type="text" id="db_user" name="db[user]" value="" /> - - <label for="db_pass">Password:</label> - <input type="password" id="db_pass" name="db[password]" value="" /> - </fieldset> - <p style="text-align:center" class="unimportant">The following is all later configurable. For more options, <a href="http://tinyboard.org/docs/?p=Config">edit your configuration files</a> after installing.</p> - <fieldset> - <legend>Cookies</legend> - <label for="cookies_mod">Moderator cookie:</label> - <input type="text" id="cookies_mod" name="cookies[mod]" value="' . $config['cookies']['mod'] . '" /> - - <label for="cookies_salt">Secure salt:</label> - <input type="text" id="cookies_salt" name="cookies[salt]" value="' . create_salt() . '" size="40" /> - </fieldset> + <label for="max_links">Maximum number of links in a single post:</label> + <input type="text" id="max_links" name="max_links" value="' . $config['max_links'] . '" /> + </fieldset> + + <fieldset> + <legend>Images</legend> + <label for="max_filesize">Maximum image filesize:</label> + <input type="text" id="max_filesize" name="max_filesize" value="' . $config['max_filesize'] . '" /> - <fieldset> - <legend>Flood control</legend> - <label for="flood_time">Seconds before each post:</label> - <input type="text" id="flood_time" name="flood_time" value="' . $config['flood_time'] . '" /> - - <label for="flood_time_ip">Seconds before you can repost something (post the exact same text):</label> - <input type="text" id="flood_time_ip" name="flood_time_ip" value="' . $config['flood_time_ip'] . '" /> - - <label for="flood_time_same">Same as above, but with a different IP address:</label> - <input type="text" id="flood_time_same" name="flood_time_same" value="' . $config['flood_time_same'] . '" /> - - <label for="max_body">Maximum post body length:</label> - <input type="text" id="max_body" name="max_body" value="' . $config['max_body'] . '" /> - - <label for="reply_limit">Replies in a thread before it can no longer be bumped:</label> - <input type="text" id="reply_limit" name="reply_limit" value="' . $config['reply_limit'] . '" /> - - <label for="max_links">Maximum number of links in a single post:</label> - <input type="text" id="max_links" name="max_links" value="' . $config['max_links'] . '" /> - </fieldset> + <label for="thumb_width">Thumbnail width:</label> + <input type="text" id="thumb_width" name="thumb_width" value="' . $config['thumb_width'] . '" /> - <fieldset> - <legend>Images</legend> - <label for="max_filesize">Maximum image filesize:</label> - <input type="text" id="max_filesize" name="max_filesize" value="' . $config['max_filesize'] . '" /> - - <label for="thumb_width">Thumbnail width:</label> - <input type="text" id="thumb_width" name="thumb_width" value="' . $config['thumb_width'] . '" /> - - <label for="thumb_height">Thumbnail height:</label> - <input type="text" id="thumb_height" name="thumb_height" value="' . $config['thumb_height'] . '" /> - - <label for="max_width">Maximum image width:</label> - <input type="text" id="max_width" name="max_width" value="' . $config['max_width'] . '" /> - - <label for="max_height">Maximum image height:</label> - <input type="text" id="max_height" name="max_height" value="' . $config['max_height'] . '" /> - </fieldset> + <label for="thumb_height">Thumbnail height:</label> + <input type="text" id="thumb_height" name="thumb_height" value="' . $config['thumb_height'] . '" /> - <fieldset> - <legend>Display</legend> - <label for="threads_per_page">Threads per page:</label> - <input type="text" id="threads_per_page" name="threads_per_page" value="' . $config['threads_per_page'] . '" /> - - <label for="max_pages">Page limit:</label> - <input type="text" id="max_pages" name="max_pages" value="' . $config['max_pages'] . '" /> - - <label for="threads_preview">Number of replies to show per thread on the index page:</label> - <input type="text" id="threads_preview" name="threads_preview" value="' . $config['threads_preview'] . '" /> - </fieldset> + <label for="max_width">Maximum image width:</label> + <input type="text" id="max_width" name="max_width" value="' . $config['max_width'] . '" /> - <fieldset> - <legend>Directories</legend> - <label for="root">Root URI (include trailing slash):</label> - <input type="text" id="root" name="root" value="' . $config['root'] . '" /> - - <label for="dir_img">Image directory:</label> - <input type="text" id="dir_img" name="dir[img]" value="' . $config['dir']['img'] . '" /> - - <label for="dir_thumb">Thumbnail directory:</label> - <input type="text" id="dir_thumb" name="dir[thumb]" value="' . $config['dir']['thumb'] . '" /> - - <label for="dir_res">Thread directory:</label> - <input type="text" id="dir_res" name="dir[res]" value="' . $config['dir']['res'] . '" /> - </fieldset> + <label for="max_height">Maximum image height:</label> + <input type="text" id="max_height" name="max_height" value="' . $config['max_height'] . '" /> + </fieldset> + + <fieldset> + <legend>Display</legend> + <label for="threads_per_page">Threads per page:</label> + <input type="text" id="threads_per_page" name="threads_per_page" value="' . $config['threads_per_page'] . '" /> - <fieldset> - <legend>Miscellaneous</legend> - <label for="secure_trip_salt">Secure trip (##) salt:</label> - <input type="text" id="secure_trip_salt" name="secure_trip_salt" value="' . create_salt() . '" size="40" /> - </fieldset> + <label for="max_pages">Page limit:</label> + <input type="text" id="max_pages" name="max_pages" value="' . $config['max_pages'] . '" /> - <p style="text-align:center"> - <input type="submit" value="Complete installation" /> - </p> - </form> - '; + <label for="threads_preview">Number of replies to show per thread on the index page:</label> + <input type="text" id="threads_preview" name="threads_preview" value="' . $config['threads_preview'] . '" /> + </fieldset> + + <fieldset> + <legend>Directories</legend> + <label for="root">Root URI (include trailing slash):</label> + <input type="text" id="root" name="root" value="' . $config['root'] . '" /> + <label for="dir_img">Image directory:</label> + <input type="text" id="dir_img" name="dir[img]" value="' . $config['dir']['img'] . '" /> - echo Element('page.html', $page); - } elseif($step == 3) { - $instance_config = + <label for="dir_thumb">Thumbnail directory:</label> + <input type="text" id="dir_thumb" name="dir[thumb]" value="' . $config['dir']['thumb'] . '" /> + + <label for="dir_res">Thread directory:</label> + <input type="text" id="dir_res" name="dir[res]" value="' . $config['dir']['res'] . '" /> + </fieldset> + + <fieldset> + <legend>Miscellaneous</legend> + <label for="secure_trip_salt">Secure trip (##) salt:</label> + <input type="text" id="secure_trip_salt" name="secure_trip_salt" value="' . create_salt() . '" size="40" /> + </fieldset> + + <p style="text-align:center"> + <input type="submit" value="Complete installation" /> + </p> +</form> + '; + + + echo Element('page.html', $page); +} elseif($step == 3) { + $instance_config = '<?php /* - * Instance Configuration - * ---------------------- - * Edit this file and not config.php for imageboard configuration. - * - * You can copy values from config.php (defaults) and paste them here. - */ +* Instance Configuration +* ---------------------- +* Edit this file and not config.php for imageboard configuration. +* +* You can copy values from config.php (defaults) and paste them here. +*/ '; - - function create_config_from_array(&$instance_config, &$array, $prefix = '') { - foreach($array as $name => $value) { - if(is_array($value)) { - $instance_config .= "\n"; - create_config_from_array($instance_config, $value, $prefix . '[\'' . addslashes($name) . '\']'); - $instance_config .= "\n"; - } else { - $instance_config .= ' $config' . $prefix . '[\'' . addslashes($name) . '\'] = '; + + function create_config_from_array(&$instance_config, &$array, $prefix = '') { + foreach($array as $name => $value) { + if(is_array($value)) { + $instance_config .= "\n"; + create_config_from_array($instance_config, $value, $prefix . '[\'' . addslashes($name) . '\']'); + $instance_config .= "\n"; + } else { + $instance_config .= ' $config' . $prefix . '[\'' . addslashes($name) . '\'] = '; + + if(is_numeric($value)) + $instance_config .= $value; + else + $instance_config .= "'" . addslashes($value) . "'"; - if(is_numeric($value)) - $instance_config .= $value; - else - $instance_config .= "'" . addslashes($value) . "'"; - - $instance_config .= ";\n"; - } + $instance_config .= ";\n"; } } - - create_config_from_array($instance_config, $_POST); - - $instance_config .= "\n"; - - if(@file_put_contents('inc/instance-config.php', $instance_config)) { - header('Location: ?step=4', true, $config['redirect_http']); - } else { - $page['title'] = 'Manual installation required'; - $page['body'] = ' - <p>I couldn\'t write to <strong>inc/instance-config.php</strong> with the new configuration, probably due to a permissions error.</p> - <p>Please complete the installation manually by copying and pasting the following code into the contents of <strong>inc/instance-config.php</strong>:</p> - <textarea style="width:700px;height:370px;margin:auto;display:block;background:white;color:black">' . htmlentities($instance_config) . '</textarea> - <p style="text-align:center"> - <a href="?step=4">Once complete, click here to complete installation.</a> - </p> - '; - echo Element('page.html', $page); - } - } elseif($step == 4) { - // SQL installation - - buildJavascript(); - - $sql = @file_get_contents('install.sql') or error("Couldn't load install.sql."); - - // This code is probably horrible, but what I'm trying - // to do is find all of the SQL queires and put them - // in an array. - preg_match_all("/(^|\n)((SET|CREATE|INSERT).+)\n\n/msU", $sql, $queries); - $queries = $queries[2]; - - $queries[] = Element('posts.sql', Array('board' => 'b')); - - $sql_errors = ''; - foreach($queries as &$query) { - if(!query($query)) - $sql_errors .= '<li>' . db_error() . '</li>'; - } - - $boards = listBoards(); - foreach($boards as &$_board) { - setupBoard($_board); - buildIndex(); - } - - $page['title'] = 'Installation complete'; - $page['body'] = '<p style="text-align:center">Thank you for using Tinyboard. Please remember to report any bugs you discover. <a href="http://tinyboard.org/docs/?p=Config">How do I edit the config files?</a></p>'; - - if(!empty($sql_errors)) { - $page['body'] .= '<div class="ban"><h2>SQL errors</h2><p>SQL errors were encountered when trying to install the database. This may be the result of using a database which is already occupied with a Tinyboard installation; if so, you can probably ignore this.</p><p>The errors encountered were:</p><ul>' . $sql_errors . '</ul><p><a href="?step=5">Ignore errors and complete installation.</a></p></div>'; - } else { - file_write($config['has_installed'], VERSION); - if(!file_unlink(__FILE__)) { - $page['body'] .= '<div class="ban"><h2>Delete install.php!</h2><p>I couldn\'t remove <strong>install.php</strong>. You will have to remove it manually.</p></div>'; - } - } - + } + + create_config_from_array($instance_config, $_POST); + + $instance_config .= "\n"; + + if(@file_put_contents('inc/instance-config.php', $instance_config)) { + header('Location: ?step=4', true, $config['redirect_http']); + } else { + $page['title'] = 'Manual installation required'; + $page['body'] = ' + <p>I couldn\'t write to <strong>inc/instance-config.php</strong> with the new configuration, probably due to a permissions error.</p> + <p>Please complete the installation manually by copying and pasting the following code into the contents of <strong>inc/instance-config.php</strong>:</p> + <textarea style="width:700px;height:370px;margin:auto;display:block;background:white;color:black">' . htmlentities($instance_config) . '</textarea> + <p style="text-align:center"> + <a href="?step=4">Once complete, click here to complete installation.</a> + </p> + '; echo Element('page.html', $page); - } elseif($step == 5) { - $page['title'] = 'Installation complete'; - $page['body'] = '<p style="text-align:center">Thank you for using Tinyboard. Please remember to report any bugs you discover.</p>'; - + } +} elseif($step == 4) { + // SQL installation + + buildJavascript(); + + $sql = @file_get_contents('install.sql') or error("Couldn't load install.sql."); + + // This code is probably horrible, but what I'm trying + // to do is find all of the SQL queires and put them + // in an array. + preg_match_all("/(^|\n)((SET|CREATE|INSERT).+)\n\n/msU", $sql, $queries); + $queries = $queries[2]; + + $queries[] = Element('posts.sql', Array('board' => 'b')); + + $sql_errors = ''; + foreach($queries as &$query) { + if(!query($query)) + $sql_errors .= '<li>' . db_error() . '</li>'; + } + + $boards = listBoards(); + foreach($boards as &$_board) { + setupBoard($_board); + buildIndex(); + } + + $page['title'] = 'Installation complete'; + $page['body'] = '<p style="text-align:center">Thank you for using Tinyboard. Please remember to report any bugs you discover. <a href="http://tinyboard.org/docs/?p=Config">How do I edit the config files?</a></p>'; + + if(!empty($sql_errors)) { + $page['body'] .= '<div class="ban"><h2>SQL errors</h2><p>SQL errors were encountered when trying to install the database. This may be the result of using a database which is already occupied with a Tinyboard installation; if so, you can probably ignore this.</p><p>The errors encountered were:</p><ul>' . $sql_errors . '</ul><p><a href="?step=5">Ignore errors and complete installation.</a></p></div>'; + } else { file_write($config['has_installed'], VERSION); if(!file_unlink(__FILE__)) { $page['body'] .= '<div class="ban"><h2>Delete install.php!</h2><p>I couldn\'t remove <strong>install.php</strong>. You will have to remove it manually.</p></div>'; } - - echo Element('page.html', $page); } -?> + + echo Element('page.html', $page); +} elseif($step == 5) { + $page['title'] = 'Installation complete'; + $page['body'] = '<p style="text-align:center">Thank you for using Tinyboard. Please remember to report any bugs you discover.</p>'; + + file_write($config['has_installed'], VERSION); + if(!file_unlink(__FILE__)) { + $page['body'] .= '<div class="ban"><h2>Delete install.php!</h2><p>I couldn\'t remove <strong>install.php</strong>. You will have to remove it manually.</p></div>'; + } + + echo Element('page.html', $page); +} + |
