Merge branch 'sprint/tsj_task' into 'master'

Sprint/tsj task

See merge request easycorp/zentaopms!7009
This commit is contained in:
孙广明
2023-02-21 05:47:26 +00:00
38 changed files with 290 additions and 165 deletions
+8 -6
View File
@@ -429,9 +429,11 @@ $config->maxPriValue = '256';
$config->importWhiteList = array('user', 'task', 'story', 'bug', 'testcase', 'feedback', 'ticket');
$config->featureGroup = new stdclass();
$config->featureGroup->my = array('score');
$config->featureGroup->product = array('roadmap', 'track', 'UR');
$config->featureGroup->scrum = array();
$config->featureGroup->waterfall = array();
$config->featureGroup->assetlib = array();
$config->featureGroup->other = array('devops', 'kanban');
$config->featureGroup->my = array('score');
$config->featureGroup->product = array('roadmap', 'track', 'UR');
$config->featureGroup->scrum = array();
$config->featureGroup->waterfall = array();
$config->featureGroup->agileplus = array();
$config->featureGroup->waterfallplus = array();
$config->featureGroup->assetlib = array();
$config->featureGroup->other = array('devops', 'kanban');
+2 -2
View File
@@ -96,7 +96,7 @@ class helper extends baseHelper
}
else
{
if($feature == 'scrum' or $feature == 'waterfall') return strpos(",$config->disabledFeatures,", ",{$feature},") === false;
if(in_array($feature, array('scrum', 'waterfall', 'agileplus', 'waterfallplus'))) return strpos(",$config->disabledFeatures,", ",{$feature},") === false;
$hasFeature = false;
$canConfigFeature = false;
@@ -107,7 +107,7 @@ class helper extends baseHelper
if($feature == $group or $feature == $module)
{
$canConfigFeature = true;
if($group == 'scrum' or $group == 'waterfall')
if(in_array($group, array('scrum', 'waterfall', 'agileplus', 'waterfallplus')))
{
if(helper::hasFeature("{$group}") and helper::hasFeature("{$group}_{$module}")) $hasFeature = true;
}
+5 -3
View File
@@ -86,9 +86,11 @@ $lang->admin->setModule->opened = 'Opened';
$lang->admin->setModule->closed = 'Closed';
$lang->admin->setModule->my = 'My';
$lang->admin->setModule->product = 'Product';
$lang->admin->setModule->scrum = 'Scrum Project';
$lang->admin->setModule->waterfall = 'Waterfall Project';
$lang->admin->setModule->product = $lang->productCommon;
$lang->admin->setModule->scrum = 'Scrum ' . $lang->projectCommon;
$lang->admin->setModule->waterfall = 'Waterfall ' . $lang->projectCommon;
$lang->admin->setModule->agileplus = 'Agile + ' . $lang->projectCommon;
$lang->admin->setModule->waterfallplus = 'Waterfall + ' . $lang->projectCommon;
$lang->admin->setModule->assetlib = 'Assetlib';
$lang->admin->setModule->other = 'Other';
+5 -3
View File
@@ -86,9 +86,11 @@ $lang->admin->setModule->opened = 'Opened';
$lang->admin->setModule->closed = 'Closed';
$lang->admin->setModule->my = 'My';
$lang->admin->setModule->product = 'Product';
$lang->admin->setModule->scrum = 'Scrum Project';
$lang->admin->setModule->waterfall = 'Waterfall Project';
$lang->admin->setModule->product = $lang->productCommon;
$lang->admin->setModule->scrum = 'Scrum ' . $lang->projectCommon;
$lang->admin->setModule->waterfall = 'Waterfall ' . $lang->projectCommon;
$lang->admin->setModule->agileplus = 'Agile + ' . $lang->projectCommon;
$lang->admin->setModule->waterfallplus = 'Waterfall + ' . $lang->projectCommon;
$lang->admin->setModule->assetlib = 'Assetlib';
$lang->admin->setModule->other = 'Other';
+5 -3
View File
@@ -86,9 +86,11 @@ $lang->admin->setModule->opened = 'Opened';
$lang->admin->setModule->closed = 'Closed';
$lang->admin->setModule->my = 'My';
$lang->admin->setModule->product = 'Product';
$lang->admin->setModule->scrum = 'Scrum Project';
$lang->admin->setModule->waterfall = 'Waterfall Project';
$lang->admin->setModule->product = $lang->productCommon;
$lang->admin->setModule->scrum = 'Scrum ' . $lang->projectCommon;
$lang->admin->setModule->waterfall = 'Waterfall ' . $lang->projectCommon;
$lang->admin->setModule->agileplus = 'Agile + ' . $lang->projectCommon;
$lang->admin->setModule->waterfallplus = 'Waterfall + ' . $lang->projectCommon;
$lang->admin->setModule->assetlib = 'Assetlib';
$lang->admin->setModule->other = 'Other';
+17 -3
View File
@@ -167,15 +167,25 @@ $lang->admin->menuList->dev['menuOrder']['10'] = 'db';
$lang->admin->menuList->dev['menuOrder']['15'] = 'editor';
$lang->admin->menuList->dev['menuOrder']['20'] = 'entry';
if($config->edition != 'max') unset($lang->admin->menuList->model['subMenu']['scrum'], $lang->admin->menuList->model['menuOrder']['10'], $lang->admin->menuList->template);
if($config->edition != 'max')
{
unset($lang->admin->menuList->model['subMenu']['scrum']);
unset($lang->admin->menuList->model['subMenu']['agileplus']);
unset($lang->admin->menuList->model['menuOrder']['10']);
unset($lang->admin->menuList->model['menuOrder']['20']);
unset($lang->admin->menuList->template);
}
if(!helper::hasFeature('waterfall'))
{
unset($lang->admin->menuList->model['subMenu']['waterfall']);
unset($lang->admin->menuList->model['subMenu']['waterfallplus']);
unset($lang->admin->menuList->model['menuOrder']['15']);
unset($lang->admin->menuList->model['menuOrder']['25']);
}
if($config->edition == 'max' and !helper::hasFeature('scrum_auditplan'))
if($config->edition == 'max')
{
if(!helper::hasFeature('scrum_process')) unset($lang->admin->menuList->model['subMenu']['scrum'], $lang->admin->menuList->model['menuOrder']['10']);
if(!helper::hasFeature('scrum_auditplan') and !helper::hasFeature('scrum_process')) unset($lang->admin->menuList->model['subMenu']['scrum'], $lang->admin->menuList->model['menuOrder']['10']);
if(!helper::hasFeature('agileplus_auditplan') and !helper::hasFeature('agileplus_process')) unset($lang->admin->menuList->model['subMenu']['agileplus'], $lang->admin->menuList->model['menuOrder']['20']);
}
if($config->vision == 'lite')
@@ -189,8 +199,12 @@ if($config->vision == 'lite')
unset($lang->admin->menuList->model['subMenu']['scrum']);
unset($lang->admin->menuList->model['subMenu']['waterfall']);
unset($lang->admin->menuList->model['subMenu']['agileplus']);
unset($lang->admin->menuList->model['subMenu']['waterfallplus']);
unset($lang->admin->menuList->model['menuOrder']['10']);
unset($lang->admin->menuList->model['menuOrder']['15']);
unset($lang->admin->menuList->model['menuOrder']['20']);
unset($lang->admin->menuList->model['menuOrder']['25']);
unset($lang->admin->menuList->feature['subMenu']['product']);
unset($lang->admin->menuList->feature['subMenu']['execution']);
+5 -3
View File
@@ -86,9 +86,11 @@ $lang->admin->setModule->opened = '已开启';
$lang->admin->setModule->closed = '已关闭';
$lang->admin->setModule->my = '地盘';
$lang->admin->setModule->product = '产品';
$lang->admin->setModule->scrum = '敏捷项目';
$lang->admin->setModule->waterfall = '瀑布项目';
$lang->admin->setModule->product = $lang->productCommon;
$lang->admin->setModule->scrum = '敏捷' . $lang->projectCommon;
$lang->admin->setModule->waterfall = '瀑布' . $lang->projectCommon;
$lang->admin->setModule->agileplus = '融合敏捷' . $lang->projectCommon;
$lang->admin->setModule->waterfallplus = '融合瀑布' . $lang->projectCommon;
$lang->admin->setModule->assetlib = '资产库';
$lang->admin->setModule->other = '通用功能';
+33 -5
View File
@@ -78,7 +78,25 @@ class block extends control
elseif(isset($this->lang->block->moduleList[$module]))
{
$this->get->set('mode', 'getblocklist');
if($module == 'project') $this->get->set('dashboard', 'project');
if($module == 'project')
{
$this->get->set('dashboard', 'project');
if($this->config->edition == 'max' and $this->app->tab == 'project')
{
$project = $this->loadModel('project')->getByID($this->session->project);
if(isset($project->model) and !helper::hasFeature("{$project->model}_issue"))
{
unset($this->lang->block->modules['scrum']['index']->availableBlocks->scrumissue);
unset($this->lang->block->modules['waterfall']['index']->availableBlocks->waterfallissue);
}
if(isset($project->model) and !helper::hasFeature("{$project->model}_risk"))
{
unset($this->lang->block->modules['scrum']['index']->availableBlocks->scrumrisk);
unset($this->lang->block->modules['waterfall']['index']->availableBlocks->waterfallrisk);
}
}
}
$this->view->blocks = $this->fetch('block', 'main', "module=$module&id=$id");
$this->view->module = $module;
}
@@ -253,10 +271,20 @@ class block extends control
$shortBlocks = $longBlocks = array();
foreach($blocks as $key => $block)
{
if($block->block == 'waterfallrisk' and !helper::hasFeature('waterfall_risk')) continue;
if($block->block == 'waterfallissue' and !helper::hasFeature('waterfall_issue')) continue;
if($block->block == 'scrumrisk' and !helper::hasFeature('scrum_risk')) continue;
if($block->block == 'scrumissue' and !helper::hasFeature('scrum_issue')) continue;
if(in_array($block->block, array('waterfallrisk', 'waterfallissue')))
{
$model = isset($project->model) ? $project->model : 'waterfall';
if($block->block == 'waterfallrisk' and !helper::hasFeature("{$model}_risk")) continue;
if($block->block == 'waterfallissue' and !helper::hasFeature("{$model}_issue")) continue;
}
if(in_array($block->block, array('scrumrisk', 'scrumissue')))
{
$model = isset($project->model) ? $project->model : 'scrum';
if($block->block == 'scrumrisk' and !helper::hasFeature("{$model}_risk")) continue;
if($block->block == 'scrumissue' and !helper::hasFeature("{$model}_issue")) continue;
}
if(!empty($block->source) and $block->source != 'todo' and !empty($acls['views']) and !isset($acls['views'][$block->source]))
{
unset($blocks[$key]);
+1
View File
@@ -188,6 +188,7 @@ $lang->team->common = 'Team';
$lang->user->common = 'User';
$lang->custom->common = 'Custom';
$lang->custom->mode = 'Mode';
$lang->custom->flow = 'Concept';
$lang->extension->common = 'Extension';
$lang->company->common = 'Company';
$lang->dept->common = 'Dept';
+1
View File
@@ -188,6 +188,7 @@ $lang->team->common = 'Team';
$lang->user->common = 'User';
$lang->custom->common = 'Custom';
$lang->custom->mode = 'Mode';
$lang->custom->flow = 'Concept';
$lang->extension->common = 'Extension';
$lang->company->common = 'Company';
$lang->dept->common = 'Dept';
+1
View File
@@ -188,6 +188,7 @@ $lang->team->common = 'Team';
$lang->user->common = 'User';
$lang->custom->common = 'Custom';
$lang->custom->mode = 'Mode';
$lang->custom->flow = 'Concept';
$lang->extension->common = 'Extension';
$lang->company->common = 'Company';
$lang->dept->common = 'Dept';
+1
View File
@@ -188,6 +188,7 @@ $lang->team->common = '团队';
$lang->user->common = '用户';
$lang->custom->common = '自定义';
$lang->custom->mode = '模式';
$lang->custom->flow = '流程设置';
$lang->extension->common = '插件';
$lang->company->common = '公司';
$lang->dept->common = '部门';
+2 -2
View File
@@ -22,8 +22,8 @@ $config->custom->requiredModules[35] = 'execution';
$config->custom->requiredModules[40] = 'task';
$config->custom->requiredModules[45] = 'build';
$config->custom->allFeatures = array('program', 'productRR', 'productUR', 'productLine', 'projectScrum', 'projectWaterfall', 'projectKanban', 'execution', 'qa', 'devops', 'kanban', 'doc', 'report', 'system', 'admin', 'vision');
$config->custom->dataFeatures = array('productUR', 'waterfall');
$config->custom->allFeatures = array('program', 'productRR', 'productUR', 'productLine', 'projectScrum', 'projectWaterfall', 'projectKanban', 'projectAgileplus', 'projectWaterfallplus', 'execution', 'qa', 'devops', 'kanban', 'doc', 'report', 'system', 'admin', 'vision');
$config->custom->dataFeatures = array('productUR', 'waterfall', 'waterfallplus');
$config->custom->scrumFeatures = array();
$config->custom->requiredModules[50] = 'bug';
+27 -25
View File
@@ -8,7 +8,6 @@ $lang->custom->set = 'Customize';
$lang->custom->restore = 'Reset to Default';
$lang->custom->key = 'Key';
$lang->custom->value = 'Value';
$lang->custom->flow = 'Concept';
$lang->custom->working = 'WorkStyle';
$lang->custom->select = 'Select Concept';
$lang->custom->branch = 'Multi Branch';
@@ -252,31 +251,34 @@ $lang->custom->modeList['ALM'] = 'ALM Mode';
$lang->custom->modeIntroductionList['light'] = 'Provides the core function of project management, suitable for small R&D teams';
$lang->custom->modeIntroductionList['ALM'] = 'The concept is more complete and rigorous, and the function is more abundant. It is suitable for medium and large R&D teams';
$lang->custom->features['program'] = 'Program';
$lang->custom->features['productRR'] = 'Product - R&D Requirements';
$lang->custom->features['productUR'] = 'Product - User Requirements';
$lang->custom->features['productLine'] = 'Product - Product Line';
$lang->custom->features['projectScrum'] = 'Project - Scrum Model';
$lang->custom->features['projectWaterfall'] = 'Project - Waterfall Model';
$lang->custom->features['projectKanban'] = 'Project - Kanban Model';
$lang->custom->features['execution'] = 'Execution';
$lang->custom->features['qa'] = 'QA';
$lang->custom->features['devops'] = 'DevOps';
$lang->custom->features['kanban'] = 'Kanban';
$lang->custom->features['doc'] = 'Doc';
$lang->custom->features['report'] = 'Statistics';
$lang->custom->features['system'] = 'System';
$lang->custom->features['assetlib'] = 'Asset Lib';
$lang->custom->features['oa'] = 'Attend';
$lang->custom->features['ops'] = 'Deploy';
$lang->custom->features['feedback'] = 'Feedback';
$lang->custom->features['traincourse'] = 'Academy';
$lang->custom->features['workflow'] = 'Workflow';
$lang->custom->features['admin'] = 'Admin';
$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface';
$lang->custom->features['program'] = 'Program';
$lang->custom->features['productRR'] = $lang->productCommon . ' - R&D Requirements';
$lang->custom->features['productUR'] = $lang->productCommon . ' - User Requirements';
$lang->custom->features['productLine'] = $lang->productCommon . ' - Product Line';
$lang->custom->features['projectScrum'] = $lang->projectCommon . ' - Scrum Model';
$lang->custom->features['projectWaterfall'] = $lang->projectCommon . ' - Waterfall Model';
$lang->custom->features['projectKanban'] = $lang->projectCommon . ' - Kanban Model';
$lang->custom->features['projectAgileplus'] = $lang->projectCommon . ' - Agile + Model';
$lang->custom->features['projectWaterfallplus'] = $lang->projectCommon . ' - Waterfall + Model';
$lang->custom->features['execution'] = 'Execution';
$lang->custom->features['qa'] = 'QA';
$lang->custom->features['devops'] = 'DevOps';
$lang->custom->features['kanban'] = 'Kanban';
$lang->custom->features['doc'] = 'Doc';
$lang->custom->features['report'] = 'Statistics';
$lang->custom->features['system'] = 'System';
$lang->custom->features['assetlib'] = 'Asset Lib';
$lang->custom->features['oa'] = 'Attend';
$lang->custom->features['ops'] = 'Deploy';
$lang->custom->features['feedback'] = 'Feedback';
$lang->custom->features['traincourse'] = 'Academy';
$lang->custom->features['workflow'] = 'Workflow';
$lang->custom->features['admin'] = 'Admin';
$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface';
$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall';
$lang->custom->needClosedFunctions['URStory'] = 'User Story';
$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall';
$lang->custom->needClosedFunctions['waterfallplus'] = 'Waterfall +';
$lang->custom->needClosedFunctions['URStory'] = 'User Story';
if($config->edition == 'max') $lang->custom->needClosedFunctions['assetLib'] = 'Assetlib';
$lang->custom->scoreStatus[1] = 'On';
+27 -25
View File
@@ -8,7 +8,6 @@ $lang->custom->set = 'Customize';
$lang->custom->restore = 'Reset';
$lang->custom->key = 'Key';
$lang->custom->value = 'Value';
$lang->custom->flow = 'Concept';
$lang->custom->working = 'Mode';
$lang->custom->select = 'Select Concept';
$lang->custom->branch = 'Multi-Branch';
@@ -252,31 +251,34 @@ $lang->custom->modeList['ALM'] = 'ALM Mode';
$lang->custom->modeIntroductionList['light'] = 'Provides the core function of project management, suitable for small R&D teams';
$lang->custom->modeIntroductionList['ALM'] = 'The concept is more complete and rigorous, and the function is more abundant. It is suitable for medium and large R&D teams';
$lang->custom->features['program'] = 'Program';
$lang->custom->features['productRR'] = 'Product - R&D Requirements';
$lang->custom->features['productUR'] = 'Product - User Requirements';
$lang->custom->features['productLine'] = 'Product - Product Line';
$lang->custom->features['projectScrum'] = 'Project - Scrum Model';
$lang->custom->features['projectWaterfall'] = 'Project - Waterfall Model';
$lang->custom->features['projectKanban'] = 'Project - Kanban Model';
$lang->custom->features['execution'] = 'Execution';
$lang->custom->features['qa'] = 'QA';
$lang->custom->features['devops'] = 'DevOps';
$lang->custom->features['kanban'] = 'Kanban';
$lang->custom->features['doc'] = 'Doc';
$lang->custom->features['report'] = 'Statistics';
$lang->custom->features['system'] = 'System';
$lang->custom->features['assetlib'] = 'Asset Lib';
$lang->custom->features['oa'] = 'Attend';
$lang->custom->features['ops'] = 'Deploy';
$lang->custom->features['feedback'] = 'Feedback';
$lang->custom->features['traincourse'] = 'Academy';
$lang->custom->features['workflow'] = 'Workflow';
$lang->custom->features['admin'] = 'Admin';
$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface';
$lang->custom->features['program'] = 'Program';
$lang->custom->features['productRR'] = $lang->productCommon . ' - R&D Requirements';
$lang->custom->features['productUR'] = $lang->productCommon . ' - User Requirements';
$lang->custom->features['productLine'] = $lang->productCommon . ' - Product Line';
$lang->custom->features['projectScrum'] = $lang->projectCommon . ' - Scrum Model';
$lang->custom->features['projectWaterfall'] = $lang->projectCommon . ' - Waterfall Model';
$lang->custom->features['projectKanban'] = $lang->projectCommon . ' - Kanban Model';
$lang->custom->features['projectAgileplus'] = $lang->projectCommon . ' - Agile + Model';
$lang->custom->features['projectWaterfallplus'] = $lang->projectCommon . ' - Waterfall + Model';
$lang->custom->features['execution'] = 'Execution';
$lang->custom->features['qa'] = 'QA';
$lang->custom->features['devops'] = 'DevOps';
$lang->custom->features['kanban'] = 'Kanban';
$lang->custom->features['doc'] = 'Doc';
$lang->custom->features['report'] = 'Statistics';
$lang->custom->features['system'] = 'System';
$lang->custom->features['assetlib'] = 'Asset Lib';
$lang->custom->features['oa'] = 'Attend';
$lang->custom->features['ops'] = 'Deploy';
$lang->custom->features['feedback'] = 'Feedback';
$lang->custom->features['traincourse'] = 'Academy';
$lang->custom->features['workflow'] = 'Workflow';
$lang->custom->features['admin'] = 'Admin';
$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface';
$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall';
$lang->custom->needClosedFunctions['URStory'] = 'User Story';
$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall';
$lang->custom->needClosedFunctions['waterfallplus'] = 'Waterfall +';
$lang->custom->needClosedFunctions['URStory'] = 'User Story';
if($config->edition == 'max') $lang->custom->needClosedFunctions['assetLib'] = 'Assetlib';
$lang->custom->scoreStatus[1] = 'On';
+27 -25
View File
@@ -8,7 +8,6 @@ $lang->custom->set = 'Personnaliser';
$lang->custom->restore = 'Réinitialiser';
$lang->custom->key = 'Clé';
$lang->custom->value = 'Valeur';
$lang->custom->flow = 'Concept';
$lang->custom->working = 'Mode';
$lang->custom->select = 'Choix du Concept';
$lang->custom->branch = 'Multi-Branches';
@@ -252,31 +251,34 @@ $lang->custom->modeList['ALM'] = 'ALM Mode';
$lang->custom->modeIntroductionList['light'] = 'Provides the core function of project management, suitable for small R&D teams';
$lang->custom->modeIntroductionList['ALM'] = 'The concept is more complete and rigorous, and the function is more abundant. It is suitable for medium and large R&D teams';
$lang->custom->features['program'] = 'Program';
$lang->custom->features['productRR'] = 'Product - R&D Requirements';
$lang->custom->features['productUR'] = 'Product - User Requirements';
$lang->custom->features['productLine'] = 'Product - Product Line';
$lang->custom->features['projectScrum'] = 'Project - Scrum Model';
$lang->custom->features['projectWaterfall'] = 'Project - Waterfall Model';
$lang->custom->features['projectKanban'] = 'Project - Kanban Model';
$lang->custom->features['execution'] = 'Execution';
$lang->custom->features['qa'] = 'QA';
$lang->custom->features['devops'] = 'DevOps';
$lang->custom->features['kanban'] = 'Kanban';
$lang->custom->features['doc'] = 'Doc';
$lang->custom->features['report'] = 'Statistics';
$lang->custom->features['system'] = 'System';
$lang->custom->features['assetlib'] = 'Asset Lib';
$lang->custom->features['oa'] = 'Attend';
$lang->custom->features['ops'] = 'Deploy';
$lang->custom->features['feedback'] = 'Feedback';
$lang->custom->features['traincourse'] = 'Academy';
$lang->custom->features['workflow'] = 'Workflow';
$lang->custom->features['admin'] = 'Admin';
$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface';
$lang->custom->features['program'] = 'Program';
$lang->custom->features['productRR'] = $lang->productCommon . ' - R&D Requirements';
$lang->custom->features['productUR'] = $lang->productCommon . ' - User Requirements';
$lang->custom->features['productLine'] = $lang->productCommon . ' - Product Line';
$lang->custom->features['projectScrum'] = $lang->projectCommon . ' - Scrum Model';
$lang->custom->features['projectWaterfall'] = $lang->projectCommon . ' - Waterfall Model';
$lang->custom->features['projectKanban'] = $lang->projectCommon . ' - Kanban Model';
$lang->custom->features['projectAgileplus'] = $lang->projectCommon . ' - Agile + Model';
$lang->custom->features['projectWaterfallplus'] = $lang->projectCommon . ' - Waterfall + Model';
$lang->custom->features['execution'] = 'Execution';
$lang->custom->features['qa'] = 'QA';
$lang->custom->features['devops'] = 'DevOps';
$lang->custom->features['kanban'] = 'Kanban';
$lang->custom->features['doc'] = 'Doc';
$lang->custom->features['report'] = 'Statistics';
$lang->custom->features['system'] = 'System';
$lang->custom->features['assetlib'] = 'Asset Lib';
$lang->custom->features['oa'] = 'Attend';
$lang->custom->features['ops'] = 'Deploy';
$lang->custom->features['feedback'] = 'Feedback';
$lang->custom->features['traincourse'] = 'Academy';
$lang->custom->features['workflow'] = 'Workflow';
$lang->custom->features['admin'] = 'Admin';
$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface';
$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall';
$lang->custom->needClosedFunctions['URStory'] = 'User Story';
$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall';
$lang->custom->needClosedFunctions['waterfallplus'] = 'Waterfall +';
$lang->custom->needClosedFunctions['URStory'] = 'User Story';
if($config->edition == 'max') $lang->custom->needClosedFunctions['assetLib'] = 'Assetlib';
$lang->custom->scoreStatus[1] = 'On';
+27 -25
View File
@@ -8,7 +8,6 @@ $lang->custom->set = '自定义配置';
$lang->custom->restore = '恢复默认';
$lang->custom->key = '键';
$lang->custom->value = '值';
$lang->custom->flow = '流程设置';
$lang->custom->working = '工作方式';
$lang->custom->select = '请选择流程:';
$lang->custom->branch = '多分支';
@@ -252,31 +251,34 @@ $lang->custom->modeList['ALM'] = '全生命周期管理模式';
$lang->custom->modeIntroductionList['light'] = '提供了项目管理的核心功能,适用于小型研发团队';
$lang->custom->modeIntroductionList['ALM'] = '概念更加完整、严谨,功能更加丰富,适用于中大型研发团队';
$lang->custom->features['program'] = '项目集';
$lang->custom->features['productRR'] = '产品-研发需求';
$lang->custom->features['productUR'] = '产品-用户需求';
$lang->custom->features['productLine'] = '产品-产品线';
$lang->custom->features['projectScrum'] = '项目-敏捷模型';
$lang->custom->features['projectWaterfall'] = '项目-瀑布模型';
$lang->custom->features['projectKanban'] = '项目-看板模型';
$lang->custom->features['execution'] = '执行';
$lang->custom->features['qa'] = '测试';
$lang->custom->features['devops'] = 'DevOps';
$lang->custom->features['kanban'] = '看板';
$lang->custom->features['doc'] = '文档';
$lang->custom->features['report'] = '统计';
$lang->custom->features['system'] = '组织';
$lang->custom->features['assetlib'] = '资产库';
$lang->custom->features['oa'] = '办公';
$lang->custom->features['ops'] = '运维';
$lang->custom->features['feedback'] = '反馈';
$lang->custom->features['traincourse'] = '学堂';
$lang->custom->features['workflow'] = '工作流';
$lang->custom->features['admin'] = '后台';
$lang->custom->features['vision'] = '研发综合界面、运营管理界面';
$lang->custom->features['program'] = '项目集';
$lang->custom->features['productRR'] = '产品-研发需求';
$lang->custom->features['productUR'] = '产品-用户需求';
$lang->custom->features['productLine'] = '产品-产品线';
$lang->custom->features['projectScrum'] = '项目-敏捷模型';
$lang->custom->features['projectWaterfall'] = '项目-瀑布模型';
$lang->custom->features['projectKanban'] = '项目-看板模型';
$lang->custom->features['projectAgileplus'] = '项目-融合敏捷模型';
$lang->custom->features['projectWaterfallplus'] = '项目-融合瀑布模型';
$lang->custom->features['execution'] = '执行';
$lang->custom->features['qa'] = '测试';
$lang->custom->features['devops'] = 'DevOps';
$lang->custom->features['kanban'] = '看板';
$lang->custom->features['doc'] = '文档';
$lang->custom->features['report'] = '统计';
$lang->custom->features['system'] = '组织';
$lang->custom->features['assetlib'] = '资产库';
$lang->custom->features['oa'] = '办公';
$lang->custom->features['ops'] = '运维';
$lang->custom->features['feedback'] = '反馈';
$lang->custom->features['traincourse'] = '学堂';
$lang->custom->features['workflow'] = '工作流';
$lang->custom->features['admin'] = '后台';
$lang->custom->features['vision'] = '研发综合界面、运营管理界面';
$lang->custom->needClosedFunctions['waterfall'] = '瀑布项目';
$lang->custom->needClosedFunctions['URStory'] = '用户需求';
$lang->custom->needClosedFunctions['waterfall'] = '瀑布项目';
$lang->custom->needClosedFunctions['waterfallplus'] = '融合瀑布项目';
$lang->custom->needClosedFunctions['URStory'] = '用户需求';
if($config->edition == 'max') $lang->custom->needClosedFunctions['assetLib'] = '资产库';
$lang->custom->scoreStatus[1] = '开启';
+14 -2
View File
@@ -840,7 +840,7 @@ class customModel extends model
if(!isset($disabledFeatures['scrum'])) $disabledFeatures['scrum'] = array();
$disabledFeatures['scrum'][] = $feature;
}
elseif($feature == 'waterfall')
elseif(in_array($feature, array('waterfall', 'waterfallplus')))
{
$disabledFeatures[] = 'project' . ucfirst($feature);
}
@@ -988,6 +988,17 @@ class customModel extends model
return $this->dao->select('*')->from(TABLE_PROJECT)->where('model')->eq('waterfall')->andWhere('deleted')->eq('0')->count();
}
/**
* Check for waterfallplus project data.
*
* @access public
* @return int
*/
public function hasWaterfallplusData()
{
return $this->dao->select('*')->from(TABLE_PROJECT)->where('model')->eq('waterfallplus')->andWhere('deleted')->eq('0')->count();
}
/**
* Check for assetlib data.
*
@@ -1124,8 +1135,9 @@ class customModel extends model
$disabledFeatures = $disabledFeatures . ',' . $closedFeatures;
$hasWaterfall = strpos(",{$disabledFeatures},", ',waterfall,') === false;
$hasWaterfallPlus = strpos(",{$disabledFeatures},", ',waterfallplus,') === false;
$hasScrumMeasrecord = strpos(",{$disabledFeatures},", ',scrumMeasrecord,') === false;
$hasWaterfallMeasrecord = (strpos(",{$disabledFeatures},", ',waterfallMeasrecord,') === false and $hasWaterfall);
$hasWaterfallMeasrecord = (strpos(",{$disabledFeatures},", ',waterfallMeasrecord,') === false and ($hasWaterfall or $hasWaterfallPlus));
$cronStatus = 'normal';
if(!$hasScrumMeasrecord and !$hasWaterfallMeasrecord) $cronStatus = 'stop';
+4 -4
View File
@@ -36,9 +36,9 @@
<td class='text-center'><?php echo $lang->custom->modeIntroductionList['ALM'];?></td>
</tr>
<?php foreach($disabledFeatures as $feature):?>
<?php if(is_array($feature) && empty($disabledScrumFeatures)) continue;?>
<?php if(is_array($feature) and empty($disabledScrumFeatures)) continue;?>
<tr class='text-center'>
<td class='text-left'><?php echo (is_array($feature) && !empty($disabledScrumFeatures)) ? sprintf($this->lang->custom->scrum->common, implode($lang->comma, $disabledScrumFeatures)) : $this->lang->custom->features[$feature];?></td>
<td class='text-left'><?php echo (is_array($feature) and !empty($disabledScrumFeatures)) ? sprintf($this->lang->custom->scrum->common, implode($lang->comma, $disabledScrumFeatures)) : $this->lang->custom->features[$feature];?></td>
<td><i class='icon text-red icon-close'></i></td>
<td><i class='icon text-success icon-check'></i></td>
</tr>
@@ -46,9 +46,9 @@
<?php foreach($config->custom->allFeatures as $feature):?>
<?php if(in_array($feature, $disabledFeatures)) continue;?>
<?php if($feature == 'scrumDetail' && empty($enabledScrumFeatures)) continue;?>
<?php if($feature == 'scrumDetail' and empty($enabledScrumFeatures)) continue;?>
<tr class='text-center'>
<td class='text-left'><?php echo ($feature == 'scrumDetail' && !empty($enabledScrumFeatures)) ? sprintf($this->lang->custom->scrum->common, implode($lang->comma, $enabledScrumFeatures)) : $this->lang->custom->features[$feature];?></td>
<td class='text-left'><?php echo ($feature == 'scrumDetail' and !empty($enabledScrumFeatures)) ? sprintf($this->lang->custom->scrum->common, implode($lang->comma, $enabledScrumFeatures)) : $this->lang->custom->features[$feature];?></td>
<td><i class='icon text-success icon-check'></i></td>
<td><i class='icon text-success icon-check'></i></td>
</tr>
-3
View File
@@ -240,6 +240,3 @@ $config->dev->postParams['testcase']['create']['steps'] = 'string';
$config->dev->postParams['testcase']['create']['expect'] = 'string';
$config->dev->postParams['testcase']['create']['mailto'] = 'string';
$config->dev->postParams['testcase']['create']['keywords'] = 'string';
$config->disableFeature = array();
if(!helper::hasFeature('waterfall')) $config->disableFeature = array('design', 'stage', 'programplan', 'weekly', 'researchplan', 'researchreport', 'gapanalysis');
-1
View File
@@ -9,7 +9,6 @@
<div class='modulegroup'><?php echo $groupName?></div>
<?php foreach($modules[$group] as $module):?>
<?php
if($config->disableFeature and in_array($module, $config->disableFeature)) continue;
$active = ($module == $selectedModule) ? 'text-primary' : '';
$moduleName = zget($lang->dev->tableList, $module, $module);
?>
+4 -4
View File
@@ -2017,15 +2017,15 @@ if(!$inUpgrade)
unset($lang->resource->program);
unset($lang->resource->project->programTitle);
}
if(!helper::hasFeature('waterfall'))
if(!helper::hasFeature('waterfall') and !helper::hasFeature('waterfallplus'))
{
unset($lang->resource->design);
unset($lang->resource->programplan);
unset($lang->resource->stage);
}
if(!helper::hasFeature('product_track')) unset($lang->resource->product->track);
if(!helper::hasFeature('product_roadmap')) unset($lang->resource->product->roadmap);
if(!helper::hasFeature('waterfall_track')) unset($lang->resource->projectstory->track);
if(!helper::hasFeature('product_track')) unset($lang->resource->product->track);
if(!helper::hasFeature('product_roadmap')) unset($lang->resource->product->roadmap);
if(!helper::hasFeature('waterfall_track') and !helper::hasFeature('waterfallplus_track')) unset($lang->resource->projectstory->track);
if(!helper::hasFeature('devops'))
{
unset($lang->resource->repo);
-1
View File
@@ -1,5 +1,4 @@
<?php
$lang->mail->common = 'Email Einstellungen';
$lang->mail->index = 'Home';
$lang->mail->detect = 'Testen';
$lang->mail->detectAction = 'Detect By Email Address';
-1
View File
@@ -1,5 +1,4 @@
<?php
$lang->mail->common = 'Email Settings';
$lang->mail->index = 'Email Home';
$lang->mail->detect = 'Detect';
$lang->mail->detectAction = 'Detect By Email Address';
-1
View File
@@ -1,5 +1,4 @@
<?php
$lang->mail->common = 'Email Settings';
$lang->mail->index = 'Email Home';
$lang->mail->detect = 'Detect';
$lang->mail->detectAction = 'Detect By Email Address';
-1
View File
@@ -1,5 +1,4 @@
<?php
$lang->mail->common = '发信配置';
$lang->mail->index = '首页';
$lang->mail->detect = '检测';
$lang->mail->detectAction = '通过邮箱地址检测';
+1 -1
View File
@@ -99,7 +99,7 @@ $lang->my->auditMenu->audit = new stdclass();
$lang->my->auditMenu->audit->all = 'All';
$lang->my->auditMenu->audit->story = 'Story';
$lang->my->auditMenu->audit->testcase = 'Case';
if($config->edition == 'max' and helper::hasFeature('waterfall')) $lang->my->auditMenu->audit->project = 'Project';
if($config->edition == 'max' and (helper::hasFeature('waterfall') or helper::hasFeature('waterfallplus'))) $lang->my->auditMenu->audit->project = $lang->projectCommon;
if($config->edition != 'open') $lang->my->auditMenu->audit->feedback = 'Feedback';
if($config->edition != 'open' and helper::hasFeature('OA')) $lang->my->auditMenu->audit->oa = 'OA';
+1 -1
View File
@@ -99,7 +99,7 @@ $lang->my->auditMenu->audit = new stdclass();
$lang->my->auditMenu->audit->all = 'All';
$lang->my->auditMenu->audit->story = 'Story';
$lang->my->auditMenu->audit->testcase = 'Case';
if($config->edition == 'max' and helper::hasFeature('waterfall')) $lang->my->auditMenu->audit->project = 'Project';
if($config->edition == 'max' and (helper::hasFeature('waterfall') or helper::hasFeature('waterfallplus'))) $lang->my->auditMenu->audit->project = $lang->projectCommon;
if($config->edition != 'open') $lang->my->auditMenu->audit->feedback = 'Feedback';
if($config->edition != 'open' and helper::hasFeature('OA')) $lang->my->auditMenu->audit->oa = 'OA';
+1 -1
View File
@@ -99,7 +99,7 @@ $lang->my->auditMenu->audit = new stdclass();
$lang->my->auditMenu->audit->all = 'All';
$lang->my->auditMenu->audit->story = 'Story';
$lang->my->auditMenu->audit->testcase = 'Case';
if($config->edition == 'max' and helper::hasFeature('waterfall')) $lang->my->auditMenu->audit->project = 'Project';
if($config->edition == 'max' and (helper::hasFeature('waterfall') or helper::hasFeature('waterfallplus'))) $lang->my->auditMenu->audit->project = $lang->projectCommon;
if($config->edition != 'open') $lang->my->auditMenu->audit->feedback = 'Feedback';
if($config->edition != 'open' and helper::hasFeature('OA')) $lang->my->auditMenu->audit->oa = 'OA';
+1 -1
View File
@@ -99,7 +99,7 @@ $lang->my->auditMenu->audit = new stdclass();
$lang->my->auditMenu->audit->all = '所有';
$lang->my->auditMenu->audit->story = '需求';
$lang->my->auditMenu->audit->testcase = '用例';
if($config->edition == 'max' and helper::hasFeature('waterfall')) $lang->my->auditMenu->audit->project = '项目';
if($config->edition == 'max' and (helper::hasFeature('waterfall') or helper::hasFeature('waterfallplus'))) $lang->my->auditMenu->audit->project = $lang->projectCommon;
if($config->edition != 'open') $lang->my->auditMenu->audit->feedback = '反馈';
if($config->edition != 'open' and helper::hasFeature('OA')) $lang->my->auditMenu->audit->oa = '办公';
+1 -1
View File
@@ -272,7 +272,7 @@ $lang->project->modelList['scrum'] = "Scrum";
if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI";
$lang->project->modelList['kanban'] = "Kanban";
$lang->project->modelList['agileplus'] = "Agile +";
if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfallplus'] = "Waterfall +";
if(helper::hasFeature('waterfallplus')) $lang->project->modelList['waterfallplus'] = "Waterfall +";
$lang->project->featureBar['browse']['all'] = 'All';
$lang->project->featureBar['browse']['undone'] = 'Unfinished';
+1 -1
View File
@@ -272,7 +272,7 @@ $lang->project->modelList['scrum'] = "Scrum";
if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI";
$lang->project->modelList['kanban'] = "Kanban";
$lang->project->modelList['agileplus'] = "Agile +";
if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfallplus'] = "Waterfall +";
if(helper::hasFeature('waterfallplus')) $lang->project->modelList['waterfallplus'] = "Waterfall +";
$lang->project->featureBar['browse']['all'] = 'All';
$lang->project->featureBar['browse']['undone'] = 'Unfinished';
+1 -1
View File
@@ -272,7 +272,7 @@ $lang->project->modelList['scrum'] = "Scrum";
if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI";
$lang->project->modelList['kanban'] = "Kanban";
$lang->project->modelList['agileplus'] = "Agile +";
if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfallplus'] = "Waterfall +";
if(helper::hasFeature('waterfallplus')) $lang->project->modelList['waterfallplus'] = "Waterfall +";
$lang->project->featureBar['browse']['all'] = 'All';
$lang->project->featureBar['browse']['undone'] = 'Non Terminées';
+1 -1
View File
@@ -272,7 +272,7 @@ $lang->project->modelList['scrum'] = "Scrum";
if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "瀑布";
$lang->project->modelList['kanban'] = "看板";
$lang->project->modelList['agileplus'] = "融合敏捷";
if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfallplus'] = "融合瀑布";
if(helper::hasFeature('waterfallplus')) $lang->project->modelList['waterfallplus'] = "融合瀑布";
$lang->project->featureBar['browse']['all'] = '全部';
$lang->project->featureBar['browse']['undone'] = '未完成';
+7 -7
View File
@@ -80,19 +80,19 @@ foreach($projects as $programID => $programProjects)
{
$link = $indexLink;
}
elseif($project->model == 'scrum' and
elseif((in_array($project->model, array('scrum', 'agileplus'))) and
(
(in_array($module, array('issue', 'risk', 'meeting')) and !helper::hasFeature("scrum_{$module}")) or
($module == 'report' and $method == 'projectsummary' and !helper::hasFeature("scrum_measrecord"))
(in_array($module, array('issue', 'risk', 'meeting')) and !helper::hasFeature("{$project->model}_{$module}")) or
($module == 'report' and $method == 'projectsummary' and !helper::hasFeature("{$project->model}_measrecord"))
))
{
$link = $indexLink;
}
elseif($project->model == 'waterfall' and
elseif(in_array($project->model, array('waterfall', 'waterfallplus')) and
(
(in_array($module, array('issue', 'risk', 'opportunity', 'measrecord', 'auditplan', 'meeting')) and !helper::hasFeature("waterfall_{$module}")) or
($module == 'pssp' and !helper::hasFeature("waterfall_process")) or
($module == 'report' and $method == 'projectsummary' and !helper::hasFeature("scrum_measrecord"))
(in_array($module, array('issue', 'risk', 'opportunity', 'measrecord', 'auditplan', 'meeting')) and !helper::hasFeature("{$project->model}_{$module}")) or
($module == 'pssp' and !helper::hasFeature("{$project->model}_process")) or
($module == 'report' and $method == 'projectsummary' and !helper::hasFeature("{$project->model}_measrecord"))
))
{
$link = $indexLink;
+4 -2
View File
@@ -29,7 +29,9 @@
<?php
$tab = $from == 'global' ? 'project' : $app->tab;
if($tab == 'product') $tab = 'project';
$hasWaterfall = helper::hasFeature('waterfall');
$hasWaterfall = helper::hasFeature('waterfall');
$hasWaterfallPlus = helper::hasFeature('waterfallplus');
?>
<div class='project-type text-center'>
<?php echo html::a($this->createLink("project", "create", "model=scrum&programID=$programID&copyProjectID=0&extra=productID=$productID,branchID=$branchID"), "<img class='project-type-img' data-type='scrum' src='{$config->webRoot}theme/default/images/main/scrum.png'>", '', "data-app='{$tab}' class='createButton'")?>
@@ -60,7 +62,7 @@
<p><?php echo $lang->project->agileplusTitle;?></p>
</div>
</div>
<?php if($hasWaterfall):?>
<?php if($hasWaterfallPlus):?>
<div class='col col-xs-4'>
<div class='project-type text-center'>
<?php echo html::a($this->createLink("project", "create", "model=waterfallplus&programID=$programID&copyProjectID=0&extra=productID=$productID,branchID=$branchID"), "<img class='project-type-img' data-type='waterfallplus' src='{$config->webRoot}theme/default/images/main/waterfallplus.png'>", '', "data-app='{$tab}' class='createButton'")?>
+21
View File
@@ -334,4 +334,25 @@ class customTest
return $objects;
}
/**
* Check for waterfallplus project data..
*
* @param string $param deleteproject
* @access public
* @return int
*/
public function hasWaterfallplusDataTest($param = '')
{
if($param == 'deleteproject')
{
global $tester;
$tester->dao->update(TABLE_PROJECT)
->set('deleted')->eq(1)
->where('type')->eq('project')
->andWhere('model')->eq('waterfallplus')
->exec();
}
return $this->objectModel->hasWaterfallplusData();
}
}
@@ -0,0 +1,34 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/custom.class.php';
su('admin');
zdTable('user')->gen(5);
su('admin');
$project = zdTable('project');
$project->id->range('1-3');
$project->name->range('项目集1,融合瀑布项目1,瀑布项目1');
$project->type->range('program,project{2}');
$project->parent->range('0,1{2}');
$project->status->range('wait');
$project->model->range('[],waterfallplus,waterfall');
$project->openedBy->range('admin,user1');
$project->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$project->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$project->gen(3);
/**
title=测试projectModel->hasWaterfallplusData();
cid=1
pid=1
检查获取所有未删除的融合瀑布项目的数量 >> 1
检查删除所有融合瀑布模型项目后,获取融合瀑布项目的数量 >> 0
*/
$customTester = new customTest();
r($customTester->hasWaterfallplusDataTest()) && p() && e('1'); // 检查获取所有未删除的融合瀑布项目的数量
r($customTester->hasWaterfallplusDataTest('deleteproject')) && p() && e('0'); // 检查删除所有融合瀑布模型项目后,获取融合瀑布项目的数量