diff --git a/extension/lite/product/ext/view/browse.html.php b/extension/lite/product/ext/view/browse.html.php
index 5e563f9c1a..524ca6c491 100644
--- a/extension/lite/product/ext/view/browse.html.php
+++ b/extension/lite/product/ext/view/browse.html.php
@@ -18,6 +18,7 @@ body {margin-bottom: 25px;}
#mainMenu .btn-toolbar .btn-group .dropdown-menu .btn-active-text:hover .text:after {border-bottom: unset;}
.body-modal #mainMenu>.btn-toolbar {width: auto;}
.assignedTo{border-radius: 4px !important;}
+#productStoryForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #F4F5F7; margin: 0 4px 0 0;}
diff --git a/module/execution/css/story.css b/module/execution/css/story.css
index 3c75842a66..edef11c0c7 100644
--- a/module/execution/css/story.css
+++ b/module/execution/css/story.css
@@ -20,3 +20,4 @@ th.c-pri{width:50px;}
.switchBtn {background-color: #fff !important;}
.switchBtn > i {padding-left: 7px;}
#main>.container {padding: 0 20px 20px 23px;}
+#executionStoryForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #F4F5F7; margin: 0 4px 0 0;}
diff --git a/module/my/css/common.css b/module/my/css/common.css
index 7f537d48f0..8b139ae11f 100644
--- a/module/my/css/common.css
+++ b/module/my/css/common.css
@@ -8,3 +8,4 @@
.dropdown-list > li > a:focus {color: #1a4f85; text-decoration: none; background-color: #ddd;}
.btn-toolbar .nav-title {float: left; display: inline-block; padding: 6px 12px; margin-bottom: 0; font-size: 13px; font-weight: bolder; line-height: 18px; text-align: center; white-space: nowrap; vertical-align: middle;}
+#myStoryForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #F4F5F7; margin: 0 4px 0 0;}
diff --git a/module/my/css/story.css b/module/my/css/story.css
index 13919b8117..58b9c22c7d 100644
--- a/module/my/css/story.css
+++ b/module/my/css/story.css
@@ -10,3 +10,4 @@
.table td.c-hours {padding-right: 12px;}
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};}
+.c-actions-6 {width: 185px;}
diff --git a/module/my/view/requirement.html.php b/module/my/view/requirement.html.php
index 37248276c6..d607ca8e1c 100644
--- a/module/my/view/requirement.html.php
+++ b/module/my/view/requirement.html.php
@@ -114,8 +114,21 @@
echo common::buildIconButton('story', 'review', "$vars&from=product&storyType=requirement", $story, 'list', 'search', '', 'iframe', true);
}
echo common::buildIconButton('story', 'recall', "$vars&from=list&storyType=requirement", $story, 'list', 'undo', 'hiddenwin', '', '', '', $lang->story->recall);
- echo common::buildIconButton('story', 'close', "$vars&from=&storyType=requirement", $story, 'list', '', '', 'iframe', true);
echo common::buildIconButton('story', 'edit', "$vars&from=default&storyType=requirement", $story, 'list', '', '', 'iframe', true, "data-width='95%'");
+
+ $storyType = 'storyType=requirement';
+ $canChange = common::hasPriv('story', 'change', '', $storyType);
+ $canSubmitReview = (strpos('draft,changing', $story->status) !== false and common::hasPriv('story', 'submitReview', '', $storyType));
+ $canReview = (strpos('draft,changing', $story->status) === false and common::hasPriv('story', 'review', '', $storyType));
+ $canRecall = common::hasPriv('story', 'recall', '', $storyType);
+ $canEdit = common::hasPriv('story', 'edit', '', $storyType);
+ $canClose = common::hasPriv('story', 'close', '', $storyType);
+ if(($canChange or $canSubmitReview or $canReview or $canRecall or $canEdit) and $canClose)
+ {
+ echo "
";
+ }
+
+ echo common::buildIconButton('story', 'close', "$vars&from=&storyType=requirement", $story, 'list', '', '', 'iframe', true);
}
?>
@@ -163,8 +176,19 @@
}
common::printIcon('story', 'recall', "$vars&from=list&storyType=story", $child, 'list', 'undo', 'hiddenwin', '', '', '', $lang->story->recall);
- common::printIcon('story', 'close', "$vars&from=&storyType=story", $child, 'list', '', '', 'iframe', true);
common::printIcon('story', 'edit', "$vars&from=default&storyType=story", $child, 'list');
+ $storyType = 'storyType=story';
+ $canChange = common::hasPriv('story', 'change', '', $storyType);
+ $canSubmitReview = (strpos('draft,changing', $child->status) !== false and common::hasPriv('story', 'submitReview', '', $storyType));
+ $canReview = (strpos('draft,draft', $child->status) === false and common::hasPriv('story', 'review', '', $storyType));
+ $canRecall = common::hasPriv('story', 'recall', '', $storyType);
+ $canEdit = common::hasPriv('story', 'edit', '', $storyType);
+ $canClose = common::hasPriv('story', 'close', '', $storyType);
+ if(($canChange or $canSubmitReview or $canReview or $canRecall or $canEdit) and $canClose)
+ {
+ echo "";
+ }
+ common::printIcon('story', 'close', "$vars&from=&storyType=story", $child, 'list', '', '', 'iframe', true);
}
}
?>
diff --git a/module/my/view/story.html.php b/module/my/view/story.html.php
index b309858436..933b5ce449 100644
--- a/module/my/view/story.html.php
+++ b/module/my/view/story.html.php
@@ -50,6 +50,11 @@
$canBatchReview = common::hasPriv('story', 'batchReview');
$canBatchAssignTo = common::hasPriv('story', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchReview or $canBatchAssignTo);
+ $canChange = common::hasPriv('story', 'change');
+ $canRecall = common::hasPriv('story', 'recall');
+ $canEdit = common::hasPriv('story', 'edit');
+ $canCreateCase = common::hasPriv('testcase', 'create');
+ $canClose = common::hasPriv('story', 'close');
?>
@@ -116,9 +121,21 @@
}
echo common::buildIconButton('story', 'recall', $vars, $story, 'list', 'undo', 'hiddenwin', '', '', '', $lang->story->recall);
- echo common::buildIconButton('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
echo common::buildIconButton('story', 'edit', $vars, $story, 'list', '', '', 'iframe', true, "data-width='95%'");
- echo common::buildIconButton('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap', '', 'iframe', true, "data-width='95%'");
+
+ $canSubmitReview = (strpos('draft,changing', $story->status) !== false and common::hasPriv('story', 'submitReview'));
+ $canReview = (strpos('draft,changing', $story->status) === false and common::hasPriv('story', 'review'));
+
+ if(($canChange or $canSubmitReview or $canReview or $canRecall or $canEdit) and ($canCreateCase or $canClose))
+ {
+ echo "";
+ }
+
+ echo common::buildIconButton('testcase', 'create', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap', '', 'iframe', true, "data-width='95%'");
+
+ if($canCreateCase and $canClose) echo "";
+
+ echo common::buildIconButton('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
}
?>
@@ -165,9 +182,21 @@
common::printIcon('story', 'review', $vars, $child, 'list', 'search', '', 'iframe', true);
}
common::printIcon('story', 'recall', $vars, $child, 'list', 'undo', 'hiddenwin', '', '', '', $lang->story->recall);
- common::printIcon('story', 'close', $vars, $child, 'list', '', '', 'iframe', true);
common::printIcon('story', 'edit', $vars, $child, 'list', '', '', 'iframe', true, "data-width='95%'");
- common::printIcon('story', 'createCase', "productID=$child->product&branch=$child->branch&module=0&from=¶m=0&$vars", $child, 'list', 'sitemap', '', 'iframe', true, "data-width='95%'");
+
+ $canSubmitReview = (strpos('draft,changing', $child->status) !== false and common::hasPriv('story', 'submitReview'));
+ $canReview = (strpos('draft,changing', $child->status) === false and common::hasPriv('story', 'review'));
+
+ if(($canChange or $canSubmitReview or $canReview or $canRecall or $canEdit) and ($canCreateCase or $canClose))
+ {
+ echo "";
+ }
+
+ common::printIcon('testcase', 'create', "productID=$child->product&branch=$child->branch&module=0&from=¶m=0&$vars", $child, 'list', 'sitemap', '', 'iframe', true, "data-width='95%'");
+
+ if($canCreateCase and $canClose) echo "";
+
+ common::printIcon('story', 'close', $vars, $child, 'list', '', '', 'iframe', true);
}
?>
diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php
index 48cfe38868..b0de892804 100644
--- a/module/product/view/browse.html.php
+++ b/module/product/view/browse.html.php
@@ -43,7 +43,7 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
.btn-group button.dropdown-toggle.btn-secondary, .btn-group button.dropdown-toggle.btn-primary {padding:6px;}
#productStoryForm table tbody tr td.c-actions {overflow: visible;}
-#productStoryForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #E4E4E4; margin: 0 4px 0 0;}
+#productStoryForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #F4F5F7; margin: 0 4px 0 0;}
@@ -347,11 +347,11 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
{
if($value->id == 'title' || $value->id == 'id' || $value->id == 'pri' || $value->id == 'status')
{
- $this->story->printCell($value, $story, $users, $branchOption, $storyStages, $modulePairs, $storyTasks, $storyBugs, $storyCases, $useDatatable ? 'datatable' : 'table');
+ $this->story->printCell($value, $story, $users, $branchOption, $storyStages, $modulePairs, $storyTasks, $storyBugs, $storyCases, $useDatatable ? 'datatable' : 'table', $storyType);
}
}?>
- $value) $this->story->printCell($value, $story, $users, $branchOption, $storyStages, $modulePairs, $storyTasks, $storyBugs, $storyCases, $useDatatable ? 'datatable' : 'table');?>
+ $value) $this->story->printCell($value, $story, $users, $branchOption, $storyStages, $modulePairs, $storyTasks, $storyBugs, $storyCases, $useDatatable ? 'datatable' : 'table', $storyType);?>
children)):?>
diff --git a/module/story/config.php b/module/story/config.php
index 54860370f6..7d50c08739 100644
--- a/module/story/config.php
+++ b/module/story/config.php
@@ -254,5 +254,5 @@ $config->story->datatable->fieldList['caseCount']['name'] = $lang->story->ca
$config->story->datatable->fieldList['actions']['title'] = 'actions';
$config->story->datatable->fieldList['actions']['fixed'] = 'right';
-$config->story->datatable->fieldList['actions']['width'] = $app->tab == 'project' ? '220' : '200';
+$config->story->datatable->fieldList['actions']['width'] = $app->tab == 'project' ? '220' : '210';
$config->story->datatable->fieldList['actions']['required'] = 'yes';
diff --git a/module/story/model.php b/module/story/model.php
index 5fedffa416..51f7fb7f64 100644
--- a/module/story/model.php
+++ b/module/story/model.php
@@ -4193,7 +4193,6 @@ class storyModel extends model
if($action == 'close') return $story->status != 'closed';
if($action == 'activate') return $story->status == 'closed';
if($action == 'assignto') return $story->status != 'closed';
- if($action == 'createcase') return $story->type != 'requirement';
if($action == 'batchcreate' and $story->parent > 0) return false;
if($action == 'batchcreate' and $story->type == 'requirement' and $story->status != 'closed') return strpos('draft,reviewing,changing', $story->status) === false;
if($action == 'batchcreate' and $config->vision == 'lite' and ($story->status == 'active' and ($story->stage == 'wait' or $story->stage == 'projected'))) return true;
@@ -4207,10 +4206,12 @@ class storyModel extends model
*
* @param object $story
* @param string $type
+ * @param object $execution
+ * @param string $storyType story|requirement
* @access public
* @return string
*/
- public function buildOperateMenu($story, $type = 'view', $execution = '')
+ public function buildOperateMenu($story, $type = 'view', $execution = '', $storyType = 'story')
{
$menu = '';
$params = "storyID=$story->id";
@@ -4255,30 +4256,38 @@ class storyModel extends model
$isClick = $this->isClickable($story, 'recall');
$title = $story->status == 'changing' ? $this->lang->story->recallChange : $this->lang->story->recall;
$title = $isClick ? $title : $this->lang->story->recallTip['actived'];
- $storyPriv = array(common::hasPriv('story', 'change'), common::hasPriv('story', 'submitReview'), common::hasPriv('story', 'review'), common::hasPriv('story', 'close'));
- $storyPrivCount = array_sum($storyPriv);
- if($this->app->tab == 'product' and common::hasPriv('story', 'recall') && ($storyPrivCount > 1))
+ $menu .= $this->buildMenu('story', 'recall', $params . "&from=list&confirm=no&storyType=$story->type", $story, $type, 'undo', 'hiddenwin', 'showinonlybody', false, '', $title);
+ $menu .= $this->buildMenu('story', 'edit', $params . "&kanbanGroup=default&storyType=$story->type", $story, $type, '', '', 'showinonlybody');
+
+ $vars = "storyType={$story->type}";
+ $canChange = common::hasPriv('story', 'change', '', $vars);
+ $canRecall = common::hasPriv('story', 'recall', '', $vars);
+ $canSubmitReview = (strpos('draft,changing', $story->status) !== false and common::hasPriv('story', 'submitReview', '', $vars));
+ $canReview = (strpos('draft,changing', $story->status) === false and common::hasPriv('story', 'review', '', $vars));
+ $canEdit = common::hasPriv('story', 'edit', '', $vars);
+ $canBatchCreate = ($this->app->tab == 'product' and (common::hasPriv('story', 'batchCreate', '', 'storyType=story')));
+ $canCreateCase = ($story->type == 'story' and common::hasPriv('testcase', 'create'));
+ $canClose = common::hasPriv('story', 'close', '', $vars);
+ $canUnlinkStory = ($this->app->tab == 'project' and common::hasPriv('projectstory', 'unlinkStory'));
+
+ if(in_array($this->app->tab, array('product', 'project')))
{
- $menu .= "";
- $menu .= "";
- $menu .= "";
- $menu .= "
";
- } else {
- $menu .= $this->buildMenu('story', 'recall', $params . "&from=list&confirm=no&storyType=$story->type", $story, $type, 'undo', 'hiddenwin', 'showinonlybody', false, '', $title);
+ if(($canChange or $canRecall or $canSubmitReview or $canReview or $canEdit) and ($canCreateCase or $canBatchCreate or $canClose or $canUnlinkStory))
+ {
+ $menu .= "";
+ }
}
- $menu .= $this->buildMenu('story', 'close', $params . "&from=&storyType=$story->type", $story, $type, '', '', 'iframe', true);
- if($this->app->tab == 'product' and (common::hasPriv('story', 'recall') or $storyPrivCount > 0) and (common::hasPriv('story', 'edit') or common::hasPriv('story', 'createCase') or common::hasPriv('story', 'batchCreate')))
+ if($this->app->tab == 'product' and $storyType == 'requirement')
{
- $menu .= "";
+ $menu .= $this->buildMenu('story', 'close', $params . "&from=&storyType=$story->type", $story, $type, '', '', 'iframe', true);
+ if($canClose and ($canBatchCreate or $canCreateCase)) $menu .= "";
}
- $menu .= $this->buildMenu('story', 'edit', $params . "&kanbanGroup=default&storyType=$story->type", $story, $type, '', '', 'showinonlybody');
+ if($storyType == 'requirement') $menu .= $this->buildMenu('story', 'batchCreate', "productID=$story->product&branch=$story->branch&module=$story->module&$params&executionID=0&plan=0&storyType=story", $story, $type, 'split', '', 'showinonlybody', '', '', $title);
$tab = $this->app->tab == 'project' ? 'project' : 'qa';
- if($story->type != 'requirement' and $this->config->vision != 'lite') $menu .= $this->buildMenu('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$params", $story, $type, 'sitemap', '', 'showinonlybody', false, "data-app='$tab'");
+ if($story->type != 'requirement' and $this->config->vision != 'lite') $menu .= $this->buildMenu('testcase', 'create', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$params", $story, $type, 'sitemap', '', 'showinonlybody', false, "data-app='$tab'");
if($this->app->rawModule != 'projectstory' OR $this->config->vision == 'lite')
{
@@ -4296,9 +4305,24 @@ class storyModel extends model
if($story->status == 'active' and $story->stage != 'wait') $title = sprintf($this->lang->story->subDivideTip['notWait'], zget($this->lang->story->stageList, $story->stage));
}
}
- $menu .= $this->buildMenu('story', 'batchCreate', "productID=$story->product&branch=$story->branch&module=$story->module&$params&executionID=0&plan=0&storyType=story", $story, $type, 'split', '', 'showinonlybody', '', '', $title);
+
+ if($storyType == 'story') $menu .= $this->buildMenu('story', 'batchCreate', "productID=$story->product&branch=$story->branch&module=$story->module&$params&executionID=0&plan=0&storyType=story", $story, $type, 'split', '', 'showinonlybody', '', '', $title);
+ }
+
+ if($this->app->rawModule == 'projectstory' and $this->config->vision != 'lite')
+ {
+ if($canCreateCase and ($canClose or $canUnlinkStory)) $menu .= "";
+
+ $menu .= $this->buildMenu('story', 'close', $params . "&from=&storyType=$story->type", $story, $type, '', '', 'iframe', true);
+ $menu .= $this->buildMenu('projectstory', 'unlinkStory', "projectID={$this->session->project}&$params", $story, $type, 'unlink', 'hiddenwin', 'showinonlybody');
+ }
+
+ if($this->app->tab == 'product' and $storyType == 'story')
+ {
+ if(($canBatchCreate or $canCreateCase) and $canClose) $menu .= "";
+
+ $menu .= $this->buildMenu('story', 'close', $params . "&from=&storyType=$story->type", $story, $type, '', '', 'iframe', true);
}
- if($this->app->rawModule == 'projectstory' and $this->config->vision != 'lite') $menu .= $this->buildMenu('projectstory', 'unlinkStory', "projectID={$this->session->project}&$params", $story, $type, 'unlink', 'hiddenwin', 'showinonlybody');
}
else
@@ -4374,13 +4398,22 @@ class storyModel extends model
$story->reviewer = isset($story->reviewer) ? $story->reviewer : array();
$story->notReview = isset($story->notReview) ? $story->notReview : array();
+ $canSubmitReview = (strpos('draft,changing', $story->status) !== false and common::hasPriv('story', 'submitReview'));
+ $canReview = (strpos('draft,changing', $story->status) === false and common::hasPriv('story', 'review'));
+ $canRecall = common::hasPriv('story', 'recall');
+ $canCreateTask = common::hasPriv('task', 'create');
+ $canBatchCreateTask = common::hasPriv('task', 'batchCreate');
+ $canCreateCase = ($hasDBPriv and common::hasPriv('testcase', 'create'));
+ $canEstimate = common::hasPriv('execution', 'storyEstimate', $execution);
+ $canUnlinkStory = common::hasPriv('execution', 'unlinkStory', $execution);
+
if(strpos('draft,changing', $story->status) !== false)
{
- if(common::hasPriv('story', 'submitReview')) $menu .= common::printIcon('story', 'submitReview', "storyID=$story->id&from=story", $story, 'list', 'confirm', '', 'iframe', true, "data-width='50%'");
+ if($canSubmitReview) $menu .= common::printIcon('story', 'submitReview', "storyID=$story->id&from=story", $story, 'list', 'confirm', '', 'iframe', true, "data-width='50%'");
}
else
{
- if(common::hasPriv('story', 'review'))
+ if($canReview)
{
$reviewDisabled = in_array($this->app->user->account, $story->notReview) and ($story->status == 'draft' or $story->status == 'changing') ? '' : 'disabled';
$story->from = 'execution';
@@ -4388,7 +4421,7 @@ class storyModel extends model
}
}
- if(common::hasPriv('story', 'recall'))
+ if($canRecall)
{
$recallDisabled = empty($story->reviewedBy) and strpos('draft,changing', $story->status) !== false and !empty($story->reviewer) ? '' : 'disabled';
$title = $story->status == 'changing' ? $this->lang->story->recallChange : $this->lang->story->recall;
@@ -4410,21 +4443,29 @@ class storyModel extends model
$this->lang->task->batchCreate = $this->lang->execution->batchWBS;
if($hasDBPriv) $menu .= common::printIcon('task', 'batchCreate', "executionID=$executionID&story={$story->id}", '', 'list', 'pluses', '', $toTaskDisabled);
+ if(($canSubmitReview or $canReview or $canRecall or $canCreateTask or $canBatchCreateTask) and ($canCreateCase or $canEstimate or $canUnlinkStory))
+ {
+ $menu .= "";
+ }
+
+ if($canEstimate)
+ {
+ $menu .= common::buildIconButton('execution', 'storyEstimate', "executionID=$executionID&storyID=$story->id", '', 'list', 'estimate', '', 'iframe', true, "data-width='470px'");
+ }
+
$this->lang->testcase->batchCreate = $this->lang->testcase->create;
- if($hasDBPriv and common::hasPriv('testcase', 'create'))
+ if($canCreateCase)
{
- $menu .= html::a(helper::createLink('testcase', 'create', "productID=$story->product&branch=$story->branch&moduleID=$story->module&form=¶m=0&storyID=$story->id"), '', '', "class='btn' title='{$this->lang->testcase->create}' data-app='qa'");
+ $menu .= common::buildIconButton('testcase', 'create', "productID=$story->product&branch=$story->branch&moduleID=$story->module&form=¶m=0&storyID=$story->id", '', 'list', 'sitemap', '', '', '', "data-app='qa'");
}
- if($canBeChanged and common::hasPriv('execution', 'storyEstimate', $execution))
+ if(($canEstimate or $canCreateCase) and $canUnlinkStory) $menu .= "";
+
+ if($canUnlinkStory)
{
- $menu .= common::printIcon('execution', 'storyEstimate', "executionID=$executionID&storyID=$story->id", '', 'list', 'estimate', '', 'iframe', true, "data-width='470px'");
+ $menu .= common::buildIconButton('execution', 'unlinkStory', "executionID=$executionID&storyID=$story->id&confirm=no", '', 'list', 'unlink', 'hiddenwin');
}
- if($canBeChanged and common::hasPriv('execution', 'unlinkStory', $execution))
- {
- $menu .= common::printIcon('execution', 'unlinkStory', "executionID=$executionID&storyID=$story->id&confirm=no", '', 'list', 'unlink', 'hiddenwin');
- }
}
}
@@ -4889,7 +4930,7 @@ class storyModel extends model
$menuType = 'browse';
$execution = '';
}
- echo $this->buildOperateMenu($story, $menuType, $execution);
+ echo $this->buildOperateMenu($story, $menuType, $execution, $storyType);
break;
}
echo '';
diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php
index 09f8e1fa85..034e14830c 100644
--- a/module/story/view/view.html.php
+++ b/module/story/view/view.html.php
@@ -174,7 +174,7 @@
common::printIcon('story', 'close', "storyID=$child->id&from=&storyType=$child->type", $child, 'list', '', '', 'iframe showinonlybody', true);
common::printIcon('story', 'activate', "storyID=$child->id&storyType=$child->type", $child, 'list', '', '', 'iframe showinonlybody', true);
common::printIcon('story', 'edit', "storyID=$child->id&kanbanGroup=default&storyType=$child->type", $child, 'list');
- common::printIcon('story', 'createCase', "productID=$child->product&branch=$child->branch&module=0&from=¶m=0&story={$child->id}", $child, 'list', 'sitemap');
+ common::printIcon('testcase', 'create', "productID=$child->product&branch=$child->branch&module=0&from=¶m=0&story={$child->id}", $child, 'list', 'sitemap');
?>
diff --git a/module/task/css/recordestimate.css b/module/task/css/recordestimate.css
index df6eb85fc4..d6c9ea70f8 100644
--- a/module/task/css/recordestimate.css
+++ b/module/task/css/recordestimate.css
@@ -8,7 +8,7 @@
.nav > li.divider {margin: 0 10px 0 5px; background-color: #000; opacity: 0.06; width: 1px ; height: 15px; padding: 0 !important;}
.table-bordered td, .table-bordered th { border: 1px solid #EEEEEE; }
.table-recorded thead { background: #F5F6F8}
-.table>thead>tr>th{ border-bottom: 1px solid #EEEEEE}
+.table>thead>tr>th{border-bottom: 1px solid #EEEEEE; font-weight: 400;}
#linearefforts .nav li.active a{color: #0c64eb !important}
.input-group-addon {background: #fff}
.icon-calendar {color: rgb(22, 168, 248)}