'."\n"; flush(); // +-----------------------------------------------------------------------+ // | functions | // +-----------------------------------------------------------------------+ /** * list all tables in an array * * @return array */ function get_tables() { $tables = array(); $query = ' SHOW TABLES ;'; $result = mysql_query($query); while ($row = mysql_fetch_row($result)) { if (preg_match('/^'.PREFIX_TABLE.'/', $row[0])) { array_push($tables, $row[0]); } } return $tables; } /** * list all columns of each given table * * @return array of array */ function get_columns_of($tables) { $columns_of = array(); foreach ($tables as $table) { $query = ' DESC '.$table.' ;'; $result = mysql_query($query); $columns_of[$table] = array(); while ($row = mysql_fetch_row($result)) { array_push($columns_of[$table], $row[0]); } } return $columns_of; } /** */ function print_time($message) { global $last_time; $new_time = get_moment(); echo '
['.get_elapsed_time($last_time, $new_time).']';
  echo ' '.$message;
  echo '
'; flush(); $last_time = $new_time; } // +-----------------------------------------------------------------------+ // | playing zone | // +-----------------------------------------------------------------------+ // echo implode('
', get_tables()); // echo '
'; print_r(get_columns_of(get_tables())); echo '
'; // foreach (get_available_upgrade_ids() as $upgrade_id) // { // echo $upgrade_id, '
'; // } // +-----------------------------------------------------------------------+ // | template initialization | // +-----------------------------------------------------------------------+ $template = new Template(PHPWG_ROOT_PATH.'template/yoga'); $template->set_filenames(array('upgrade'=>'upgrade.tpl')); $template->assign('RELEASE', PHPWG_VERSION); // +-----------------------------------------------------------------------+ // | upgrade choice | // +-----------------------------------------------------------------------+ $tables = get_tables(); $columns_of = get_columns_of($tables); if (!isset($_GET['version'])) { // find the current release if (!in_array('param', $columns_of[PREFIX_TABLE.'config'])) { // we're in branch 1.3, important upgrade, isn't it? if (in_array(PREFIX_TABLE.'user_category', $tables)) { $current_release = '1.3.1'; } else { $current_release = '1.3.0'; } } else if (!in_array(PREFIX_TABLE.'user_cache', $tables)) { $current_release = '1.4.0'; } else if (!in_array(PREFIX_TABLE.'tags', $tables)) { $current_release = '1.5.0'; } else if ( !in_array(PREFIX_TABLE.'history_summary', $tables) ) { if (!in_array('auto_login_key', $columns_of[PREFIX_TABLE.'user_infos'])) { $current_release = '1.6.0'; } else { $current_release = '1.6.2'; } } else { die('No upgrade required, the database structure is up to date'); } $template->assign( 'introduction', array( 'CURRENT_RELEASE' => $current_release, 'RUN_UPGRADE_URL' => PHPWG_ROOT_PATH.'upgrade.php?version='.$current_release, ) ); } // +-----------------------------------------------------------------------+ // | upgrade launch | // +-----------------------------------------------------------------------+ else { if (in_array(PREFIX_TABLE.'history_summary', $tables)) { die('No database upgrade required, do not refresh the page'); } $upgrade_file = PHPWG_ROOT_PATH.'install/upgrade_'.$_GET['version'].'.php'; if (is_file($upgrade_file)) { $page['infos'] = array(); $page['upgrade_start'] = get_moment(); $conf['die_on_sql_error'] = false; include($upgrade_file); // Available upgrades must be ignored after a fresh installation. To // make PWG avoid upgrading, we must tell it upgrades have already been // made. list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();')); define('CURRENT_DATE', $dbnow); $datas = array(); foreach (get_available_upgrade_ids() as $upgrade_id) { array_push( $datas, array( 'id' => $upgrade_id, 'applied' => CURRENT_DATE, 'description' => 'upgrade included in migration', ) ); } mass_inserts( UPGRADE_TABLE, array_keys($datas[0]), $datas ); // Create empty local files to avoid log errors create_empty_local_files(); $page['upgrade_end'] = get_moment(); $template->assign( 'upgrade', array( 'VERSION' => $_GET['version'], 'TOTAL_TIME' => get_elapsed_time( $page['upgrade_start'], $page['upgrade_end'] ), 'SQL_TIME' => number_format( $page['queries_time'], 3, '.', ' ' ).' s', 'NB_QUERIES' => $page['count_queries'] ) ); array_push( $page['infos'], '[security] delete files "upgrade.php", "upgrade_feed.php", "install.php" and "install" directory' ); array_push( $page['infos'], 'in include/mysql.inc.php, remove
define(\'PHPWG_IN_UPGRADE\', true);
' ); array_push( $page['infos'], 'Perform a maintenance check in [Administration>General>Maintenance] if you encounter any problem.' ); $template->assign('infos', $page['infos']); $query = ' UPDATE '.USER_CACHE_TABLE.' SET need_update = \'true\' ;'; pwg_query($query); $query = ' REPLACE INTO '.PLUGINS_TABLE.' (id, state) VALUES (\'c13y_upgrade\', \'active\') ;'; pwg_query($query); } else { die('Hacking attempt'); } } // +-----------------------------------------------------------------------+ // | sending html code | // +-----------------------------------------------------------------------+ $template->pparse('upgrade'); ?>