forked from science-ation/science-ation
163 lines
5.5 KiB
PHP
163 lines
5.5 KiB
PHP
<?
|
|
if(!function_exists("system")) {
|
|
echo "DB Update requires php's system() function to be available\n";
|
|
exit;
|
|
}
|
|
|
|
//include the config.inc.php
|
|
//so we have the db connection info
|
|
require_once('../data/config.inc.php');
|
|
echo "<pre>\n";
|
|
if(file_exists("db.code.version.txt")) {
|
|
$dbcodeversion_file=file("db.code.version.txt");
|
|
$dbcodeversion=trim($dbcodeversion_file[0]);
|
|
}
|
|
else {
|
|
echo "Couldnt load current db.code.version.txt\n";
|
|
exit;
|
|
}
|
|
|
|
$skip_dbversion_update = array_key_exists('skip_dbversion_update', $_GET);
|
|
|
|
mysql_connect($DBHOST,$DBUSER,$DBPASS);
|
|
mysql_select_db($DBNAME);
|
|
@mysql_query("SET NAMES utf8");
|
|
$q=mysql_query("SELECT val FROM config WHERE var='DBVERSION' AND year='0'");
|
|
$r=mysql_fetch_object($q);
|
|
$dbdbversion=$r->val;
|
|
if(!$dbdbversion) {
|
|
echo "Couldnt get current db version. Is SFIAB properly installed?\n";
|
|
exit;
|
|
}
|
|
|
|
if($dbdbversion>=190) {
|
|
//we can only load in the 'system', because when running from here we have no clue what
|
|
//conference the script is interested in
|
|
//also, FAIRYEAR doesnt exist anymore
|
|
|
|
/* Load config just in case there's a PHP script that wants it */
|
|
$q=mysql_query("SELECT * FROM config WHERE section='system' AND conferences_id=0");
|
|
while($r=mysql_fetch_object($q)) $config[$r->var]=$r->val;
|
|
}
|
|
else {
|
|
/* Get the fair year */
|
|
$q=mysql_query("SELECT val FROM config WHERE var='FAIRYEAR' AND year='0'");
|
|
$r=mysql_fetch_object($q);
|
|
$config = array('FAIRYEAR' => $r->val);
|
|
|
|
/* Load config just in case there's a PHP script that wants it */
|
|
$q=mysql_query("SELECT * FROM config WHERE year='{$config['FAIRYEAR']}'");
|
|
while($r=mysql_fetch_object($q)) $config[$r->var]=$r->val;
|
|
}
|
|
|
|
|
|
require_once("../config_editor.inc.php"); // For config_update_variables()
|
|
|
|
if($dbcodeversion && $dbdbversion) {
|
|
//lets see if they match
|
|
if($dbcodeversion == $dbdbversion) {
|
|
echo "DB and CODE are all up-to-date. Version: $dbdbversion\n";
|
|
exit;
|
|
}
|
|
else if($dbcodeversion<$dbdbversion) {
|
|
echo "ERROR: dbcodeversion<dbdbversion ($dbcodeversion<$dbdbversion). This should not happen!";
|
|
exit;
|
|
|
|
}
|
|
else if($dbcodeversion>$dbdbversion) {
|
|
echo "DB update requirements detected\n";
|
|
echo "Current DB Version: $dbdbversion\n";
|
|
echo "Current CODE Version: $dbcodeversion\n";
|
|
|
|
echo "Updating database from $dbdbversion to $dbcodeversion\n";
|
|
|
|
for($ver=$dbdbversion+1;$ver<=$dbcodeversion;$ver++) {
|
|
if(file_exists("db.update.$ver.php")) {
|
|
include("db.update.$ver.php");
|
|
}
|
|
if(is_callable("db_update_{$ver}_pre")) {
|
|
echo "db.update.$ver.php::db_update_{$ver}_pre() exists - running...\n";
|
|
call_user_func("db_update_{$ver}_pre");
|
|
echo "db.update.$ver.php::db_update_{$ver}_pre() done.\n";
|
|
}
|
|
if(file_exists("db.update.$ver.sql")) {
|
|
echo "db.update.$ver.sql detected - running...\n";
|
|
readfile("db.update.$ver.sql");
|
|
echo "\n";
|
|
// Dennis If 'system' and 'mysql' do not exist use each section of the sql files not system("sql"
|
|
// i.e. for windows ISP servers that do not provide system and sql.exe executable
|
|
exec("mysql -q --help", $outputnotused, $exec_sqlstatus);
|
|
if(function_exists("system") and $exec_sqlstatus == 0 ) {
|
|
// echo "<b><br />** db_update USING system('mysql ..) on this server!<b><br />";
|
|
system("mysql --default-character-set=utf8 -h$DBHOST -u$DBUSER -p$DBPASS $DBNAME <db.update.$ver.sql", $exit_code);
|
|
}
|
|
else{
|
|
// Dennis 'system' and 'mysql' not both available
|
|
// Use each section of the sql files instead of using system("sql" ...
|
|
$exit_code = 0; // assume no errors for now
|
|
$filename = 'db.update.'.$ver.'.sql';
|
|
// Temporary variable, used to store current query
|
|
$templine = '';
|
|
// Read in entire file
|
|
$lines = file($filename);
|
|
// Loop through each line
|
|
foreach ($lines as $line)
|
|
{
|
|
// Skip it if it's a comment
|
|
if (substr($line, 0, 2) == '--' || $line == '')
|
|
continue;
|
|
// Add this line to the current segment
|
|
$templine .= $line;
|
|
// If it has a semicolon at the end, it's the end of the query
|
|
if (substr(trim($line), -1, 1) == ';')
|
|
{
|
|
// Perform the query
|
|
if(!mysql_query($templine)){
|
|
echo('<br/>Error performing query!<br/>'.$templine.'<br/> mysqlerror: '.mysql_error().'<br /><br />');
|
|
$exit_code = -1; // do we bail out here or keep going? keep going for now, get all errors
|
|
}
|
|
// Reset temp variable to empty
|
|
$templine = '';
|
|
}
|
|
}
|
|
echo "<br />";
|
|
}
|
|
if($exit_code != 0) {
|
|
/* mysql failed!, what now? */
|
|
|
|
$error_count += 1;
|
|
echo "<br /><b>ERROR in db_update: Failed to execute query(s) without error!<br />";
|
|
echo "Update scripts bad or system('mysql' .. ) call failed!</b><br /><br />";
|
|
}
|
|
}
|
|
else {
|
|
echo "Version $ver SQL update file not found - skipping over\n";
|
|
}
|
|
if(is_callable("db_update_{$ver}_post")) {
|
|
echo "db.update.$ver.php::db_update_{$ver}_post() exists - running...\n";
|
|
call_user_func("db_update_{$ver}_post");
|
|
echo "db.update.$ver.php::db_update_{$ver}_post() done.\n";
|
|
}
|
|
}
|
|
if($db_update_skip_variables != true) {
|
|
echo "\nUpdating Configuration Variables...\n";
|
|
config_update_variables();
|
|
}
|
|
|
|
|
|
if($skip_dbversion_update) {
|
|
echo "\nAll done - skip_dbversion_update specified, NOT updating to DB version to $dbcodeversion\n";
|
|
} else {
|
|
echo "\nAll done - updating new DB version to $dbcodeversion\n";
|
|
mysql_query("UPDATE config SET val='$dbcodeversion' WHERE var='DBVERSION' AND conferences_id='0'");
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
echo "ERROR: dbcodeversion and dbdbversion are not defined\n";
|
|
}
|
|
|
|
echo "</pre>\n";
|
|
|
|
?>
|