From 660c82b46e494f7b1ac16bd7aa5b81430e7a4bd3 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 8 Aug 2022 14:04:30 +0800 Subject: [PATCH] * adjust for change table engine in upgrade. --- db/update17.4.sql | 4 - module/upgrade/control.php | 63 +++++++++++++ module/upgrade/lang/de.php | 42 +++++---- module/upgrade/lang/en.php | 42 +++++---- module/upgrade/lang/fr.php | 42 +++++---- module/upgrade/lang/zh-cn.php | 4 + module/upgrade/model.php | 57 ++++++----- module/upgrade/view/afterexec.html.php | 125 ++++++++++++++++++------- 8 files changed, 261 insertions(+), 118 deletions(-) diff --git a/db/update17.4.sql b/db/update17.4.sql index 1f21bfd4fa..efe9049d58 100644 --- a/db/update17.4.sql +++ b/db/update17.4.sql @@ -2,10 +2,6 @@ ALTER TABLE `zt_task` ADD `order` mediumint(8) NOT NULL DEFAULT 0 AFTER `activat ALTER TABLE `zt_task` ADD INDEX `order` (`order`); ALTER TABLE `zt_story` ADD COLUMN `linkRequirements` varchar(255) NOT NULL AFTER `linkStories`; -ALTER TABLE `zt_searchindex` ADD FULLTEXT `title_content` (`title`, `content`); -ALTER TABLE `zt_searchindex` DROP INDEX `title`; -ALTER TABLE `zt_searchindex` DROP INDEX `content`; - ALTER TABLE `zt_productplan` ADD `createdBy` varchar(30) NOT NULL AFTER `closedReason`; ALTER TABLE `zt_productplan` ADD `createdDate` datetime NOT NULL AFTER `createdBy`; diff --git a/module/upgrade/control.php b/module/upgrade/control.php index fe176ea746..a8ab58a61f 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -906,6 +906,69 @@ class upgrade extends control echo $this->dao->select('status')->from(TABLE_PROGRAM)->where('id')->eq($programID)->fetch('status'); } + /** + * Ajax change table engine. + * + * @access public + * @return void + */ + public function ajaxChangeTableEngine() + { + $response = array(); + $response['result'] = 'continue'; + $response['message'] = ''; + $response['nextMessage'] = ''; + + $stmt = $this->dao->query("SHOW TABLE STATUS WHERE `Engine` is not null AND `Engine` = 'MyISAM'"); + + $table = $stmt->fetch(); + if(empty($table)) + { + $response['result'] = 'finished'; + $response['message'] = $this->lang->upgrade->finishedChange; + return print(json_encode($response)); + } + + $nextTable = $stmt->fetch(); + if(stripos($nextTable->Name, 'searchindex') !== false) + { + $mysqlVersion = $this->loadModel('install')->getMysqlVersion(); + if($mysqlVersion < 5.6) return print(json_encode($response)); + + $nextTable = $stmt->fetch(); + } + + $tableName = $table->Name; + + $response['table'] = $tableName; + $response['next'] = $nextTable->Name; + if($response['next']) $response['nextMessage'] = sprintf($this->lang->upgrade->changingTable, $response['next']); + + if(stripos($tableName, 'searchindex') !== false) + { + $stmt = $this->dao->query("show index from `$tableName`"); + $indexes = array(); + while($index = $stmt->fetch()) + { + if($index->Index_type != 'FULLTEXT') continue; + $indexes[$index->Key_name] = $index->Key_name; + } + + if(!isset($indexes['title_content'])) $this->dao->exec( "ALTER TABLE `{$tableName}` ADD FULLTEXT `title_content` (`title`, `content`)"); + if(isset($indexes['title'])) $this->dao->exec( "ALTER TABLE `{$tableName}` DROP INDEX `title`"); + if(isset($indexes['content'])) $this->dao->exec( "ALTER TABLE `{$tableName}` DROP INDEX `content`"); + + $mysqlVersion = $this->loadModel('install')->getMysqlVersion(); + if($mysqlVersion < 5.6) return print(json_encode($response)); + } + + $sql = "ALTER TABLE `$tableName` ENGINE='InnoDB'"; + $this->dao->exec($sql); + + $response['message'] = sprintf($this->lang->upgrade->finishedTable, $tableName); + return print(json_encode($response)); + } + /** * Move Extent files. * diff --git a/module/upgrade/lang/de.php b/module/upgrade/lang/de.php index d3c660ca0a..9512aea5d9 100644 --- a/module/upgrade/lang/de.php +++ b/module/upgrade/lang/de.php @@ -41,25 +41,29 @@ $lang->upgrade->setStatusFile = '

Please complete the following actions<

I have read and done as instructed above. Continue upgrading.

'; -$lang->upgrade->selectVersion = 'Version auswählen'; -$lang->upgrade->continue = 'Weiter'; -$lang->upgrade->noteVersion = "Wählen Sie eine kompatible Version oder es droht Datenverlust."; -$lang->upgrade->fromVersion = 'Von Version'; -$lang->upgrade->toVersion = 'Upgrade nach Version'; -$lang->upgrade->confirm = 'SQL Bestätigen'; -$lang->upgrade->sureExecute = 'Ausführen'; -$lang->upgrade->upgradingTips = 'The upgrade is in progress, please be patient. Do not refresh the page, blackout, or turn off your computer!'; -$lang->upgrade->forbiddenExt = 'Die Erweiterung ist nicht kompatibel mit der Upgradeversion. Sie wurde deaktiviert:'; -$lang->upgrade->updateFile = 'Updateinformation wurden hinzugefügt.'; -$lang->upgrade->noticeSQL = 'Your database is inconsistent with the standard and it failed to fix it. Please run the following SQL and refresh.'; -$lang->upgrade->afterDeleted = 'File is not deleted. Please refresh after you delete it.'; -$lang->upgrade->mergeProgram = 'Data Merge'; -$lang->upgrade->mergeTips = 'Data Migration Tips'; -$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade'; -$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade'; -$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade'; -$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade'; -$lang->upgrade->to15Desc = <<upgrade->selectVersion = 'Version auswählen'; +$lang->upgrade->continue = 'Weiter'; +$lang->upgrade->noteVersion = "Wählen Sie eine kompatible Version oder es droht Datenverlust."; +$lang->upgrade->fromVersion = 'Von Version'; +$lang->upgrade->toVersion = 'Upgrade nach Version'; +$lang->upgrade->confirm = 'SQL Bestätigen'; +$lang->upgrade->sureExecute = 'Ausführen'; +$lang->upgrade->upgradingTips = 'The upgrade is in progress, please be patient. Do not refresh the page, blackout, or turn off your computer!'; +$lang->upgrade->forbiddenExt = 'Die Erweiterung ist nicht kompatibel mit der Upgradeversion. Sie wurde deaktiviert:'; +$lang->upgrade->updateFile = 'Updateinformation wurden hinzugefügt.'; +$lang->upgrade->changeEngine = 'The database engine needs to be modified.'; +$lang->upgrade->changingTable = 'Replacing data table %s engine...'; +$lang->upgrade->finishedTable = 'The data table %s engine has been changed to InnoDB.'; +$lang->upgrade->finishedChange = 'The replacement of the database engine is completed.'; +$lang->upgrade->noticeSQL = 'Your database is inconsistent with the standard and it failed to fix it. Please run the following SQL and refresh.'; +$lang->upgrade->afterDeleted = 'File is not deleted. Please refresh after you delete it.'; +$lang->upgrade->mergeProgram = 'Data Merge'; +$lang->upgrade->mergeTips = 'Data Migration Tips'; +$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade'; +$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade'; +$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade'; +$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade'; +$lang->upgrade->to15Desc = <<ZenTao version 15.0 has major upgrade of features, including:

1. Add the concept of Program

A program is a collection of interrelated and coordinated projects. It is at the highest level and belongs to the concept of a strategic level. It has multi-level project management, helping managers to form strategic directions and allocate resources at a macro level.

diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php index ed17339f3a..8d9c1b413b 100644 --- a/module/upgrade/lang/en.php +++ b/module/upgrade/lang/en.php @@ -41,25 +41,29 @@ $lang->upgrade->setStatusFile = '

Please complete the following actions<

I have read and done as instructed above. Continue upgrading.

'; -$lang->upgrade->selectVersion = 'Version'; -$lang->upgrade->continue = 'Continue'; -$lang->upgrade->noteVersion = "Select the compatible version, or it might cause data loss."; -$lang->upgrade->fromVersion = 'From'; -$lang->upgrade->toVersion = 'To'; -$lang->upgrade->confirm = 'Confirm SQL'; -$lang->upgrade->sureExecute = 'Execute'; -$lang->upgrade->upgradingTips = 'The upgrade is in progress, please be patient. Do not refresh the page, blackout, or turn off your computer!'; -$lang->upgrade->forbiddenExt = 'The extension is incompatible with the version. It has been deactivated:'; -$lang->upgrade->updateFile = 'File information has to be updated.'; -$lang->upgrade->noticeSQL = 'Your database is inconsistent with the standard and it failed to fix it. Please run the following SQL and refresh.'; -$lang->upgrade->afterDeleted = 'Please execute commands to delete the files. Please refresh after you delete them.'; -$lang->upgrade->mergeProgram = 'Data Merge'; -$lang->upgrade->mergeTips = 'Data Migration Tips'; -$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade'; -$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade'; -$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade'; -$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade'; -$lang->upgrade->to15Desc = <<upgrade->selectVersion = 'Version'; +$lang->upgrade->continue = 'Continue'; +$lang->upgrade->noteVersion = "Select the compatible version, or it might cause data loss."; +$lang->upgrade->fromVersion = 'From'; +$lang->upgrade->toVersion = 'To'; +$lang->upgrade->confirm = 'Confirm SQL'; +$lang->upgrade->sureExecute = 'Execute'; +$lang->upgrade->upgradingTips = 'The upgrade is in progress, please be patient. Do not refresh the page, blackout, or turn off your computer!'; +$lang->upgrade->forbiddenExt = 'The extension is incompatible with the version. It has been deactivated:'; +$lang->upgrade->updateFile = 'File information has to be updated.'; +$lang->upgrade->changeEngine = 'The database engine needs to be modified.'; +$lang->upgrade->changingTable = 'Replacing data table %s engine...'; +$lang->upgrade->finishedTable = 'The data table %s engine has been changed to InnoDB.'; +$lang->upgrade->finishedChange = 'The replacement of the database engine is completed.'; +$lang->upgrade->noticeSQL = 'Your database is inconsistent with the standard and it failed to fix it. Please run the following SQL and refresh.'; +$lang->upgrade->afterDeleted = 'Please execute commands to delete the files. Please refresh after you delete them.'; +$lang->upgrade->mergeProgram = 'Data Merge'; +$lang->upgrade->mergeTips = 'Data Migration Tips'; +$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade'; +$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade'; +$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade'; +$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade'; +$lang->upgrade->to15Desc = <<ZenTao version 15.0 has major upgrade of features, including:

1. Add the concept of Program

A program is a collection of interrelated and coordinated projects. It is at the highest level and belongs to the concept of a strategic level. It has multi-level project management, helping managers to form strategic directions and allocate resources at a macro level.

diff --git a/module/upgrade/lang/fr.php b/module/upgrade/lang/fr.php index 002f69d024..815df01348 100644 --- a/module/upgrade/lang/fr.php +++ b/module/upgrade/lang/fr.php @@ -41,25 +41,29 @@ $lang->upgrade->setStatusFile = '

Please complete the following actions<

I have read and done as instructed above. Continue upgrading.

'; -$lang->upgrade->selectVersion = 'Version'; -$lang->upgrade->continue = 'Continuer'; -$lang->upgrade->noteVersion = "Sélectionnez une version compatible où vous pourriez perdre des données."; -$lang->upgrade->fromVersion = 'De'; -$lang->upgrade->toVersion = 'à'; -$lang->upgrade->confirm = 'Confirmez SQL'; -$lang->upgrade->sureExecute = 'Executez'; -$lang->upgrade->upgradingTips = 'La mise à jour est en cours, veuillez être patient. Ne pas actualiser la page ou éteindre votre ordinateur!'; -$lang->upgrade->forbiddenExt = 'Cette extension est incompatible avec la version. Elle a été désactivée :'; -$lang->upgrade->updateFile = "Le fichier information a besoin d'une mise à jour."; -$lang->upgrade->noticeSQL = 'Votre base de donnée est inconsistente avec le standard et il y a eu un échec pour la corriger. Exécutez la commande SQL suivante et rafraichissez.'; -$lang->upgrade->afterDeleted = "Le fichier n'est pas supprimé. Recommencez après l'avoir supprimé."; -$lang->upgrade->mergeProgram = 'Data Merge'; -$lang->upgrade->mergeTips = 'Data Migration Tips'; -$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade'; -$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade'; -$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade'; -$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade'; -$lang->upgrade->to15Desc = <<upgrade->selectVersion = 'Version'; +$lang->upgrade->continue = 'Continuer'; +$lang->upgrade->noteVersion = "Sélectionnez une version compatible où vous pourriez perdre des données."; +$lang->upgrade->fromVersion = 'De'; +$lang->upgrade->toVersion = 'à'; +$lang->upgrade->confirm = 'Confirmez SQL'; +$lang->upgrade->sureExecute = 'Executez'; +$lang->upgrade->upgradingTips = 'La mise à jour est en cours, veuillez être patient. Ne pas actualiser la page ou éteindre votre ordinateur!'; +$lang->upgrade->forbiddenExt = 'Cette extension est incompatible avec la version. Elle a été désactivée :'; +$lang->upgrade->updateFile = "Le fichier information a besoin d'une mise à jour."; +$lang->upgrade->changeEngine = 'The database engine needs to be modified.'; +$lang->upgrade->changingTable = 'Replacing data table %s engine...'; +$lang->upgrade->finishedTable = 'The data table %s engine has been changed to InnoDB.'; +$lang->upgrade->finishedChange = 'The replacement of the database engine is completed.'; +$lang->upgrade->noticeSQL = 'Votre base de donnée est inconsistente avec le standard et il y a eu un échec pour la corriger. Exécutez la commande SQL suivante et rafraichissez.'; +$lang->upgrade->afterDeleted = "Le fichier n'est pas supprimé. Recommencez après l'avoir supprimé."; +$lang->upgrade->mergeProgram = 'Data Merge'; +$lang->upgrade->mergeTips = 'Data Migration Tips'; +$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade'; +$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade'; +$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade'; +$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade'; +$lang->upgrade->to15Desc = <<ZenTao version 15.0 has major upgrade of features, including:

1. Add the concept of Program

A program is a collection of interrelated and coordinated projects. It is at the highest level and belongs to the concept of a strategic level. It has multi-level project management, helping managers to form strategic directions and allocate resources at a macro level.

diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index 17d94fe009..4378626dcd 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -51,6 +51,10 @@ $lang->upgrade->sureExecute = '确认执行'; $lang->upgrade->upgradingTips = '正在升级中,请耐心等待,切勿刷新页面、断电、关机!'; $lang->upgrade->forbiddenExt = '以下插件与新版本不兼容,已经自动禁用:'; $lang->upgrade->updateFile = '需要更新附件信息。'; +$lang->upgrade->changeEngine = '需要修改数据库引擎。'; +$lang->upgrade->changingTable = '正在更换数据表%s引擎...'; +$lang->upgrade->finishedTable = '已经更换数据表%s引擎为InnoDB。'; +$lang->upgrade->finishedChange = '更换数据库引擎结束。'; $lang->upgrade->noticeSQL = '检查到你的数据库跟标准不一致,尝试修复失败。请执行以下SQL语句,再刷新页面检查。'; $lang->upgrade->afterDeleted = '请执行上面命令删除文件, 删除后刷新!'; $lang->upgrade->mergeProgram = '数据迁移'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index ce9d6384ba..af76c7f385 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -83,14 +83,13 @@ class upgradeModel extends model if(!isset($this->app->user)) $this->loadModel('user')->su(); - $editions = array('p' => 'pro', 'b' => 'biz', 'm' => 'max'); - $fromEdition = is_numeric($fromVersion[0]) ? 'open' : $editions[$fromVersion[0]]; + $fromEdition = $this->getEditionByVersion($fromVersion); /* If the 'current openVersion' is not equal the 'from openVersion', must update structure. */ $currentVersion = str_replace('.', '_', $this->config->version); /* Execute. */ - $fromOpenVersion = is_numeric($fromVersion[0]) ? $fromVersion : $this->config->upgrade->{$fromEdition . 'Version'}[$fromVersion]; + $fromOpenVersion = $this->getOpenVersion($fromVersion); $versions = $this->getVersionsToUpdate($fromOpenVersion, $fromEdition); foreach($versions as $openVersion => $chargedVersions) { @@ -532,7 +531,6 @@ class upgradeModel extends model $this->processBugLinkBug(); break; case '17_4': - $this->changeTableEngine(); $this->processCreatedInfo(); $this->processCreatedBy(); $this->updateApproval(); @@ -1207,6 +1205,32 @@ class upgradeModel extends model return $confirmContent; } + /** + * Get edition by version. + * + * @param string $version + * @access public + * @return string + */ + public function getEditionByVersion($version) + { + $editions = array('p' => 'pro', 'b' => 'biz', 'm' => 'max'); + return is_numeric($version[0]) ? 'open' : $editions[$version[0]]; + } + + /** + * Get openVersion + * + * @param int $version. + * @access public + * @return string + */ + public function getOpenVersion($version) + { + $edition = $this->getEditionByVersion($version); + return is_numeric($version[0]) ? $version : zget($this->config->upgrade{$edition . 'Version'}, $version); + } + /** * Update company field. * @@ -3186,6 +3210,10 @@ class upgradeModel extends model $needProcess['search'] = true; } } + + $openVersion = $this->getOpenVersion($fromVersion); + if(version_compare($open, '17_4', '<=')) $needProcess['changeEngine'] = true; + return $needProcess; } @@ -6748,27 +6776,6 @@ class upgradeModel extends model return !dao::isError(); } - /** - * Change search table engine. - * - * @access public - * @return void - */ - public function changeTableEngine() - { - $mysqlVersion = $this->loadModel('install')->getMysqlVersion(); - $tables = $this->dao->query("SHOW TABLE STATUS WHERE `Engine` is not null AND `Engine` = 'MyISAM'")->fetchAll(); - foreach($tables as $table) - { - $tableName = $table->Name; - $sql = "ALTER TABLE `$tableName` ENGINE='InnoDB'"; - - if(stripos($tableName, 'searchindex') !== false and $mysqlVersion < 5.6) continue; - $this->dao->exec($sql); - } - return true; - } - /** * Process created information. * diff --git a/module/upgrade/view/afterexec.html.php b/module/upgrade/view/afterexec.html.php index d1c2433b2e..48b925679f 100644 --- a/module/upgrade/view/afterexec.html.php +++ b/module/upgrade/view/afterexec.html.php @@ -23,24 +23,6 @@
upgrade->tohome, '', "class='btn btn-primary btn-wide' id='tohome'")?>
- @@ -49,15 +31,98 @@ $(function() { sessionStorage.removeItem('TID'); - $.get(''); + initHideHome(); + finishedShow(); }) - $value) echo 'var ' . $processKey . "Finish = false;\n"; -if(isset($needProcess['updateFile'])):?> +foreach($needProcess as $processKey => $value) +{ + $value = $processKey == 'search' ? 'true' : 'false'; + echo 'var ' . $processKey . "Finish = $value;\n"; +} +?> + +/** + * Init hide message. + * + * @access public + * @return void + */ +function initHideHome() +{ + var hide = false; + $value) + { + if($processKey == 'search') continue; + echo "hide = true;\n"; + break; + } + ?> + if(hide) + { + $('a#tohome').closest('.message').hide(); + $('.result-box').css('height', 'auto').css('position', 'relative').css('margin-top', '0px'); + } +} + +/** + * Finished show message. + * + * @access public + * @return void + */ +function finishedShow() +{ + var show = true; + $value) + { + echo "if({$processKey}Finish == false) show = false;\n"; + } + ?> + if(show) + { + $.get(''); + $('a#tohome').closest('.message').show(); + } +} + + +$(function() +{ + $('.col-md-6:first').append("

upgrade->changeEngine;?>

"); + changeEngine(); +}) +function changeEngine() +{ + var link = ''; + $.getJSON(link, function(response) + { + if(response == null) + { + changeEngineFinish = true; + finishedShow(); + } + else if(response.result == 'finished') + { + changeEngineFinish = true; + $('#changeEngineBox').prepend("
" + response.message + "
"); + finishedShow(); + } + else + { + if($('#changeEngineBox').find('.' + response.table).length == 0) $('#changeEngineBox').prepend("
"); + $('#changeEngineBox').find('.' + response.table).html(response.message); + if(response.next) $('#changeEngineBox').prepend("
" + response.nextMessage + "
"); + changeEngine(); + } + }); +} + + $(function() { - $('a#tohome').closest('.message').hide(); $('.col-md-6:first').append("

upgrade->updateFile;?>

"); updateFile(''); }) @@ -68,22 +133,20 @@ function updateFile(link) if(response == null) { updateFileFinish = true; - $.get(''); - $('a#tohome').closest('.message').show(); + finishedShow(); } else if(response.result == 'finished') { $('#resultBox li span.' + response.type + '-num').html(num + response.count); updateFileFinish = true; - $('#resultBox').append("
  • " + response.message + "
  • "); - $.get(''); - $('a#tohome').closest('.message').show(); + $('#resultBox').prepend("
  • " + response.message + "
  • "); + finishedShow(); } else { if($('#resultBox li span.' + response.type + '-num').size() == 0 || response.type != response.nextType) { - $('#resultBox').append("
  • " + response.message + "
  • "); + $('#resultBox').prepend("
  • " + response.message + "
  • "); } var num = parseInt($('#resultBox li span.' + response.type + '-num').html()); $('#resultBox li span.' + response.type + '-num').html(num + response.count); @@ -92,13 +155,11 @@ function updateFile(link) }); } - - +