diff --git a/api/v1/entries/user.php b/api/v1/entries/user.php index e5bf0887a8..b0a5da7061 100644 --- a/api/v1/entries/user.php +++ b/api/v1/entries/user.php @@ -375,7 +375,7 @@ class userEntry extends Entry $oldUser = $this->loadModel('user')->getByID($userID, 'id'); /* Set $_POST variables. */ - $fields = 'dept,realname,email,commiter,gender,role,mobile,phone,visions'; + $fields = 'dept,realname,email,commiter,gender,role,mobile,phone,visions,groups'; $this->batchSetPost($fields, $oldUser); $this->setPost('account', $oldUser->account); diff --git a/module/dev/config.php b/module/dev/config.php index bc190ea7f6..b4c9c4dc3c 100644 --- a/module/dev/config.php +++ b/module/dev/config.php @@ -1,124 +1,183 @@ dev->group['index'] = 'my'; -$config->dev->group['my'] = 'my'; -$config->dev->group['todo'] = 'my'; -$config->dev->group['program'] = 'program'; -$config->dev->group['product'] = 'product'; -$config->dev->group['story'] = 'product'; -$config->dev->group['storyspec'] = 'product'; -$config->dev->group['storystage'] = 'product'; -$config->dev->group['branch'] = 'product'; -$config->dev->group['productplan'] = 'product'; -$config->dev->group['release'] = 'product'; -$config->dev->group['project'] = 'project'; -$config->dev->group['projectproduct'] = 'project'; -$config->dev->group['projectstory'] = 'project'; -$config->dev->group['execution'] = 'execution'; -$config->dev->group['task'] = 'execution'; -$config->dev->group['taskestimate'] = 'execution'; -$config->dev->group['team'] = 'execution'; -$config->dev->group['build'] = 'execution'; -$config->dev->group['burn'] = 'execution'; -$config->dev->group['qa'] = 'qa'; -$config->dev->group['bug'] = 'qa'; -$config->dev->group['case'] = 'qa'; -$config->dev->group['testcase'] = 'qa'; -$config->dev->group['casestep'] = 'qa'; -$config->dev->group['testtask'] = 'qa'; -$config->dev->group['testreport'] = 'qa'; -$config->dev->group['testsuite'] = 'qa'; -$config->dev->group['caselib'] = 'qa'; -$config->dev->group['testresult'] = 'qa'; -$config->dev->group['testrun'] = 'qa'; -$config->dev->group['suitecase'] = 'qa'; -$config->dev->group['doc'] = 'doc'; -$config->dev->group['doccontent'] = 'doc'; -$config->dev->group['doclib'] = 'doc'; -$config->dev->group['report'] = 'report'; -$config->dev->group['datatable'] = 'report'; -$config->dev->group['company'] = 'company'; -$config->dev->group['dept'] = 'company'; -$config->dev->group['group'] = 'company'; -$config->dev->group['grouppriv'] = 'company'; -$config->dev->group['user'] = 'company'; -$config->dev->group['usercontact'] = 'company'; -$config->dev->group['usergroup'] = 'company'; -$config->dev->group['userquery'] = 'company'; -$config->dev->group['usertpl'] = 'company'; -$config->dev->group['userview'] = 'company'; -$config->dev->group['admin'] = 'admin'; -$config->dev->group['extension'] = 'admin'; -$config->dev->group['lang'] = 'admin'; -$config->dev->group['convert'] = 'admin'; -$config->dev->group['action'] = 'admin'; -$config->dev->group['history'] = 'admin'; -$config->dev->group['mail'] = 'admin'; -$config->dev->group['backup'] = 'admin'; -$config->dev->group['cron'] = 'admin'; -$config->dev->group['dev'] = 'admin'; -$config->dev->group['custom'] = 'admin'; -$config->dev->group['score'] = 'admin'; -$config->dev->group['config'] = 'admin'; -$config->dev->group['svn'] = 'repo'; -$config->dev->group['git'] = 'repo'; -$config->dev->group['ci'] = 'repo'; -$config->dev->group['compile'] = 'repo'; -$config->dev->group['jenkins'] = 'repo'; -$config->dev->group['job'] = 'repo'; -$config->dev->group['api'] = 'api'; -$config->dev->group['entry'] = 'api'; -$config->dev->group['log'] = 'api'; -$config->dev->group['install'] = 'system'; -$config->dev->group['upgrade'] = 'system'; -$config->dev->group['sso'] = 'system'; -$config->dev->group['search'] = 'system'; -$config->dev->group['block'] = 'system'; -$config->dev->group['file'] = 'system'; -$config->dev->group['tree'] = 'system'; -$config->dev->group['module'] = 'system'; -$config->dev->group['tutorial'] = 'system'; -$config->dev->group['message'] = 'message'; -$config->dev->group['mail'] = 'message'; -$config->dev->group['webhook'] = 'message'; -$config->dev->group['notify'] = 'message'; -$config->dev->group['repo'] = 'repo'; -$config->dev->group['repofiles'] = 'repo'; -$config->dev->group['repohistory'] = 'repo'; -$config->dev->group['repobranch'] = 'repo'; -$config->dev->group['searchindex'] = 'search'; -$config->dev->group['searchdict'] = 'search'; +$config->dev->group['index'] = 'my'; +$config->dev->group['my'] = 'my'; +$config->dev->group['todo'] = 'my'; +$config->dev->group['program'] = 'program'; +$config->dev->group['personnel'] = 'program'; +$config->dev->group['stakeholder'] = 'program'; +$config->dev->group['expect'] = 'program'; +$config->dev->group['product'] = 'product'; +$config->dev->group['story'] = 'product'; +$config->dev->group['storyspec'] = 'product'; +$config->dev->group['storyestimate'] = 'product'; +$config->dev->group['storyreview'] = 'product'; +$config->dev->group['storystage'] = 'product'; +$config->dev->group['branch'] = 'product'; +$config->dev->group['productplan'] = 'product'; +$config->dev->group['planstory'] = 'product'; +$config->dev->group['design'] = 'product'; +$config->dev->group['designspec'] = 'product'; +$config->dev->group['release'] = 'product'; +$config->dev->group['project'] = 'project'; +$config->dev->group['projectproduct'] = 'project'; +$config->dev->group['projectstory'] = 'project'; +$config->dev->group['projectcase'] = 'project'; +$config->dev->group['projectspec'] = 'project'; +$config->dev->group['programplan'] = 'project'; +$config->dev->group['stage'] = 'project'; +$config->dev->group['weekly'] = 'project'; +$config->dev->group['weeklyreport'] = 'project'; +$config->dev->group['projectbuild'] = 'project'; +$config->dev->group['projectrelease'] = 'project'; +$config->dev->group['execution'] = 'execution'; +$config->dev->group['task'] = 'execution'; +$config->dev->group['taskestimate'] = 'execution'; +$config->dev->group['taskspec'] = 'execution'; +$config->dev->group['team'] = 'execution'; +$config->dev->group['build'] = 'execution'; +$config->dev->group['burn'] = 'execution'; +$config->dev->group['kanban'] = 'kanban'; +$config->dev->group['kanbancard'] = 'kanban'; +$config->dev->group['kanbancell'] = 'kanban'; +$config->dev->group['kanbancolumn'] = 'kanban'; +$config->dev->group['kanbangroup'] = 'kanban'; +$config->dev->group['kanbanlane'] = 'kanban'; +$config->dev->group['kanbanregion'] = 'kanban'; +$config->dev->group['kanbanspace'] = 'kanban'; +$config->dev->group['qa'] = 'qa'; +$config->dev->group['bug'] = 'qa'; +$config->dev->group['case'] = 'qa'; +$config->dev->group['testcase'] = 'qa'; +$config->dev->group['casestep'] = 'qa'; +$config->dev->group['testtask'] = 'qa'; +$config->dev->group['testreport'] = 'qa'; +$config->dev->group['testsuite'] = 'qa'; +$config->dev->group['caselib'] = 'qa'; +$config->dev->group['testresult'] = 'qa'; +$config->dev->group['testrun'] = 'qa'; +$config->dev->group['suitecase'] = 'qa'; +$config->dev->group['automation'] = 'qa'; +$config->dev->group['doc'] = 'doc'; +$config->dev->group['doccontent'] = 'doc'; +$config->dev->group['doclib'] = 'doc'; +$config->dev->group['api_lib_release'] = 'doc'; +$config->dev->group['apispec'] = 'doc'; +$config->dev->group['apistruct'] = 'doc'; +$config->dev->group['apistruct_spec'] = 'doc'; +$config->dev->group['report'] = 'report'; +$config->dev->group['datatable'] = 'report'; +$config->dev->group['company'] = 'company'; +$config->dev->group['dept'] = 'company'; +$config->dev->group['group'] = 'company'; +$config->dev->group['grouppriv'] = 'company'; +$config->dev->group['user'] = 'company'; +$config->dev->group['usercontact'] = 'company'; +$config->dev->group['usergroup'] = 'company'; +$config->dev->group['userquery'] = 'company'; +$config->dev->group['usertpl'] = 'company'; +$config->dev->group['userview'] = 'company'; +$config->dev->group['admin'] = 'admin'; +$config->dev->group['extension'] = 'admin'; +$config->dev->group['lang'] = 'admin'; +$config->dev->group['convert'] = 'admin'; +$config->dev->group['action'] = 'admin'; +$config->dev->group['history'] = 'admin'; +$config->dev->group['mail'] = 'admin'; +$config->dev->group['backup'] = 'admin'; +$config->dev->group['cron'] = 'admin'; +$config->dev->group['dev'] = 'admin'; +$config->dev->group['custom'] = 'admin'; +$config->dev->group['score'] = 'admin'; +$config->dev->group['config'] = 'admin'; +$config->dev->group['svn'] = 'repo'; +$config->dev->group['git'] = 'repo'; +$config->dev->group['gitlab'] = 'repo'; +$config->dev->group['oauth'] = 'repo'; +$config->dev->group['mr'] = 'repo'; +$config->dev->group['mrapproval'] = 'repo'; +$config->dev->group['pipeline'] = 'repo'; +$config->dev->group['ci'] = 'repo'; +$config->dev->group['compile'] = 'repo'; +$config->dev->group['jenkins'] = 'repo'; +$config->dev->group['job'] = 'repo'; +$config->dev->group['sonarqube'] = 'repo'; +$config->dev->group['assetlib'] = 'assetlib'; +$config->dev->group['api'] = 'api'; +$config->dev->group['entry'] = 'api'; +$config->dev->group['log'] = 'api'; +$config->dev->group['install'] = 'system'; +$config->dev->group['upgrade'] = 'system'; +$config->dev->group['sso'] = 'system'; +$config->dev->group['search'] = 'system'; +$config->dev->group['block'] = 'system'; +$config->dev->group['file'] = 'system'; +$config->dev->group['tree'] = 'system'; +$config->dev->group['module'] = 'system'; +$config->dev->group['tutorial'] = 'system'; +$config->dev->group['message'] = 'message'; +$config->dev->group['mail'] = 'message'; +$config->dev->group['webhook'] = 'message'; +$config->dev->group['notify'] = 'message'; +$config->dev->group['repo'] = 'repo'; +$config->dev->group['repofiles'] = 'repo'; +$config->dev->group['repohistory'] = 'repo'; +$config->dev->group['repobranch'] = 'repo'; +$config->dev->group['searchindex'] = 'search'; +$config->dev->group['searchdict'] = 'search'; -$config->dev->tableMap['storyspec'] = 'story'; -$config->dev->tableMap['storystage'] = 'story'; -$config->dev->tableMap['burn'] = 'task'; -$config->dev->tableMap['projectproduct'] = 'project'; -$config->dev->tableMap['projectstory'] = 'story'; -$config->dev->tableMap['taskestimate'] = 'task'; -$config->dev->tableMap['team'] = 'execution'; -$config->dev->tableMap['case'] = 'testcase'; -$config->dev->tableMap['casestep'] = 'testcase'; -$config->dev->tableMap['testresult'] = 'testtask'; -$config->dev->tableMap['testrun'] = 'testtask'; -$config->dev->tableMap['doccontent'] = 'doc'; -$config->dev->tableMap['doclib'] = 'doc'; -$config->dev->tableMap['grouppriv'] = 'group'; -$config->dev->tableMap['usercontact'] = 'user-contacts'; -$config->dev->tableMap['usergroup'] = 'user'; -$config->dev->tableMap['userview'] = 'user'; -$config->dev->tableMap['userquery'] = 'search'; -$config->dev->tableMap['usertpl'] = 'user-tpl'; -$config->dev->tableMap['history'] = 'action-history'; -$config->dev->tableMap['lang'] = 'custom'; -$config->dev->tableMap['config'] = 'custom'; -$config->dev->tableMap['module'] = 'tree'; -$config->dev->tableMap['suitecase'] = 'testcase'; -$config->dev->tableMap['repofiles'] = 'repo'; -$config->dev->tableMap['repohistory'] = 'repo'; -$config->dev->tableMap['repobranch'] = 'repo'; -$config->dev->tableMap['log'] = 'action'; -$config->dev->tableMap['searchindex'] = 'search'; -$config->dev->tableMap['searchdict'] = 'search'; -$config->dev->tableMap['testtask'] = 'testreport'; +$config->dev->tableMap['designspec'] = 'design'; +$config->dev->tableMap['storyspec'] = 'story'; +$config->dev->tableMap['storyestimate'] = 'story'; +$config->dev->tableMap['storyreview'] = 'story'; +$config->dev->tableMap['storystage'] = 'story'; +$config->dev->tableMap['burn'] = 'task'; +$config->dev->tableMap['projectproduct'] = 'project'; +$config->dev->tableMap['projectstory'] = 'story'; +$config->dev->tableMap['planstory'] = 'story'; +$config->dev->tableMap['projectcase'] = 'project'; +$config->dev->tableMap['projectspec'] = 'project'; +$config->dev->tableMap['taskestimate'] = 'task'; +$config->dev->tableMap['taskspec'] = 'task'; +$config->dev->tableMap['team'] = 'execution'; +$config->dev->tableMap['case'] = 'testcase'; +$config->dev->tableMap['casestep'] = 'testcase'; +$config->dev->tableMap['testresult'] = 'testtask'; +$config->dev->tableMap['testrun'] = 'testtask'; +$config->dev->tableMap['doccontent'] = 'doc'; +$config->dev->tableMap['doclib'] = 'doc'; +$config->dev->tableMap['grouppriv'] = 'group'; +$config->dev->tableMap['usercontact'] = 'user-contacts'; +$config->dev->tableMap['usergroup'] = 'user'; +$config->dev->tableMap['userview'] = 'user'; +$config->dev->tableMap['userquery'] = 'search'; +$config->dev->tableMap['usertpl'] = 'user-tpl'; +$config->dev->tableMap['history'] = 'action-history'; +$config->dev->tableMap['lang'] = 'custom'; +$config->dev->tableMap['config'] = 'custom'; +$config->dev->tableMap['module'] = 'tree'; +$config->dev->tableMap['suitecase'] = 'testcase'; +$config->dev->tableMap['repofiles'] = 'repo'; +$config->dev->tableMap['repohistory'] = 'repo'; +$config->dev->tableMap['repobranch'] = 'repo'; +$config->dev->tableMap['log'] = 'action'; +$config->dev->tableMap['searchindex'] = 'search'; +$config->dev->tableMap['searchdict'] = 'search'; +$config->dev->tableMap['testtask'] = 'testreport'; +$config->dev->tableMap['kanbancard'] = 'kanban'; +$config->dev->tableMap['kanbancell'] = 'kanban'; +$config->dev->tableMap['kanbancolumn'] = 'kanban'; +$config->dev->tableMap['kanbangroup'] = 'kanban'; +$config->dev->tableMap['kanbanlane'] = 'kanban'; +$config->dev->tableMap['kanbanregion'] = 'kanban'; +$config->dev->tableMap['kanbanspace'] = 'kanban'; +$config->dev->tableMap['mrapproval'] = 'mr'; +$config->dev->tableMap['weeklyreport'] = 'weekly'; +$config->dev->tableMap['oauth'] = 'gitlab'; +$config->dev->tableMap['api_lib_release'] = 'api'; +$config->dev->tableMap['apispec'] = 'api'; +$config->dev->tableMap['apistruct'] = 'api'; +$config->dev->tableMap['apistruct_spec'] = 'api'; +$config->dev->tableMap['expect'] = 'stakeholder'; $config->dev->postParams['story']['create']['product'] = 'int'; $config->dev->postParams['story']['create']['title'] = 'string'; diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php index 5b7e9e2301..92957df1d7 100644 --- a/module/dev/lang/en.php +++ b/module/dev/lang/en.php @@ -52,6 +52,9 @@ $lang->dev->tableList['program'] = 'Program'; $lang->dev->tableList['product'] = $lang->productCommon; $lang->dev->tableList['productplan'] = $lang->productCommon . 'Plan'; $lang->dev->tableList['project'] = 'Project'; +$lang->dev->tableList['programplan'] = 'Project Stage'; +$lang->dev->tableList['weekly'] = 'Weekly'; +$lang->dev->tableList['sonarqube'] = 'Sonarqube'; $lang->dev->tableList['projectproduct'] = 'Project' . $lang->productCommon; $lang->dev->tableList['projectstory'] = 'Project Story'; $lang->dev->tableList['execution'] = $lang->executionCommon; @@ -88,6 +91,7 @@ $lang->dev->tableList['search'] = 'Search'; $lang->dev->tableList['sso'] = 'SSO'; $lang->dev->tableList['svn'] = 'SVN'; $lang->dev->tableList['testcase'] = 'Test Case'; +$lang->dev->tableList['automation'] = 'Automation'; $lang->dev->tableList['testreport'] = 'Test Report'; $lang->dev->tableList['testsuite'] = 'Test Suite'; $lang->dev->tableList['caselib'] = 'Case Library'; @@ -134,14 +138,19 @@ $lang->dev->tableList['kanbancell'] = 'Kanban Cell'; $lang->dev->tableList['kanbangroup'] = 'Kanban Group'; $lang->dev->tableList['kanbanregion'] = 'Kanban Region'; $lang->dev->tableList['kanbanspace'] = 'Kanban Space'; +$lang->dev->tableList['personnel'] = 'Personnel'; +$lang->dev->tableList['projectbuild'] = 'Project Build'; +$lang->dev->tableList['projectrelease'] = 'Project Release'; $lang->dev->groupList['my'] = 'Dashboard'; $lang->dev->groupList['program'] = 'Program'; $lang->dev->groupList['product'] = $lang->productCommon; $lang->dev->groupList['project'] = 'project'; $lang->dev->groupList['execution'] = $lang->executionCommon; +$lang->dev->groupList['kanban'] = 'Kanban'; $lang->dev->groupList['qa'] = 'Test'; $lang->dev->groupList['doc'] = 'Doc'; +$lang->dev->groupList['assetlib'] = 'Assetlib'; $lang->dev->groupList['report'] = 'Report'; $lang->dev->groupList['company'] = 'Company'; $lang->dev->groupList['repo'] = 'CI'; diff --git a/module/dev/lang/zh-cn.php b/module/dev/lang/zh-cn.php index 1d5135cdde..e32df540b9 100644 --- a/module/dev/lang/zh-cn.php +++ b/module/dev/lang/zh-cn.php @@ -52,6 +52,9 @@ $lang->dev->tableList['program'] = '项目集'; $lang->dev->tableList['product'] = $lang->productCommon; $lang->dev->tableList['productplan'] = $lang->productCommon . '计划'; $lang->dev->tableList['project'] = '项目'; +$lang->dev->tableList['programplan'] = '项目阶段'; +$lang->dev->tableList['weekly'] = '周报'; +$lang->dev->tableList['sonarqube'] = 'Sonarqube'; $lang->dev->tableList['projectproduct'] = '项目' . $lang->productCommon; $lang->dev->tableList['projectstory'] = '项目' . $lang->SRCommon; $lang->dev->tableList['execution'] = $lang->executionCommon; @@ -88,6 +91,7 @@ $lang->dev->tableList['search'] = '搜索'; $lang->dev->tableList['sso'] = '单点登录'; $lang->dev->tableList['svn'] = 'SVN'; $lang->dev->tableList['testcase'] = '测试用例'; +$lang->dev->tableList['automation'] = '自动化测试'; $lang->dev->tableList['testreport'] = '测试报告'; $lang->dev->tableList['testsuite'] = '测试套件'; $lang->dev->tableList['caselib'] = '用例库'; @@ -134,14 +138,19 @@ $lang->dev->tableList['kanbancell'] = '看板单元格'; $lang->dev->tableList['kanbangroup'] = '看板组'; $lang->dev->tableList['kanbanregion'] = '看板区域'; $lang->dev->tableList['kanbanspace'] = '看板空间'; +$lang->dev->tableList['personnel'] = '可访问人员'; +$lang->dev->tableList['projectbuild'] = '项目版本'; +$lang->dev->tableList['projectrelease'] = '项目发布'; $lang->dev->groupList['my'] = '我的地盘'; $lang->dev->groupList['program'] = '项目集'; $lang->dev->groupList['product'] = $lang->productCommon; $lang->dev->groupList['project'] = '项目'; $lang->dev->groupList['execution'] = $lang->executionCommon; +$lang->dev->groupList['kanban'] = '看板'; $lang->dev->groupList['qa'] = '测试'; $lang->dev->groupList['doc'] = '文档'; +$lang->dev->groupList['assetlib'] = '资产库'; $lang->dev->groupList['report'] = '统计'; $lang->dev->groupList['company'] = '组织'; $lang->dev->groupList['repo'] = '持续集成'; diff --git a/module/dev/model.php b/module/dev/model.php index 2b6c69a3df..e5e7dfa1ff 100644 --- a/module/dev/model.php +++ b/module/dev/model.php @@ -137,6 +137,15 @@ class devModel extends model public function getAPIs($module) { $fileName = $this->app->getModuleRoot() . $module . DS . 'control.php'; + if(!file_exists($fileName)) + { + $extPaths = $this->getModuleExtPath(); + foreach($extPaths as $extPath) + { + $fileName = $extPath . $module . DS . 'control.php'; + if(file_exists($fileName)) break; + } + } if($module != 'common' and $module != 'dev') include $fileName; $classReflect = new ReflectionClass($module); @@ -251,9 +260,40 @@ class devModel extends model $group = zget($this->config->dev->group, $module, 'other'); $modules[$group][] = $module; } + + $extPaths = $this->getModuleExtPath(); + foreach($extPaths as $extPath) + { + if(empty($extPath)) continue; + foreach(glob($extPath . '*') as $path) + { + if(!file_exists($path . DS . 'control.php')) continue; + + $module = basename($path); + if($module == 'editor' or $module == 'help' or $module == 'setting' or $module == 'common') continue; + $group = zget($this->config->dev->group, $module, 'other'); + $modules[$group][] = $module; + } + } + return $modules; } + /** + * Get module ext path. + * + * @access public + * @return array + */ + public function getModuleExtPath() + { + $extPaths = array(); + if($this->config->edition != 'open') $extPaths['common'] = $this->app->getExtensionRoot() . $this->config->edition . DS; + $extPaths['xuan'] = $this->app->getExtensionRoot() . 'xuan' . DS; + + return $extPaths; + } + /** * Trim asterisks and whitespace from the beginning and whitespace from the end of lines. * diff --git a/module/repo/control.php b/module/repo/control.php index 5a4779c469..39cb272a16 100644 --- a/module/repo/control.php +++ b/module/repo/control.php @@ -1004,7 +1004,7 @@ class repo extends control } $this->dao->update(TABLE_REPO)->set('commits=commits + ' . $commitCount)->where('id')->eq($repoID)->exec(); - echo $type == 'batch' ? $commitCount : 'finish'; + echo ($type == 'batch' and $commitCount) ? $commitCount : 'finish'; } /**