%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 af839456cd..09574ea842 100644
--- a/module/execution/model.php
+++ b/module/execution/model.php
@@ -4603,7 +4603,7 @@ class executionModel extends model
$burns = join(',', $execution->burns);
echo "";
- echo "| id class='table-nest-icon icon table-nest-toggle'>";
+ echo " | id class='table-nest-icon icon table-nest-toggle'>";
if($this->config->systemMode == 'new')
{
$spanClass = $execution->type == 'stage' ? 'label-warning' : 'label-info';
@@ -4636,9 +4636,9 @@ class executionModel extends model
echo ' | ' . html::ring($execution->hours->progress) . ' | ';
echo helper::isZeroDate($execution->begin) ? ' | ' : '' . $execution->begin . ' | ';
echo helper::isZeroDate($execution->end) ? ' | ' : '' . $execution->end . ' | ';
- echo "" . $execution->hours->totalEstimate . $this->lang->execution->workHourUnit . ' | ';
- echo "" . $execution->hours->totalConsumed . $this->lang->execution->workHourUnit . ' | ';
- echo "" . $execution->hours->totalLeft . $this->lang->execution->workHourUnit . ' | ';
+ echo "" . $execution->hours->totalEstimate . $this->lang->execution->workHourUnit . ' | ';
+ echo "" . $execution->hours->totalConsumed . $this->lang->execution->workHourUnit . ' | ';
+ echo "" . $execution->hours->totalLeft . $this->lang->execution->workHourUnit . ' | ';
echo " | ";
echo '';
common::printIcon('execution', 'start', "executionID={$execution->id}", $execution, 'list', '', '', 'iframe', true);
@@ -4898,7 +4898,7 @@ class executionModel extends model
if(isset($execution->delay)) echo "{$this->lang->execution->delayed} ";
if(!empty($execution->children))
{
- echo "";
+ echo "";
}
break;
case 'code':
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/misc/control.php b/module/misc/control.php
index 145eaf6616..b7fb0fe17b 100644
--- a/module/misc/control.php
+++ b/module/misc/control.php
@@ -256,6 +256,11 @@ class misc extends control
$condition = "owner={$account}&module={$objectType}§ion=task&key=unfoldTasks";
$settingPath = $account . ".{$objectType}.task.unfoldTasks";
}
+ elseif($objectType == 'productplan')
+ {
+ $condition = "owner={$account}&module={$objectType}§ion=browse&key=unfoldPlans";
+ $settingPath = $account . ".{$objectType}.browse.unfoldPlans";
+ }
else
{
$condition = "owner={$account}&module=product§ion=browse&key=unfoldStories";
diff --git a/module/my/css/execution.css b/module/my/css/execution.css
index 0c3f52f231..1e329cc330 100644
--- a/module/my/css/execution.css
+++ b/module/my/css/execution.css
@@ -1,2 +1,3 @@
.c-hours, .c-progress {width: 80px !important;}
.c-status, .c-date {padding-right: 8px !important; text-align: center;}
+.align-right {text-align: right; padding-right: 8px !important;}
diff --git a/module/my/css/task.css b/module/my/css/task.css
index 331f201281..742b4ff517 100644
--- a/module/my/css/task.css
+++ b/module/my/css/task.css
@@ -6,7 +6,7 @@
.table td.has-child > .task-toggle:hover {color: #006af1; cursor: pointer;}
.table td.has-child > .task-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);}
.table td.has-child > .task-toggle > .icon:before {text-align: left;}
-.table td.has-child > .task-toggle.collapsed {top: 2px;}
+.table td.has-child > .task-toggle.collapsed {top: 0;}
.table td.has-child > .task-toggle.collapsed > .icon {-ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg);}
.table td.c-hours {padding-right: 12px;}
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
diff --git a/module/my/js/task.js b/module/my/js/task.js
index 1a81c7de00..1a619e9755 100644
--- a/module/my/js/task.js
+++ b/module/my/js/task.js
@@ -10,7 +10,7 @@ $(function()
e.stopPropagation();
e.preventDefault();
});
-
+ toggleFold('#myTaskForm', [], 0, 'my');
$('#taskTable td.has-child .task-toggle').each(function()
{
var $td = $(this).closest('td');
diff --git a/module/my/view/execution.html.php b/module/my/view/execution.html.php
index f9c967d68b..97b632c463 100644
--- a/module/my/view/execution.html.php
+++ b/module/my/view/execution.html.php
@@ -34,16 +34,13 @@
|
| idAB;?> |
my->name;?> |
- systemMode == 'new'):?>
- my->projects;?> |
-
- execution->begin;?> |
- execution->end;?> |
statusAB;?> |
team->roleAB;?> |
- team->join;?> |
- my->hours;?> |
execution->myTask;?> |
+ execution->begin;?> |
+ execution->end;?> |
+ team->join;?> |
+ my->hours;?> |
execution->progress;?> |
@@ -62,13 +59,6 @@
name, '', "title='$execution->name'");?>
- systemMode == 'new'):?>
-
- projectName) ? html::a($this->createLink('project', 'index', "id=$execution->project", '', '', $execution->project), $execution->projectName, '', "title='$execution->projectName'") : '';?>
- |
-
- begin;?> |
- end;?> |
delay)):?>
execution->delayed;?>
@@ -78,9 +68,11 @@
|
role;?> |
- join;?> |
- hours;?> |
assignedToMeTasks;?> |
+ begin;?> |
+ end;?> |
+ join;?> |
+ hours;?> |
progress;?>
diff --git a/module/my/view/story.html.php b/module/my/view/story.html.php
index beb617f38f..b831fc3545 100644
--- a/module/my/view/story.html.php
+++ b/module/my/view/story.html.php
@@ -96,7 +96,7 @@
|
title, null, "style='color: $story->color' data-group='product'") : $story->title;?>
- children)) echo '';;?>
+ children)) echo '';;?>
|
pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> |
processStatus('story', $story);?> |
diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php
index cf93e51b67..d5dc31bba4 100644
--- a/module/my/view/task.html.php
+++ b/module/my/view/task.html.php
@@ -119,7 +119,12 @@
echo html::a($this->createLink('task', 'view', "taskID=$task->id", '', $onlybody, $task->project), $task->name, null, "class='$class' data-width='80%' style='color: $task->color'");
}
?>
- children)) echo '';?>
+ 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);?> |
diff --git a/module/my/view/testtask.html.php b/module/my/view/testtask.html.php
index 9df1becf44..41ea4b2004 100644
--- a/module/my/view/testtask.html.php
+++ b/module/my/view/testtask.html.php
@@ -35,11 +35,11 @@
|
| 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/personnel/view/accessible.html.php b/module/personnel/view/accessible.html.php
index ba5ef9ae03..1dfe1b58aa 100644
--- a/module/personnel/view/accessible.html.php
+++ b/module/personnel/view/accessible.html.php
@@ -37,10 +37,10 @@ js::set('deptID', $deptID);
| idAB;?> |
- personnel->department;?> |
personnel->realName;?> |
- personnel->userName;?> |
+ personnel->department;?> |
personnel->job;?> |
+ personnel->userName;?> |
personnel->genders;?> |
@@ -48,10 +48,10 @@ js::set('deptID', $deptID);
|
| id;?> |
- dept);?> |
realname;?> |
- account;?> |
+ dept);?> |
user->roleList, $personnel->role, '');?> |
+ account;?> |
user->genderList, $personnel->gender, '');?> |
diff --git a/module/product/css/all.css b/module/product/css/all.css
index c059f823c0..75d47f016c 100644
--- a/module/product/css/all.css
+++ b/module/product/css/all.css
@@ -35,7 +35,7 @@
#programTree ul > li.has-list:after {width: 14px;}
#programTree ul > li.item-meas a.selected {color: #0c64eb;}
.side-col {padding-right: 20px; width: 18%;}
-#sidebar>.cell {width: 100%;}
+#sidebar > .cell {width: 100%;}
th.c-name {width: 400px;}
th.c-PO {width: 100px;}
@@ -44,15 +44,18 @@ th.c-bug {width: 150px;}
th.c-plan {width: 45px;}
th.c-release {width: 50px;}
th.c-actions {width: 50px;}
+.c-name {border-left: none !important;}
+.icon-cards-view {color: #888fa1;}
[lang='en'] .en-wrap-text {white-space: normal; height: 24px; line-height: 1; font-size: 12px;}
-#productListForm thead>tr>th,
-#productListForm tbody>tr>td {text-align: center; text-overflow: unset!important}
-#productListForm thead>tr>th {padding: 0; line-height: 24px;}
-#productListForm thead>tr:first-child>th {border-left: 1px solid #ddd;}
-#productListForm thead>tr>th.c-checkbox {border-left: none; padding-left: 15px; width: 45px;}
-#productListForm tbody>tr>td {padding: 2px 4px;}
-#productListForm tbody>tr>td:first-child {text-align: left; padding-left: 15px;}
+#productListForm thead > tr > th,
+#productListForm tbody > tr > td {text-align: center; text-overflow: unset!important}
+#productListForm thead > tr > th {padding: 0; line-height: 24px;}
+#productListForm thead > tr:first-child > th {border-left: 1px solid #ddd;}
+#productListForm thead > tr > th.c-checkbox {border-left: none; padding-left: 15px; width: 30px;}
+#productListForm tbody > tr > td {padding: 2px 4px;}
+#productListForm tbody > tr > td:first-child {text-align: left; padding-left: 15px;}
+#productListForm tbody > tr > td.table-nest-title {padding-left: 16px;}
#productListForm th.table-nest-title .nest-has-checkbox {margin-top: 7px; margin-left: 35px;}
#productListForm th.table-nest-title .nest-none-checkbox {margin-top: 8px; margin-left: 5px;}
#productListForm th.table-nest-title .header {margin-left: 5px;}
@@ -61,11 +64,12 @@ th.c-actions {width: 50px;}
#productListForm th.table-nest-title .table-nest-toggle {top: 14px; left: auto; right: 10px; opacity: .6;}
#productListForm th.table-nest-title .table-nest-toggle::before {position: absolute; top: 0 !important; right: 0; bottom: 0; left: 0;}
#productListForm th.table-nest-title .table-nest-toggle:hover {opacity: 1;}
-#productListForm .table.has-sort-head thead>tr>th>a:after,
-#productListForm .table.has-sort-head thead>tr>th>a:before {top: -3px;}
+#productListForm .table.has-sort-head thead > tr > th > a:after,
+#productListForm .table.has-sort-head thead > tr > th > a:before {top: -3px;}
#productListForm .icon-product:before {content: '\e98f'; width: 22px; height: 22px; background: none; color: rgb(166, 170, 184); top: 0; line-height: 22px; margin-right: 2px; font-size: 14px;}
#productTableList td.table-nest-title > span.icon.table-nest-toggle {vertical-align: middle;}
-#productList > thead th.table-nest-title.c-name {position: relative; padding-left: 4px !important;}
+#productTableList > tr[data-nest-parent] {background: #f8f8f8;}
+#productList > thead th.table-nest-title.c-name {position: relative; padding-left: 16px !important;}
@media screen and (max-width: 1460px)
{
@@ -81,7 +85,7 @@ th.c-actions {width: 50px;}
@media screen and (max-width: 1250px)
{
- #productListForm thead>tr>th {font-size: 12px;}
+ #productListForm thead > tr > th {font-size: 12px;}
th.c-requirement {width: 265px;}
th.c-story {width: 265px;}
[lang^='zh-'] th.c-requirement {width: 220px;}
diff --git a/module/product/view/all.html.php b/module/product/view/all.html.php
index 6a8079332a..42afe2436c 100644
--- a/module/product/view/all.html.php
+++ b/module/product/view/all.html.php
@@ -104,6 +104,7 @@
+
|
diff --git a/module/productplan/config.php b/module/productplan/config.php
index 9e7250f7e0..4dddb53677 100644
--- a/module/productplan/config.php
+++ b/module/productplan/config.php
@@ -19,6 +19,7 @@ $config->productplan->future = '2030-01-01';
global $app, $lang;
$app->loadLang('productplan');
$config->productplan->search['module'] = 'productplan';
+$config->productplan->browse = new stdclass();
$config->productplan->search['fields']['id'] = $lang->productplan->id;
$config->productplan->search['fields']['title'] = $lang->productplan->title;
diff --git a/module/productplan/css/browse.css b/module/productplan/css/browse.css
index cb52c6ac17..db957be9a4 100644
--- a/module/productplan/css/browse.css
+++ b/module/productplan/css/browse.css
@@ -10,7 +10,7 @@ td.c-branch {overflow: hidden; text-align: left !important; text-overflow: ellip
.table td.has-child > .plan-name > .task-toggle:hover {color: #006af1; cursor: pointer;}
.table td.has-child > .plan-name > .task-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);}
.table td.has-child > .plan-name > .task-toggle > .icon:before {text-align: left;}
-.table td.has-child > .plan-name > .task-toggle.collapsed {top: 2px;}
+.table td.has-child > .plan-name > .task-toggle.collapsed {top: 0;}
.table td.has-child > .plan-name > .task-toggle.collapsed > .icon {-ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg);}
.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;};}
@@ -35,6 +35,7 @@ td.c-branch {overflow: hidden; text-align: left !important; text-overflow: ellip
.panel-actions {position: relative; padding: 0 0; padding-top: 1px;}
.icon-list {padding-left: 7px;}
.icon-kanban {padding-left: 7px; font-size: 16px;}
+#productplanList thead th.c-title {width: 100%;}
#productplanList .c-actions {width: 265px;}
#productplanList .c-actions .btn+.btn {margin-left: -1px;}
#productplanList .c-actions .btn {display: block; float: left;}
diff --git a/module/productplan/js/browse.js b/module/productplan/js/browse.js
index 2d45757f4d..de52e86d10 100644
--- a/module/productplan/js/browse.js
+++ b/module/productplan/js/browse.js
@@ -11,6 +11,7 @@ $(document).on('click', '.task-toggle', function(e)
$(function()
{
+ toggleFold('#productplanForm', unfoldPlans, productID, 'productplan');
$('#productplanList tbody tr').each(function()
{
var $content = $(this).find('td.content');
diff --git a/module/productplan/view/browsebylist.html.php b/module/productplan/view/browsebylist.html.php
index 69ab8790ab..425f8bf0a4 100644
--- a/module/productplan/view/browsebylist.html.php
+++ b/module/productplan/view/browsebylist.html.php
@@ -9,6 +9,14 @@
* @link https://www.zentao.net
*/
?>
+productplan->browse->unfoldPlans) ? json_decode($config->productplan->browse->unfoldPlans, true) : array();?>
+
+
+
@@ -108,7 +116,7 @@
$i++;
}
?>
-
+
|
id => ''), '', $attribute) . html::a(helper::createLink('productplan', 'view', "planID=$plan->id"), sprintf('%03d', $plan->id));?>
@@ -130,7 +138,7 @@
if($plan->parent > 0) echo "{$this->lang->productplan->childrenAB}";
echo html::a(inlink('view', "id=$plan->id"), $plan->title);
if(!empty($expired)) echo $expired;
- if(isset($plan->children)) echo '';
+ if(isset($plan->children)) echo '';
echo '';
?>
|
diff --git a/module/program/model.php b/module/program/model.php
index ff55147f5a..6f75035472 100644
--- a/module/program/model.php
+++ b/module/program/model.php
@@ -1532,11 +1532,11 @@ class programModel extends model
if(common::hasPriv('program', 'suspend') || (common::hasPriv('program', 'close') && $program->status != 'doing') || (common::hasPriv('program', 'activate') && $program->status != 'closed'))
{
$menu .= "";
- $menu .= "";
- $menu .= " ";
}
@@ -1560,11 +1560,11 @@ class programModel extends model
if(common::hasPriv('project', 'suspend') || (common::hasPriv('project', 'close') && $program->status != 'doing') || (common::hasPriv('project', 'activate') && $program->status != 'closed'))
{
$menu .= "";
- $menu .= "";
- $menu .= " ";
}
diff --git a/module/project/css/execution.css b/module/project/css/execution.css
index b28fcb4440..014a197078 100644
--- a/module/project/css/execution.css
+++ b/module/project/css/execution.css
@@ -1,4 +1,4 @@
-#executionList > thead > tr > th .table-nest-toggle-global {top: 6px}
+#executionList > thead > tr > th .table-nest-toggle-global {top: 4px;}
#executionList > thead > tr > th .table-nest-toggle-global:before {color: #a6aab8;}
#executionsSummary {padding-left: 10px;}
#mainMenu .pull-left .checkbox-primary {margin-top: 5px;}
@@ -8,7 +8,7 @@ th.table-nest-title-edit {padding-left: 50px !important;}
th.table-nest-title-edit .table-nest-toggle {left: 28px;}
th.table-nest-title .check-all {position: absolute; left: 15px; top: 7px;}
.c-date {text-align: center;}
+#executionTableList > tr.has-nest-child .table-nest-toggle {vertical-align: middle;}
#executionTableList > tr:not(.has-nest-child) .table-nest-toggle {display: none;}
#executionTableList > tr:not(.has-nest-child) .project-type-label {margin-left: 22px;}
.table-statistic {padding-left: 10px;}
-#executionTableList .table-nest-icon {top: 6px;}
diff --git a/module/project/view/execution.html.php b/module/project/view/execution.html.php
index a3c52ed861..83cadad0be 100644
--- a/module/project/view/execution.html.php
+++ b/module/project/view/execution.html.php
@@ -82,9 +82,9 @@
project->progress;?> |
programplan->begin;?> |
programplan->end;?> |
- task->estimateAB;?> |
- task->consumedAB;?> |
- task->leftAB;?> |
+ task->estimateAB;?> |
+ task->consumedAB;?> |
+ task->leftAB;?> |
execution->burn;?> |
actions;?> |
diff --git a/module/projectrelease/js/browse.js b/module/projectrelease/js/browse.js
new file mode 100644
index 0000000000..215487f727
--- /dev/null
+++ b/module/projectrelease/js/browse.js
@@ -0,0 +1,26 @@
+$(function()
+{
+ /* Update table summary text. */
+ var $rows = $('#releaseList').find('tbody>tr');
+
+ var normal = 0;
+ var terminate = 0;
+ $rows.each(function()
+ {
+ var $row = $(this);
+ var data = $row.data();
+ if(data.type === 'normal') normal++;
+ if(data.type === 'terminate') terminate++;
+ });
+
+ var summary = '';
+ if(type != 'all')
+ {
+ summary = pageSummary.replace('%s', $rows.length);
+ }
+ else
+ {
+ summary = pageAllSummary.replace('%total%', $rows.length).replace('%normal%', normal).replace('%terminate%', terminate);
+ }
+ $('.table-statistic').html(summary);
+});
diff --git a/module/projectrelease/view/browse.html.php b/module/projectrelease/view/browse.html.php
index 36de8640c2..24075caf0b 100644
--- a/module/projectrelease/view/browse.html.php
+++ b/module/projectrelease/view/browse.html.php
@@ -13,6 +13,9 @@
release->confirmDelete)?>
+release->pageAllSummary)?>
+release->pageSummary)?>
+
release->id;?> |
release->name;?> |
+ release->build;?> |
release->product;?> |
executionCommon;?> |
- release->build;?> |
- release->date;?> |
release->status;?> |
+ release->date;?> |
projectrelease->getFlowExtendFields();
foreach($extendFields as $extendField) echo "{$extendField->name} | ";
@@ -60,7 +63,7 @@
-
+
| id"), sprintf('%03d', $release->id));?> |
id"), $release->name, '', "data-app='$from'") . $flagIcon;
?>
|
+ execution) ? $release->buildName : html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> |
productName?> |
executionName?> |
- execution) ? $release->buildName : html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> |
- date;?> |
processStatus('release', $release);?>
|
+ date;?> |
" . $this->loadModel('flow')->getFieldValue($extendField, $release) . "";?>
projectrelease->buildOperateMenu($release, 'browse');?> |
-
+
diff --git a/module/release/js/browse.js b/module/release/js/browse.js
new file mode 100644
index 0000000000..215487f727
--- /dev/null
+++ b/module/release/js/browse.js
@@ -0,0 +1,26 @@
+$(function()
+{
+ /* Update table summary text. */
+ var $rows = $('#releaseList').find('tbody>tr');
+
+ var normal = 0;
+ var terminate = 0;
+ $rows.each(function()
+ {
+ var $row = $(this);
+ var data = $row.data();
+ if(data.type === 'normal') normal++;
+ if(data.type === 'terminate') terminate++;
+ });
+
+ var summary = '';
+ if(type != 'all')
+ {
+ summary = pageSummary.replace('%s', $rows.length);
+ }
+ else
+ {
+ summary = pageAllSummary.replace('%total%', $rows.length).replace('%normal%', normal).replace('%terminate%', terminate);
+ }
+ $('.table-statistic').html(summary);
+});
diff --git a/module/release/lang/de.php b/module/release/lang/de.php
index d2e7ef5f37..8300c5d5fc 100644
--- a/module/release/lang/de.php
+++ b/module/release/lang/de.php
@@ -33,37 +33,39 @@ $lang->release->errorDate = 'The release date should not be greater tha
$lang->release->basicInfo = 'Basis Info';
-$lang->release->id = 'ID';
-$lang->release->product = $lang->productCommon;
-$lang->release->branch = 'Platform/Branch';
-$lang->release->project = 'Project';
-$lang->release->build = 'Build';
-$lang->release->name = 'Name';
-$lang->release->marker = 'Meilensteine';
-$lang->release->date = 'Datum';
-$lang->release->desc = 'Beschreibung';
-$lang->release->files = 'Gehäuse';
-$lang->release->status = 'Status';
-$lang->release->subStatus = 'Sub Status';
-$lang->release->last = 'Letztes Release';
-$lang->release->unlinkStory = 'Story entfernen';
-$lang->release->unlinkBug = 'Bug entfernen';
-$lang->release->stories = 'Abgeschlossene Story';
-$lang->release->bugs = 'Gelöste Bugs';
-$lang->release->leftBugs = 'Verbleibende Bugs';
-$lang->release->generatedBugs = 'Gemeldete Bugs';
-$lang->release->finishStories = 'Abgeschlossene %s Storys';
-$lang->release->resolvedBugs = 'Gelöste %s Bugs';
-$lang->release->createdBugs = 'Erstellte %s Bugs';
-$lang->release->export = 'Export as HTML';
-$lang->release->yesterday = 'Gestern veröffentlicht';
-$lang->release->all = 'All';
-$lang->release->notify = 'Notify';
-$lang->release->notifyUsers = 'Notify Users';
-$lang->release->mailto = 'Mailto';
-$lang->release->mailContent = ' Dear users, The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version. ';
-$lang->release->storyList = ' Story List:%s。 ';
-$lang->release->bugList = ' Bug List:%s。 ';
+$lang->release->id = 'ID';
+$lang->release->product = $lang->productCommon;
+$lang->release->branch = 'Platform/Branch';
+$lang->release->project = 'Project';
+$lang->release->build = 'Build';
+$lang->release->name = 'Name';
+$lang->release->marker = 'Meilensteine';
+$lang->release->date = 'Datum';
+$lang->release->desc = 'Beschreibung';
+$lang->release->files = 'Gehäuse';
+$lang->release->status = 'Status';
+$lang->release->subStatus = 'Sub Status';
+$lang->release->last = 'Letztes Release';
+$lang->release->unlinkStory = 'Story entfernen';
+$lang->release->unlinkBug = 'Bug entfernen';
+$lang->release->stories = 'Abgeschlossene Story';
+$lang->release->bugs = 'Gelöste Bugs';
+$lang->release->leftBugs = 'Verbleibende Bugs';
+$lang->release->generatedBugs = 'Gemeldete Bugs';
+$lang->release->finishStories = 'Abgeschlossene %s Storys';
+$lang->release->resolvedBugs = 'Gelöste %s Bugs';
+$lang->release->createdBugs = 'Erstellte %s Bugs';
+$lang->release->export = 'Export as HTML';
+$lang->release->yesterday = 'Gestern veröffentlicht';
+$lang->release->all = 'All';
+$lang->release->notify = 'Notify';
+$lang->release->notifyUsers = 'Notify Users';
+$lang->release->mailto = 'Mailto';
+$lang->release->mailContent = ' Dear users, The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version. ';
+$lang->release->storyList = ' Story List:%s。 ';
+$lang->release->bugList = ' Bug List:%s。 ';
+$lang->release->pageAllSummary = 'Total releases: %total%, Normal: %normal%, Terminate: %terminate%。';
+$lang->release->pageSummary = "Total releases: %s.";
$lang->release->storyTitle = 'Story Name';
$lang->release->bugTitle = 'Bug Name';
diff --git a/module/release/lang/en.php b/module/release/lang/en.php
index 51bda2c5e6..0970f52afe 100644
--- a/module/release/lang/en.php
+++ b/module/release/lang/en.php
@@ -33,37 +33,39 @@ $lang->release->errorDate = 'The release date should not be greater tha
$lang->release->basicInfo = 'Basic Info';
-$lang->release->id = 'ID';
-$lang->release->product = $lang->productCommon;
-$lang->release->branch = 'Platform/Branch';
-$lang->release->project = 'Project';
-$lang->release->build = 'Build';
-$lang->release->name = 'Name';
-$lang->release->marker = 'Milestone';
-$lang->release->date = 'Release Date';
-$lang->release->desc = 'Description';
-$lang->release->files = 'Files';
-$lang->release->status = 'Status';
-$lang->release->subStatus = 'Sub Status';
-$lang->release->last = 'Last Release';
-$lang->release->unlinkStory = 'Unlink Story';
-$lang->release->unlinkBug = 'Unlink Bug';
-$lang->release->stories = 'Finished Story';
-$lang->release->bugs = 'Resolved Bug';
-$lang->release->leftBugs = 'Active Bug';
-$lang->release->generatedBugs = 'Active Bug';
-$lang->release->finishStories = 'Finished %s Stories';
-$lang->release->resolvedBugs = 'Resolved %s Bugs';
-$lang->release->createdBugs = 'Unresolved %s Bug';
-$lang->release->export = 'Export as HTML';
-$lang->release->yesterday = 'Released Yesterday';
-$lang->release->all = 'All';
-$lang->release->notify = 'Notify';
-$lang->release->notifyUsers = 'Notify Users';
-$lang->release->mailto = 'Mailto';
-$lang->release->mailContent = ' Dear users, The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version. ';
-$lang->release->storyList = ' Story List:%s。 ';
-$lang->release->bugList = ' Bug List:%s。 ';
+$lang->release->id = 'ID';
+$lang->release->product = $lang->productCommon;
+$lang->release->branch = 'Platform/Branch';
+$lang->release->project = 'Project';
+$lang->release->build = 'Build';
+$lang->release->name = 'Name';
+$lang->release->marker = 'Milestone';
+$lang->release->date = 'Release Date';
+$lang->release->desc = 'Description';
+$lang->release->files = 'Files';
+$lang->release->status = 'Status';
+$lang->release->subStatus = 'Sub Status';
+$lang->release->last = 'Last Release';
+$lang->release->unlinkStory = 'Unlink Story';
+$lang->release->unlinkBug = 'Unlink Bug';
+$lang->release->stories = 'Finished Story';
+$lang->release->bugs = 'Resolved Bug';
+$lang->release->leftBugs = 'Active Bug';
+$lang->release->generatedBugs = 'Active Bug';
+$lang->release->finishStories = 'Finished %s Stories';
+$lang->release->resolvedBugs = 'Resolved %s Bugs';
+$lang->release->createdBugs = 'Unresolved %s Bug';
+$lang->release->export = 'Export as HTML';
+$lang->release->yesterday = 'Released Yesterday';
+$lang->release->all = 'All';
+$lang->release->notify = 'Notify';
+$lang->release->notifyUsers = 'Notify Users';
+$lang->release->mailto = 'Mailto';
+$lang->release->mailContent = ' Dear users, The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version. ';
+$lang->release->storyList = ' Story List:%s。 ';
+$lang->release->bugList = ' Bug List:%s。 ';
+$lang->release->pageAllSummary = 'Total releases: %total%, Normal: %normal%, Terminate: %terminate%。';
+$lang->release->pageSummary = "Total releases: %s.";
$lang->release->storyTitle = 'Story Name';
$lang->release->bugTitle = 'Bug Name';
diff --git a/module/release/lang/fr.php b/module/release/lang/fr.php
index ec8a2860ef..290c323c5d 100644
--- a/module/release/lang/fr.php
+++ b/module/release/lang/fr.php
@@ -33,37 +33,39 @@ $lang->release->errorDate = "La date de release ne doit pas être supé
$lang->release->basicInfo = 'Infos de Base';
-$lang->release->id = 'ID';
-$lang->release->product = $lang->productCommon;
-$lang->release->branch = 'Plateforme/Branche';
-$lang->release->project = 'Project';
-$lang->release->build = 'Build';
-$lang->release->name = 'Nom';
-$lang->release->marker = 'Etape Importante';
-$lang->release->date = 'Date Release';
-$lang->release->desc = 'Description';
-$lang->release->files = 'Files';
-$lang->release->status = 'Statut';
-$lang->release->subStatus = 'Sous-statut';
-$lang->release->last = 'Dernière Release';
-$lang->release->unlinkStory = 'Retirer Story';
-$lang->release->unlinkBug = 'Retirer Bug';
-$lang->release->stories = 'Stories Terminées';
-$lang->release->bugs = 'Bugs Résolus';
-$lang->release->leftBugs = 'Bugs Actifs';
-$lang->release->generatedBugs = 'Bugs Actifs';
-$lang->release->finishStories = '%s Stories Terminées';
-$lang->release->resolvedBugs = '%s Bugs Résolus';
-$lang->release->createdBugs = '%s Bugs non résolus';
-$lang->release->export = 'Export HTML';
-$lang->release->yesterday = 'Versionné Hier';
-$lang->release->all = 'Tout';
-$lang->release->notify = 'Notify';
-$lang->release->notifyUsers = 'Notify Users';
-$lang->release->mailto = 'Mailto';
-$lang->release->mailContent = ' Dear users, The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version. ';
-$lang->release->storyList = ' Story List:%s。 ';
-$lang->release->bugList = ' Bug List:%s。 ';
+$lang->release->id = 'ID';
+$lang->release->product = $lang->productCommon;
+$lang->release->branch = 'Plateforme/Branche';
+$lang->release->project = 'Project';
+$lang->release->build = 'Build';
+$lang->release->name = 'Nom';
+$lang->release->marker = 'Etape Importante';
+$lang->release->date = 'Date Release';
+$lang->release->desc = 'Description';
+$lang->release->files = 'Files';
+$lang->release->status = 'Statut';
+$lang->release->subStatus = 'Sous-statut';
+$lang->release->last = 'Dernière Release';
+$lang->release->unlinkStory = 'Retirer Story';
+$lang->release->unlinkBug = 'Retirer Bug';
+$lang->release->stories = 'Stories Terminées';
+$lang->release->bugs = 'Bugs Résolus';
+$lang->release->leftBugs = 'Bugs Actifs';
+$lang->release->generatedBugs = 'Bugs Actifs';
+$lang->release->finishStories = '%s Stories Terminées';
+$lang->release->resolvedBugs = '%s Bugs Résolus';
+$lang->release->createdBugs = '%s Bugs non résolus';
+$lang->release->export = 'Export HTML';
+$lang->release->yesterday = 'Versionné Hier';
+$lang->release->all = 'Tout';
+$lang->release->notify = 'Notify';
+$lang->release->notifyUsers = 'Notify Users';
+$lang->release->mailto = 'Mailto';
+$lang->release->mailContent = ' Dear users, The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version. ';
+$lang->release->storyList = ' Story List:%s。 ';
+$lang->release->bugList = ' Bug List:%s。 ';
+$lang->release->pageAllSummary = 'Total releases: %total%, Normal: %normal%, Terminate: %terminate%。';
+$lang->release->pageSummary = "Total releases: %s.";
$lang->release->storyTitle = 'Story Name';
$lang->release->bugTitle = 'Bug Name';
diff --git a/module/release/lang/zh-cn.php b/module/release/lang/zh-cn.php
index d76ce29615..9f4d18fa33 100644
--- a/module/release/lang/zh-cn.php
+++ b/module/release/lang/zh-cn.php
@@ -33,37 +33,39 @@ $lang->release->errorDate = '发布日期不能大于今天。';
$lang->release->basicInfo = '基本信息';
-$lang->release->id = 'ID';
-$lang->release->product = $lang->productCommon;
-$lang->release->branch = '平台/分支';
-$lang->release->project = '所属项目';
-$lang->release->build = '版本';
-$lang->release->name = '发布名称';
-$lang->release->marker = '里程碑';
-$lang->release->date = '发布日期';
-$lang->release->desc = '描述';
-$lang->release->files = '附件';
-$lang->release->status = '状态';
-$lang->release->subStatus = '子状态';
-$lang->release->last = '上次发布';
-$lang->release->unlinkStory = "移除{$lang->SRCommon}";
-$lang->release->unlinkBug = '移除Bug';
-$lang->release->stories = "完成的{$lang->SRCommon}";
-$lang->release->bugs = '解决的Bug';
-$lang->release->leftBugs = '遗留的Bug';
-$lang->release->generatedBugs = '遗留的Bug';
-$lang->release->finishStories = "本次共完成 %s 个{$lang->SRCommon}";
-$lang->release->resolvedBugs = '本次共解决 %s 个Bug';
-$lang->release->createdBugs = '本次共遗留 %s 个Bug';
-$lang->release->export = '导出HTML';
-$lang->release->yesterday = '昨日发布';
-$lang->release->all = '所有';
-$lang->release->notify = '发送通知';
-$lang->release->notifyUsers = '通知人员';
-$lang->release->mailto = '抄送给';
-$lang->release->mailContent = ' 尊敬的用户,您好! 您反馈的如下需求和Bug已经在 %s版本中发布,请联系客户经理查看最新版本。 ';
-$lang->release->storyList = ' 需求列表:%s。 ';
-$lang->release->bugList = ' Bug列表:%s。 ';
+$lang->release->id = 'ID';
+$lang->release->product = $lang->productCommon;
+$lang->release->branch = '平台/分支';
+$lang->release->project = '所属项目';
+$lang->release->build = '版本';
+$lang->release->name = '发布名称';
+$lang->release->marker = '里程碑';
+$lang->release->date = '发布日期';
+$lang->release->desc = '描述';
+$lang->release->files = '附件';
+$lang->release->status = '状态';
+$lang->release->subStatus = '子状态';
+$lang->release->last = '上次发布';
+$lang->release->unlinkStory = "移除{$lang->SRCommon}";
+$lang->release->unlinkBug = '移除Bug';
+$lang->release->stories = "完成的{$lang->SRCommon}";
+$lang->release->bugs = '解决的Bug';
+$lang->release->leftBugs = '遗留的Bug';
+$lang->release->generatedBugs = '遗留的Bug';
+$lang->release->finishStories = "本次共完成 %s 个{$lang->SRCommon}";
+$lang->release->resolvedBugs = '本次共解决 %s 个Bug';
+$lang->release->createdBugs = '本次共遗留 %s 个Bug';
+$lang->release->export = '导出HTML';
+$lang->release->yesterday = '昨日发布';
+$lang->release->all = '所有';
+$lang->release->notify = '发送通知';
+$lang->release->notifyUsers = '通知人员';
+$lang->release->mailto = '抄送给';
+$lang->release->mailContent = ' 尊敬的用户,您好! 您反馈的如下需求和Bug已经在 %s版本中发布,请联系客户经理查看最新版本。 ';
+$lang->release->storyList = ' 需求列表:%s。 ';
+$lang->release->bugList = ' Bug列表:%s。 ';
+$lang->release->pageAllSummary = '本页共 %total% 个发布,正常 %normal%,停止维护 %terminate%。';
+$lang->release->pageSummary = "本页共 %s 个发布。";
$lang->release->storyTitle = '需求名称';
$lang->release->bugTitle = 'Bug名称';
diff --git a/module/release/view/browse.html.php b/module/release/view/browse.html.php
index cccf46cd3a..d8e18d56f6 100644
--- a/module/release/view/browse.html.php
+++ b/module/release/view/browse.html.php
@@ -13,6 +13,9 @@
release->confirmDelete)?>
+release->pageAllSummary)?>
+release->pageSummary)?>
+
| release->id;?> |
release->name;?> |
- release->project;?> |
release->build;?> |
type != 'normal'):?>
product->branch;?> |
- release->date;?> |
+ release->project;?> |
release->status;?> |
+ release->date;?> |
release->getFlowExtendFields();
foreach($extendFields as $extendField) echo " {$extendField->name} | ";
@@ -65,7 +68,7 @@
-
+
| id"), sprintf('%03d', $release->id));?> |
id"), $release->name, '', "title='$release->name'") . $flagIcon;
?>
|
- projectName;?> |
execution) ? $release->buildName : html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> |
type != 'normal'):?>
'>branch];?> |
- date;?> |
+ projectName;?> |
processStatus('release', $release);?>
|
+ date;?> |
" . $this->loadModel('flow')->getFieldValue($extendField, $release) . "";?>
release->buildOperateMenu($release, 'browse');?>
@@ -92,6 +95,7 @@
|
diff --git a/module/stage/model.php b/module/stage/model.php
index 9baa81b443..a967e38b48 100644
--- a/module/stage/model.php
+++ b/module/stage/model.php
@@ -72,9 +72,9 @@ class stageModel extends model
->batchCheck($this->config->stage->create->requiredFields, 'notempty')
->checkIF($stage->percent != '', 'percent', 'float')
->exec();
-
- if(dao::isError()) return false;
-
+
+ if(dao::isError()) return false;
+
$stageID = $this->dao->lastInsertID();
$this->action->create('stage', $stageID, 'Opened');
}
@@ -117,13 +117,24 @@ class stageModel extends model
* Get stages.
*
* @param string $orderBy
+ * @param int $projectID
* @access public
* @return array
*/
- public function getStages($orderBy = 'id_desc')
+ public function getStages($orderBy = 'id_desc', $projectID = 0)
{
- return $this->dao->select('*')->from(TABLE_STAGE)->where('deleted')->eq(0)->orderBy($orderBy)->fetchAll('id');
- }
+ $stages = $this->dao->select('t1.id,name,type,percent,openedBy as createdBy,begin as createdDate,lastEditedBy as editedBy,end as editedDate,deleted')
+ ->from(TABLE_EXECUTION)->alias('t1')
+ ->where('t1.type')->in('sprint,stage,kanban')
+ ->andWhere('t1.deleted')->eq('0')
+ ->andWhere('t1.vision')->eq($this->config->vision)
+ ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi()
+ ->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi()
+ ->orderBy($orderBy)
+ ->fetchAll('id');
+ $stages = !empty($stages) ? $stages : $this->dao->select('*')->from(TABLE_STAGE)->where('deleted')->eq(0)->orderBy($orderBy)->fetchAll('id');
+ return $stages;
+ }
/**
* Get pairs of stage.
diff --git a/module/story/control.php b/module/story/control.php
index ccc9bc8d99..7a04436294 100644
--- a/module/story/control.php
+++ b/module/story/control.php
@@ -2466,24 +2466,6 @@ class story extends control
echo json_encode($storyInfo);
}
- /**
- * AJAX: get the user requirements of the product.
- *
- * @param int $productID
- * @param string $labelName
- * @param bool $isMultiple
- * @param int $defaultID
- * @access public
- * @return string
- */
- public function ajaxGetProductURS($productID, $labelName = '', $isMultiple = false, $defaultID = '')
- {
- $requirements = array('0' => '') + $this->story->getRequirements($productID);
- $labelName = $isMultiple ? $labelName . '[]' : $labelName;
- $misc = $isMultiple ? 'class="form-control" multiple' : 'class="form-control"';
- return print(html::select($labelName, $requirements, $defaultID, $misc));
- }
-
/**
* AJAX: get the parent story.
*
diff --git a/module/story/js/common.js b/module/story/js/common.js
index ce4a67d484..5e6525c4eb 100644
--- a/module/story/js/common.js
+++ b/module/story/js/common.js
@@ -62,3 +62,27 @@ function getStatus(method, params)
$('form #status').val(status).change();
});
}
+
+/**
+ * Load URS.
+ *
+ * @access public
+ * @return void
+ */
+function loadURS()
+{
+ var productID = $('#product').val();
+ var branchID = $('#branch').val();
+ var moduleID = $('#module').val();
+ var requirementList = $('#URS').val();
+ requirementList = requirementList ? requirementList.join(',') : '';
+
+ var link = createLink('story', 'ajaxGetURS', 'productID=' + productID + '&branchID=' + branchID + '&moduleID=' + moduleID + '&requirementList=' + requirementList);
+
+ $.post(link, function(data)
+ {
+ $('#URS').replaceWith(data);
+ $('#URS_chosen').remove();
+ $('#URS').chosen();
+ });
+}
diff --git a/module/story/js/create.js b/module/story/js/create.js
index f976714126..868dfd6a20 100644
--- a/module/story/js/create.js
+++ b/module/story/js/create.js
@@ -80,30 +80,6 @@ function loadAssignedTo()
});
}
-/**
- * Load URS.
- *
- * @access public
- * @return void
- */
-function loadURS()
-{
- var productID = $('#product').val();
- var branchID = $('#branch').val();
- var moduleID = $('#module').val();
- var requirementList = $('#URS').val();
- requirementList = requirementList ? requirementList.join(',') : '';
-
- var link = createLink('story', 'ajaxGetURS', 'productID=' + productID + '&branchID=' + branchID + '&moduleID=' + moduleID + '&requirementList=' + requirementList);
-
- $.post(link, function(data)
- {
- $('#URS').replaceWith(data);
- $('#URS_chosen').remove();
- $('#URS').chosen();
- });
-}
-
function refreshPlan()
{
loadProductPlans($('#product').val(), $('#branch').val());
diff --git a/module/story/model.php b/module/story/model.php
index 582808e2bf..1c478ff82e 100644
--- a/module/story/model.php
+++ b/module/story/model.php
@@ -4805,7 +4805,7 @@ class storyModel extends model
if($story->module and isset($modulePairs[$story->module])) echo " {$modulePairs[$story->module]} ";
if($story->parent > 0) echo ' ' . $this->lang->story->childrenAB . ' ';
echo $canView ? html::a($storyLink, $story->title, '', "title='$story->title' style='color: $story->color' data-app='$tab'") : " {$story->title}";
- if(!empty($story->children)) echo ' ';
+ if(!empty($story->children)) echo ' ';
break;
case 'plan':
echo isset($story->planTitle) ? $story->planTitle : '';
diff --git a/module/story/view/header.html.php b/module/story/view/header.html.php
index 0640d71d1b..5d84b1a6b8 100644
--- a/module/story/view/header.html.php
+++ b/module/story/view/header.html.php
@@ -40,15 +40,6 @@ function loadProduct(productID)
if(typeof(storyType) == 'string' && storyType == 'story')
{
- var requirementLink = createLink('story', 'ajaxGetProductURS', 'productID=' + productID + '&labelName=URS' + '&isMultiple=1');
- $.get(requirementLink, function(data)
- {
- $('#URS').replaceWith(data);
- $('#URS' + "_chosen").remove();
- $('#URS').next('.picker').remove();
- $('#URS').chosen();
- });
-
var storyLink = createLink('story', 'ajaxGetParentStory', 'productID=' + productID + '&labelName=parent');
$.get(storyLink, function(data)
{
@@ -75,7 +66,6 @@ function loadBranch()
loadProductModules(productID, branch);
loadProductPlans(productID, branch);
- loadURS();
}
/**
@@ -105,7 +95,6 @@ function loadProductBranches(productID)
loadProductModules(productID, $('#branch').val());
loadProductPlans(productID, $('#branch').val());
- loadURS();
})
}
@@ -136,8 +125,6 @@ function loadProductModules(productID, branch)
if(typeof(storyModule) == 'string' && config.currentMethod != 'edit') $moduleIDBox.prepend(" " + storyModule + "");
$moduleIDBox.fixInputGroup();
});
-
- loadURS();
}
/**
diff --git a/module/task/control.php b/module/task/control.php
index 5683224460..fb8735d3dd 100755
--- a/module/task/control.php
+++ b/module/task/control.php
@@ -291,7 +291,22 @@ class task extends control
/* Set Custom*/
foreach(explode(',', $this->config->task->customCreateFields) as $field) $customFields[$field] = $this->lang->task->$field;
- $executions = $this->config->systemMode == 'classic' ? $executions : $this->execution->getByProject($projectID, 'noclosed', 0, true);
+ $executionAll = array();
+ if(!empty($projectID))
+ {
+ $executionList = $this->execution->getByProject($projectID, 'noclosed', 0, true);
+ $project = $this->loadModel('project')->getByID($projectID);
+ $replace = substr(current($executionList), 0, strpos(current($executionList), '/'));
+ if(isset($project->model) and $project->model == 'waterfall')
+ {
+ foreach($executionList as $key => $val)
+ {
+ $values = str_replace($replace, $project->name, $val);
+ $executionAll[$key] = $values;
+ }
+ }
+ }
+ $executions = $this->config->systemMode == 'classic' ? $executions : $executionAll;
$testStoryIdList = $this->loadModel('story')->getTestStories(array_keys($stories), $execution->id);
/* Stories that can be used to create test tasks. */
diff --git a/module/testsuite/control.php b/module/testsuite/control.php
index f1db7cad12..3bf999347f 100644
--- a/module/testsuite/control.php
+++ b/module/testsuite/control.php
@@ -81,6 +81,17 @@ class testsuite extends control
$pager = pager::init(0, $recPerPage, 1);
$suites = $this->testsuite->getSuites($productID, $sort, $pager, $type);
}
+ $privateNum = 0;
+ foreach($suites as $suiteItem)
+ {
+ if($suiteItem->type == 'private')
+ {
+ $privateNum++;
+ }
+ }
+ $suitesNum = !empty(count($suites, 0)) ? count($suites, 0) : 0;
+ $publicNum = $suitesNum - $privateNum;
+ $summary = str_replace(array('%total%', '%public%', '%private%'), array($suitesNum, $publicNum, $privateNum), $this->lang->testsuite->summary);
$this->view->title = $productName . $this->lang->testsuite->common;
$this->view->position[] = html::a($this->createLink('testsuite', 'browse', "productID=$productID"), $productName);
@@ -94,6 +105,7 @@ class testsuite extends control
$this->view->users = $this->loadModel('user')->getPairs('noclosed|noletter');
$this->view->pager = $pager;
$this->view->product = $this->product->getByID($productID);
+ $this->view->summary = $summary;
$this->display();
}
diff --git a/module/testsuite/lang/de.php b/module/testsuite/lang/de.php
index 87f5b051b0..d5e3e7fe86 100644
--- a/module/testsuite/lang/de.php
+++ b/module/testsuite/lang/de.php
@@ -48,6 +48,7 @@ $lang->testsuite->confirmUnlinkCase = 'Möchten Sie diese Verknüpfung aufheben?
$lang->testsuite->noticeNone = 'Sie haben noch keine Suite erstellt.';
$lang->testsuite->noModule = ' Sie haben keine Module Jetzt verwalten ';
$lang->testsuite->noTestsuite = 'Keine Suite. ';
+$lang->testsuite->summary = "Total suites: %total%, public: %public%, private: %private%.";
$lang->testsuite->lblCases = 'Fälle';
$lang->testsuite->lblUnlinkCase = 'Unverknüpfte Fälle';
@@ -55,4 +56,4 @@ $lang->testsuite->lblUnlinkCase = 'Unverknüpfte Fälle';
$lang->testsuite->authorList['private'] = 'Privat';
$lang->testsuite->authorList['public'] = 'Öffentlich';
-$lang->testsuite->featureBar['browse']['all'] = 'Suite List';
+$lang->testsuite->featureBar['browse']['all'] = 'Suite List';
\ No newline at end of file
diff --git a/module/testsuite/lang/en.php b/module/testsuite/lang/en.php
index ad27dd4346..cb4281af01 100644
--- a/module/testsuite/lang/en.php
+++ b/module/testsuite/lang/en.php
@@ -48,6 +48,7 @@ $lang->testsuite->confirmUnlinkCase = 'Do you want to unlink this Case?';
$lang->testsuite->noticeNone = 'You have not created any suite yet.';
$lang->testsuite->noModule = ' You have no modules. Manage it now. ';
$lang->testsuite->noTestsuite = 'No suites yet.';
+$lang->testsuite->summary = "Total suites: %total%, public: %public%, private: %private%.";
$lang->testsuite->lblCases = 'Cases';
$lang->testsuite->lblUnlinkCase = 'Unlink Case';
@@ -55,4 +56,4 @@ $lang->testsuite->lblUnlinkCase = 'Unlink Case';
$lang->testsuite->authorList['private'] = 'Private';
$lang->testsuite->authorList['public'] = 'Public';
-$lang->testsuite->featureBar['browse']['all'] = 'Suite List';
+$lang->testsuite->featureBar['browse']['all'] = 'Suite List';
\ No newline at end of file
diff --git a/module/testsuite/lang/fr.php b/module/testsuite/lang/fr.php
index 40d8c6b906..919364f957 100644
--- a/module/testsuite/lang/fr.php
+++ b/module/testsuite/lang/fr.php
@@ -48,6 +48,7 @@ $lang->testsuite->confirmUnlinkCase = 'Voulez-vous retirer ce CasTest ?';
$lang->testsuite->noticeNone = "Vous n'avez pas encore créé de Cahier de Recette pour l'instant.";
$lang->testsuite->noModule = ' Vous avez aucun Module. Gérer les Modules maintenant. ';
$lang->testsuite->noTestsuite = 'Aucun Cahier de Recette.';
+$lang->testsuite->summary = "Total suites: %total%, public: %public%, private: %private%.";
$lang->testsuite->lblCases = 'CasTests';
$lang->testsuite->lblUnlinkCase = 'Retirer CasTest';
@@ -55,4 +56,4 @@ $lang->testsuite->lblUnlinkCase = 'Retirer CasTest';
$lang->testsuite->authorList['private'] = 'Privé';
$lang->testsuite->authorList['public'] = 'Public';
-$lang->testsuite->featureBar['browse']['all'] = 'Suite List';
+$lang->testsuite->featureBar['browse']['all'] = 'Suite List';
\ No newline at end of file
diff --git a/module/testsuite/lang/vi.php b/module/testsuite/lang/vi.php
index f262b8932f..457ea04a1d 100644
--- a/module/testsuite/lang/vi.php
+++ b/module/testsuite/lang/vi.php
@@ -45,6 +45,7 @@ $lang->testsuite->confirmUnlinkCase = 'Bạn có muốn hủy liên kết tình
$lang->testsuite->noticeNone = 'Bạn chưa tạo suite nào';
$lang->testsuite->noModule = ' Chưa có Module. Quản lý ngay. ';
$lang->testsuite->noTestsuite = 'Không có suites nào';
+$lang->testsuite->summary = "Tổng %total% suites nào, Công khai: %public%, Riêng tư: %private%.";
$lang->testsuite->lblCases = 'Tình huống';
$lang->testsuite->lblUnlinkCase = 'Hủy liên kết tình huống';
@@ -52,4 +53,4 @@ $lang->testsuite->lblUnlinkCase = 'Hủy liên kết tình huống';
$lang->testsuite->authorList['private'] = 'Riêng tư';
$lang->testsuite->authorList['public'] = 'Công khai';
-$lang->testsuite->featureBar['browse']['all'] = 'Suite List';
+$lang->testsuite->featureBar['browse']['all'] = 'Suite List';
\ No newline at end of file
diff --git a/module/testsuite/lang/zh-cn.php b/module/testsuite/lang/zh-cn.php
index 3ac13b0a20..245fded3ca 100644
--- a/module/testsuite/lang/zh-cn.php
+++ b/module/testsuite/lang/zh-cn.php
@@ -48,6 +48,7 @@ $lang->testsuite->confirmUnlinkCase = '您确认要移除该用例吗?';
$lang->testsuite->noticeNone = '您还没有创建套件';
$lang->testsuite->noModule = ' 您现在还没有模块信息 请维护用例库模块 ';
$lang->testsuite->noTestsuite = '暂时没有套件。';
+$lang->testsuite->summary = "本页共 %total% 个套件,公开 %public% 个,私有 %private% 个。";
$lang->testsuite->lblCases = '用例列表';
$lang->testsuite->lblUnlinkCase = '移除用例';
@@ -55,4 +56,4 @@ $lang->testsuite->lblUnlinkCase = '移除用例';
$lang->testsuite->authorList['private'] = '私有';
$lang->testsuite->authorList['public'] = '公开';
-$lang->testsuite->featureBar['browse']['all'] = '套件列表';
+$lang->testsuite->featureBar['browse']['all'] = '套件列表';
\ No newline at end of file
diff --git a/module/testsuite/lang/zh-tw.php b/module/testsuite/lang/zh-tw.php
index f8e3006a1a..bbf98e3817 100644
--- a/module/testsuite/lang/zh-tw.php
+++ b/module/testsuite/lang/zh-tw.php
@@ -47,6 +47,7 @@ $lang->testsuite->confirmUnlinkCase = '您確認要移除該用例嗎?';
$lang->testsuite->noticeNone = '您還沒有創建套件';
$lang->testsuite->noModule = ' 您現在還沒有模組信息 請維護用例庫模組 ';
$lang->testsuite->noTestsuite = '暫時沒有套件。';
+$lang->testsuite->summary = "本頁共 %total% 個套件,公開 %public% 個,私有 %private% 個。";
$lang->testsuite->lblCases = '用例列表';
$lang->testsuite->lblUnlinkCase = '移除用例';
diff --git a/module/testsuite/view/browse.html.php b/module/testsuite/view/browse.html.php
index 05d7aa1291..e319254273 100644
--- a/module/testsuite/view/browse.html.php
+++ b/module/testsuite/view/browse.html.php
@@ -82,7 +82,10 @@
-
+
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/view/bug.html.php b/module/user/view/bug.html.php
index 3a92c71feb..d13f6c87f0 100644
--- a/module/user/view/bug.html.php
+++ b/module/user/view/bug.html.php
@@ -39,10 +39,10 @@
| idAB);?> |
+ bug->title);?> |
bug->severity;?>>bug->severityAB);?> |
priAB);?> |
typeAB);?> |
- bug->title);?> |
openedByAB);?> |
bug->resolvedBy);?> |
bug->resolutionAB);?> |
@@ -52,10 +52,10 @@
| createLink('bug', 'view', "bugID=$bug->id"), $bug->id, '_blank');?> |
+ 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]?> |
- createLink('bug', 'view', "bugID=$bug->id"), $bug->title);?> |
+ bug->typeList, $bug->type, '');?> |
openedBy);?> |
resolvedBy);?> |
bug->resolutionList, $bug->resolution);?> |
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/js/my.full.js b/www/js/my.full.js
index 34cc475891..af3df6cca9 100644
--- a/www/js/my.full.js
+++ b/www/js/my.full.js
@@ -835,8 +835,8 @@ function toggleFold(form, unfoldIdList, objectID, objectType)
if($parentTd.length == 0) return false;
var toggleClass = objectType == 'product' ? 'story-toggle' : 'task-toggle';
- var nameClass = objectType == 'product' ? 'c-title' : 'c-name';
- $form.find('th.' + nameClass).append("");
+ var nameClass = ['product', 'productplan'].indexOf(objectType) !== -1 ? 'c-title' : 'c-name';
+ $form.find('th.' + nameClass).addClass('flex-between').append("");
var allUnfold = true;
$parentTd.each(function()
@@ -849,7 +849,7 @@ function toggleFold(form, unfoldIdList, objectID, objectType)
$(this).find('a.' + toggleClass).addClass('collapsed')
})
- $form.find('th.' + nameClass + ' #toggleFold').html(allUnfold ? foldAll : unfoldAll).toggleClass('collapsed', !allUnfold);
+ $form.find('th.' + nameClass + ' #toggleFold').toggleClass('collapsed', !allUnfold);
$(document).on('click', '#toggleFold', function()
{
@@ -864,7 +864,7 @@ function toggleFold(form, unfoldIdList, objectID, objectType)
newUnfoldID.push(dataID);
})
- $(this).html(collapsed ? foldAll : unfoldAll).toggleClass('collapsed', !collapsed);
+ $(this).toggleClass('collapsed', !collapsed);
url = createLink('misc', 'ajaxSetUnfoldID', 'objectID=' + objectID + '&objectType=' + objectType + '&action=' + (collapsed ? 'add' : 'delete'));
$.post(url, {'newUnfoldID': JSON.stringify(newUnfoldID)});
});
@@ -884,7 +884,7 @@ function toggleFold(form, unfoldIdList, objectID, objectType)
setTimeout(function()
{
hasCollapsed = $table.find('td.has-child a.' + toggleClass + '.collapsed').length != 0;
- $('#toggleFold').html(hasCollapsed ? unfoldAll : foldAll).toggleClass('collapsed', hasCollapsed);
+ $('#toggleFold').toggleClass('collapsed', hasCollapsed);
}, 100);
$.post(url, {'newUnfoldID': JSON.stringify(newUnfoldID)});
diff --git a/www/theme/default/style.css b/www/theme/default/style.css
index 6fba6a44b2..1a92036b23 100644
--- a/www/theme/default/style.css
+++ b/www/theme/default/style.css
@@ -134,9 +134,18 @@ body.xxc-embed.m-productplan-view,body.xxc-embed.m-bug-browse,body.xxc-embed.m-p
#projectForm .c-name .label-danger,
#executionTableList .c-name .label-danger,
+
+.flex-between {display: flex !important;align-items: center;justify-content: space-between;}
+#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
| |