diff -r 9db359d6e60c -r d1a95497b68f install/upgrade.php --- a/install/upgrade.php Mon Feb 11 14:05:57 2008 -0500 +++ b/install/upgrade.php Mon Feb 11 14:33:31 2008 -0500 @@ -16,6 +16,9 @@ define('IN_ENANO', 1); +// The list of versions in THIS BRANCH, in chronological order. +$enano_versions = array('1.1.1', '1.1.2'); + // Turn on every imaginable API hack to make common load on older databases define('IN_ENANO_UPGRADE', 1); define('IN_ENANO_MIGRATION', 1); @@ -34,10 +37,10 @@ { $ui->__construct('Enano upgrader', false); } -$ui->add_stage('Welcome', true); -$ui->add_stage('Select version', true); -$ui->add_stage('Perform upgrade', true); -$ui->add_stage('Finish', true); +$stg_welcome = $ui->add_stage('Welcome', true); +$stg_confirm = $ui->add_stage('Confirmation', true); +$stg_upgrade = $ui->add_stage('Perform upgrade', true); +$stg_finish = $ui->add_stage('Finish', true); $stg_php4 = $ui->add_stage('PHP4 compatibility notice', false); if ( version_compare(PHP_VERSION, '5.0.0', '<') || isset($_GET['debug_warn_php4']) ) @@ -136,20 +139,104 @@ exit(); } +if ( isset($_GET['stage']) && @$_GET['stage'] == 'pimpmyenano' ) +{ + $ui->set_visible_stage($stg_upgrade); +} +else +{ + $ui->set_visible_stage($stg_confirm); +} + // The real migration code $ui->show_header(); if ( isset($_GET['stage']) && @$_GET['stage'] == 'pimpmyenano' ) { - require('install/schemas/upgrade/migration/1.0-1.1.php'); - if ( MIGRATE() ) + // Do we need to run the migration first? + if ( substr(enano_version(), 0, 4) != '1.1.' ) { - echo '

Enano survived the migration. Congratulations, you\'re one of the lucky ones, check out the alpha.

'; + require(ENANO_ROOT . '/install/upgrade/migration/1.0-1.1.php'); + $result = MIGRATE(); + if ( !$result ) + { + echo 'Migration failed, there should be an error message above.'; + $ui->show_footer(); + exit; + } + } + // Main upgrade stage + + // Init vars + $version_flipped = array_flip($enano_versions); + $version_curr = enano_version(); + $version_target = installer_enano_version(); + + // Calculate which scripts to run + if ( !isset($version_flipped[$version_curr]) ) + { + echo '

ERROR: Unsupported version

'; + $ui->show_footer(); + exit; + } + if ( !isset($version_flipped[$version_target]) ) + { + echo '

ERROR: Upgrader doesn\'t support its own version

'; + $ui->show_footer(); + exit; } - else + $upg_queue = array(); + for ( $i = $version_flipped[$version_curr]; $i < $version_flipped[$version_target]; $i++ ) + { + if ( !isset($enano_versions[$i + 1]) ) + { + echo '

ERROR: Unsupported intermediate version

'; + $ui->show_footer(); + exit; + } + $ver_this = $enano_versions[$i]; + $ver_next = $enano_versions[$i + 1]; + $upg_queue[] = array($ver_this, $ver_next); + } + + // Verify that all upgrade scripts are usable + foreach ( $upg_queue as $verset ) { - echo '

Something went wrong, you should have gotten an error message.

'; + $file = ENANO_ROOT . "/install/schemas/upgrade/{$verset[0]}-{$verset[1]}-$dbdriver.sql"; + if ( !file_exists($file) ) + { + echo "

ERROR: Couldn't find required schema file: $file

"; + $ui->show_footer(); + exit; + } } + // Perform upgrade + foreach ( $upg_queue as $verset ) + { + $file = ENANO_ROOT . "/install/schemas/upgrade/{$verset[0]}-{$verset[1]}-$dbdriver.sql"; + try + { + $parser = new SQL_Parser($file); + } + catch(Exception $e) + { + die("
$e
"); + } + + $parser->assign_vars(array( + 'TABLE_PREFIX' => table_prefix + )); + + $sql_list = $parser->parse(); + + foreach ( $sql_list as $sql ) + { + if ( !$db->sql_query($sql) ) + $db->_die(); + } + setConfig('enano_version', $verset[1]); + } + echo '

All done!

'; } else {