diff --git a/module/admin/lang/menu.php b/module/admin/lang/menu.php index 0efd9685e1..9f4197f72a 100644 --- a/module/admin/lang/menu.php +++ b/module/admin/lang/menu.php @@ -184,7 +184,7 @@ $lang->admin->menuList->dev['menuOrder']['25'] = 'entry'; //$lang->admin->menuList->platform['subMenu']['dashboard'] = array('link' => "{$lang->dashboard}|system|dashboard|"); $lang->admin->menuList->platform['subMenu']['plat'] = array('link' => "{$lang->devops->platform}|system|browsebackup|", 'subModule' => 'system'); -$lang->admin->menuList->platform['subMenu']['environment'] = array('link' => "{$lang->devops->environment}|gitlab|browse|", 'subModule' => 'gitlab,jenkins,sonarqube,gitea,gogs', 'alias' => 'create,edit,import'); +//$lang->admin->menuList->platform['subMenu']['environment'] = array('link' => "{$lang->devops->environment}|gitlab|browse|", 'subModule' => 'gitlab,jenkins,sonarqube,gitea,gogs', 'alias' => 'create,edit,import'); $lang->admin->menuList->platform['subMenu']['resource'] = array('link' => "{$lang->devops->resource}|host|browse|", 'subModule' => 'host,account,serverroom,ops,tree'); $lang->admin->menuList->platform['subMenu']['setrules'] = array('link' => "{$lang->devops->rules}|repo|setrules|"); @@ -216,7 +216,7 @@ $lang->admin->menuList->platform['tabMenu']['menuOrder']['resource']['35'] = 'os //$lang->admin->menuList->platform['menuOrder']['5'] = 'dashboard'; $lang->admin->menuList->platform['menuOrder']['10'] = 'plat'; -$lang->admin->menuList->platform['menuOrder']['15'] = 'environment'; +//$lang->admin->menuList->platform['menuOrder']['15'] = 'environment'; $lang->admin->menuList->platform['menuOrder']['20'] = 'resource'; $lang->admin->menuList->platform['menuOrder']['25'] = 'setrules'; diff --git a/module/instance/control.php b/module/instance/control.php index 11b1ebecbc..97f1a669f1 100644 --- a/module/instance/control.php +++ b/module/instance/control.php @@ -241,7 +241,7 @@ class instance extends control $clusterResource = $this->cne->cneMetrics(); $freeMemory = intval($clusterResource->metrics->memory->allocatable * 0.9); // Remain 10% memory for system. if($memoryKb * 1024 > $freeMemory) $this->send(array('result' => 'fail', 'message' => $this->lang->instance->errors->notEnoughResource)); - + /* Request CNE to adjust memory size. */ if(!$this->instance->updateMemorySize($instance, $memoryKb * 1024)) { @@ -406,7 +406,7 @@ class instance extends control { $customData = fixer::input('post') ->trim('customName')->setDefault('customName', '') - ->trim('customDomain')->setDefault('customDomain', null) + ->trim('customDomain')->setDefault('customDomain', '') ->trim('version')->setDefault('version', '') ->trim('dbType')->setDefault('dbType', 'unsharedDB') ->trim('dbService') diff --git a/module/space/control.php b/module/space/control.php index fd97edac60..26ccf1c2a0 100644 --- a/module/space/control.php +++ b/module/space/control.php @@ -87,7 +87,28 @@ class space extends control { $this->app->loadLang('sonarqube'); $this->app->loadLang('jenkins'); + $this->loadModel('cne'); + $pagedApps = $this->loadModel('store')->searchApps('', '', array(), 1, 10000); + $apps = array(); + foreach($pagedApps->apps as $app) + { + $apps[$app->id] = $app->alias; + } + + $mysqlList = $this->cne->sharedDBList('mysql'); + $pgList = $this->cne->sharedDBList('postgresql'); + + $this->view->mysqlList = $mysqlList; + $this->view->pgList = $pgList; + $this->view->apps = $apps; $this->display(); } + + public function getStoreAppInfo($appID) + { + $cloudApp = $this->loadModel('store')->getAppInfo($appID); + + return print(json_encode($cloudApp)); + } } diff --git a/module/space/js/createapplication.ui.js b/module/space/js/createapplication.ui.js index f2c54136f7..194ba1ba49 100644 --- a/module/space/js/createapplication.ui.js +++ b/module/space/js/createapplication.ui.js @@ -1,6 +1,19 @@ function onChangeType(event) { const type = $(event.target).val(); + + if(type == 'external') + { + $('.externalPanel').removeClass('hidden'); + $('.storePanel').addClass('hidden'); + $('#typeexternal').prop('checked', true); + } + else + { + $('.storePanel').removeClass('hidden'); + $('.externalPanel').addClass('hidden'); + $('#storetypestore').prop('checked', true); + } } function onChangeAppType(event) @@ -56,3 +69,70 @@ function onChangeAppType(event) break; } } + +function onChangeAppType() +{ + var storeApp = $('[name=storeAppType]').val(); + if(!storeApp) + { + for(id in apps) + { + storeApp = id; + break; + } + } + $('#createStoreAppForm').attr('action', $.createLink('instance', 'install', 'appID=' + storeApp)); + + toggleLoading('#app_version', true); + toggleLoading('#dbService', true); + $.get($.createLink('space', 'getStoreAppInfo', 'appID=' + storeApp), function(response) + { + var app = JSON.parse(response); + + $('#app_version').val(app.app_version); + $('#version').val(app.version); + $('#customName').val(app.alias); + if((app.dependencies.mysql && mysqlList) || (app.dependencies.postgresql && pgList)) + { + $('div.dbType').removeClass('hidden'); + $('[name=dbService]').prop('disabled', false); + + var dbServiceItems = []; + var dbService = (app.dependencies.mysql && mysqlList) ? mysqlList : pgList; + for(i in dbService) + { + dbServiceItems.push({'text': dbService[i].alias, 'value': dbService[i].name}); + } + $('#dbService').zui('picker').render({items: dbServiceItems}); + } + else + { + $('div.dbType').addClass('hidden'); + $('[name=dbService]').prop('disabled', true); + } + + toggleLoading('#app_version', false); + toggleLoading('#dbService', false); + }); +} + +function onChangeDbType(event) +{ + const dbType = $(event.target).val(); + if(dbType == 'sharedDB') + { + $('#dbService').removeClass('hidden'); + $('[name=dbService]').prop('disabled', false); + } + else + { + $('#dbService').addClass('hidden'); + $('[name=dbService]').prop('disabled', true); + } +} + +$(function() +{ + onChangeAppType(); + $('div.dbService .form-label').removeClass('required'); +}); diff --git a/module/space/lang/zh-cn.php b/module/space/lang/zh-cn.php index f20704de4f..3ecf410f58 100644 --- a/module/space/lang/zh-cn.php +++ b/module/space/lang/zh-cn.php @@ -10,6 +10,7 @@ $lang->space->createdBy = '创建者'; $lang->space->createdAt = '创建时间'; $lang->space->handConfig = '手工配置'; $lang->space->addType = '添加方式'; +$lang->space->instanceType = '实例类型'; $lang->space->notice = new stdclass; $lang->space->notice->toInstall = '请到应用市场安装'; diff --git a/module/space/ui/createapplication.html.php b/module/space/ui/createapplication.html.php index 0018de1176..d481188ea3 100644 --- a/module/space/ui/createapplication.html.php +++ b/module/space/ui/createapplication.html.php @@ -16,9 +16,16 @@ jsVar('sonarqubeUrlTips', $lang->sonarqube->placeholder->url); jsVar('sonarqubeAccountTips', $lang->sonarqube->placeholder->account); jsVar('jenkinsTokenTips', $lang->jenkins->tokenFirst); jsVar('jenkinsPasswordTips', $lang->jenkins->tips); +jsVar('apps', $apps); +jsVar('mysqlList', $mysqlList); +jsVar('pgList', $pgList); + +$dbTypeItems = array(); +foreach($lang->instance->dbTypes as $type => $db) $dbTypeItems[] = array('text' => $db, 'value' => $type); formPanel ( + setClass('externalPanel'), set::id('createAppForm'), set::title($lang->space->install), set::url($this->createLink('gitlab', 'create')), @@ -43,12 +50,14 @@ formPanel ), formGroup ( + set::width('1/2'), set::label($lang->gitlab->name), set::name('name'), set::required(true), ), formGroup ( + set::width('2/3'), set::label($lang->gitlab->url), set::name('url'), set::required(true), @@ -59,6 +68,7 @@ formPanel setClass('jenkins sonarqube hidden'), formGroup ( + set::width('1/2'), set::label($lang->user->account), set::name('account'), set::required(true), @@ -69,6 +79,7 @@ formPanel setClass('token'), formGroup ( + set::width('1/2'), set::label($lang->gitlab->token), set::name('token'), set::placeholder($lang->gitlab->placeholder->token), @@ -80,11 +91,108 @@ formPanel setClass('jenkins sonarqube password hidden'), formGroup ( + set::width('1/2'), set::label($lang->user->password), set::name('password'), ), ), ); +formPanel +( + setClass('hidden storePanel'), + set::id('createStoreAppForm'), + set::title($lang->space->install), + formGroup + ( + set::width('1/2'), + set::label($lang->app->common), + set::name('storeAppType'), + set::items($apps), + set::required(true), + on::change('onChangeAppType'), + ), + formGroup + ( + set::label($lang->space->addType), + set::name('storetype'), + set::value('store'), + set::control('radioListInline'), + set::items(array(array('text' => $lang->store->common, 'value' => 'store'), array('text' => $lang->space->handConfig, 'value' => 'external'))), + set::required(true), + on::change('onChangeType'), + ), + formGroup + ( + set::width('1/2'), + set::label($lang->instance->version), + set::name('app_version'), + set::readonly(true), + set::required(true), + input + ( + set::type('hidden'), + set::name('version'), + ) + ), + formRow + ( + formGroup + ( + set::width('1/2'), + set::label($lang->instance->domain), + set::required(true), + inputGroup + ( + input + ( + setClass('form-control'), + set::name('customDomain'), + ), + input + ( + set::type('hidden'), + set::name('customName'), + ), + $this->cne->sysDomain(), + ), + ), + ), + formRow + ( + setClass('dbType'), + formGroup + ( + set::label($lang->instance->dbType), + set::control('radioListInline'), + set::name('dbType'), + set::items($dbTypeItems), + set::value('sharedDB'), + set::required(true), + on::change('onChangeDbType'), + h::a + ( + setClass('leading-8 ml-4'), + set::href('https://www.qucheng.com/book/Installation-manual/app-install-33.html'), + set::target('_blank'), + $lang->instance->howToSelectDB + ) + ), + + ), + formRow + ( + setClass('dbType dbService'), + formGroup + ( + set::width('1/2'), + set::label($lang->space->instanceType), + set::name('dbService'), + set::items(array()), + set::required(true), + ), + ), +); + render(); diff --git a/module/system/control.php b/module/system/control.php index 07122cfa11..6a81b12bbc 100644 --- a/module/system/control.php +++ b/module/system/control.php @@ -600,9 +600,6 @@ class system extends control } krsort($backups); - /* Fresh latest version of QuCheng platform in session. */ - $this->session->set('platformLatestVersion', $this->loadModel('store')->platformLatestVersion()); - $this->view->title = $this->lang->backup->common; $this->view->position[] = $this->lang->backup->common; $this->view->backups = $backups; diff --git a/module/system/ui/browsebackup.html.php b/module/system/ui/browsebackup.html.php index 82279024de..ab7cf43811 100644 --- a/module/system/ui/browsebackup.html.php +++ b/module/system/ui/browsebackup.html.php @@ -17,7 +17,7 @@ foreach($backups as $backup) $backup->type = $backup->sqlSummary['backupType']; } $backups = initTableData($backups, $config->system->dtable->backup->fieldList, $this->system); -$backups = array(); + panel ( set::size('lg'),