* Fix upgrade.

This commit is contained in:
zhujinyong
2022-03-07 23:00:30 +08:00
parent 282de05e8f
commit 43ef4bc43c
3 changed files with 74 additions and 67 deletions
+14
View File
@@ -714,6 +714,20 @@ class baseRouter
$this->config->vision = $vision ? $vision : $defaultVision;
}
/**
* Get installed version.
*
* @access public
* @return string
*/
public function getInstalledVersion()
{
$version = $this->dbh->query("SELECT value FROM " . TABLE_CONFIG . " WHERE owner = 'system' AND `key` = 'version' LIMIT 1")->fetch();
$version = $version ? $version->value : '0.3.beta'; // No version, set as 0.3.beta.
if($version == '3.0.stable') $version = '3.0'; // convert 3.0.stable to 3.0.
return $version;
}
/**
* 设置错误处理句柄。
* Set the error handler.
+56 -63
View File
@@ -38,82 +38,75 @@ class upgradeModel extends model
{
set_time_limit(0);
$openVersion = $fromVersion;
$proInstalled = $bizInstalled = $maxInstalled = false;
if($fromVersion[0] == 'p')
{
$openVersion = $this->config->upgrade->proVersion[$fromVersion];
$proInstalled = true;
}
elseif($fromVersion[0] == 'b')
{
$openVersion = $this->config->upgrade->bizVersion[$fromVersion];
$bizInstalled = true;
$proInstalled = true;
}
elseif($fromVersion[0] == 'm')
{
$openVersion = $this->config->upgrade->maxVersion[$fromVersion];
$maxInstalled = true;
$bizInstalled = true;
$proInstalled = true;
}
$editions = array('p' => 'proVersion', 'b' => 'bizVersion', 'm' => 'maxVersion');
$fromEdition = is_numeric($fromVersion[0]) ? 'open' : $editons[$fromVersion[0]];
$openVersion = is_numeric($fromVersion[0]) ? $fromVersion : $this->config->upgrade->{$fromEdition}[$fromVersion];
$executeXuanxuan = false;
/* Get versions to be updated. */
$versions = array();
foreach($this->lang->upgrade->fromVersions as $version => $versionName)
{
if(!is_numeric($version[0])) continue;
if(version_compare(str_replace('_', '.', $version), str_replace('_', '.', $openVersion)) < 0) continue;
$versions[$version] = array('pro' => array(), 'biz' => array(), 'max' => array());
}
foreach($this->config->upgrade->proVersion as $pro => $open)
{
if(!isset($versions[$open])) continue;
if(version_compare(str_replace('_', '.', $openVersion), '16.4', '>=') or $edition == 'pro') $versions[$open]['pro'][] = $pro;
}
foreach($this->config->upgrade->bizVersion as $biz => $open)
{
if(!isset($versions[$open])) continue;
if(version_compare(str_replace('_', '.', $openVersion), '16.4', '>=') or $edition == 'biz') $versions[$open]['biz'][] = $biz;
}
foreach($this->config->upgrade->maxVersion as $max => $open)
{
if(!isset($versions[$open])) continue;
if(version_compare(str_replace('_', '.', $openVersion), '16.4', '>=') or $edition == 'max') $versions[$open]['max'][] = $max;
}
$openVersion = $version;
if(str_replace('_', '.', $openVersion) == '10.1') $executeXuanxuan = true;
/* If the 'current openVersion' is not equal the 'from openVersion', must update structure. */
$updateStructure = $openVersion != $this->config->upgrade->{$this->config->edition . 'Version'}[$this->config->version];
$this->saveLogs("Execute $openVersion");
$this->execSQL($this->getUpgradeFile(str_replace('_', '.', $openVersion)));
$this->executeOpen($openVersion, $fromVersion, $executeXuanxuan);
if($proInstalled)
/* Execute. */
foreach($versions as $openVersion => $chargedVersions)
{
$executeXuanxuan = false;
switch($fromEdition)
{
$proVersions = array();
foreach($this->config->upgrade->proVersion as $pro => $open)
{
if($open == $openVersion) $proVersions[] = $pro;
}
case 'open':
if(str_replace('_', '.', $openVersion) == '10.1') $executeXuanxuan = true;
foreach($proVersions as $proVersion)
{
$this->saveLogs("Execute $proVersion");
$this->execSQL($this->getUpgradeFile(str_replace('_', '.', $proVersion)));
if($this->config->edition != 'open') $this->executePro($proVersion);
$this->saveLogs("Execute $openVersion");
$this->execSQL($this->getUpgradeFile(str_replace('_', '.', $openVersion)));
$this->executeOpen($openVersion, $fromVersion, $executeXuanxuan);
case 'pro':
foreach($chargedVersions['pro'] as $proVersion)
{
$this->saveLogs("Execute $proVersion");
if($updateStructure) $this->execSQL($this->getUpgradeFile(str_replace('_', '.', $proVersion)));
if($this->config->edition != 'open') $this->executePro($proVersion);
}
case 'biz':
foreach($chargedVersions['biz'] as $bizVersion)
{
$this->saveLogs("Execute $bizVersion");
if($updateStructure) $this->execSQL($this->getUpgradeFile(str_replace('_', '.', $bizVersion)));
if($this->config->edition != 'open') $this->executeBiz($bizVersion, $executeXuanxuan);
}
case 'max':
foreach($chargedVersions['max'] as $maxVersion)
{
$maxVersion = array_search($openVersion, $this->config->upgrade->maxVersion);
$this->saveLogs("Execute $maxVersion");
if($updateStructure) $this->execSQL($this->getUpgradeFile(str_replace('_', '.', $maxVersion)));
}
}
}
if(version_compare(str_replace('_', '.', $openVersion), '16.4', '>=') or $bizInstalled)
{
$bizVersions = array();
foreach($this->config->upgrade->bizVersion as $biz => $open)
{
if($open == $openVersion) $bizVersions[] = $biz;
}
foreach($bizVersions as $bizVersion)
{
$this->saveLogs("Execute $bizVersion");
$this->execSQL($this->getUpgradeFile(str_replace('_', '.', $bizVersion)));
if($this->config->edition != 'open') $this->executeBiz($bizVersion, $executeXuanxuan);
}
}
if(version_compare(str_replace('_', '.', $openVersion), '16.4', '>=') or $maxInstalled)
{
$maxVersion = array_search($openVersion, $this->config->upgrade->maxVersion);
$this->saveLogs("Execute $maxVersion");
$this->execSQL($this->getUpgradeFile(str_replace('_', '.', $maxVersion)));
}
}
/* Means open source upgrade to biz or max. */
if(is_numeric($fromVersion[0]) and $this->config->edition != 'open')
if($fromEdtion == 'open' and $this->config->edition != 'open')
{
$this->loadModel('effort')->convertEstToEffort();
$this->importBuildinModules();
+4 -4
View File
@@ -36,16 +36,16 @@ $app = router::createApp('pms', dirname(dirname(__FILE__)), 'router');
/* installed or not. */
if(!isset($config->installed) or !$config->installed) die(header('location: install.php'));
/* Check for need upgrade. */
$config->installedVersion = $app->getInstalledVersion();
if(((is_numeric($config->version[0]) and is_numeric($config->installedVersion[0])) or $config->version[0] == $config->installedVersion[0]) and version_compare($config->version, $config->installedVersion, '>')) die(header('location: upgrade.php'));
/* Run the app. */
$common = $app->loadCommon();
/* Check the request is getconfig or not. */
if(isset($_GET['mode']) and $_GET['mode'] == 'getconfig') die(helper::removeUTF8Bom($app->exportConfig()));
/* Check for need upgrade. */
$config->installedVersion = $common->loadModel('setting')->getVersion();
if(((is_numeric($config->version[0]) and is_numeric($config->installedVersion[0])) or $config->version[0] == $config->installedVersion[0]) and version_compare($config->version, $config->installedVersion, '>')) die(header('location: upgrade.php'));
/* Remove install.php and upgrade.php. */
if(file_exists('install.php') or file_exists('upgrade.php'))
{