/** * ShowStep_2 * This actually runs an upgrade step and updates the status report (from step1) using javascript. * If a process fails, then this step immediately takes you to step 4 which prints out the error reports. * * @return Void Prints the page out, doesn't return it. */ function ShowStep_2() { $upgrades_failed = IEM::sessionGet('DatabaseUpgradesFailed'); require_once(SENDSTUDIO_API_DIRECTORY . '/upgrade.php'); $upgrade_api = new Upgrade_API(); $running_upgrade = $upgrade_api->GetNextUpgrade(); $total_steps = IEM::sessionGet('TotalSteps'); $step_number = IEM::sessionGet('StepNumber'); if (!is_null($running_upgrade) && !empty($running_upgrade)) { $msg = sprintf(GetLang('Upgrade_Running_StepXofY'), $this->FormatNumber($step_number), $this->FormatNumber($total_steps))." ({$running_upgrade}) "; $percent = ceil(($step_number / $total_steps) * 100); echo "<script>"; echo "self.parent.UpdateStatus('".$msg."', '".$percent."');\n"; echo "</script>"; flush(); $upgrade_result = $upgrade_api->RunUpgrade($running_upgrade); $upgrades_done[] = $running_upgrade; IEM::sessionSet('DatabaseUpgradesCompleted', $upgrades_done); if ($upgrade_result === true || $upgrade_result === false) { $upgrades_todo = IEM::sessionGet('UpgradesToRun', array()); $version = array_keys($upgrades_todo); do { if (empty($version)) { $upgrades_todo = array(); break; } if (empty($upgrades_todo[$version[0]])) { unset($upgrades_todo[$version[0]]); array_shift($version); continue; } array_shift($upgrades_todo[$version[0]]); break; } while(true); IEM::sessionSet('UpgradesToRun', $upgrades_todo); } if (!$upgrade_result) { $upgrades_failed[] = $upgrade_api->Get('error'); IEM::sessionSet('DatabaseUpgradesFailed', $upgrades_failed); echo "<script>\n"; echo "self.parent.ProcessFailed();"; echo "</script>"; exit; } IEM::sessionSet('StepNumber', ($step_number + 1)); // Throw back to this same page to continue the upgrade process echo "<script>\n"; echo "setTimeout(function() { window.location = 'index.php?Page=UpgradeNX&Step=2&random=" . uniqid('ss') . "'; }, 10);\n"; echo "</script>"; exit; } else { $upgrades_failed[] = $upgrade_api->Get('error'); IEM::sessionSet('DatabaseUpgradesFailed', $upgrades_failed); echo "<script>\n"; echo "self.parent.ProcessFailed();"; echo "</script>"; exit; } echo "<script>\n"; echo "self.parent.ProcessFinished();"; echo "</script>"; }
/** * UpgradeDatabase * @return Void Returns nothing */ function UpgradeDatabase() { $disabled_functions = explode(',', str_replace(' ', '', SENDSTUDIO_DISABLED_FUNCTIONS)); if (!SENDSTUDIO_SAFE_MODE && !in_array('set_time_limit', $disabled_functions)) { set_time_limit(0); } define('SENDSTUDIO_DATABASE_TYPE', 'mysql'); define('SENDSTUDIO_DATABASE_HOST', $GLOBALS['DBHOST']); define('SENDSTUDIO_DATABASE_USER', $GLOBALS['DBUSER']); define('SENDSTUDIO_DATABASE_PASS', $GLOBALS['DBPASS']); define('SENDSTUDIO_DATABASE_NAME', $GLOBALS['DBNAME']); define('SENDSTUDIO_TABLEPREFIX', $GLOBALS['TABLEPREFIX']); if (!defined('SENDSTUDIO_DEFAULTCHARSET')) { define('SENDSTUDIO_DEFAULTCHARSET', $this->default_charset); } if (!class_exists(SENDSTUDIO_DATABASE_TYPE . 'Db', false)) { require_once(IEM_PATH . '/ext/database/' . SENDSTUDIO_DATABASE_TYPE . '.php'); } $db = new MySQLDb(); $connection = $db->Connect(SENDSTUDIO_DATABASE_HOST, SENDSTUDIO_DATABASE_USER, SENDSTUDIO_DATABASE_PASS, SENDSTUDIO_DATABASE_NAME); $GLOBALS['SendStudio']['Database'] = &$db; require_once(SENDSTUDIO_API_DIRECTORY . '/upgrade.php'); $upgrade_api = new Upgrade_API(); $upgrades_done = IEM::sessionGet('DatabaseUpgradesCompleted'); if (!$upgrades_done) { $upgrades_done = array(); IEM::sessionSet('DatabaseUpgradesCompleted', $upgrades_done); $upgrades_failed = array(); IEM::sessionSet('DatabaseUpgradesFailed', $upgrades_failed); $upgrades_to_run = $upgrade_api->GetUpgradesToRun('2004', SENDSTUDIO_DATABASE_VERSION); IEM::sessionSet('UpgradesToRun', $upgrades_to_run['upgrades']); IEM::sessionSet('UpgradeCount', $upgrades_to_run['number_to_run']); } $upgrades_failed = IEM::sessionGet('DatabaseUpgradesFailed'); $server_timeoffset = date('O'); $offset_direction = $server_timeoffset{0}; $offset_hours = $server_timeoffset{1} . $server_timeoffset{2}; $offset_minutes = $server_timeoffset{3} . $server_timeoffset{4}; $offset_query = "-(" . $offset_direction . (60 * 60) * (($offset_hours . $offset_minutes) / 100) . ")"; $upgrade_api->Set('offset_query', $offset_query); $running_upgrade = $upgrade_api->GetNextUpgrade(); if (!is_null($running_upgrade)) { // ----- Upgrade message $upgradeMessage = ''; $statusList = IEM::sessionGet('DatabaseUpgradeStatusList'); if (isset($statusList[$running_upgrade])) { $statusQuery = $statusList[$running_upgrade]; $upgradeMessage = " ({$statusQuery['Processed']}/{$statusQuery['Total']})"; } // ----- $totalUpgradeCount = IEM::sessionGet('UpgradeCount'); // Total queries processed $totalProcessed = count($upgrades_done); // Print message before update $percentProcessed = ceil(($totalProcessed / $totalUpgradeCount)*100); echo "<script>\n"; echo sprintf("self.parent.UpdateStatusReport('%s');", "Queries processed: {$totalProcessed}/{$totalUpgradeCount}"); echo sprintf("self.parent.UpdateStatus('%s', %d);", addcslashes("Executing query '{$running_upgrade}' {$upgradeMessage}", "'\n\r"), $percentProcessed); echo "</script>\n"; flush(); $upgrade_result = $upgrade_api->RunUpgrade($running_upgrade); $percentProcessed = ceil(($totalProcessed / $totalUpgradeCount)*100); echo "<script>\n"; echo sprintf("self.parent.UpdateStatusReport('%s');", "Queries processed: {$totalProcessed}/{$totalUpgradeCount}"); echo sprintf("self.parent.UpdateStatus('%s', %d);", addcslashes("Query '{$running_upgrade}' {$upgradeMessage} finished running", "'\n\r"), $percentProcessed); echo "</script>\n"; flush(); if ($upgrade_result === true || $upgrade_result === false) { $upgrades_done[] = $running_upgrade; IEM::sessionSet('DatabaseUpgradesCompleted', $upgrades_done); $upgrades_todo = IEM::sessionGet('UpgradesToRun', array()); $version = array_keys($upgrades_todo); do { if (empty($version)) { $upgrades_todo = array(); break; } if (empty($upgrades_todo[$version[0]])) { unset($upgrades_todo[$version[0]]); array_shift($version); continue; } array_shift($upgrades_todo[$version[0]]); break; } while(true); IEM::sessionSet('UpgradesToRun', $upgrades_todo); } if (!$upgrade_result) { $upgrades_failed[] = $upgrade_api->Get('error'); IEM::sessionSet('DatabaseUpgradesFailed', $upgrades_failed); } ?> <script> setTimeout('window.location="index.php?Page=Upgrade&Action=UpgradeDatabase"', 1); </script> <?php return; } ?> <script> self.parent.parent.location = 'index.php?Page=Upgrade&Step=4'; </script> <?php return; }