$config, 'title' => 'Install', 'body' => '' ); 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'; switch($version) { case 'v0.9': case 'v0.9.1': // Upgrade to v0.9.2-dev $boards = listBoards(); 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 $boards = listBoards(); 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) $boards = listBoards(); 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': $boards = listBoards(); 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': $boards = listBoards(); 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' ); $boards = listBoards(); 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': $boards = listBoards(); 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 false: // Update version number file_write($config['has_installed'], VERSION); $page['title'] = 'Upgraded'; $page['body'] = '
Successfully upgraded from ' . $version . ' to ' . VERSION . '.
'; break; default: $page['title'] = 'Unknown version'; $page['body'] = 'Tinyboard was unable to determine what version is currently installed.
'; break; case VERSION: $page['title'] = 'Already installed'; $page['body'] = 'It appears that Tinyboard is already installed (' . $version . ') and there is nothing to upgrade! Delete ' . $config['has_installed'] . ' to reinstall.
'; break; } die(Element('page.html', $page)); } if($step == 0) { // Agreeement $page['body'] = 'I have read and understood the agreement. Proceed to installation.
'; echo Element('page.html', $page); } elseif($step == 1) { $page['title'] = 'Pre-installation test'; $page['body'] = '' . $item . ' | |
---|---|
' . $item . ' |
Continue' . (isset($__is_error) ? ' anyway' : '') . '.
'; 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'] = ' '; echo Element('page.html', $page); } elseif($step == 3) { $instance_config = ' $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) . "'"; $instance_config .= ";\n"; } } } create_config_from_array($instance_config, $_POST); $instance_config .= '?>'; 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'] = 'I couldn\'t write to inc/instance-config.php with the new configuration, probably due to a permissions error.
Please complete the installation manually by copying and pasting the following code into the contents of inc/instance-config.php:
Once complete, click here to complete installation.
'; 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]; $sql_errors = ''; foreach($queries as &$query) { if(!query($query)) $sql_errors .= 'Thank you for using Tinyboard. Please remember to report any bugs you discover.
'; if(!empty($sql_errors)) { $page['body'] .= '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.
The errors encountered were:
I couldn\'t remove install.php. You will have to remove it manually.
Thank you for using Tinyboard. Please remember to report any bugs you discover.
'; file_write($config['has_installed'], VERSION); if(!file_unlink(__FILE__)) { $page['body'] .= 'I couldn\'t remove install.php. You will have to remove it manually.