diff --git a/include/class.config.php b/include/class.config.php index e54c0d7392d8268c9b273ed2f802a562dcaf20b3..95a5204e389b55c161cf192c1af9511793732e70 100644 --- a/include/class.config.php +++ b/include/class.config.php @@ -93,7 +93,7 @@ class Config { if($this->config['schema_signature']) return $this->config['schema_signature']; elseif($this->config['ostversion']) //old version 1.6 st. - return md5($this->config['ostversion']); + return md5(strtoupper($this->config['ostversion'])); return null; } diff --git a/setup/inc/class.migrater.php b/setup/inc/class.migrater.php index 6475ac03cf1ca6247e9e0402e447635d886f188b..de8a3d9590e97b9d78ecb905528bcbc1bc2c03a5 100644 --- a/setup/inc/class.migrater.php +++ b/setup/inc/class.migrater.php @@ -21,22 +21,31 @@ class DatabaseMigrater { - function DatabaseMigrater($sqldir) { + var $start; + var $end; + var $sqldir; + + function DatabaseMigrater($start, $end, $sqldir) { + + $this->start = $start; + $this->end = $end; $this->sqldir = $sqldir; + } - function getRollup($stops) { - $cfg->reload(); - $start = $cfg->getSchemaSignature(); + function getPatches($stop=null) { + + $start= $this->start; + $stop = $stop?$stop:$this->end; $patches = array(); while (true) { - $next = glob($this->sqldir . $substr($start,0,8) + $next = glob($this->sqldir . substr($start, 0, 8) . '-*.patch.sql'); if (count($next) == 1) { $patches[] = $next[0]; - $start = substr($next[0], 0, 8); - } elseif ($count($next) == 0) { + $start = substr(basename($next[0]), 9, 8); + } elseif (count($next) == 0) { # There are no patches leaving the current signature. We # have to assume that we've applied all the available # patches. @@ -47,9 +56,12 @@ class DatabaseMigrater { break; } - if (array_key_exists($next[0], $stops)) + # Break if we've reached our target stop. + if(!$start || !strncasecmp($start, $stop, 8)) break; } + return $patches; } } +?> diff --git a/setup/inc/class.upgrader.php b/setup/inc/class.upgrader.php index 971a542c9fa45e0e172a47e3c62bd7295e52f3ce..cd785a9d2f0b0709483a39e8ac4effaed67589ac 100644 --- a/setup/inc/class.upgrader.php +++ b/setup/inc/class.upgrader.php @@ -15,6 +15,7 @@ **********************************************************************/ require_once INC_DIR.'class.setup.php'; +require_once INC_DIR.'class.migrater.php'; class Upgrader extends SetupWizard { @@ -40,7 +41,8 @@ class Upgrader extends SetupWizard { //Tasks to perform - saved on the session. $this->tasks = &$_SESSION['ost_upgrader'][$this->getShash()]['tasks']; - $this->migrater = DatabaseMigrater($this->sqldir); + //Database migrater + $this->migrater = new DatabaseMigrater($this->signature, SCHEMA_SIGNATURE, $this->sqldir); } function getStops() { @@ -85,7 +87,7 @@ class Upgrader extends SetupWizard { } function getPatches() { - return $this->migrater->getRollup($this->getStops()); + return $this->migrater->getPatches(); } function getNextPatch() { @@ -202,59 +204,55 @@ class Upgrader extends SetupWizard { if($this->getPendingTasks() || !($patches=$this->getPatches())) return false; - foreach ($patches as $patch) + foreach ($patches as $patch) { if (!$this->load_sql_file($patch, $this->getTablePrefix())) return false; - //TODO: Log the upgrade - - //Load up post install tasks. - $shash = substr(basename($patch), 9, 8); - $phash = substr(basename($patch), 0, 17); + //TODO: Log the upgrade + + //clear previous patch info - + unset($_SESSION['ost_upgrader'][$this->getSHash()]); + + //Load up post-upgrade tasks.... if any. + $phash = substr(basename($patch), 0, 17); + if(!($tasks=$this->getTasksForPatch($phash))) + continue; + + //We have tasks to perform - set the tasks and break. + $shash = substr($phash, 9, 8); + $_SESSION['ost_upgrader'][$shash]['tasks'] = $tasks; + $_SESSION['ost_upgrader'][$shash]['state'] = 'upgrade'; + break; + } + + return true; + + } + + function getTasksForPatch($phash) { + $tasks=array(); - $tasks[] = array('func' => 'sometask', - 'desc' => 'Some Task.... blah'); switch($phash) { //Add patch specific scripted tasks. - case 'xxxx': //V1.6 ST- 1.7 * + case 'd4fe13b1-7be60a84': //V1.6 ST- 1.7 * $tasks[] = array('func' => 'migrateAttachments2DB', 'desc' => 'Migrating attachments to database, it might take a while depending on the number of files.'); break; } - - $tasks[] = array('func' => 'cleanup', - 'desc' => 'Post-upgrade cleanup!'); - - - - //Load up tasks - NOTE: writing directly to the session - back to the future majic. - $_SESSION['ost_upgrader'][$shash]['tasks'] = $tasks; - $_SESSION['ost_upgrader'][$shash]['state'] = 'upgrade'; - - //clear previous patch info - - unset($_SESSION['ost_upgrader'][$this->getSHash()]); - - return true; - } - /************* TASKS **********************/ - function sometask($tId) { - - $this->setTaskStatus($tId, 'Doing... '.time(). ' #'.$_SESSION['sometask']); + //Check if cleanup p + $file=$this->getSQLDir().$phash.'.cleanup.sql'; + if(file_exists($file)) + $tasks[] = array('func' => 'cleanup', 'desc' => 'Post-upgrade cleanup!'); - sleep(2); - $_SESSION['sometask']+=1; - if($_SESSION['sometask']<4) - return 22; - $_SESSION['sometask']=0; - - return 0; //Change to 1 for testing... + return $tasks; } + /************* TASKS **********************/ function cleanup($tId=0) { - $file=$this->getSQLDir().$this->getSchemaSignature().'-cleanup.sql'; + $file=$this->getSQLDir().$this->getSHash().'-cleanup.sql'; if(!file_exists($file)) //No cleanup script. return 0; diff --git a/setup/upgrade.php b/setup/upgrade.php index bd961286a51cf5dda8941e2caf96c578990e72dc..324c467efd72d887b7592af33f6ba201c6f26e22 100644 --- a/setup/upgrade.php +++ b/setup/upgrade.php @@ -49,7 +49,9 @@ if($_POST && $_POST['s'] && !$upgrader->isAborted()) { case 'prereq': //XXX: check if it's upgradable version?? if(!$cfg->isUpgradePending()) - $errors['err']=' Nothing to do! System already upgraded to the current version'; + $errors['err']=' Nothing to do! System already upgraded to the current version'; + elseif(!$upgrader->isUpgradable()) + $errors['err']='The upgrader does NOT support upgrading from the current vesion!'; elseif($upgrader->check_prereq()) $upgrader->setState('upgrade'); else @@ -89,6 +91,8 @@ switch(strtolower($upgrader->getState())) { $inc='upgrade-aborted.inc.php'; elseif(!$cfg->isUpgradePending()) $errors['err']='Nothing to do! System already upgraded to the latest version'; + elseif(!$upgrader->isUpgradable()) + $errors['err']='The upgrader does NOT support upgrading from the current vesion!'; } require(INC_DIR.'header.inc.php');