Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into zentaopms_289
This commit is contained in:
@@ -2615,19 +2615,26 @@ class execution extends control
|
||||
$execution = $this->commonAction($executionID);
|
||||
if($execution->type != 'kanban') return print(js::locate(inlink('view', "executionID=$executionID")));
|
||||
|
||||
if($execution->lifetime == 'ops' or in_array($execution->attribute, array('request', 'review')))
|
||||
{
|
||||
$browseType = 'task';
|
||||
unset($this->lang->kanban->group->task['story']);
|
||||
}
|
||||
|
||||
/* Set Session. */
|
||||
$this->session->set('execGroupBy', $groupBy);
|
||||
$this->session->set('storyList', $this->app->getURI(true), 'execution');
|
||||
$this->session->set('rdSearchValue', '');
|
||||
$this->session->set('execLaneType', $browseType);
|
||||
|
||||
$kanbanData = $this->loadModel('kanban')->getRDKanban($executionID, $browseType, $orderBy, 0, $groupBy);
|
||||
$features = $this->execution->getExecutionFeatures($execution);
|
||||
$kanbanData = $this->loadModel('kanban')->getRDKanban($executionID, $browseType, $orderBy, 0, $groupBy);
|
||||
|
||||
/* Remove lanes if no feature. */
|
||||
foreach($kanbanData as $regionID => $region)
|
||||
{
|
||||
foreach($region->groups as $groupID => $group)
|
||||
{
|
||||
if(!$features['story'] and $group->lanes[0]->type == 'story') unset($kanbanData[$regionID]->groups[$groupID]);
|
||||
if(!$features['qa'] and $group->lanes[0]->type == 'bug') unset($kanbanData[$regionID]->groups[$groupID]);
|
||||
}
|
||||
$kanbanData[$regionID]->groups = array_values($kanbanData[$regionID]->groups);
|
||||
}
|
||||
|
||||
$executionActions = array();
|
||||
foreach($this->config->execution->statusActions as $action)
|
||||
{
|
||||
@@ -2688,6 +2695,7 @@ class execution extends control
|
||||
$this->view->projectID = $projectID;
|
||||
$this->view->project = $this->loadModel('project')->getByID($projectID);
|
||||
$this->view->allPlans = $allPlans;
|
||||
$this->view->features = $features;
|
||||
$this->view->kanbanData = $kanbanData;
|
||||
$this->view->executionActions = $executionActions;
|
||||
$this->view->kanban = $this->lang->execution->kanban;
|
||||
@@ -2744,7 +2752,7 @@ class execution extends control
|
||||
|
||||
/* Show lanes of the attribute: no story&bug in request, no bug in design. */
|
||||
if(!isset($this->lang->execution->menu->story)) unset($kanbanGroup['story']);
|
||||
if(!isset($this->lang->execution->menu->qa)) unset($kanbanGroup['bug']);
|
||||
if(!isset($this->lang->execution->menu->qa)) unset($kanbanGroup['bug']);
|
||||
|
||||
/* Determines whether an object is editable. */
|
||||
$canBeChanged = common::canModify('execution', $execution);
|
||||
@@ -2783,6 +2791,7 @@ class execution extends control
|
||||
$this->view->productNum = count($products);
|
||||
$this->view->allPlans = $allPlans;
|
||||
$this->view->browseType = $browseType;
|
||||
$this->view->features = $this->execution->getExecutionFeatures($execution);
|
||||
$this->view->kanbanGroup = $kanbanGroup;
|
||||
$this->view->execution = $execution;
|
||||
$this->view->groupBy = $groupBy;
|
||||
@@ -3179,6 +3188,9 @@ class execution extends control
|
||||
|
||||
$this->loadModel('product');
|
||||
$execution = $this->execution->getById($executionID);
|
||||
$project = $this->loadModel('project')->getByID($execution->project);
|
||||
if(!$project->hasProduct) return print(js::error($this->lang->project->cannotManageProducts) . js::locate('back'));
|
||||
if($project->model == 'waterfall' or $project->model == 'waterfallplus') return print(js::error(sprintf($this->lang->execution->cannotManageProducts, zget($this->lang->project->modelList, $project->model))) . js::locate('back'));
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
.c-id {width: 50px;}
|
||||
.c-team-name {width: 120px;}
|
||||
.c-project, .c-user, .c-code, .c-desc, .c-days {width: 150px;}
|
||||
.c-method {width: 45px;}
|
||||
.c-method {width: 70px;}
|
||||
.c-type > .icon-help {vertical-align: text-top;}
|
||||
.c-type > .popover .popover-content {font-weight: 400;}
|
||||
#executionForm tbody td {vertical-align: top;}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.c-user {width: 150px !important;}
|
||||
.c-date {width: 125px;}
|
||||
.c-method {width: 60px;}
|
||||
.c-method {width: 145px;}
|
||||
.c-type {width: 130px;}
|
||||
|
||||
@@ -9,3 +9,5 @@
|
||||
.form-date {min-width: 90px;}
|
||||
|
||||
.productsBox div[id^='branch'].chosen-disabled {pointer-events: none;}
|
||||
|
||||
#dataform th.c-name, #dataform th.c-projectName, #dataform th.c-method {width: 120px;}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#dataform th.c-method {width: 150px;}
|
||||
@@ -139,7 +139,7 @@ $lang->execution->kanbanNoLinkProduct = "Kanban not linked {$lang->productCommon
|
||||
$lang->execution->myTask = "My Task";
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->execution->allProject = 'All';
|
||||
$lang->execution->method = 'Method';
|
||||
$lang->execution->method = 'Management Method';
|
||||
$lang->execution->sameAsParent = "Same as parent";
|
||||
|
||||
/* Fields of zt_team. */
|
||||
@@ -398,7 +398,7 @@ $lang->execution->errorCommonBegin = 'The start date of ' . $lang->e
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.';
|
||||
$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.';
|
||||
$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.';
|
||||
$lang->execution->errorNameRepeat = 'Child stages of the same parent stage cannot have the same name.';
|
||||
$lang->execution->errorNameRepeat = "Child %s of the same parent stage cannot have the same name.";
|
||||
$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage.";
|
||||
$lang->execution->errorLetterPlan = "『%s』cannot be less than the plan start time『%s』。";
|
||||
$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!";
|
||||
@@ -430,6 +430,7 @@ $lang->execution->hasStartedTaskOrSubStage = "Tasks or subphases under %s %s
|
||||
$lang->execution->hasSuspendedOrClosedChildren = "The sub-stages under stage %s are not all suspended or closed, cannot be modified, and have been filtered.";
|
||||
$lang->execution->hasNotClosedChildren = "The sub-stages under stage %s are not all closed, cannot be modified, and have been filtered.";
|
||||
$lang->execution->hasStartedTask = "The task under %s %s has already started, cannot be modified, and has been filtered.";
|
||||
$lang->execution->cannotManageProducts = 'The ' . strtolower($lang->project->common). ' model of this ' . strtolower($lang->execution->common) . " is %s and this " . strtolower($lang->execution->common) . ' cannot be associated with products.';
|
||||
|
||||
/* Statistics. */
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
@@ -139,7 +139,7 @@ $lang->execution->kanbanNoLinkProduct = "Kanban not linked {$lang->productCommon
|
||||
$lang->execution->myTask = "My Task";
|
||||
$lang->execution->list = 'List';
|
||||
$lang->execution->allProject = 'All';
|
||||
$lang->execution->method = 'Method';
|
||||
$lang->execution->method = 'Management Method';
|
||||
$lang->execution->sameAsParent = "Same as parent";
|
||||
|
||||
/* Fields of zt_team. */
|
||||
@@ -398,7 +398,7 @@ $lang->execution->errorCommonBegin = 'The start date of ' . $lang->e
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.';
|
||||
$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.';
|
||||
$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.';
|
||||
$lang->execution->errorNameRepeat = 'Child stages of the same parent stage cannot have the same name.';
|
||||
$lang->execution->errorNameRepeat = "Child %s of the same parent stage cannot have the same name.";
|
||||
$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage.";
|
||||
$lang->execution->errorLetterPlan = "『%s』cannot be less than the plan start time『%s』。";
|
||||
$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!";
|
||||
@@ -430,6 +430,7 @@ $lang->execution->hasStartedTaskOrSubStage = "Tasks or subphases under %s %s
|
||||
$lang->execution->hasSuspendedOrClosedChildren = "The sub-stages under stage %s are not all suspended or closed, cannot be modified, and have been filtered.";
|
||||
$lang->execution->hasNotClosedChildren = "The sub-stages under stage %s are not all closed, cannot be modified, and have been filtered.";
|
||||
$lang->execution->hasStartedTask = "The task under %s %s has already started, cannot be modified, and has been filtered.";
|
||||
$lang->execution->cannotManageProducts = 'The ' . strtolower($lang->project->common). ' model of this ' . strtolower($lang->execution->common) . " is %s and this " . strtolower($lang->execution->common) . ' cannot be associated with products.';
|
||||
|
||||
/* Statistics. */
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
@@ -139,7 +139,7 @@ $lang->execution->kanbanNoLinkProduct = "Kanban not linked {$lang->productCommon
|
||||
$lang->execution->myTask = "My Task";
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->execution->allProject = 'Tous';
|
||||
$lang->execution->method = 'Method';
|
||||
$lang->execution->method = 'Management Method';
|
||||
$lang->execution->sameAsParent = "Same as parent";
|
||||
|
||||
/* Fields of zt_team. */
|
||||
@@ -398,7 +398,7 @@ $lang->execution->errorCommonBegin = 'The start date of ' . $lang->e
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.';
|
||||
$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.';
|
||||
$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.';
|
||||
$lang->execution->errorNameRepeat = 'Child stages of the same parent stage cannot have the same name.';
|
||||
$lang->execution->errorNameRepeat = "Child %s of the same parent stage cannot have the same name.";
|
||||
$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage.";
|
||||
$lang->execution->errorLetterPlan = "『%s』cannot be less than the plan start time『%s』。";
|
||||
$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé.";
|
||||
@@ -430,6 +430,7 @@ $lang->execution->hasStartedTaskOrSubStage = "Tasks or subphases under %s %s
|
||||
$lang->execution->hasSuspendedOrClosedChildren = "The sub-stages under stage %s are not all suspended or closed, cannot be modified, and have been filtered.";
|
||||
$lang->execution->hasNotClosedChildren = "The sub-stages under stage %s are not all closed, cannot be modified, and have been filtered.";
|
||||
$lang->execution->hasStartedTask = "The task under %s %s has already started, cannot be modified, and has been filtered.";
|
||||
$lang->execution->cannotManageProducts = 'The ' . strtolower($lang->project->common). ' model of this ' . strtolower($lang->execution->common) . " is %s and this " . strtolower($lang->execution->common) . ' cannot be associated with products.';
|
||||
|
||||
/* Statistics. */
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
@@ -139,7 +139,7 @@ $lang->execution->kanbanNoLinkProduct = "看板没有关联{$lang->productCommon
|
||||
$lang->execution->myTask = "我的任务";
|
||||
$lang->execution->list = '列表';
|
||||
$lang->execution->allProject = '全部项目';
|
||||
$lang->execution->method = '方法';
|
||||
$lang->execution->method = '管理方法';
|
||||
$lang->execution->sameAsParent = "同父阶段";
|
||||
|
||||
/* Fields of zt_team. */
|
||||
@@ -398,7 +398,7 @@ $lang->execution->errorCommonBegin = $lang->executionCommon . '开
|
||||
$lang->execution->errorCommonEnd = $lang->executionCommon . '截止日期应小于等于项目的截止日期:%s。';
|
||||
$lang->execution->errorLetterParent = '计划开始时间不能小于所属父阶段的计划开始时间:%s。';
|
||||
$lang->execution->errorGreaterParent = '计划完成时间不能大于所属父阶段的计划完成时间:%s。';
|
||||
$lang->execution->errorNameRepeat = '相同父阶段的子阶段名称不能相同';
|
||||
$lang->execution->errorNameRepeat = "相同父阶段的子%s名称不能相同";
|
||||
$lang->execution->errorAttrMatch = "父阶段类型为[%s],阶段类型需与父阶段一致";
|
||||
$lang->execution->errorLetterPlan = "『%s』应当不小于计划开始时间『%s』。";
|
||||
$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!";
|
||||
@@ -430,6 +430,7 @@ $lang->execution->hasStartedTaskOrSubStage = "%s%s下的任务或子阶段
|
||||
$lang->execution->hasSuspendedOrClosedChildren = "阶段%s下的子阶段未全部挂起或关闭,无法修改,已过滤。";
|
||||
$lang->execution->hasNotClosedChildren = "阶段%s下的子阶段未全部关闭,无法修改,已过滤。";
|
||||
$lang->execution->hasStartedTask = "%s%s下的任务已经开始,无法修改,已过滤。";
|
||||
$lang->execution->cannotManageProducts = "当前{$lang->execution->common}的{$lang->project->common}为%s{$lang->project->common},不能关联产品。";
|
||||
|
||||
/* 统计。*/
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
+64
-31
@@ -50,6 +50,44 @@ class executionModel extends model
|
||||
return print(js::locate(helper::createLink('execution', 'all')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get features of execution.
|
||||
*
|
||||
* @param object $execution
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getExecutionFeatures($execution)
|
||||
{
|
||||
$features = array('story' => true, 'task' => true, 'qa' => true, 'devops' => true, 'burn' => true, 'build' => true, 'other' => true);
|
||||
|
||||
/* Unset story, bug, build and testtask if type is ops. */
|
||||
if($execution->lifetime == 'ops')
|
||||
{
|
||||
$features['story'] = false;
|
||||
$features['qa'] = false;
|
||||
$features['build'] = false;
|
||||
$features['burn'] = false;
|
||||
}
|
||||
elseif(!empty($execution->attribute))
|
||||
{
|
||||
$features['other'] = false;
|
||||
if(in_array($execution->attribute, array('request', 'design', 'review')))
|
||||
{
|
||||
$features['qa'] = false;
|
||||
$features['devops'] = false;
|
||||
$features['build'] = false;
|
||||
|
||||
if(in_array($execution->attribute, array('request', 'review')))
|
||||
{
|
||||
$features['story'] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $features;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set menu.
|
||||
*
|
||||
@@ -105,30 +143,16 @@ class executionModel extends model
|
||||
|
||||
if(isset($execution->acl) and $execution->acl != 'private') unset($this->lang->execution->menu->settings['subMenu']->whitelist);
|
||||
|
||||
/* Unset story, bug, build and testtask if type is ops. */
|
||||
if($execution and $execution->lifetime == 'ops')
|
||||
{
|
||||
unset($this->lang->execution->menu->story);
|
||||
unset($this->lang->execution->menu->qa);
|
||||
unset($this->lang->execution->menu->build);
|
||||
unset($this->lang->execution->menu->burn);
|
||||
}
|
||||
|
||||
$stageFilter = array('request', 'design', 'review');
|
||||
if(isset($execution->attribute) and in_array($execution->attribute, $stageFilter))
|
||||
{
|
||||
if(in_array($execution->attribute, array('request', 'review')))
|
||||
{
|
||||
unset($this->lang->execution->menu->story);
|
||||
unset($this->lang->execution->menu->view['subMenu']->groupTask);
|
||||
unset($this->lang->execution->menu->view['subMenu']->tree);
|
||||
unset($this->lang->execution->menu->other);
|
||||
}
|
||||
|
||||
unset($this->lang->execution->menu->devops);
|
||||
unset($this->lang->execution->menu->qa);
|
||||
unset($this->lang->execution->menu->build);
|
||||
}
|
||||
/* Redjust menus. */
|
||||
$features = $this->getExecutionFeatures($execution);
|
||||
if(!$features['story']) unset($this->lang->execution->menu->story);
|
||||
if(!$features['story']) unset($this->lang->execution->menu->view['subMenu']->groupTask);
|
||||
if(!$features['story']) unset($this->lang->execution->menu->view['subMenu']->tree);
|
||||
if(!$features['qa']) unset($this->lang->execution->menu->qa);
|
||||
if(!$features['devops']) unset($this->lang->execution->menu->devops);
|
||||
if(!$features['build']) unset($this->lang->execution->menu->build);
|
||||
if(!$features['burn']) unset($this->lang->execution->menu->burn);
|
||||
if(!$features['other']) unset($this->lang->execution->menu->other);
|
||||
|
||||
if($executions and (!isset($executions[$executionID]) or !$this->checkPriv($executionID))) $this->accessDenied();
|
||||
|
||||
@@ -383,6 +407,7 @@ class executionModel extends model
|
||||
->setDefault('openedVersion', $this->config->version)
|
||||
->setDefault('lastEditedBy', $this->app->user->account)
|
||||
->setDefault('lastEditedDate', helper::now())
|
||||
->setDefault('days', '0')
|
||||
->setDefault('team', $this->post->name)
|
||||
->setDefault('parent', $this->post->project)
|
||||
->setIF($this->post->parent, 'parent', $this->post->parent)
|
||||
@@ -448,7 +473,7 @@ class executionModel extends model
|
||||
->checkIF($sprint->end != '', 'end', 'ge', $sprint->begin)
|
||||
->checkFlow()
|
||||
->exec();
|
||||
|
||||
|
||||
/* Add the creater to the team. */
|
||||
if(!dao::isError())
|
||||
{
|
||||
@@ -573,6 +598,7 @@ class executionModel extends model
|
||||
->setIF($this->post->status == 'closed' and $oldExecution->status != 'closed', 'closedDate', helper::now())
|
||||
->setIF($this->post->status == 'suspended' and $oldExecution->status != 'suspended', 'suspendedDate', helper::today())
|
||||
->setIF($oldExecution->type == 'stage', 'project', $oldExecution->project)
|
||||
->setDefault('days', '0')
|
||||
->setDefault('team', $this->post->name)
|
||||
->join('whitelist', ',')
|
||||
->stripTags($this->config->execution->editor->edit['id'], $this->config->allowedTags)
|
||||
@@ -719,6 +745,7 @@ class executionModel extends model
|
||||
{
|
||||
$this->loadModel('user');
|
||||
$this->loadModel('project');
|
||||
$this->app->loadLang('programplan');
|
||||
|
||||
$executions = array();
|
||||
$allChanges = array();
|
||||
@@ -770,10 +797,10 @@ class executionModel extends model
|
||||
$executions[$executionID]->lastEditedBy = $this->app->user->account;
|
||||
$executions[$executionID]->lastEditedDate = helper::now();
|
||||
|
||||
if(isset($data->codes)) $executions[$executionID]->code = $executionCode;
|
||||
if(isset($data->projects)) $executions[$executionID]->project = zget($data->projects, $executionID, 0);
|
||||
if(isset($data->attributes)) $executions[$executionID]->attribute = zget($data->attributes, $executionID, '');
|
||||
if(isset($data->lifetimes)) $executions[$executionID]->lifetime = $data->lifetimes[$executionID];
|
||||
if(isset($data->codes)) $executions[$executionID]->code = $executionCode;
|
||||
if(isset($data->projects)) $executions[$executionID]->project = zget($data->projects, $executionID, 0);
|
||||
if(isset($data->attributes[$executionID])) $executions[$executionID]->attribute = zget($data->attributes, $executionID, '');
|
||||
if(isset($data->lifetimes[$executionID])) $executions[$executionID]->lifetime = $data->lifetimes[$executionID];
|
||||
|
||||
$oldExecution = $oldExecutions[$executionID];
|
||||
$projectID = isset($executions[$executionID]->project) ? $executions[$executionID]->project : $oldExecution->project;
|
||||
@@ -801,7 +828,8 @@ class executionModel extends model
|
||||
{
|
||||
if($parentID == $parents[$repeatID])
|
||||
{
|
||||
dao::$errors["names$executionID"][] = $this->lang->execution->errorNameRepeat;
|
||||
$type = $oldExecution->type == 'stage' ? 'stage' : 'agileplus';
|
||||
dao::$errors["names$executionID"][] = sprintf($this->lang->execution->errorNameRepeat, strtolower(zget($this->lang->programplan->typeList, $type)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1991,10 +2019,15 @@ class executionModel extends model
|
||||
if($execution->parent) $parentList[$execution->parent] = $execution->parent;
|
||||
if($execution->projectName) $execution->name = $execution->projectName . ' / ' . $execution->name;
|
||||
}
|
||||
elseif($param === 'hasParentName')
|
||||
elseif(strpos($param, 'hasParentName') !== false)
|
||||
{
|
||||
$parentExecutions = $this->dao->select('id,name')->from(TABLE_EXECUTION)->where('id')->in(trim($execution->path, ','))->andWhere('type')->in('stage,kanban,sprint')->orderBy('grade')->fetchPairs();
|
||||
$executions[$execution->id]->title = implode('/', $parentExecutions);
|
||||
if(strpos($param, 'skipParent') !== false)
|
||||
{
|
||||
$children = $this->getChildExecutions($execution->id);
|
||||
if(count($children) > 0) $parentList[$execution->id] = $execution->id;
|
||||
}
|
||||
}
|
||||
elseif(isset($executions[$execution->parent]))
|
||||
{
|
||||
|
||||
@@ -59,7 +59,8 @@
|
||||
<form class='form-indicator main-form form-ajax' method='post' target='hiddenwin' id='dataform'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->execution->projectName;?></th>
|
||||
<?php $width = (strpos($app->getClientLang(), 'zh-') === false and !empty($project->model) and $project->model == 'agileplus') ? 'w-150px' : 'w-120px';?>
|
||||
<th class='<?php echo $width;?>'><?php echo $lang->execution->projectName;?></th>
|
||||
<td class="col-main"><?php echo html::select("project", $allProjects, $projectID, "class='form-control chosen' required onchange='refreshPage(this.value)'");?></td>
|
||||
<td colspan='2'></td>
|
||||
</tr>
|
||||
|
||||
@@ -33,14 +33,14 @@
|
||||
<?php if(isset($project)):?>
|
||||
<?php if($project->model == 'scrum'):?>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->execution->projectName;?></th>
|
||||
<th class='c-projectName'><?php echo $lang->execution->projectName;?></th>
|
||||
<td><?php echo html::select('project', $allProjects, $execution->project, "class='form-control chosen' onchange='changeProject(this.value)' required");?></td><td></td>
|
||||
</tr>
|
||||
<?php elseif($project->model == 'kanban'):?>
|
||||
<?php echo html::hidden('project', $project->id);?>
|
||||
<?php elseif($project->model == 'agileplus'):?>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->execution->method;?></th>
|
||||
<th class='c-method'><?php echo $lang->execution->method;?></th>
|
||||
<td><?php echo zget($lang->execution->typeList, $execution->type);?></td><td></td>
|
||||
</tr>
|
||||
<?php elseif($app->tab == 'project' and $project->model == 'waterfallplus'):?>
|
||||
@@ -51,7 +51,7 @@
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->execution->name;?></th>
|
||||
<th class='c-name'><?php echo $lang->execution->name;?></th>
|
||||
<td><?php echo html::input('name', $execution->name, "class='form-control' required");?></td><td></td>
|
||||
</tr>
|
||||
<?php if(isset($config->setCode) and $config->setCode == 1):?>
|
||||
|
||||
@@ -61,40 +61,27 @@ js::set('rdSearchValue', '');
|
||||
js::set('defaultMinColWidth', $this->config->minColWidth);
|
||||
js::set('defaultMaxColWidth', $this->config->maxColWidth);
|
||||
|
||||
$canSortRegion = (commonModel::hasPriv('kanban', 'sortRegion') and count($regions) > 1);
|
||||
$canCreateRegion = (common::hasPriv('kanban', 'createRegion') and $groupBy == 'default');
|
||||
$canSortRegion = commonModel::hasPriv('kanban', 'sortRegion') && count($regions) > 1;
|
||||
$canCreateRegion = common::hasPriv('kanban', 'createRegion') && $groupBy == 'default';
|
||||
$canEditRegion = commonModel::hasPriv('kanban', 'editRegion');
|
||||
$canDeleteRegion = commonModel::hasPriv('kanban', 'deleteRegion');
|
||||
$canCreateLane = commonModel::hasPriv('kanban', 'createLane');
|
||||
$canCreateTask = common::hasPriv('task', 'create');
|
||||
$canBatchCreateTask = common::hasPriv('task', 'batchCreate');
|
||||
$canImportTask = (common::hasPriv('execution', 'importTask') and $execution->multiple);
|
||||
$canImportTask = common::hasPriv('execution', 'importTask') && $execution->multiple;
|
||||
|
||||
if($execution->lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review')))
|
||||
{
|
||||
$canCreateBug = ($productID and common::hasPriv('bug', 'create'));
|
||||
$canBatchCreateBug = ($productID and common::hasPriv('bug', 'batchCreate') and $execution->multiple);
|
||||
$canImportBug = ($productID and common::hasPriv('execution', 'importBug'));
|
||||
$canCreateStory = ($productID and common::hasPriv('story', 'create'));
|
||||
$canBatchCreateStory = ($productID and common::hasPriv('story', 'batchCreate'));
|
||||
$canLinkStory = ($productID and common::hasPriv('execution', 'linkStory') and !empty($execution->hasProduct));
|
||||
$canLinkStoryByPlan = ($productID and common::hasPriv('execution', 'importplanstories') and !empty($project->hasProduct));
|
||||
$hasStoryButton = ($canCreateStory or $canBatchCreateStory or $canLinkStory or $canLinkStoryByPlan);
|
||||
$hasBugButton = ($canCreateBug or $canBatchCreateBug);
|
||||
}
|
||||
else
|
||||
{
|
||||
$canCreateBug = false;
|
||||
$canBatchCreateBug = false;
|
||||
$canImportBug = false;
|
||||
$canCreateStory = false;
|
||||
$canBatchCreateStory = false;
|
||||
$canLinkStory = false;
|
||||
$canLinkStoryByPlan = false;
|
||||
$hasStoryButton = false;
|
||||
$hasBugButton = false;
|
||||
}
|
||||
$hasTaskButton = ($canCreateTask or $canBatchCreateTask or $canImportBug);
|
||||
$canCreateBug = $features['qa'] && $productID && common::hasPriv('bug', 'create');
|
||||
$canBatchCreateBug = $features['qa'] && $productID && common::hasPriv('bug', 'batchCreate') && $execution->multiple;
|
||||
$canImportBug = $features['qa'] && $productID && common::hasPriv('execution', 'importBug');
|
||||
$hasBugButton = $features['qa'] && ($canCreateBug || $canBatchCreateBug);
|
||||
|
||||
$canCreateStory = $features['story'] && $productID && common::hasPriv('story', 'create');
|
||||
$canBatchCreateStory = $features['story'] && $productID && common::hasPriv('story', 'batchCreate');
|
||||
$canLinkStory = $features['story'] && $productID && common::hasPriv('execution', 'linkStory') && !empty($execution->hasProduct);
|
||||
$canLinkStoryByPlan = $features['story'] && $productID && common::hasPriv('execution', 'importplanstories') && !empty($project->hasProduct);
|
||||
$hasStoryButton = $features['story'] && ($canCreateStory || $canBatchCreateStory || $canLinkStory || $canLinkStoryByPlan);
|
||||
|
||||
$hasTaskButton = $canCreateTask || $canBatchCreateTask || $canImportBug;
|
||||
|
||||
js::set('priv',
|
||||
array(
|
||||
@@ -134,7 +121,7 @@ js::set('priv',
|
||||
'canDeleteStory' => common::hasPriv('story', 'delete'),
|
||||
'canChangeStory' => common::hasPriv('story', 'change'),
|
||||
'canCloseStory' => common::hasPriv('story', 'close'),
|
||||
'canUnlinkStory' => (common::hasPriv('execution', 'unlinkStory') and !empty($execution->hasProduct)),
|
||||
'canUnlinkStory' => (common::hasPriv('execution', 'unlinkStory') && !empty($execution->hasProduct)),
|
||||
'canViewStory' => common::hasPriv('execution', 'storyView'),
|
||||
)
|
||||
);
|
||||
@@ -142,13 +129,17 @@ js::set('priv',
|
||||
<?php if($groupBy == 'story' and $browseType == 'task'):?>
|
||||
<style>.kanban-cols {left: 0px !important;}</style>
|
||||
<?php endif;?>
|
||||
<?php if($execution->lifetime == 'ops' or in_array($execution->attribute, array('request', 'review'))):?>
|
||||
<?php if(!($features['story'] or $features['qa'])):?>
|
||||
<style>#mainMenu .c-group{margin-left: 0px;}</style>
|
||||
<?php endif;?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php if($execution->lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review'))):?>
|
||||
<?php if($features['story'] or $features['qa']):?>
|
||||
<div class="input-control space c-type">
|
||||
<?php
|
||||
if(!$features['story']) unset($lang->kanban->type['story']);
|
||||
if(!$features['qa']) unset($lang->kanban->type['bug']);
|
||||
?>
|
||||
<?php echo html::select('type', $lang->kanban->type, $browseType, 'class="form-control chosen" data-max_drop_width="215"');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -226,13 +217,14 @@ js::set('priv',
|
||||
<?php if($canLinkStoryByPlan) echo '<li>' . html::a('#linkStoryByPlan', $lang->execution->linkStoryByPlan, '', 'data-toggle="modal"') . '</li>';?>
|
||||
<?php if($hasStoryButton and $hasBugButton) echo '<li class="divider"></li>';?>
|
||||
<?php if($canCreateBug) echo '<li>' . html::a(helper::createLink('bug', 'create', "productID=$productID&branch=0&extra=executionID=$execution->id", '', true), $lang->bug->create, '', "class='iframe'") . '</li>';?>
|
||||
<?php if($canBatchCreateBug)
|
||||
<?php
|
||||
if($canBatchCreateBug)
|
||||
{
|
||||
|
||||
$batchCreateBugLink = '<li>' . html::a(helper::createLink('bug', 'batchCreate', "productID=$productID&branch=$branchID&executionID=$execution->id", '', true), $lang->bug->batchCreate, '', "class='iframe'") . '</li>';
|
||||
if($productNum > 1) $batchCreateBugLink = '<li>' . html::a('#batchCreateBug', $lang->bug->batchCreate, '', "data-toggle='modal'") . '</li>';
|
||||
echo $batchCreateBugLink;
|
||||
}?>
|
||||
}
|
||||
?>
|
||||
<?php if(($hasStoryButton or $hasBugButton) and $hasTaskButton) echo '<li class="divider"></li>';?>
|
||||
<?php if($canCreateTask) echo '<li>' . html::a(helper::createLink('task', 'create', "execution=$execution->id", '', true), $lang->task->create, '', "class='iframe'") . '</li>';?>
|
||||
<?php if($canImportBug) echo '<li>' . html::a(helper::createLink('execution', 'importBug', "executionID=$execution->id", '', true), $lang->execution->importBug, '', "class='iframe' data-width=90%") . '</li>';?>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<?php endif;?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php if(isset($lang->execution->menu->qa)):?>
|
||||
<?php if($features['qa']):?>
|
||||
<div class="input-control space c-type">
|
||||
<?php echo html::select('type', $lang->kanban->type, $browseType, 'class="form-control chosen" data-max_drop_width="215"');?>
|
||||
</div>
|
||||
@@ -62,7 +62,7 @@
|
||||
$link = common::hasPriv('execution', 'importTask') ? $this->createLink('execution', 'importTask', "execution=$execution->id") : '#';
|
||||
echo "<li $misc>" . html::a($link, $lang->execution->importTask, '', $misc) . "</li>";
|
||||
|
||||
if(isset($lang->execution->menu->qa))
|
||||
if($features['qa'])
|
||||
{
|
||||
$misc = common::hasPriv('execution', 'importBug') ? '' : "class=disabled";
|
||||
$link = common::hasPriv('execution', 'importBug') ? $this->createLink('execution', 'importBug', "execution=$execution->id") : '#';
|
||||
@@ -103,14 +103,14 @@
|
||||
<button class='btn btn-primary' type='button' data-toggle='dropdown'><i class='icon icon-plus'></i> <?php echo $this->lang->create;?> <span class='caret'></span></button>
|
||||
<ul class='dropdown-menu pull-right'>
|
||||
<?php $showDivider = false;?>
|
||||
<?php if(isset($lang->execution->menu->story) and $hasStoryButton):?>
|
||||
<?php if($features['story'] and $hasStoryButton):?>
|
||||
<?php if($canCreateStory) echo '<li>' . html::a(helper::createLink('story', 'create', "productID=$productID&branch=0&moduleID=0&story=0&execution=$execution->id", '', true), $lang->execution->createStory, '', "class='iframe' data-width='80%'") . '</li>';?>
|
||||
<?php if($canBatchCreateStory) echo '<li>' . html::a(helper::createLink('story', 'batchCreate', "productID=$productID&branch=0&moduleID=0&story=0&execution=$execution->id", '', true), $lang->execution->batchCreateStory, '', "class='iframe' data-width='90%'") . '</li>';?>
|
||||
<?php if($canLinkStory) echo '<li>' . html::a(helper::createLink('execution', 'linkStory', "execution=$execution->id", '', true), $lang->execution->linkStory, '', "class='iframe' data-width='90%'") . '</li>';?>
|
||||
<?php if($canLinkStoryByPlan) echo '<li>' . html::a('#linkStoryByPlan', $lang->execution->linkStoryByPlan, '', 'data-toggle="modal"') . '</li>';?>
|
||||
<?php $showDivider = true;?>
|
||||
<?php endif;?>
|
||||
<?php if(isset($lang->execution->menu->qa)):?>
|
||||
<?php if($features['qa']):?>
|
||||
<?php if($showDivider) echo '<li class="divider"></li>';?>
|
||||
<?php if($canCreateBug) echo '<li>' . html::a(helper::createLink('bug', 'create', "productID=$productID&branch=0&extra=executionID=$execution->id", '', true), $lang->bug->create, '', "class='iframe'") . '</li>';?>
|
||||
<?php if($canBatchCreateBug)
|
||||
@@ -238,6 +238,6 @@ js::set('priv',
|
||||
<?php js::set('defaultMinColWidth', $this->config->minColWidth);?>
|
||||
<?php js::set('defaultMaxColWidth', $this->config->maxColWidth);?>
|
||||
<?php js::set('teamWords', $lang->execution->teamWords);?>
|
||||
<?php js::set('canImportBug', isset($lang->execution->menu->qa));?>
|
||||
<?php js::set('canImportBug', $features['qa']);?>
|
||||
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
Reference in New Issue
Block a user