Exemple #1
0
	/**
	* 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>";
	}
Exemple #2
0
	/**
	 * 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;
	}