%s strong> hours.";
$lang->execution->memberHours = '';
@@ -419,7 +419,7 @@ $lang->execution->storyDragError = "The {$lang->SRCommon} is not ac
$lang->execution->countTip = ' (%s member)';
$lang->execution->pleaseInput = "Enter";
$lang->execution->week = 'week';
-$lang->execution->checkedExecutions = 'Seleted %s executions.';
+$lang->execution->checkedExecutions = "Seleted %s {$lang->executionCommon}.";
/* Statistics. */
$lang->execution->charts = new stdclass();
diff --git a/module/execution/lang/zh-cn.php b/module/execution/lang/zh-cn.php
index e2b6c7b3c3..12a9d17a87 100644
--- a/module/execution/lang/zh-cn.php
+++ b/module/execution/lang/zh-cn.php
@@ -419,7 +419,7 @@ $lang->execution->storyDragError = "该{$lang->SRCommon}不是激
$lang->execution->countTip = '(%s人)';
$lang->execution->pleaseInput = "请输入";
$lang->execution->week = '周';
-$lang->execution->checkedExecutions = "共选中%s个{$lang->execution->common}。";
+$lang->execution->checkedExecutions = "共选中%s个{$lang->executionCommon}。";
/* 统计。*/
$lang->execution->charts = new stdclass();
diff --git a/module/execution/model.php b/module/execution/model.php
index 8259a1d99c..76fd53a28a 100644
--- a/module/execution/model.php
+++ b/module/execution/model.php
@@ -4603,7 +4603,8 @@ class executionModel extends model
$burns = join(',', $execution->burns);
echo "";
- echo "| id class='table-nest-icon icon table-nest-toggle'>";
+ echo " | ";
+ if(common::hasPriv('execution', 'batchEdit')) echo "id class='table-nest-icon icon table-nest-toggle'>";
if($this->config->systemMode == 'new')
{
$spanClass = $execution->type == 'stage' ? 'label-warning' : 'label-info';
diff --git a/module/execution/view/all.html.php b/module/execution/view/all.html.php
index b072f3a78e..0e1283510f 100644
--- a/module/execution/view/all.html.php
+++ b/module/execution/view/all.html.php
@@ -16,13 +16,17 @@
$datatableId = $this->moduleName . ucfirst($this->methodName);
$useDatatable = (isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable');
?>
-
-
-
-execution->checkedExecSummary);?>
-execution->pageExecSummary);?>
-execution->executionSummary);?>
-execution->checkedExecutions);?>
+executionCommon, $lang->execution->common, $lang->execution->checkedExecSummary));
+js::set('pageSummary', str_replace($lang->executionCommon, $lang->execution->common, $lang->execution->pageExecSummary));
+js::set('executionSummary', str_replace($lang->executionCommon, $lang->execution->common, $lang->execution->executionSummary));
+js::set('checkedExecutions', str_replace($lang->executionCommon, $lang->execution->common, $lang->execution->checkedExecutions));
+?>
execution->treeLevel['all']);
diff --git a/module/execution/view/grouptask.html.php b/module/execution/view/grouptask.html.php
index 7e107fb0fa..87dc3aa96f 100644
--- a/module/execution/view/grouptask.html.php
+++ b/module/execution/view/grouptask.html.php
@@ -122,7 +122,7 @@
| task->leftAB;?> |
task->progressAB;?> |
typeAB;?> |
- task->deadlineAB;?> |
+ task->deadlineAB;?> |
actions;?> |
@@ -207,7 +207,7 @@
left . $lang->execution->workHourUnit;?> |
progress . '%';?> |
task->typeList, $task->type);?> |
- '>deadline, 0, 4) > 0) echo substr($task->deadline, 5, 6);?> |
+ '>deadline, 0, 4) > 0) echo '' . substr($task->deadline, 5, 6) . '';?> |
execution&taskID=$task->id", $task, 'list', '', '', 'iframe', true);?>
diff --git a/module/execution/view/importtask.html.php b/module/execution/view/importtask.html.php
index 3eb2618aad..6c46acd740 100644
--- a/module/execution/view/importtask.html.php
+++ b/module/execution/view/importtask.html.php
@@ -42,7 +42,7 @@
| task->assignedTo;?> |
task->leftAB;?> |
- task->deadlineAB;?> |
+ task->deadlineAB;?> |
statusAB;?> |
task->story;?> |
@@ -63,7 +63,7 @@
id", $task->name, '', "class='preview iframe' data-width='90%'", true, true)) echo $task->name;?> |
>assignedToRealName;?> |
left . ' ' . $lang->execution->workHourUnit;?> |
- delay)) echo 'delayed';?>>deadline, 0, 4) > 0) echo $task->deadline;?> |
+ deadline, 0, 4) > 0) echo '' . $task->deadline . '';?> |
processStatus('task', $task);?> |
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-span {margin-left: 22px;}
+[lang^=de] .c-hours{width: 105px;}
diff --git a/module/my/css/story.css b/module/my/css/story.css
index 58b9c22c7d..be4c747589 100644
--- a/module/my/css/story.css
+++ b/module/my/css/story.css
@@ -11,3 +11,4 @@
.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;}
+[lang^=de] .c-hours {width: 105px;}
diff --git a/module/my/css/task.css b/module/my/css/task.css
index 4869f718b7..742b4ff517 100644
--- a/module/my/css/task.css
+++ b/module/my/css/task.css
@@ -1,5 +1,3 @@
-td.delayed {background: #e84e0f !important; color: white;}
-
.table-children {border-left: 2px solid #cbd0db; border-right: 2px solid #cbd0db;}
.table tbody > tr.table-children.table-child-top {border-top: 2px solid #cbd0db;}
.table tbody > tr.table-children.table-child-bottom {border-bottom: 2px solid #cbd0db;}
@@ -28,7 +26,7 @@ html[lang="en"] .c-user-short {width: 88px;}
[lang^=de] #taskTable .c-date {width: 78px;}
[lang^=de] #taskTable .assigned-title {width: 123px !important;}
[lang^=de] #taskTable .c-user {width: 118px;}
-[lang^=de] #taskTable .c-hours {width: 86px;}
+[lang^=de] #taskTable .estimate, [lang^=de] #taskTable .consumed {width: 86px;}
[lang^=de] #taskTable .c-user-short {width: 75px;}
[lang^=fr] #taskTable .c-name {width: 120px;}
[lang^=fr] #taskTable .c-project {width: 100px;}
diff --git a/module/my/css/todo.css b/module/my/css/todo.css
index 73c3524397..6ee004343a 100644
--- a/module/my/css/todo.css
+++ b/module/my/css/todo.css
@@ -10,3 +10,4 @@
.panel-actions .btn-icon {padding-left: 7px;}
[lang^=de] .c-pri {width: 69px;}
[lang^=fr] .c-pri {width: 82px;}
+[lang^=en] .c-user, [lang^=fr] .c-user {width: 100px !important;}
diff --git a/module/my/view/bug.html.php b/module/my/view/bug.html.php
index 8872cc6b46..599914d144 100644
--- a/module/my/view/bug.html.php
+++ b/module/my/view/bug.html.php
@@ -62,24 +62,24 @@
idAB);?>
+ | bug->title);?> |
bug->severityAB);?> |
priAB);?> |
- bug->confirmedAB);?> |
- bug->title);?> |
+ bug->type);?> |
bug->product);?> |
- typeAB);?> |
- openedByAB);?> |
+ bug->openedByAB);?> |
+ bug->confirmedAB);?> |
rawMethod == 'work'):?>
- bug->deadlineAB);?> |
+ bug->deadline);?> |
bug->assignedTo);?> |
- bug->resolvedByAB);?> |
+ bug->resolvedBy);?> |
bug->resolutionAB);?> |
actions;?> |
@@ -109,6 +109,10 @@
id);?>
+
+ createLink('bug', 'view', "bugID=$bug->id"), $bug->title, null, "style='color: $bug->color' title='{$bug->title}'");?>
+ case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion"), "[" . $this->lang->testcase->common . "#$bug->case]", '', "class='bug' title='$bug->case'");?>
+ |
' title='bug->severityList, $bug->severity);?>' data-severity='severity;?>'>bug->severityList, $bug->severity, $bug->severity);?>
@@ -117,24 +121,20 @@
|
pri?>' title='bug->priList, $bug->pri);?>'>bug->priList, $bug->pri)?> |
- ' title='bug->confirmedList, $bug->confirmed);?>'>bug->confirmedList, $bug->confirmed)?> |
-
- createLink('bug', 'view', "bugID=$bug->id"), $bug->title, null, "style='color: $bug->color' title='{$bug->title}'");?>
- case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion"), "[" . $this->lang->testcase->common . "#$bug->case]", '', "class='bug' title='$bug->case'");?>
- |
productLink == 'product-all' ? '' : "productID=$bug->product";?>
+ bug->typeList, $bug->type, '');?> |
productLink);
echo html::a($this->createLink('product', $productLink[1], $param), $bug->productName, null, "title={$bug->productName}");
?>
|
- bug->typeList, $bug->type, '');?> |
openedBy);?> |
+ ' title='bug->confirmedList, $bug->confirmed);?>'>bug->confirmedList, $bug->confirmed)?> |
rawMethod == 'work'):?>
- deadline, 0, 4) > 0) echo substr($bug->deadline, 5, 6);?> |
+ deadline, 0, 4) > 0) echo '' . substr($bug->deadline, 5, 6) . '';?> |
bug->printAssignedHtml($bug, $users);?> |
diff --git a/module/my/view/project.html.php b/module/my/view/project.html.php
index 2fc86b3206..d8fc5f84e7 100644
--- a/module/my/view/project.html.php
+++ b/module/my/view/project.html.php
@@ -47,7 +47,17 @@
+
+ status == 'wait') $waitCount ++;?>
+ status == 'doing') $doingCount ++;?>
+ status == 'suspended') $suspendedCount ++;?>
+ status == 'closed') $closedCount ++;?>
| id);?> |
@@ -101,6 +111,7 @@
|
diff --git a/module/my/view/requirement.html.php b/module/my/view/requirement.html.php
index da432d2e25..4072cb4d9f 100644
--- a/module/my/view/requirement.html.php
+++ b/module/my/view/requirement.html.php
@@ -50,6 +50,7 @@
$canBatchReview = common::hasPriv('requirement', 'batchReview');
$canBatchAssignTo = common::hasPriv('requirement', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchReview or $canBatchAssignTo);
+ $URTitle = common::checkNotCN() ? $lang->URCommon . ' ' . $lang->my->name : $lang->URCommon . $lang->my->name;
?>
@@ -61,12 +62,12 @@
idAB);?>
+ | |
pri;?>>priAB);?> |
- my->name);?> |
- story->product);?> |
- openedByAB);?> |
- story->estimateAB);?> |
statusAB);?> |
+ story->product);?> |
+ story->openedByAB);?> |
+ story->estimateAB);?> |
story->stageAB);?> |
actions;?> |
@@ -88,15 +89,15 @@
id);?>
- pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> |
title, null, "style='color: $story->color' data-group='product' title='$story->title'") : "$story->title";?>
children)) echo '';?>
|
+ pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> |
+ processStatus('story', $story);?> |
productTitle;?> |
openedBy);?> |
estimate . $config->hourUnit;?> |
- processStatus('story', $story);?> |
story->stageList, $story->stage);?> |
">
id);?>
|
- pri;?>' title='story->priList, $child->pri, $child->pri);?>'>story->priList, $child->pri, $child->pri);?> |
lang->story->children .'">SR ' . (common::hasPriv('story', 'view') ? html::a($storyLink, $child->title, null, "style='color: $child->color' data-group='product' title='$child->title'") : $child->title);?>
|
+ pri;?>' title='story->priList, $child->pri, $child->pri);?>'>story->priList, $child->pri, $child->pri);?> |
+ URChanged ? "{$this->lang->story->URChanged}" : "" . $this->processStatus('story', $child) . ''?> |
productTitle;?> |
openedBy);?> |
estimate . $config->hourUnit;?> |
- URChanged ? "{$this->lang->story->URChanged}" : "" . $this->processStatus('story', $child) . ''?> |
story->stageList, $child->stage);?> |
SRCommon . ' ' . $lang->my->name : $lang->SRCommon . $lang->my->name;
?>
@@ -66,13 +67,13 @@
idAB);?>
+ | |
my->pri;?>>priAB);?> |
- my->name);?> |
+ statusAB);?> |
story->product);?> |
story->plan);?> |
- openedByAB);?> |
+ story->openedByAB);?> |
story->estimateAB);?> |
- statusAB);?> |
story->stageAB);?> |
actions;?> |
@@ -93,16 +94,16 @@
id);?>
- pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> |
title, null, "style='color: $story->color' data-group='product'") : $story->title;?>
children)) echo '';;?>
|
+ pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> |
+ processStatus('story', $story);?> |
productTitle;?> |
planTitle;?> |
openedBy);?> |
estimate . $config->hourUnit;?> |
- processStatus('story', $story);?> |
story->stageList, $story->stage);?> |
id);?>
|
- pri;?>' title='story->priList, $child->pri, $child->pri);?>'>story->priList, $child->pri, $child->pri);?> |
lang->story->children .'">' . $this->lang->story->childrenAB . ' ' . html::a($storyLink, $child->title, null, "style='color: $child->color' data-group='product' title='$child->title'");?>
|
+ pri;?>' title='story->priList, $child->pri, $child->pri);?>'>story->priList, $child->pri, $child->pri);?> |
+ processStatus('story', $child);?> |
productTitle;?> |
planTitle;?> |
openedBy);?> |
estimate . $config->hourUnit;?> |
- processStatus('story', $child);?> |
story->stageList, $child->stage);?> |
idAB);?>
- | task->pri;?>>priAB);?> |
task->name);?> |
+ task->pri;?>>priAB);?> |
+ statusAB);?> |
systemMode == 'new'):?>
my->projects);?> |
task->execution);?> |
my->executions);?> |
-
- openedByAB);?> |
-
- task->deadlineAB);?> |
task->assignedTo);?> |
-
- task->finishedBy);?> |
-
+ task->deadlineAB);?> |
task->estimateAB);?> |
task->consumedAB);?> |
task->leftAB);?> |
- statusAB);?> |
+
+ task->openedByAB);?> |
+
+
+ task->finishedByAB);?> |
+
actions;?> |
@@ -105,7 +105,6 @@
id);?>
|
- pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> |
' title='name?>'>
team)) echo '' . $this->lang->task->multipleAB . ' ';?>
children)) echo '';?>
|
+ pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> |
+
+ storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?>
+ {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $task) . "");?>
+ |
+ pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> |
+
+ storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?>
+ {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $task) . "");?>
+ |
systemMode == 'new'):?>
execution]->name) ? $projects[$task->execution]->name : '';?>
execution]->id) ? $projects[$task->execution]->id : 0;?>
@@ -130,23 +139,19 @@
createLink('execution', 'task', "executionID=$task->execution"), $task->executionName, '');?> |
-
- openedBy);?> |
-
- deadline, 0, 4) > 0) echo substr($task->deadline, 5, 6);?> |
task->printAssignedHtml($task, $users);?> |
+ deadline, 0, 4) > 0) echo '' . substr($task->deadline, 5, 6) . '';?> |
+ estimate, 1) . $lang->execution->workHourUnit;?> |
+ consumed, 1) . $lang->execution->workHourUnit;?> |
+ left, 1) . $lang->execution->workHourUnit;?> |
+
+ openedBy);?> |
+
finishedBy);?> |
- estimate, 1) . $lang->execution->workHourUnit;?> |
- consumed, 1) . $lang->execution->workHourUnit;?> |
- left, 1) . $lang->execution->workHourUnit;?> |
-
- storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?>
- {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $task) . "");?>
- |
id);?>
|
- pri;?>' title='task->priList, $child->pri);?>'>task->priList, $child->pri);?> |
parent > 0) echo '' . $this->lang->task->childrenAB . ' ';?>
createLink('task', 'view', "taskID=$child->id", '', '', $child->project), $child->name, null, "style='color: $child->color'");?>
|
+ pri;?>' title='task->priList, $child->pri);?>'>task->priList, $child->pri);?> |
+
+ storyStatus) and $child->storyStatus == 'active' and $child->latestStoryVersion > $child->storyVersion and !in_array($child->status, array('cancel', 'closed')));?>
+ {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $child) . "");?>
+ |
systemMode == 'new'):?>
execution]->name) ? $projects[$child->execution]->name : '';?>
execution]->id) ? $projects[$child->execution]->id : 0;?>
@@ -207,23 +216,19 @@
createLink('execution', 'task', "executionID=$child->project"), $child->executionName, '');?> |
-
- openedBy);?> |
-
- deadline, 0, 4) > 0) echo substr($child->deadline, 5, 6);?> |
task->printAssignedHtml($child, $users);?> |
+ deadline, 0, 4) > 0) echo '' . substr($child->deadline, 5, 6) . '';?> |
+ estimate, 1) . ' ' . $lang->execution->workHourUnit;?> |
+ consumed, 1) . ' ' . $lang->execution->workHourUnit;?> |
+ left, 1) . ' ' . $lang->execution->workHourUnit;?> |
+
+ openedBy);?> |
+
finishedBy);?> |
- estimate, 1) . ' ' . $lang->execution->workHourUnit;?> |
- consumed, 1) . ' ' . $lang->execution->workHourUnit;?> |
- left, 1) . ' ' . $lang->execution->workHourUnit;?> |
-
- storyStatus) and $child->storyStatus == 'active' and $child->latestStoryVersion > $child->storyVersion and !in_array($child->status, array('cancel', 'closed')));?>
- {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $child) . "");?>
- |
| idAB);?> |
testtask->name);?> |
- testtask->execution);?> |
testtask->build);?> |
+ testtask->execution);?> |
+ statusAB);?> |
testtask->begin);?> |
testtask->end);?> |
- statusAB);?> |
actions;?> |
@@ -48,11 +48,11 @@
| id);?> |
createLink('testtask', 'view', "taskID=$task->id"), $task->name);?> |
- executionName;?> |
trunk : $task->buildName;?>'>build == 'trunk' ? print($lang->trunk) : print(html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName));?> |
+ executionName;?> |
+ '>processStatus('testtask', $task);?> |
begin?> |
end?> |
- '>processStatus('testtask', $task);?> |
id", $task, 'list', 'sitemap', '', '', '', "data-app='qa'");
diff --git a/module/my/view/todo.html.php b/module/my/view/todo.html.php
index 22533a65a5..d8d09f7f81 100644
--- a/module/my/view/todo.html.php
+++ b/module/my/view/todo.html.php
@@ -87,16 +87,20 @@
idAB);?>
- | todo->date);?> |
- todo->type);?> |
+ todo->name);?> |
app->clientLang == 'en' ? "style='width:80px'" : '';?>
title=todo->pri;?>> priAB);?> |
- todo->name);?> |
+ todo->date);?> |
+ todo->status);?> |
+ todo->type);?> |
+
todo->assignedTo);?> |
+
+ todo->assignedBy);?> |
+
todo->beginAB);?> |
todo->endAB);?> |
- todo->status);?> |
- actions;?> |
+ actions;?> |
@@ -111,14 +115,18 @@
id?>
- date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?> |
- todo->typeList, $todo->type, '');?> |
- pri;?>' title='todo->priList, $todo->pri, $todo->pri);?>'>todo->priList, $todo->pri)?> |
createLink('todo', 'view', "id=$todo->id&from=my", '', true), $todo->name, '', "data-toggle='modal' data-width='80%' data-type='iframe' data-title='" . $lang->todo->view . "' data-icon='check'");?> |
+ pri;?>' title='todo->priList, $todo->pri, $todo->pri);?>'>todo->priList, $todo->pri)?> |
+ date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?> |
+ todo->statusList[$todo->status];?> |
+ todo->typeList, $todo->type, '');?> |
+
assignedTo);?> |
+
+ assignedBy);?> |
+
begin;?> |
end;?> |
- todo->statusList[$todo->status];?> |
id", $todo, 'list', 'play', 'hiddenwin');
diff --git a/module/product/model.php b/module/product/model.php
index 4537e9b12d..8b9842f863 100644
--- a/module/product/model.php
+++ b/module/product/model.php
@@ -1211,7 +1211,7 @@ class productModel extends model
->beginIF($branch !== '' and $branch !== 'all')->andWhere('t1.branch')->in($branch)->fi()
->andWhere('t2.deleted')->eq('0')
->orderBy($orderBy)
- ->page($pager)
+ ->page($pager, 't2.id')
->fetchAll('id');
/* Determine how to display the name of the program. */
diff --git a/module/product/view/project.html.php b/module/product/view/project.html.php
index 7e6c9a6fe5..bb9e0f67d1 100644
--- a/module/product/view/project.html.php
+++ b/module/product/view/project.html.php
@@ -62,8 +62,18 @@
|
-
+
+ status == 'wait') $waitCount ++;?>
+ status == 'doing') $doingCount ++;?>
+ status == 'suspended') $suspendedCount ++;?>
+ status == 'closed') $closedCount ++;?>
| id);?> |
systemMode == 'new'):?>
@@ -107,7 +117,10 @@
-
+
diff --git a/module/productplan/control.php b/module/productplan/control.php
index 559c0d5c85..a7c42d0fbd 100644
--- a/module/productplan/control.php
+++ b/module/productplan/control.php
@@ -440,10 +440,12 @@ class productplan extends control
if($plan->branch > 0) $this->view->branchStatus = $this->loadModel('branch')->getById($plan->branch, $plan->product, 'status');
+ $storyIdList = array();
$modulePairs = $this->loadModel('tree')->getOptionMenu($plan->product, 'story', 0, 'all');
foreach($planStories as $story)
{
if(!isset($modulePairs[$story->module])) $modulePairs += $this->tree->getModulesName($story->module);
+ $storyIdList[] = $story->id;
}
$this->loadModel('datatable');
@@ -466,6 +468,7 @@ class productplan extends control
$this->view->storyPager = $storyPager;
$this->view->bugPager = $bugPager;
$this->view->canBeChanged = $canBeChanged;
+ $this->view->storyCases = $storyCases = $this->loadModel('testcase')->getStoryCaseCounts($storyIdList);;
if($this->app->getViewType() == 'json')
{
diff --git a/module/productplan/js/view.js b/module/productplan/js/view.js
index 012a26ee42..1658a7a071 100644
--- a/module/productplan/js/view.js
+++ b/module/productplan/js/view.js
@@ -84,4 +84,46 @@ $(function()
history.pushState({}, 0, createLink('productplan', 'view', "planID=" + planID + '&type=story&orderBy=' + order));
});
});
+
+ $('.table-story').table(
+ {
+ statisticCreator: function(table)
+ {
+ var $checkedRows = table.getTable().find(table.isDataTable ? '.datatable-row-left.checked' : 'tbody>tr.checked');
+ var $originTable = table.isDataTable ? table.$.find('.datatable-origin') : null;
+ var checkedTotal = $checkedRows.length;
+ if(!checkedTotal) return;
+
+ var checkedEstimate = 0;
+ var checkedCase = 0;
+ var rateCount = checkedTotal;
+ $checkedRows.each(function()
+ {
+ var $row = $(this);
+ if($originTable)
+ {
+ $row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]');
+ }
+ var data = $row.data();
+ checkedEstimate += data.estimate;
+
+ if(data.cases > 0)
+ {
+ checkedCase += 1;
+ }
+ else if(data.children != undefined && data.children > 0)
+ {
+ rateCount -= 1;
+ }
+ });
+
+ var rate = '0%';
+ if(rateCount) rate = Math.round(checkedCase / rateCount * 100) + '%';
+
+ if(checkedTotal == 0) return storySummary;
+ return checkedSummary.replace('%total%', checkedTotal)
+ .replace('%estimate%', checkedEstimate.toFixed(1))
+ .replace('%rate%', rate);
+ }
+ });
});
diff --git a/module/productplan/view/view.html.php b/module/productplan/view/view.html.php
index dfc20fdf79..44f4e5c692 100644
--- a/module/productplan/view/view.html.php
+++ b/module/productplan/view/view.html.php
@@ -20,6 +20,9 @@
pageID);?>
recPerPage);?>
recTotal);?>
+
+SRCommon);?>
+SRCommon, $lang->product->checkedSummary));?>
diff --git a/module/testtask/view/browse.html.php b/module/testtask/view/browse.html.php
index 3006fdf351..f6c1afa48b 100644
--- a/module/testtask/view/browse.html.php
+++ b/module/testtask/view/browse.html.php
@@ -60,13 +60,13 @@ $status = $this->session->testTaskVersionStatus;
| idAB);?> |
testtask->name);?> |
+ testtask->build);?> |
testtask->product);?> |
testtask->execution);?> |
- testtask->build);?> |
+ statusAB);?> |
testtask->owner);?> |
testtask->begin);?> |
testtask->end);?> |
- statusAB);?> |
testtask->getFlowExtendFields();
foreach($extendFields as $extendField) echo "{$extendField->name} | ";
@@ -79,18 +79,19 @@ $status = $this->session->testTaskVersionStatus;
| id"), sprintf('%03d', $task->id));?> |
id"), $task->name);?> |
+ build == 'trunk' || empty($task->buildName)) ? $lang->trunk : html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName, '', "data-group=execution");?> |
productName?> |
executionName?> |
- build == 'trunk' || empty($task->buildName)) ? $lang->trunk : html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName, '', "data-group=execution");?> |
- owner);?> |
- begin?> |
- end?> |
processStatus('testtask', $task);?>
|
+ owner);?> |
+ begin?> |
+ end?> |
+
" . $this->loadModel('flow')->getFieldValue($extendField, $task) . "";?>
testtask->buildOperateMenu($task, 'browse');?>
diff --git a/module/user/css/task.css b/module/user/css/task.css
index f963fb9a73..d305d64b16 100644
--- a/module/user/css/task.css
+++ b/module/user/css/task.css
@@ -1,2 +1,4 @@
-td.delayed {color: #fff; background: #e84e0f !important;}
.hours {white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: right;}
+.c-execution {width: 180px;}
+.c-hour, .c-status {width: 70px;}
+.c-deadline {width: 100px;}
diff --git a/module/user/view/bug.html.php b/module/user/view/bug.html.php
index ae19cbe21e..494c4466ac 100644
--- a/module/user/view/bug.html.php
+++ b/module/user/view/bug.html.php
@@ -55,7 +55,7 @@
| createLink('bug', 'view', "bugID=$bug->id"), $bug->title);?> |
bug->severityList, $bug->severity, $bug->severity)?>'>bug->severityList, $bug->severity, $bug->severity)?> |
bug->priList, $bug->pri, $bug->pri)?>'>bug->priList, $bug->pri, $bug->pri)?> |
- bug->typeList[$bug->type]?> |
+ bug->typeList, $bug->type, '');?> |
openedBy);?> |
resolvedBy);?> |
bug->resolutionList, $bug->resolution);?> |
diff --git a/module/user/view/task.html.php b/module/user/view/task.html.php
index bae1a1e8f8..8981fb14e0 100644
--- a/module/user/view/task.html.php
+++ b/module/user/view/task.html.php
@@ -41,15 +41,15 @@
id}&type=$type&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}"; ?>
- | idAB);?> |
- priAB);?> |
- task->execution);?> |
+ idAB);?> |
+ priAB);?> |
+ task->execution);?> |
task->name);?> |
- task->estimateAB);?> |
- task->consumedAB);?> |
- task->leftAB);?> |
- task->deadlineAB);?> |
- statusAB);?> |
+ task->estimateAB);?> |
+ task->consumedAB);?> |
+ task->leftAB);?> |
+ task->deadlineAB);?> |
+ statusAB);?> |
@@ -57,7 +57,7 @@
| createLink('task', 'view', "taskID=$task->id"), sprintf('%03d', $task->id));?> |
task->priList, $task->pri, $task->pri);?> |
- createLink('execution', 'browse', "executionID=$task->executionID"), $task->executionName);?> |
+ createLink('execution', 'browse', "executionID=$task->executionID"), $task->executionName);?> |
team)) echo '' . $this->lang->task->multipleAB . ' ';?>
parent > 0) echo '' . $this->lang->task->childrenAB . ' ';?>
@@ -65,12 +65,12 @@
$onlybody = $task->executionType == 'kanban' ? true : '';
$class = $task->executionType == 'kanban' ? 'iframe' : '';
?>
- createLink('task', 'view', "taskID=$task->id", '', $onlybody, $task->project), $task->name, null, "class='$class' data-width='80%' style='color: $task->color'");?>
+ createLink('task', 'view', "taskID=$task->id", '', $onlybody, $task->project), $task->name, null, "class='$class' data-width='80%' style='color: $task->color' title='$task->name'");?>
|
estimate . $lang->execution->workHourUnit;?> |
consumed . $lang->execution->workHourUnit;?> |
left . $lang->execution->workHourUnit;?> |
- delay)) echo 'delayed';?>>deadline, 0, 4) > 0) echo $task->deadline;?> |
+ deadline, 0, 4) > 0) echo '' . $task->deadline . '';?> |
processStatus('task', $task);?> |
diff --git a/test/class/repo.class.php b/test/class/repo.class.php
index 7ed1021ee4..f883ab0e73 100644
--- a/test/class/repo.class.php
+++ b/test/class/repo.class.php
@@ -32,6 +32,13 @@ class repoTest
return $objects;
}
+ /**
+ * Get switcher test.
+ *
+ * @param int $repoID
+ * @access public
+ * @return object
+ */
public function getSwitcherTest($repoID)
{
$objects = $this->objectModel->getSwitcher($repoID);
@@ -59,8 +66,13 @@ class repoTest
return $objects;
}
- public function createTest()
+ public function createTest($list)
{
+ $init = array('SCM' => '', 'serviceHost' => '', 'serviceProject' => '', 'name' => '', 'path' => '', 'encoding' => '', 'client' => '', 'account' => '', 'password' => '', 'encrypt' => '', 'desc' => '', 'uid' => '');
+
+ foreach($init as $filed => $defaultvalue) $_POST[$filed] = $defaultvalue;
+ foreach($list as $key => $value) $_POST[$key] = $value;
+
$objects = $this->objectModel->create();
if(dao::isError()) return dao::getError();
diff --git a/test/model/repo/checkpriv.php b/test/model/repo/checkpriv.php
old mode 100644
new mode 100755
index c7308b0637..5311237ab7
--- a/test/model/repo/checkpriv.php
+++ b/test/model/repo/checkpriv.php
@@ -10,6 +10,8 @@ title=测试 repoModel->checkPriv();
cid=1
pid=1
+检查用户权限,返回布尔值 >> 0
+
*/
$checkPriv = new repoTest();
@@ -20,4 +22,4 @@ $repo->acl->user = 'admin';
$result = $checkPriv->checkPrivTest($repo);
-r($result) && p($result) && e('0');
+r($result) && p($result) && e('0'); //检查用户权限,返回布尔值
\ No newline at end of file
diff --git a/test/model/repo/create.php b/test/model/repo/create.php
old mode 100644
new mode 100755
index 15feb6410d..2e3b0a84c0
--- a/test/model/repo/create.php
+++ b/test/model/repo/create.php
@@ -10,8 +10,51 @@ title=测试 repoModel->create();
cid=1
pid=1
+正常创建gitlab版本库 >> 1
+当已有版本库时提示已有记录 >> 『名称』已经有『jktest』这条记录了。如果您确定该记录已删除,请到后台-系统-数据-回收站还原。
+当数据类型为Gitea时提示写版本号 >> 因为安全原因,需要检测客户端版本,请将版本号写入文件
+
*/
$repo = new repoTest();
-r($repo->createTest()) && p() && e();
\ No newline at end of file
+$list = array(
+ 'product' => '1',
+ 'SCM' => 'Gitlab',
+ 'serviceHost' => '2',
+ 'serviceProject' => '971',
+ 'name' => 'zzxx',
+ 'path' => '',
+ 'encoding' => 'utf-8',
+ 'client' => '/usr/bin/git',
+ 'account' => '',
+ 'password' => '',
+ 'encrypt' => 'base64',
+ 'desc' => '',
+ 'uid' => '6321819c78be5'
+);
+
+$listOne = array(
+ 'SCM' => 'Gitea',
+ 'serviceHost' => 2,
+ 'serviceProject' => 'root/Demo',
+ 'name' => 'Demo',
+ 'path' => '',
+ 'encoding' => 'utf-8',
+ 'client' => '/usr/bin/git',
+ 'account' => '',
+ 'password' => '',
+ 'encrypt' => 'base64',
+ 'desc' => '',
+ 'uid' => '6322b184f3a72'
+);
+
+$resultOne = $repo->createTest($list);
+$resultTwo = $repo->createTest($list);
+$resultThree = $repo->createTest($listOne);
+
+r($resultOne) && p($resultOne) && e('1'); //正常创建gitlab版本库
+r($resultTwo) && p('name:0') && e('『名称』已经有『jktest』这条记录了。如果您确定该记录已删除,请到后台-系统-数据-回收站还原。'); //当已有版本库时提示已有记录
+r($resultThree) && p($resultThree) && e('因为安全原因,需要检测客户端版本,请将版本号写入文件'); //当数据类型为Gitea时提示写版本号
+
+$db->restoreDB();
\ No newline at end of file
diff --git a/test/ztest b/test/ztest
index 2febe0d248..be776ffd95 100755
--- a/test/ztest
+++ b/test/ztest
@@ -202,6 +202,9 @@ switch($argv[1])
case 'webhook':
ztfRun('model/webhook');
break;
+ case 'repo':
+ ztfRun('model/repo');
+ break;
default:
ztfExtract($argv[1]);
diff --git a/www/theme/default/style.css b/www/theme/default/style.css
index b31be160e3..1a92036b23 100644
--- a/www/theme/default/style.css
+++ b/www/theme/default/style.css
@@ -139,12 +139,13 @@ body.xxc-embed.m-productplan-view,body.xxc-embed.m-bug-browse,body.xxc-embed.m-p
#toggleFold > .icon {display: inline-block; color: #838a9d; font-size: 16px; transition: transform .2s; transform: rotate(-90deg);}
#toggleFold.collapsed > .icon {transform: rotate(90deg);}
+#executionTableList .c-name .label-danger {position: absolute; top: 8px; right: 0px;}
#programTableList .c-name .label-danger {position: absolute; right: 4px; padding: 2px 4px;}
#projectForm .c-name,
#executionTableList .c-name,
#programTableList .c-name {padding-right: 64px;}
-
+td.delayed > span {display: inline-block; height: 20px; line-height: 18px; background: #FFEBEB; color: #FB2B2B; border-radius: 20px; padding: 2px 8px;}
.table .table-children,
.table .is-nest-child {background: #F8F8F8;}
.table tbody td.has-child .icon-angle-right {color: #838a9d;}
\ No newline at end of file