diff --git a/api/v1/entries/task.php b/api/v1/entries/task.php
index d31e606d72..444c47742b 100644
--- a/api/v1/entries/task.php
+++ b/api/v1/entries/task.php
@@ -87,7 +87,7 @@ class taskEntry extends entry
$task->preAndNext['pre'] = $preAndNext->pre ? $preAndNext->pre->id : '';
$task->preAndNext['next'] = $preAndNext->next ? $preAndNext->next->id : '';
- $execution = $this->loadModel('project')->getByID($task->execution, 'execution');
+ $execution = $this->loadModel('project')->getByID($task->execution, 'execution,sprint');
$task->executionStatus = $execution->status;
return $this->send(200, $this->format($task, 'deadline:date,openedBy:user,openedDate:time,assignedTo:user,assignedDate:time,realStarted:time,finishedBy:user,finishedDate:time,closedBy:user,closedDate:time,canceledBy:user,canceledDate:time,lastEditedBy:user,lastEditedDate:time,deleted:bool,mailto:userList'));
diff --git a/api/v1/entries/taskrecordestimate.php b/api/v1/entries/taskrecordestimate.php
index 22e816fe81..e14566cf91 100644
--- a/api/v1/entries/taskrecordestimate.php
+++ b/api/v1/entries/taskrecordestimate.php
@@ -36,9 +36,7 @@ class taskRecordEstimateEntry extends entry
if(!$data) return $this->error('error');
if(isset($data->status) and $data->status == 'fail') return $this->sendError(zget($data, 'code', 400), $data->message);
- $effort = new stdclass();
- if($issetEffort and $data->data->efforts) $effort = $data->data->efforts;
- if(!$issetEffort and $data->data->estimates) $effort = $data->data->estimates;
+ $effort = $data->data->efforts ? $data->data->efforts : new stdclass();
return $this->send(200, array('effort' => $effort));
}
diff --git a/module/build/control.php b/module/build/control.php
index 8dc4494c0e..8e7e735d29 100644
--- a/module/build/control.php
+++ b/module/build/control.php
@@ -183,7 +183,8 @@ class build extends control
$builds = $this->build->getBuildPairs($build->product, 'all', 'noempty,notrunk,singled,separate', $build->project, 'project', $build->builds, false);
}
- $executions = $this->product->getExecutionPairsByProduct($build->product, $build->branch, 'id_desc', $this->session->project, 'stagefilter');
+ $executions = $this->product->getExecutionPairsByProduct($build->product, $build->branch, 'id_desc', $this->session->project, 'stagefilter');
+ $executionType = $build->execution ? $this->execution->getByID($build->execution) : '';
if($build->execution and !isset($executions[$build->execution])) $executions[$build->execution] = $this->loadModel('execution')->getById($build->execution)->name;
/* Get stories and bugs. */
@@ -218,6 +219,7 @@ class build extends control
$this->view->orderBy = $orderBy;
$this->view->oldBranch = $oldBranch;
$this->view->executions = $executions;
+ $this->view->executionType = (!empty($executionType) and $executionType->type == 'stage') ? 1 : 0;
$this->view->productGroups = $productGroups;
$this->view->products = $products;
$this->view->users = $this->loadModel('user')->getPairs('noletter', $build->builder);
@@ -302,7 +304,8 @@ class build extends control
$objectID = $build->execution;
}
- $executions = $this->loadModel('execution')->getPairs($this->session->project, 'all', 'empty');
+ $executions = $this->loadModel('execution')->getPairs($this->session->project, 'all', 'empty');
+ $executionType = $build->execution ? $this->execution->getByID($build->execution) : '';
$this->commonActions($build->project);
@@ -329,19 +332,20 @@ class build extends control
/* Assign. */
$this->view->canBeChanged = common::canBeChanged('build', $build); // Determines whether an object is editable.
$this->view->users = $this->loadModel('user')->getPairs('noletter');
- $this->view->build = $build;
- $this->view->buildPairs = $this->build->getBuildPairs(0, 'all', 'noempty,notrunk', $objectID, $objectType);
- $this->view->builds = $this->build->getByList(array_keys($this->view->buildPairs));
- $this->view->executions = $executions;
- $this->view->actions = $this->loadModel('action')->getList('build', $buildID);
- $this->view->link = $link;
- $this->view->param = $param;
- $this->view->orderBy = $orderBy;
- $this->view->bugs = $bugs;
- $this->view->type = $type;
- $this->view->bugPager = $bugPager;
- $this->view->branchName = empty($branchName) ? $this->lang->branch->main : $branchName;
- $this->view->childBuilds = empty($build->builds) ? array() : $this->dao->select('id,name,bugs,stories')->from(TABLE_BUILD)->where('id')->in($build->builds)->fetchAll();
+ $this->view->build = $build;
+ $this->view->buildPairs = $this->build->getBuildPairs(0, 'all', 'noempty,notrunk', $objectID, $objectType);
+ $this->view->builds = $this->build->getByList(array_keys($this->view->buildPairs));
+ $this->view->executions = $executions;
+ $this->view->actions = $this->loadModel('action')->getList('build', $buildID);
+ $this->view->link = $link;
+ $this->view->param = $param;
+ $this->view->orderBy = $orderBy;
+ $this->view->bugs = $bugs;
+ $this->view->type = $type;
+ $this->view->bugPager = $bugPager;
+ $this->view->branchName = empty($branchName) ? $this->lang->branch->main : $branchName;
+ $this->view->childBuilds = empty($build->builds) ? array() : $this->dao->select('id,name,bugs,stories')->from(TABLE_BUILD)->where('id')->in($build->builds)->fetchAll();
+ $this->view->executionType = (!empty($executionType) and $executionType->type == 'stage') ? 1 : 0;
if($this->app->getViewType() == 'json')
{
diff --git a/module/build/js/common.js b/module/build/js/common.js
index 8f0538b32f..1ab62a3d81 100644
--- a/module/build/js/common.js
+++ b/module/build/js/common.js
@@ -20,8 +20,7 @@ function loadBranches(productID)
oldBranch = productGroups[productID]['branches'];
}
- projectID = currentTab == 'execution' ? executionID : projectID;
- $.get(createLink('branch', 'ajaxGetBranches', 'productID=' + productID + '&oldBranch=0¶m=active&projectID=' + projectID + '&withMainBranch=true&isSiblings=no&fieldID=0&multiple=multiple'), function(data)
+ $.get(createLink('branch', 'ajaxGetBranches', 'productID=' + productID + '&oldBranch=0¶m=active&projectID=' + $('#execution').val() + '&withMainBranch=true&isSiblings=no&fieldID=0&multiple=multiple'), function(data)
{
if(data)
{
diff --git a/module/build/lang/de.php b/module/build/lang/de.php
index 658b48f285..17b15639f3 100644
--- a/module/build/lang/de.php
+++ b/module/build/lang/de.php
@@ -34,6 +34,7 @@ $lang->build->branch = 'Platform/Branch';
$lang->build->branchAll = 'All associated %s';
$lang->build->branchName = '%s';
$lang->build->execution = $lang->executionCommon;
+$lang->build->executionAB = 'execution';
$lang->build->integrated = 'Integrated';
$lang->build->singled = 'Singled';
$lang->build->builds = 'Included Builds';
diff --git a/module/build/lang/en.php b/module/build/lang/en.php
index c877b2bf25..f97e216c23 100644
--- a/module/build/lang/en.php
+++ b/module/build/lang/en.php
@@ -34,6 +34,7 @@ $lang->build->branch = 'Platform/Branch';
$lang->build->branchAll = 'All associated %s';
$lang->build->branchName = '%s';
$lang->build->execution = $lang->executionCommon;
+$lang->build->executionAB = 'execution';
$lang->build->integrated = 'Integrated';
$lang->build->singled = 'Singled';
$lang->build->builds = 'Included Builds';
diff --git a/module/build/lang/fr.php b/module/build/lang/fr.php
index 33f4168700..3fc321540b 100644
--- a/module/build/lang/fr.php
+++ b/module/build/lang/fr.php
@@ -34,6 +34,7 @@ $lang->build->branch = 'Plateforme/Branche';
$lang->build->branchAll = 'All associated %s';
$lang->build->branchName = '%s';
$lang->build->execution = $lang->executionCommon;
+$lang->build->executionAB = 'execution';
$lang->build->integrated = 'Integrated';
$lang->build->singled = 'Singled';
$lang->build->builds = 'Included Builds';
diff --git a/module/build/lang/zh-cn.php b/module/build/lang/zh-cn.php
index a8c80bbd5b..4ef08ed9c5 100644
--- a/module/build/lang/zh-cn.php
+++ b/module/build/lang/zh-cn.php
@@ -34,6 +34,7 @@ $lang->build->branch = '平台/分支';
$lang->build->branchAll = '所有关联%s';
$lang->build->branchName = '所属%s';
$lang->build->execution = '所属' . $lang->executionCommon;
+$lang->build->executionAB = '所属执行';
$lang->build->integrated = '集成版本';
$lang->build->singled = '单一版本';
$lang->build->builds = '包含版本';
diff --git a/module/build/model.php b/module/build/model.php
index 9781b36b30..bede74d1e4 100644
--- a/module/build/model.php
+++ b/module/build/model.php
@@ -256,10 +256,11 @@ class buildModel extends model
->beginIF(strpos($params, 'hasdeleted') === false)->andWhere('deleted')->eq(0)->fi()
->fetchPairs();
}
+ $branchPairs = $this->dao->select('id,name')->from(TABLE_BRANCH)->fetchPairs();
$shadows = $this->dao->select('shadow')->from(TABLE_RELEASE)->where('product')->in($products)->fetchPairs('shadow', 'shadow');
$branchs = strpos($params, 'separate') === false ? "0,$branch" : $branch;
- $allBuilds = $this->dao->select('t1.id, t1.name, t1.execution, t1.date, t1.deleted, t2.status as objectStatus, t3.id as releaseID, t3.status as releaseStatus, t4.name as branchName, t5.type as productType')->from(TABLE_BUILD)->alias('t1')
+ $allBuilds = $this->dao->select('t1.id, t1.name, t1.branch, t1.execution, t1.date, t1.deleted, t2.status as objectStatus, t3.id as releaseID, t3.status as releaseStatus, t5.type as productType')->from(TABLE_BUILD)->alias('t1')
->beginIF($objectType === 'execution')->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')->fi()
->beginIF($objectType === 'project')->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')->fi()
->leftJoin(TABLE_RELEASE)->alias('t3')->on("FIND_IN_SET(t1.id,t3.build)")
@@ -289,7 +290,29 @@ class buildModel extends model
if((strpos($params, 'withexecution') !== false) and $build->execution and isset($executions[$build->execution])) continue;
if($build->deleted == 1) $build->name .= ' (' . $this->lang->build->deleted . ')';
- $branchName = $build->branchName ? $build->branchName : $this->lang->branch->main;
+
+ if(!empty($build->branch))
+ {
+ $branchName = '';
+ foreach(explode(',', $build->branch) as $buildBranch)
+ {
+ if(empty($buildBranch))
+ {
+ $branchName .= $this->lang->branch->main;
+ }
+ else
+ {
+ $branchName .= isset($branchPairs[$buildBranch]) ? $branchPairs[$buildBranch] : '';
+ }
+ $branchName .= ',';
+ }
+
+ $branchName = trim($branchName, ',');
+ }
+ else
+ {
+ $branchName = $this->lang->branch->main;
+ }
$buildName = $build->name;
if(strpos($params, 'withbranch') !== false and $build->productType != 'normal') $buildName = $branchName . '/' . $buildName;
diff --git a/module/build/view/edit.html.php b/module/build/view/edit.html.php
index fdaa8edaa1..59945e5179 100644
--- a/module/build/view/edit.html.php
+++ b/module/build/view/edit.html.php
@@ -64,7 +64,7 @@
-
build->execution;?> |
+ build->executionAB : $lang->build->execution;?> |
execution, "class='form-control chosen' required $disabled");?> |
build->notice->changeExecution;?> |
diff --git a/module/build/view/view.html.php b/module/build/view/view.html.php
index 47cb7cf6ce..ef74659025 100644
--- a/module/build/view/view.html.php
+++ b/module/build/view/view.html.php
@@ -384,7 +384,7 @@ tbody tr td:first-child input {display: none;}
execution):?>
- | build->project : $lang->build->execution;?> |
+ build->project :($executionType ? $lang->build->executionAB : $lang->build->execution);?> |
execution);?> |
diff --git a/module/execution/control.php b/module/execution/control.php
index 30a6c981cd..638d79f8d9 100644
--- a/module/execution/control.php
+++ b/module/execution/control.php
@@ -3132,6 +3132,7 @@ class execution extends control
$unmodifiableProducts = array();
$unmodifiableBranches = array();
$linkedStoryIDList = array();
+ $linkedBranchIdList = array();
foreach($linkedProducts as $productID => $linkedProduct)
{
$linkedBranches[$productID] = array();
@@ -3139,6 +3140,7 @@ class execution extends control
foreach($branches[$productID] as $branchID => $branch)
{
$linkedBranches[$productID][$branchID] = $branchID;
+ $linkedBranchIdList[$branchID] = $branchID;
if(!empty($executionStories[$productID][$branchID]))
{
array_push($unmodifiableProducts, $productID);
@@ -3158,7 +3160,7 @@ class execution extends control
$this->view->unmodifiableBranches = $unmodifiableBranches;
$this->view->linkedBranches = $linkedBranches;
$this->view->linkedStoryIDList = $linkedStoryIDList;
- $this->view->branchGroups = $this->execution->getBranchByProduct(array_keys($allProducts), $execution->project, 'ignoreNormal|noclosed');
+ $this->view->branchGroups = $this->execution->getBranchByProduct(array_keys($allProducts), $execution->project, 'ignoreNormal|noclosed', $linkedBranchIdList);
$this->view->allBranches = $this->execution->getBranchByProduct(array_keys($allProducts), $execution->project, 'ignoreNormal');
$this->display();
diff --git a/module/productplan/control.php b/module/productplan/control.php
index 8a941102e7..60f0bd94cc 100644
--- a/module/productplan/control.php
+++ b/module/productplan/control.php
@@ -80,7 +80,7 @@ class productplan extends control
if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $planID));
if(isonlybody()) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => 'parent.refreshPlan()'));
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink($this->app->rawModule, 'browse', "productID=$productID&branch=$branchID&browseType=all")));
+ return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink($this->app->rawModule, 'browse', "productID=$productID")));
}
$this->commonAction($productID, $branchID);
diff --git a/module/project/control.php b/module/project/control.php
index 68ddde12d2..f88b9241c5 100755
--- a/module/project/control.php
+++ b/module/project/control.php
@@ -2236,6 +2236,7 @@ class project extends control
}
$linkedBranches = array();
+ $linkedBranchIdList = array();
$branches = $this->project->getBranchesByProject($projectID);
$linkedProductIdList = empty($branches) ? '' : array_keys($branches);
$allProducts = $this->program->getProductPairs($project->parent, 'all', 'noclosed', $linkedProductIdList);
@@ -2253,6 +2254,7 @@ class project extends control
foreach($branches[$productID] as $branchID => $branch)
{
$linkedBranches[$productID][$branchID] = $branchID;
+ $linkedBranchIdList[$branchID] = $branchID;
if(!empty($projectStories[$productID][$branchID]) or !empty($projectBranches[$productID][$branchID]))
{
@@ -2263,7 +2265,7 @@ class project extends control
}
}
- $branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), 'ignoreNormal|noclosed');
+ $branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), 'ignoreNormal|noclosed', $linkedBranchIdList);
if($this->config->systemMode == 'ALM')
{
$topProgramID = $project->parent ? $this->program->getTopByPath($project->path) : 0;
diff --git a/module/project/css/managemembers.css b/module/project/css/managemembers.css
index a085f61def..b8a08354e8 100644
--- a/module/project/css/managemembers.css
+++ b/module/project/css/managemembers.css
@@ -6,3 +6,5 @@
.c-days {width: 100px;}
.c-hours {width: 90px;}
.c-limited {width: 110px;}
+.picker-drop-menu[id^="pickerDropMenu-pk_"] .picker-option-list > .picker-user-option,
+.picker-drop-menu[id*=" pickerDropMenu-pk_"] .picker-option-list > .picker-user-option {display: flex; align-items: center;}
diff --git a/module/project/model.php b/module/project/model.php
index 8d4afe8a87..46d27fcb6d 100644
--- a/module/project/model.php
+++ b/module/project/model.php
@@ -753,11 +753,14 @@ class projectModel extends model
public function getStatData($projectID)
{
$executions = $this->loadModel('execution')->getPairs($projectID);
- $storyCount = $this->dao->select('count(t2.story) as storyCount')->from(TABLE_STORY)->alias('t1')
+ $storyTypeCount = $this->dao->select('count(t2.story) as storyCount,t1.type')->from(TABLE_STORY)->alias('t1')
->leftJoin(TABLE_PROJECTSTORY)->alias('t2')->on('t1.id = t2.story')
->where('t2.project')->eq($projectID)
->andWhere('t1.deleted')->eq(0)
- ->fetch('storyCount');
+ ->groupBy('t1.type')
+ ->fetchPairs('type', 'storyCount');
+ $storyCount = isset($storyTypeCount['story']) ? $storyTypeCount['story'] : 0;
+ $requirementCount = isset($storyTypeCount['requirement']) ? $storyTypeCount['requirement'] : 0;
$taskCount = $this->dao->select('count(id) as taskCount')->from(TABLE_TASK)->where('execution')->in(array_keys($executions))->andWhere('deleted')->eq(0)->fetch('taskCount');
$bugCount = $this->dao->select('count(id) as bugCount')->from(TABLE_BUG)->where('project')->in($projectID)->andWhere('deleted')->eq(0)->fetch('bugCount');
@@ -773,13 +776,14 @@ class projectModel extends model
->fetch('count');
$statData = new stdclass();
- $statData->storyCount = $storyCount;
- $statData->taskCount = $taskCount;
- $statData->bugCount = $bugCount;
- $statData->waitCount = zget($statusPairs, 'wait', 0);
- $statData->doingCount = zget($statusPairs, 'doing', 0);
- $statData->finishedCount = $finishedCount;
- $statData->delayedCount = $delayedCount;
+ $statData->storyCount = $storyCount;
+ $statData->requirementCount = $requirementCount;
+ $statData->taskCount = $taskCount;
+ $statData->bugCount = $bugCount;
+ $statData->waitCount = zget($statusPairs, 'wait', 0);
+ $statData->doingCount = zget($statusPairs, 'doing', 0);
+ $statData->finishedCount = $finishedCount;
+ $statData->delayedCount = $delayedCount;
return $statData;
}
diff --git a/module/project/view/view.html.php b/module/project/view/view.html.php
index 35671524bf..aabf2af686 100644
--- a/module/project/view/view.html.php
+++ b/module/project/view/view.html.php
@@ -242,6 +242,24 @@
+ hasProduct) and !empty($config->URAndSR) and $project->model !== 'kanban' and isset($lang->project->menu->storyGroup)):?>
+
+ | story->common;?> |
+ storyCount;?> |
+ requirement->common;?> |
+ requirementCount;?> |
+
+
+ | task->common;?> |
+ taskCount;?> |
+ bug->common;?> |
+ bugCount;?> |
+
+
+ | project->budget;?> |
+ budget;?> |
+
+
| story->common;?> |
storyCount;?> |
@@ -254,6 +272,7 @@
project->budget;?> |
budget;?> |
+
diff --git a/module/projectrelease/model.php b/module/projectrelease/model.php
index 1cb51eee9e..966af83431 100644
--- a/module/projectrelease/model.php
+++ b/module/projectrelease/model.php
@@ -78,9 +78,9 @@ class projectreleaseModel extends model
$branchName = '';
if($release->branch != 'normal')
{
- foreach(explode(',', $release->branch) as $releaseBranch)
+ foreach(explode(',', trim($release->branch)) as $releaseBranch)
{
- $branchName .= $this->loadModel('branch')->getById($releaseBranch);
+ $branchName .= $this->loadModel('branch')->getById($releaseBranch, $release->product);
$branchName .= ',';
}
$branchName = trim($branchName, ',');
diff --git a/module/report/css/annualdata.css b/module/report/css/annualdata.css
index 75336c4c78..3e4034a566 100644
--- a/module/report/css/annualdata.css
+++ b/module/report/css/annualdata.css
@@ -46,7 +46,7 @@ section.active {border: 1px solid rgb(0, 166, 255);}
#infoList > li.dropdown .dropdown-menu > li {line-height: 1; height: 20px;}
#infoList > li.dropdown .dropdown-menu > li .todoStatus {display: inline-block; width: 80px;}
-#actionData {width: 525px; height: 330px; margin: 0px 20px;}
+#actionData {width: 525px; height: 330px; margin: 0px 15px;}
#actionData > div {margin-top: 13px;}
#actionData > div > ul > li {margin-bottom: 3px; cursor: default;}
#actionData > div > ul > li .dropdown-menu {background-color: #000; padding: 5px; border: 1px solid #999;}
@@ -67,7 +67,7 @@ section.active {border: 1px solid rgb(0, 166, 255);}
#executionData table, #productData table {margin-bottom: 0px;}
#executionData table tr>th, #productData table tr>th {color: #fff !important;}
#executionData .c-story, #executionData .c-task, #executionData .c-bug {text-align: center; width: 105px;}
-#productData {margin-left: 20px;}
+#productData {margin-left: 12px;}
#productData .c-plan, #productData .c-requirement, #productData .c-story, #productData .c-closed {text-align: center; width: 105px;}
#productData .c-story {width: 115px;}
#productData .c-requirement {width: 140px;}
@@ -81,4 +81,4 @@ section.active {border: 1px solid rgb(0, 166, 255);}
.dataYearStat > div {margin-top: 5px;}
.dataYearStat .canvas {float: left; height: 305px; padding-left: 30px;}
.dataYearStat .canvas.left {width: 450px;}
-.dataYearStat .canvas.right {width: 810px; float: right;}
\ No newline at end of file
+.dataYearStat .canvas.right {width: 810px; float: right;}
diff --git a/module/story/control.php b/module/story/control.php
index fd1e67ff0c..33e028a84c 100755
--- a/module/story/control.php
+++ b/module/story/control.php
@@ -1906,12 +1906,11 @@ class story extends control
$productStoryList = array();
$productList = array();
$ignoreTwins = array();
- $twinsCount = 0;
+ $twinsCount = array();
foreach($stories as $story)
{
if(!empty($ignoreTwins) and isset($ignoreTwins[$story->id]))
{
- $twinsCount ++;
unset($stories[$story->id]);
continue;
}
@@ -1933,7 +1932,12 @@ class story extends control
if(!empty($story->twins))
{
- foreach(explode(',', trim($story->twins, ',')) as $twinID) $ignoreTwins[$twinID] = $twinID;
+ $twinsCount[$story->id] = 0;
+ foreach(explode(',', trim($story->twins, ',')) as $twinID)
+ {
+ $twinsCount[$story->id] ++;
+ $ignoreTwins[$twinID] = $twinID;
+ }
}
}
diff --git a/module/story/model.php b/module/story/model.php
index a333c5dcc6..6d39914d6d 100644
--- a/module/story/model.php
+++ b/module/story/model.php
@@ -866,6 +866,7 @@ class storyModel extends model
{
$this->dbh->exec("UPDATE " . TABLE_STORY . " SET twins = REPLACE(twins, ',$storyID,', ',') WHERE `product` = $oldStory->product");
$this->dao->update(TABLE_STORY)->set('twins')->eq('')->where('id')->eq($storyID)->orWhere('twins')->eq(',')->exec();
+ if(!dao::isError()) $this->loadModel('action')->create('story', $storyID, 'relieved');
}
elseif(!empty($oldStory->twins))
{
@@ -2228,41 +2229,6 @@ class storyModel extends model
if(empty($oldPlanID)) $story->plan = $planID;
if($oldStory->branch) $story->plan = $planID;
- /* Append the plan id to plan field if product is multi and story is all branch. */
- if($this->session->currentProductType != 'normal' and empty($story->branch))
- {
- $branchPlanPairs = $this->dao->select('branch, id as plan')->from(TABLE_PRODUCTPLAN)
- ->where('product')->eq($oldStory->product)
- ->andWhere('id')->in($oldStory->plan)
- ->fetchPairs();
- foreach($branchPlanPairs as $branches => $planParis)
- {
- foreach(explode(',', $branches) as $branch)
- {
- $branchPlanPairs[$branch] = $planParis;
- }
- unset($branchPlanPairs[$branches]);
- }
- if($planID == 0 and !empty($oldStory->plan) and isset($branchPlanPairs[0]) and $branchPlanPairs[0] != $planID) $unlinkPlans[$branchPlanPairs[0]] = empty($unlinkPlans[$branchPlanPairs[0]]) ? $storyID : "{$unlinkPlans[$branchPlanPairs[0]]},$storyID";
- if($planID != 0)
- {
- if(!empty($oldStory->plan))
- {
- foreach(explode(',', $plan->branch) as $planBranch)
- {
- if(isset($branchPlanPairs[$planBranch]) and $branchPlanPairs[$planBranch] != $planID)
- {
- $unlinkPlans[$branchPlanPairs[$planBranch]] = empty($unlinkPlans[$branchPlanPairs[$planBranch]]) ? $storyID : "{$unlinkPlans[$branchPlanPairs[$planBranch]]},$storyID";
- }
- }
- }
- foreach(explode(',', $plan->branch) as $planBranch) if(isset($branchPlanPairs[$planBranch])) $branchPlanPairs[$planBranch] = $planID;
- $story->plan = $oldStory->plan ? implode(',', array_unique($branchPlanPairs)) : $planID;
- $story->plan = trim($story->plan, ',');
- if($story->plan != $oldStory->plan and !empty($planID)) $link2Plans[$planID] = empty($link2Plans[$planID]) ? $storyID : "{$link2Plans[$planID]},$storyID";
- }
- }
-
/* Change stage. */
if($planID)
{
diff --git a/module/story/view/affected.html.php b/module/story/view/affected.html.php
index aafa1adf88..23f1651269 100644
--- a/module/story/view/affected.html.php
+++ b/module/story/view/affected.html.php
@@ -11,7 +11,7 @@ if(isset($twins))
story->affectedProjects;?> executions); if($count > 0) echo "" . $count . "" ?>
story->affectedBugs;?> bugs); if($count > 0) echo "" . $count . "" ?>
story->affectedCases;?> cases); if($count > 0) echo "" . $count . "" ?>
- 0) echo $lang->story->affectedTwins;?> 0) echo "" . count($twins) . "" ?>
+ 0) echo $lang->story->affectedTwins;?> 0) echo "" . count($twins) . "" ?>
diff --git a/module/story/view/batchclose.html.php b/module/story/view/batchclose.html.php
index 41148cf959..3427bf860b 100755
--- a/module/story/view/batchclose.html.php
+++ b/module/story/view/batchclose.html.php
@@ -37,7 +37,7 @@
title;?>
twins)):?>
- story->twins}:"?>
+ story->twins}:"?> id]?>
|
processStatus('story', $story);?> |
diff --git a/module/story/view/close.html.php b/module/story/view/close.html.php
index 9b927c4b6c..9b4f1cc374 100644
--- a/module/story/view/close.html.php
+++ b/module/story/view/close.html.php
@@ -34,7 +34,7 @@
story->relievedTwinsRelation;?>
-
+
diff --git a/module/story/view/create.html.php b/module/story/view/create.html.php
index 138f437f69..a19469e272 100644
--- a/module/story/view/create.html.php
+++ b/module/story/view/create.html.php
@@ -68,7 +68,9 @@ foreach(explode(',', $config->story->create->requiredFields) as $field)
| switchBranch'> |
switchBranch'>
|
+
| story->planAB;?> |
@@ -139,11 +142,12 @@ foreach(explode(',', $config->story->create->requiredFields) as $field)
?>
|
+
+ story->assignedTo;?> |
+
' id='assignedToBox'>
|
diff --git a/module/story/view/header.html.php b/module/story/view/header.html.php
index 9d743f9c5b..8339e13792 100644
--- a/module/story/view/header.html.php
+++ b/module/story/view/header.html.php
@@ -1,6 +1,7 @@
app->rawMethod);?>
+
"}).replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return"
"}).replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/gi,function(e,t,n,i){return e=e.replace(/(\s+(?:href|src)=")[^"]*(")/i,function(e,t,i){return t+_unescape(n)+i}),e=e.replace(/\s+data-ke-src="[^"]*"/i,"")}).replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+n})}),t.beforeSetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/
]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||"");return"none"==n.display?'
':e})),e.replace(/