diff --git a/install/database-validation.php b/install/database-validation.php
index cce19ef6..d90aa816 100644
--- a/install/database-validation.php
+++ b/install/database-validation.php
@@ -5,6 +5,59 @@ require(HESK_PATH . 'install/install_functions.inc.php');
require(HESK_PATH . 'hesk_settings.inc.php');
hesk_dbConnect();
+
+/*
+We have four possible validation scenarios:
+
+1. Fresh install - the user has never installed Mods for HESK before. Nothing to validate.
+2. Installed a really old version - we don't have a previous version to start from.
+3. Installed a recent version, but before migrations began - just pull the version # and use the dictionary below.
+4. Migration number present in the settings table. Take that number and run with it.
+ */
+
+$tableSql = hesk_dbQuery("SHOW TABLES LIKE '" . hesk_dbEscape($hesk_settings['db_pfix']) . "settings'");
+$startingValidationNumber = 1;
+if (hesk_dbNumRows($tableSql) > 0) {
+ // They have installed at LEAST to version 1.6.0. Just pull the version number OR migration number
+ $migrationNumberSql = hesk_dbQuery("SELECT `Value` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "settings` WHERE `Key` = 'migrationNumber'");
+ if ($migrationRow = hesk_dbFetchAssoc($migrationNumberSql)) {
+ $startingValidationNumber = intval($migrationRow['Value']);
+ } else {
+ $versionSql = hesk_dbQuery("SELECT `Value` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "settings` WHERE `Key` = 'modsForHeskVersion'");
+ $versionRow = hesk_dbFetchAssoc($versionSql);
+
+ $migration_map = array(
+ // Pre-1.4.0 to 1.5.0 did not have a settings table
+ '1.6.0' => 22, '1.6.1' => 23, '1.7.0' => 27, '2.0.0' => 37, '2.0.1' => 38, '2.1.0' => 39, '2.1.1' => 42,
+ '2.2.0' => 47, '2.2.1' => 48, '2.3.0' => 68, '2.3.1' => 69, '2.3.2' => 70, '2.4.0' => 86, '2.4.1' => 87,
+ '2.4.2' => 88, '2.5.0' => 98, '2.5.1' => 99, '2.5.2' => 100, '2.5.3' => 101, '2.5.4' => 102, '2.5.5' => 103,
+ '2.6.0' => 121, '2.6.1' => 122, '2.6.2' => 125, '2.6.3' => 126, '2.6.4' => 127, '3.0.0 beta 1' => 130,
+ '3.0.0 RC 1' => 131, '3.0.0' => 132, '3.0.1' => 133, '3.0.2' => 135, '3.0.3' => 136, '3.0.4' => 137,
+ '3.0.5' => 138, '3.0.6' => 139, '3.0.7' => 140, '3.1.0' => 153, '3.1.1' => 154
+ );
+ $startingValidationNumber = $migration_map[$versionRow['Value']];
+ }
+} else {
+ // migration # => sql for checking
+ $versionChecks = array(
+ // 1.5.0 -> users.active
+ 14 => "SHOW COLUMNS FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "users` LIKE 'active'",
+ // 1.4.1 -> denied_emails
+ 11 => "SHOW TABLES LIKE '" . hesk_dbEscape($hesk_settings['db_pfix']) . "denied_emails'",
+ // 1.4.0 -> denied ips
+ 9 => "SHOW TABLES LIKE '" . hesk_dbEscape($hesk_settings['db_pfix']) . "denied_ips'",
+ // Pre-1.4.0 but still something -> statuses
+ 7 => "SHOW TABLES LIKE '" . hesk_dbEscape($hesk_settings['db_pfix']) . "statuses'"
+ );
+
+ foreach ($versionChecks as $migrationNumber => $sql) {
+ $rs = hesk_dbQuery($sql);
+ if (hesk_dbNumRows($rs) > 0) {
+ $startingValidationNumber = $migrationNumber;
+ break;
+ }
+ }
+}
?>
@@ -26,12 +79,11 @@ hesk_dbConnect();
-
Success
+ Success
@@ -48,6 +100,14 @@ hesk_dbConnect();
PHP Junkyard Forums with this information for assistance.
+
+
+
Some Checks Skipped
+
+
+ You are not running the latest version of Mods for HESK, so some checks have been skipped.
+
+
Results
@@ -61,159 +121,192 @@ hesk_dbConnect();
$('#all-good').show()";
- } else {
+ } elseif ($failed) {
echo "";
}
+
+ if ($skipped) {
+ echo "";
+ }
?>
@@ -222,39 +315,53 @@ hesk_dbConnect();
0;
+ if ($startingValidationNumber < $minimumValidationNumber) {
+ $checks = 'SKIPPED';
+ } else {
+ $res = run_check("SELECT 1 FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "settings` WHERE `Key` = '{$setting_name}'", false);
+ $checks = hesk_dbNumRows($res) > 0 ? 'PASS' : 'FAIL';
+ }
- output_result('Setting Exists: ' . $setting_name, $all_good);
+ output_result('Setting Exists: ' . $setting_name, $checks);
- return $all_good !== false;
+ return $checks;
}
-function run_table_check($table_name) {
- return run_column_check($table_name, '1');
+function run_table_check($table_name, $minimumValidationNumber) {
+
+ return run_column_check($table_name, '1', $minimumValidationNumber);
}
-function run_column_check($table_name, $column_name) {
- global $hesk_settings;
+function run_column_check($table_name, $column_name, $minimumValidationNumber) {
+ global $hesk_settings, $startingValidationNumber;
if ($column_name == '1') {
- $all_good = run_check('SELECT ' . $column_name . ' FROM `' . $hesk_settings['db_pfix'] . $table_name . '` LIMIT 1');
+ if ($startingValidationNumber < $minimumValidationNumber) {
+ $checks = 'SKIPPED';
+ } else {
+ $checks = run_check('SELECT ' . $column_name . ' FROM `' . $hesk_settings['db_pfix'] . $table_name . '` LIMIT 1');
+ }
output_result('Table Exists: ' . $table_name,
- $all_good);
+ $checks);
} else {
- $all_good = run_check('SELECT `' . $column_name . '` FROM `' . $hesk_settings['db_pfix'] . $table_name . '` LIMIT 1');
+ if ($startingValidationNumber < $minimumValidationNumber) {
+ $checks = 'SKIPPED';
+ } else {
+ $checks = run_check('SELECT `' . $column_name . '` FROM `' . $hesk_settings['db_pfix'] . $table_name . '` LIMIT 1');
+ }
+
output_result('Column Exists: ' . $table_name . '.' . $column_name,
- $all_good);
+ $checks);
}
- return $all_good !== false;
+ return $checks;
}
-function run_check($sql) {
+function run_check($sql, $returnString = true) {
global $hesk_last_query;
global $hesk_db_link;
if (function_exists('mysqli_connect')) {
@@ -263,23 +370,43 @@ function run_check($sql) {
}
$hesk_last_query = $sql;
- return @mysqli_query($hesk_db_link, $sql);
+ if ($returnString) {
+ return @mysqli_query($hesk_db_link, $sql) ? 'PASS' : 'FAIL';
+ } else {
+ return @mysqli_query($hesk_db_link, $sql);
+ }
+
} else {
if (!$hesk_db_link && !hesk_dbConnect()) {
return false;
}
$hesk_last_query = $sql;
- return $res = @mysql_query($sql, $hesk_db_link);
+ if ($returnString) {
+ return $res = @mysql_query($sql, $hesk_db_link) ? 'PASS' : 'FAIL';
+ } else {
+ return $res = @mysql_query($sql, $hesk_db_link);
+ }
}
}
-function output_result($change_title, $success) {
- $css_color = 'success';
- $text = ' Success';
- if (!$success) {
- $css_color = 'danger';
- $text = ' Failure';
+function output_result($change_title, $status) {
+ switch ($status) {
+ case 'PASS':
+ $css_color = 'success';
+ $text = ' Success';
+ break;
+ case 'FAIL':
+ $css_color = 'danger';
+ $text = ' Failure';
+ break;
+ case 'SKIPPED':
+ $css_color = 'default';
+ $text = ' Skipped';
+ break;
+ default:
+ $css_color = 'danger';
+ $text = 'WTF?! ' . $status;
}
$formatted_text = sprintf('%s | %s |
', $change_title, $css_color, $text);
diff --git a/install/index.php b/install/index.php
index a669070e..699e5c9b 100644
--- a/install/index.php
+++ b/install/index.php
@@ -100,7 +100,7 @@ if (HESK_NEW_VERSION != $hesk_settings['hesk_version']) {
-
You need to be running HESK 2.7.3 to install Mods for HESK. You currently have HESK .
+ You need to be running HESK to install Mods for HESK. You currently have HESK .