diff --git a/config/config.php b/config/config.php index 1f3d182783..700252d255 100644 --- a/config/config.php +++ b/config/config.php @@ -187,7 +187,7 @@ $config->cloud->api->host = 'https://api.qucheng.com'; $config->cloud->api->auth = 'X-Auth-Token'; $config->cloud->api->token = getenv('CLOUD_API_TOKEN'); // Please set token in my.php. $config->cloud->api->headers = array('Content-Type: application/json'); -$config->cloud->api->channel = 'stable'; +$config->cloud->api->channel = getenv('CLOUD_DEFAULT_CHANNEL') ? getenv('CLOUD_DEFAULT_CHANNEL') : 'stable'; $config->cloud->api->switchChannel = false; /* 配置参数过滤。Filter param settings. */ diff --git a/module/install/control.php b/module/install/control.php index 26c67cf290..8274450848 100644 --- a/module/install/control.php +++ b/module/install/control.php @@ -40,6 +40,14 @@ class install extends control $this->view->title = $this->lang->install->welcome; if(!isset($this->view->versionName)) $this->view->versionName = $this->config->version; // If the versionName variable has been defined in the max version, it cannot be defined here to avoid being overwritten. + if($this->config->inQuickon) + { + $editionName = $this->config->edition === 'open' ? $this->lang->pmsName : $this->lang->{$this->config->edition . 'Name'}; + if($this->config->edition === 'max') $editionName = ''; + $this->view->versionName = $editionName . str_replace(array('max', 'biz', 'ipd'), '', $this->view->versionName); + $this->view->versionName = $this->lang->devopsPrefix . $this->view->versionName; + $this->lang->install->desc = $this->lang->install->desc . "\n" . $this->lang->install->devopsDesc; + } $this->display(); } @@ -278,9 +286,11 @@ class install extends control if($this->config->edition != 'open') $this->loadModel('upgrade')->processDataset(); - return $this->send(array('result' => 'success', 'load' => inlink('step6'))); + $link = $this->config->inQuickon ? inlink('app') : inlink('step6'); + return $this->send(array('result' => 'success', 'load' => $link)); } + if($this->config->inQuickon) $this->install->saveConfigFile(); $this->app->loadLang('upgrade'); $this->view->title = $this->lang->install->getPriv; @@ -311,6 +321,14 @@ class install extends control $upgradeFile = $this->app->getAppRoot() . 'www/upgrade.php'; $installFileDeleted = ($canDelFile and file_exists($installFile)) ? unlink($installFile) : false; + if($this->config->inQuickon) + { + $editionName = $this->config->edition === 'open' ? $this->lang->pmsName : $this->lang->{$this->config->edition . 'Name'}; + $this->lang->install->successLabel = str_replace('IPD', '', $this->lang->install->successLabel); + $this->lang->install->successNoticeLabel = str_replace('IPD', '', $this->lang->install->successNoticeLabel); + $this->config->version = $editionName . str_replace(array('max', 'biz', 'ipd'), '', $this->config->version); + } + if($canDelFile and file_exists($upgradeFile)) unlink($upgradeFile); unset($_SESSION['installing']); unset($_SESSION['myConfig']); @@ -320,4 +338,168 @@ class install extends control $this->view->title = $this->lang->install->success; $this->display(); } + + /** + * Install apps of devops. + * 安装devops相关应用。 + * + * @access public + * @return void + */ + public function app() + { + $this->loadModel('common'); + $this->loadModel('solution'); + $cloudSolution = $this->loadModel('store')->getSolution('name', 'devops'); + $components = $this->loadModel('store')->solutionConfig('name', 'devops'); + + if($_POST) + { + $solution = $this->solution->create($cloudSolution, $components); + if(dao::isError()) $this->send(array('result' => 'failure', 'message' => dao::getError())); + + $this->send(array('result' => 'success', 'message' => $this->lang->solution->notices->success, 'data' => $solution, 'locate' => $this->inLink('progress', "id={$solution->id}&install=true"))); + } + + $category = helper::arrayColumn($components->category, 'name'); + $category = array_filter($category, function($cate){return $cate !== 'pms';}); + + $this->view->title = $this->lang->solution->install; + $this->view->cloudSolution = $cloudSolution; + $this->view->components = $components; + $this->view->category = $category; + + $this->display(); + } + + /** + * Show installation progress of solution. + * 应用安装进度。 + * + * @param int $id + * @param bool $install + * @access public + * @return void + */ + public function progress($id, $install = false) + { + $solution = $this->loadModel('solution')->getByID($id); + + $this->view->title = $this->lang->solution->progress; + $this->view->install = $install; + $this->view->solution = $solution; + + $this->app->loadConfig('message'); + $this->config->message->browser->turnon = 0; + $this->display(); + } + + /** + * Get installing progress of solution by ajax. + * 获取安装进度。 + * + * @param int $id + * @access public + * @return void + */ + public function ajaxProgress($id) + { + $this->loadModel('common'); + $solution = $this->loadModel('solution')->getByID($id); + $logs = array(); + if(in_array($solution->status, array('installing', 'installed'))) + { + $result = 'success'; + $message = ''; + + if($solution->status == 'installing') + { + if((time() - strtotime($solution->updatedDate)) > 60 * 20) + { + $this->solution->saveStatus($id, 'timeout'); + $result = 'fail'; + $message = $this->lang->solution->errors->timeout; + } + + if($result == 'success') + { + $components = json_decode($solution->components); + foreach($components as $categorty => $componentApp) + { + if($componentApp->status == 'installing') + { + $instance = $this->loadModel('instance')->instanceOfSolution($solution, $componentApp->chart); + if($instance) + { + $chartLogs = $this->loadModel('cne')->getAppLogs($instance); + $logs[$componentApp->chart] = !empty($chartLogs->data) ? $chartLogs->data : array(); + } + } + } + } + } + } + else + { + $result = 'fail'; + $message = zget($this->lang->solution->installationErrors, $solution->status, $this->lang->solution->errors->hasInstallationError); + } + + $this->send(array('result' => $result, 'message' => $message, 'data' => json_decode($solution->components), 'logs' => $logs)); + } + + /** + * Start install by ajax. + * 安装应用。 + * + * @param int $solutionID + * @access public + * @return void + */ + public function ajaxInstall($solutionID) + { + $this->loadModel('solution')->install($solutionID); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + $this->send(array('result' => 'success', 'message' => '', 'locate' => $this->inLink('step6'))); + } + + /** + * Uninstall app by ajax. + * 取消安装时卸载应用。 + * + * @param int $solutionID + * @access public + * @return void + */ + public function ajaxUninstall($solutionID) + { + $this->loadModel('common'); + $this->loadModel('solution')->uninstall($solutionID); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + + $this->send(array('result' => 'success', 'message' => '', 'locate' => $this->inLink('index'))); + } + + /** + * Check memory and cpu. + * 检查内存与CPU是否满足安装所需。 + * + * @param int $solutionID + * @access public + * @return void + */ + public function ajaxCheck() + { + $this->loadModel('common'); + $data = fixer::input('post')->get(); + $appMap = $this->loadModel('store')->getAppMapByNames($data->apps); + $resources = array(); + + foreach($data->apps as $app) $resources[] = array('cpu' => $appMap->$app->cpu, 'memory' => $appMap->$app->memory); + $result = $this->loadModel('cne')->tryAllocate($resources); + + $this->send(array('result' => 'success', 'message' => '', 'code' => $result->code)); + } + } diff --git a/module/upgrade/config.php b/module/upgrade/config.php index 6af43b8386..03146c7288 100644 --- a/module/upgrade/config.php +++ b/module/upgrade/config.php @@ -643,7 +643,204 @@ $config->delete['18_4_alpha1'][] = 'module/report/view/projectdeviation.html.php $config->delete['18_4_alpha1'][] = 'module/report/view/workload.html.php'; $config->delete['18_4_alpha1'][] = 'module/report/zen.php'; -$config->upgrade->openModules = array('action', 'admin', 'api', 'automation', 'backup', 'block', 'branch', 'budget', 'bug', 'build', 'caselib', 'chart', 'ci', 'client', 'common', 'company', 'compile', 'convert', 'cron', 'custom', 'datatable', 'dataview', 'dept', 'design', 'dev', 'dimension', 'doc', 'durationestimation', 'entry', 'execution', 'extension', 'file', 'git', 'gitlab', 'group', 'holiday', 'im', 'index', 'index.html', 'install', 'issue', 'jenkins', 'job', 'kanban', 'license', 'mail', 'message', 'misc', 'mr', 'my', 'personnel', 'pipeline', 'product', 'productplan', 'productset', 'program', 'programplan', 'project', 'projectbuild', 'projectplan', 'projectrelease', 'projectstory', 'pivot', 'qa', 'release', 'repo', 'report', 'risk', 'score', 'screen', 'search', 'setting', 'sonarqube', 'sso', 'stage', 'stakeholder', 'story', 'subject', 'svn', 'task', 'testcase', 'testreport', 'testsuite', 'testtask', 'todo', 'tree', 'tutorial', 'upgrade', 'user', 'webhook', 'weekly', 'workestimation', 'gitea', 'gogs', 'transfer', 'zahost', 'zanode', 'editor', 'metric'); +$config->delete['18_6'][] = 'extension/biz/host/view/changestatus.html.php'; +$config->delete['18_6'][] = 'extension/biz/host/view/create.html.php'; +$config->delete['18_6'][] = 'extension/biz/host/view/m.browse.html.php'; +$config->delete['18_6'][] = 'extension/biz/host/view/treemap.html.php'; +$config->delete['18_6'][] = 'extension/biz/host/view/m.view.html.php'; +$config->delete['18_6'][] = 'extension/biz/host/view/view.html.php'; +$config->delete['18_6'][] = 'extension/biz/host/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/biz/host/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/biz/host/config.php'; +$config->delete['18_6'][] = 'extension/biz/host/css/enew.vi.css'; +$config->delete['18_6'][] = 'extension/biz/host/css/create.css'; +$config->delete['18_6'][] = 'extension/biz/host/css/view.zh-cn.css'; +$config->delete['18_6'][] = 'extension/biz/host/css/view.en.css'; +$config->delete['18_6'][] = 'extension/biz/host/css/view.css'; +$config->delete['18_6'][] = 'extension/biz/host/css/view.zh-tw.css'; +$config->delete['18_6'][] = 'extension/biz/host/css/edit.css'; +$config->delete['18_6'][] = 'extension/biz/host/css/treemap.css'; +$config->delete['18_6'][] = 'extension/biz/host/model.php'; +$config->delete['18_6'][] = 'extension/biz/host/lang/de.php'; +$config->delete['18_6'][] = 'extension/biz/host/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/biz/host/lang/fr.php'; +$config->delete['18_6'][] = 'extension/biz/host/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/biz/host/lang/vi.php'; +$config->delete['18_6'][] = 'extension/biz/host/lang/en.php'; +$config->delete['18_6'][] = 'extension/biz/host/control.php'; +$config->delete['18_6'][] = 'extension/biz/host/js/create.js'; +$config->delete['18_6'][] = 'extension/biz/host/js/edit.js'; +$config->delete['18_6'][] = 'extension/biz/account/view/create.html.php'; +$config->delete['18_6'][] = 'extension/biz/account/view/view.html.php'; +$config->delete['18_6'][] = 'extension/biz/account/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/biz/account/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/biz/account/config.php'; +$config->delete['18_6'][] = 'extension/biz/account/model.php'; +$config->delete['18_6'][] = 'extension/biz/account/lang/de.php'; +$config->delete['18_6'][] = 'extension/biz/account/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/biz/account/lang/fr.php'; +$config->delete['18_6'][] = 'extension/biz/account/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/biz/account/lang/en.php'; +$config->delete['18_6'][] = 'extension/biz/account/control.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/view/create.html.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/view/m.browse.html.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/view/m.view.html.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/view/view.html.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/config.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/css/browse.css'; +$config->delete['18_6'][] = 'extension/biz/serverroom/model.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/lang/de.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/lang/fr.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/lang/vi.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/lang/en.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/control.php'; +$config->delete['18_6'][] = 'extension/biz/serverroom/js/custom.js'; +$config->delete['18_6'][] = 'extension/biz/ops/view/setting.html.php'; +$config->delete['18_6'][] = 'extension/biz/ops/lang/de.php'; +$config->delete['18_6'][] = 'extension/biz/ops/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/biz/ops/lang/fr.php'; +$config->delete['18_6'][] = 'extension/biz/ops/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/biz/ops/lang/vi.php'; +$config->delete['18_6'][] = 'extension/biz/ops/lang/en.php'; +$config->delete['18_6'][] = 'extension/biz/ops/control.php'; +$config->delete['18_6'][] = 'extension/biz/ops/js/setting.js'; +$config->delete['18_6'][] = 'extension/max/host/view/changestatus.html.php'; +$config->delete['18_6'][] = 'extension/max/host/view/create.html.php'; +$config->delete['18_6'][] = 'extension/max/host/view/m.browse.html.php'; +$config->delete['18_6'][] = 'extension/max/host/view/treemap.html.php'; +$config->delete['18_6'][] = 'extension/max/host/view/m.view.html.php'; +$config->delete['18_6'][] = 'extension/max/host/view/view.html.php'; +$config->delete['18_6'][] = 'extension/max/host/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/max/host/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/max/host/config.php'; +$config->delete['18_6'][] = 'extension/max/host/css/enew.vi.css'; +$config->delete['18_6'][] = 'extension/max/host/css/create.css'; +$config->delete['18_6'][] = 'extension/max/host/css/view.zh-cn.css'; +$config->delete['18_6'][] = 'extension/max/host/css/view.en.css'; +$config->delete['18_6'][] = 'extension/max/host/css/view.css'; +$config->delete['18_6'][] = 'extension/max/host/css/view.zh-tw.css'; +$config->delete['18_6'][] = 'extension/max/host/css/edit.css'; +$config->delete['18_6'][] = 'extension/max/host/css/treemap.css'; +$config->delete['18_6'][] = 'extension/max/host/model.php'; +$config->delete['18_6'][] = 'extension/max/host/lang/de.php'; +$config->delete['18_6'][] = 'extension/max/host/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/max/host/lang/fr.php'; +$config->delete['18_6'][] = 'extension/max/host/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/max/host/lang/vi.php'; +$config->delete['18_6'][] = 'extension/max/host/lang/en.php'; +$config->delete['18_6'][] = 'extension/max/host/control.php'; +$config->delete['18_6'][] = 'extension/max/host/js/create.js'; +$config->delete['18_6'][] = 'extension/max/host/js/edit.js'; +$config->delete['18_6'][] = 'extension/max/account/view/create.html.php'; +$config->delete['18_6'][] = 'extension/max/account/view/view.html.php'; +$config->delete['18_6'][] = 'extension/max/account/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/max/account/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/max/account/config.php'; +$config->delete['18_6'][] = 'extension/max/account/model.php'; +$config->delete['18_6'][] = 'extension/max/account/lang/de.php'; +$config->delete['18_6'][] = 'extension/max/account/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/max/account/lang/fr.php'; +$config->delete['18_6'][] = 'extension/max/account/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/max/account/lang/en.php'; +$config->delete['18_6'][] = 'extension/max/account/control.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/view/create.html.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/view/m.browse.html.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/view/m.view.html.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/view/view.html.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/config.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/css/browse.css'; +$config->delete['18_6'][] = 'extension/max/serverroom/model.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/lang/de.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/lang/fr.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/lang/vi.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/lang/en.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/control.php'; +$config->delete['18_6'][] = 'extension/max/serverroom/js/custom.js'; +$config->delete['18_6'][] = 'extension/max/ops/view/setting.html.php'; +$config->delete['18_6'][] = 'extension/max/ops/lang/de.php'; +$config->delete['18_6'][] = 'extension/max/ops/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/max/ops/lang/fr.php'; +$config->delete['18_6'][] = 'extension/max/ops/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/max/ops/lang/vi.php'; +$config->delete['18_6'][] = 'extension/max/ops/lang/en.php'; +$config->delete['18_6'][] = 'extension/max/ops/control.php'; +$config->delete['18_6'][] = 'extension/max/ops/js/setting.js'; +$config->delete['18_6'][] = 'extension/ipd/host/view/changestatus.html.php'; +$config->delete['18_6'][] = 'extension/ipd/host/view/create.html.php'; +$config->delete['18_6'][] = 'extension/ipd/host/view/m.browse.html.php'; +$config->delete['18_6'][] = 'extension/ipd/host/view/treemap.html.php'; +$config->delete['18_6'][] = 'extension/ipd/host/view/m.view.html.php'; +$config->delete['18_6'][] = 'extension/ipd/host/view/view.html.php'; +$config->delete['18_6'][] = 'extension/ipd/host/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/ipd/host/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/ipd/host/config.php'; +$config->delete['18_6'][] = 'extension/ipd/host/css/enew.vi.css'; +$config->delete['18_6'][] = 'extension/ipd/host/css/create.css'; +$config->delete['18_6'][] = 'extension/ipd/host/css/view.zh-cn.css'; +$config->delete['18_6'][] = 'extension/ipd/host/css/view.en.css'; +$config->delete['18_6'][] = 'extension/ipd/host/css/view.css'; +$config->delete['18_6'][] = 'extension/ipd/host/css/view.zh-tw.css'; +$config->delete['18_6'][] = 'extension/ipd/host/css/edit.css'; +$config->delete['18_6'][] = 'extension/ipd/host/css/treemap.css'; +$config->delete['18_6'][] = 'extension/ipd/host/model.php'; +$config->delete['18_6'][] = 'extension/ipd/host/lang/de.php'; +$config->delete['18_6'][] = 'extension/ipd/host/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/ipd/host/lang/fr.php'; +$config->delete['18_6'][] = 'extension/ipd/host/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/ipd/host/lang/vi.php'; +$config->delete['18_6'][] = 'extension/ipd/host/lang/en.php'; +$config->delete['18_6'][] = 'extension/ipd/host/control.php'; +$config->delete['18_6'][] = 'extension/ipd/host/js/create.js'; +$config->delete['18_6'][] = 'extension/ipd/host/js/edit.js'; +$config->delete['18_6'][] = 'extension/ipd/account/view/create.html.php'; +$config->delete['18_6'][] = 'extension/ipd/account/view/view.html.php'; +$config->delete['18_6'][] = 'extension/ipd/account/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/ipd/account/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/ipd/account/config.php'; +$config->delete['18_6'][] = 'extension/ipd/account/model.php'; +$config->delete['18_6'][] = 'extension/ipd/account/lang/de.php'; +$config->delete['18_6'][] = 'extension/ipd/account/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/ipd/account/lang/fr.php'; +$config->delete['18_6'][] = 'extension/ipd/account/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/ipd/account/lang/en.php'; +$config->delete['18_6'][] = 'extension/ipd/account/control.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/view/create.html.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/view/m.browse.html.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/view/m.view.html.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/view/view.html.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/view/browse.html.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/view/edit.html.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/config.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/css/browse.css'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/model.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/lang/de.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/lang/fr.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/lang/vi.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/lang/en.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/control.php'; +$config->delete['18_6'][] = 'extension/ipd/serverroom/js/custom.js'; +$config->delete['18_6'][] = 'extension/ipd/ops/view/setting.html.php'; +$config->delete['18_6'][] = 'extension/ipd/ops/lang/de.php'; +$config->delete['18_6'][] = 'extension/ipd/ops/lang/zh-cn.php'; +$config->delete['18_6'][] = 'extension/ipd/ops/lang/fr.php'; +$config->delete['18_6'][] = 'extension/ipd/ops/lang/zh-tw.php'; +$config->delete['18_6'][] = 'extension/ipd/ops/lang/vi.php'; +$config->delete['18_6'][] = 'extension/ipd/ops/lang/en.php'; +$config->delete['18_6'][] = 'extension/ipd/ops/control.php'; +$config->delete['18_6'][] = 'extension/ipd/ops/js/setting.js'; +$config->delete['18_6'][] = 'module/gitlab/js/browseproject.js'; + +$config->upgrade->openModules = array('action', 'admin', 'api', 'automation', 'backup', 'block', 'branch', 'budget', 'bug', 'build', 'caselib', 'chart', 'ci', 'client', 'common', 'company', 'compile', 'convert', 'cron', 'custom', 'datatable', 'dataview', 'dept', 'design', 'dev', 'dimension', 'doc', 'durationestimation', 'entry', 'execution', 'extension', 'file', 'git', 'gitlab', 'group', 'holiday', 'im', 'index', 'index.html', 'install', 'issue', 'jenkins', 'job', 'kanban', 'license', 'mail', 'message', 'misc', 'mr', 'my', 'personnel', 'pipeline', 'product', 'productplan', 'productset', 'program', 'programplan', 'project', 'projectbuild', 'projectplan', 'projectrelease', 'projectstory', 'pivot', 'qa', 'release', 'repo', 'report', 'risk', 'score', 'screen', 'search', 'setting', 'sonarqube', 'sso', 'stage', 'stakeholder', 'story', 'subject', 'svn', 'task', 'testcase', 'testreport', 'testsuite', 'testtask', 'todo', 'tree', 'tutorial', 'upgrade', 'user', 'webhook', 'weekly', 'workestimation', 'gitea', 'gogs', 'transfer', 'zahost', 'zanode', 'editor', 'metric', 'charter', 'roadmap', 'account', 'artifactrepo', 'cne', 'host', 'instance', 'ops', 'serverroom', 'space', 'store', 'system', 'solution'); $config->upgrade->unsetModules = array('design', 'program', 'programplan', 'projectbuild', 'projectrelease', 'stage', 'stakeholder', 'product', 'branch', 'productplan', 'release', 'build', 'qa', 'bug', 'testcase', 'testtask', 'testreport', 'testsuite', 'caselib', 'automation', 'repo', 'ci', 'compile', 'jenkins', 'job', 'svn', 'gitlab', 'sonarqube', 'mr', 'git', 'report', 'sqlbuilder', 'feedback', 'faq', 'attend', 'holiday', 'leave', 'makeup', 'overtime', 'lieu', 'ops', 'host', 'serverroom', 'account', 'domain', 'service', 'deploy', 'conference', 'traincourse', 'pssp', 'baseline', 'classify', 'cm', 'cmcl', 'auditcl', 'reviewcl', 'process', 'activity', 'zoutput', 'auditplan', 'nc', 'subject', 'weekly', 'workestimation', 'issue', 'durationestimation', 'risk', 'opportunity', 'trainplan', 'gapanalysis', 'researchplan', 'researchreport', 'meeting', 'meetingroom', 'budget', 'reviewissue', 'reviewsetting', 'review', 'milestone', 'measurement', 'measrecord', 'assetlib', 'setting', 'im', 'client', 'ldap', 'dev', 'api', 'gitea', 'gogs', 'zanode', 'zahost');