Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into sprint/244_wzm_70007
This commit is contained in:
+10
-8
@@ -172,6 +172,7 @@ $filter->tree->browse = new stdclass();
|
||||
$filter->productplan->browse = new stdclass();
|
||||
$filter->kanban->space = new stdclass();
|
||||
$filter->execution->kanban = new stdclass();
|
||||
$filter->execution->all = new stdclass();
|
||||
|
||||
$filter->index->index->get['open'] = 'reg::base64';
|
||||
|
||||
@@ -300,14 +301,15 @@ $filter->productplan->browse->cookie['viewType'] = 'code';
|
||||
$filter->task->create->cookie['lastTaskModule'] = 'int';
|
||||
$filter->task->export->cookie['checkedItem'] = 'reg::checked';
|
||||
|
||||
$filter->execution->default->cookie['kanbanview'] = 'code';
|
||||
$filter->execution->story->cookie['storyPreExecutionID'] = 'int';
|
||||
$filter->execution->story->cookie['storyModuleParam'] = 'int';
|
||||
$filter->execution->story->cookie['storyProductParam'] = 'int';
|
||||
$filter->execution->story->cookie['storyBranchParam'] = 'int';
|
||||
$filter->execution->story->cookie['executionStoryOrder'] = 'code';
|
||||
$filter->execution->export->cookie['checkedItem'] = 'reg::checked';
|
||||
$filter->execution->kanban->cookie['taskToOpen'] = 'int';
|
||||
$filter->execution->default->cookie['kanbanview'] = 'code';
|
||||
$filter->execution->story->cookie['storyPreExecutionID'] = 'int';
|
||||
$filter->execution->story->cookie['storyModuleParam'] = 'int';
|
||||
$filter->execution->story->cookie['storyProductParam'] = 'int';
|
||||
$filter->execution->story->cookie['storyBranchParam'] = 'int';
|
||||
$filter->execution->story->cookie['executionStoryOrder'] = 'code';
|
||||
$filter->execution->export->cookie['checkedItem'] = 'reg::checked';
|
||||
$filter->execution->kanban->cookie['taskToOpen'] = 'int';
|
||||
$filter->execution->all->cookie['showExecutionBatchEdit'] = 'int';
|
||||
|
||||
$filter->testcase->browse->cookie['caseModule'] = 'int';
|
||||
$filter->testcase->browse->cookie['caseSuite'] = 'int';
|
||||
|
||||
@@ -1004,6 +1004,7 @@ class baseRouter
|
||||
array($ztSessionHandler, "destroy"),
|
||||
array($ztSessionHandler, "gc")
|
||||
);
|
||||
register_shutdown_function('session_write_close');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3167,7 +3168,6 @@ class ztSessionHandler
|
||||
{
|
||||
$this->tagID = $tagID;
|
||||
ini_set('session.save_handler', 'files');
|
||||
register_shutdown_function('session_write_close');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -8,7 +8,7 @@ $config->execution->ownerFields = array('PO', 'PM', 'QD', 'RD');
|
||||
$config->execution->defaultBurnPeriod = 30;
|
||||
|
||||
$config->execution->list = new stdclass();
|
||||
$config->execution->list->exportFields = 'id,name,projectName,code,PM,begin,end,status,totalEstimate,totalConsumed,totalLeft,progress';
|
||||
$config->execution->list->exportFields = 'id,name,projectName,PM,begin,end,status,totalEstimate,totalConsumed,totalLeft,progress';
|
||||
|
||||
$config->execution->modelList['scrum'] = 'sprint';
|
||||
$config->execution->modelList['waterfall'] = 'stage';
|
||||
@@ -135,6 +135,7 @@ $config->execution->all->search['fields']['realEnd'] = $lang->execution->
|
||||
$config->execution->all->search['fields']['closedBy'] = $lang->execution->closedBy;
|
||||
$config->execution->all->search['fields']['lastEditedDate'] = $lang->execution->lastEditedDate;
|
||||
$config->execution->all->search['fields']['closedDate'] = $lang->execution->closedDate;
|
||||
$config->execution->all->search['fields']['teamCount'] = $lang->execution->teamCount;
|
||||
|
||||
$config->execution->all->search['params']['name'] = array('operator' => 'include', 'control' => 'input', 'values' => '');
|
||||
$config->execution->all->search['params']['id'] = array('operator' => '=', 'control' => 'input', 'values' => '');
|
||||
@@ -150,6 +151,7 @@ $config->execution->all->search['params']['realEnd'] = array('operator' =
|
||||
$config->execution->all->search['params']['closedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users');
|
||||
$config->execution->all->search['params']['lastEditedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
|
||||
$config->execution->all->search['params']['closedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
|
||||
$config->execution->all->search['params']['teamCount'] = array('operator' => '=', 'control' => 'input', 'values' => '');
|
||||
|
||||
$config->printKanban = new stdClass();
|
||||
$config->printKanban->col['story'] = 1;
|
||||
@@ -173,11 +175,7 @@ $config->execution->gantt->linkType['end']['end'] = 2;
|
||||
$config->execution->gantt->linkType['begin']['end'] = 3;
|
||||
|
||||
$config->execution->datatable = new stdclass();
|
||||
if((!isset($config->setCode) or $config->setCode == 1) and $config->systemMode == 'new')
|
||||
{
|
||||
$config->execution->datatable->defaultField = array('id', 'name', 'code', 'project', 'PM', 'status', 'progress', 'begin', 'end', 'estimate', 'consumed', 'left', 'burn');
|
||||
}
|
||||
elseif($config->systemMode == 'new')
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$config->execution->datatable->defaultField = array('id', 'name', 'project', 'PM', 'status', 'progress', 'begin', 'end', 'estimate', 'consumed', 'left', 'burn');
|
||||
}
|
||||
@@ -208,7 +206,7 @@ if($config->systemMode == 'new')
|
||||
{
|
||||
$config->execution->datatable->fieldList['project']['title'] = 'project';
|
||||
$config->execution->datatable->fieldList['project']['fixed'] = 'no';
|
||||
$config->execution->datatable->fieldList['project']['width'] = '100';
|
||||
$config->execution->datatable->fieldList['project']['width'] = '128';
|
||||
$config->execution->datatable->fieldList['project']['required'] = 'no';
|
||||
}
|
||||
|
||||
@@ -255,6 +253,12 @@ $config->execution->datatable->fieldList['realEnd']['width'] = '90';
|
||||
$config->execution->datatable->fieldList['realEnd']['required'] = 'no';
|
||||
$config->execution->datatable->fieldList['realEnd']['sort'] = 'no';
|
||||
|
||||
$config->execution->datatable->fieldList['teamCount']['title'] = 'teamCount';
|
||||
$config->execution->datatable->fieldList['teamCount']['fixed'] = 'no';
|
||||
$config->execution->datatable->fieldList['teamCount']['width'] = '80';
|
||||
$config->execution->datatable->fieldList['teamCount']['required'] = 'no';
|
||||
$config->execution->datatable->fieldList['teamCount']['sort'] = 'no';
|
||||
|
||||
$config->execution->datatable->fieldList['estimate']['title'] = 'estimate';
|
||||
$config->execution->datatable->fieldList['estimate']['fixed'] = 'no';
|
||||
$config->execution->datatable->fieldList['estimate']['width'] = '70';
|
||||
|
||||
@@ -3760,6 +3760,7 @@ class execution extends control
|
||||
$this->view->from = $from;
|
||||
$this->view->param = $param;
|
||||
$this->view->isStage = (isset($project->model) and $project->model == 'waterfall') ? true : false;
|
||||
$this->view->showBatchEdit = $this->cookie->showExecutionBatchEdit;
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ td.flex span.project-type-label {min-width: 40px;}
|
||||
.c-name > a, .table-children .text-left > a {padding-left: 5px;}
|
||||
.has-child > span {margin-right: 5px;}
|
||||
.c-name > .text-ellipsis {text-overflow: clip;}
|
||||
.c-code, .c-project {overflow: hidden; white-space: nowrap;}
|
||||
.c-code, .c-project {overflow: hidden; white-space: nowrap; padding: 0 8px;}
|
||||
th.c-status, .c-begin, .c-end, .c-realBegan, .c-realEnd {text-align: center;}
|
||||
|
||||
.c-project{text-overflow: unset !important;}
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
#productsBox .product.checked:hover {background: #E5FFE6; border: 1px solid #229F24;}
|
||||
#productsBox .product .checkbox-primary {padding: 9px; cursor: pointer;}
|
||||
#productsBox .product.has-branch {padding-right: 40%;}
|
||||
#productsBox .product.has-branch > .chosen-container {position: absolute; width: 40% !important; right: 3px; top: 3px;}
|
||||
#productsBox .product.has-branch > .chosen-container > .chosen-single {background: rgba(0,0,0,.05);}
|
||||
#productsBox .product.has-branch > .chosen-container > .chosen-single:hover {background: #fff;}
|
||||
#productsBox .product.has-branch > .picker {position: absolute; width: 40% !important; right: 3px; top: 3px; background-color: unset;}
|
||||
#productsBox .product.has-branch > .picker > .picker-selections {background: rgba(0,0,0,.05);}
|
||||
#productsBox .product.has-branch > .picker > .picker-selections:hover {background: #fff;}
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
$(function()
|
||||
{
|
||||
$("#" + status + "Tab").addClass('btn-active-text');
|
||||
$(document).on('click', '.plan-toggle', function(e)
|
||||
{
|
||||
var id = $(this).data('id');
|
||||
var $toggle = $(this);
|
||||
var isCollapsed = $toggle.toggleClass('collapsed').hasClass('collapsed');
|
||||
$toggle.closest('#executionsForm').find('tr.parent-' + id).toggle(!isCollapsed);
|
||||
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$('#executionTableList').on('sort.sortable', function(e, data)
|
||||
{
|
||||
var list = '';
|
||||
@@ -60,6 +72,7 @@ $(function()
|
||||
}
|
||||
});
|
||||
|
||||
/* Update table summary text. */
|
||||
$('#executionsForm').table(
|
||||
{
|
||||
statisticCreator: function(table)
|
||||
@@ -67,21 +80,67 @@ $(function()
|
||||
var $table = table.getTable();
|
||||
var $checkedRows = $table.find(table.isDataTable ? '.datatable-row-left.checked' : 'tbody>tr.checked');
|
||||
var $originTable = table.isDataTable ? table.$.find('.datatable-origin') : null;
|
||||
var $rows = $table.find(table.isDataTable ? '.datatable-rows .datatable-row-left' : 'tbody>tr');
|
||||
var checkedTotal = $checkedRows.length;
|
||||
var $rows = checkedTotal ? $checkedRows : $table.find(table.isDataTable ? '.datatable-rows .datatable-row-left' : 'tbody>tr');
|
||||
|
||||
var taskIdList = [];
|
||||
var checkedWait = 0;
|
||||
var checkedDoing = 0;
|
||||
var executionIDList = [];
|
||||
$rows.each(function()
|
||||
{
|
||||
var $row = $(this);
|
||||
if($originTable) $row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]');
|
||||
|
||||
var data = $row.data();
|
||||
taskIdList.push(data.id);
|
||||
executionIDList.push(data.id);
|
||||
|
||||
if(data.status === 'wait') checkedWait++;
|
||||
if(data.status === 'doing') checkedDoing++;
|
||||
});
|
||||
|
||||
if(status != 'all') return (checkedTotal ? checkedExecutions : executionSummary).replace('%s', $rows.length);
|
||||
return (checkedTotal ? checkedSummary : pageSummary).replace('%total%', $rows.length).replace('%wait%', checkedWait).replace('%doing%', checkedDoing);
|
||||
}
|
||||
})
|
||||
|
||||
$('input[name^="showEdit"]').click(function()
|
||||
{
|
||||
$.cookie('showExecutionBatchEdit', $(this).is(':checked') ? 1 : 0, {expires: config.cookieLife, path: config.webRoot});
|
||||
setCheckbox();
|
||||
});
|
||||
setCheckbox();
|
||||
|
||||
$('#executionTableList tr').on('click', function(e)
|
||||
{
|
||||
if($.cookie('showExecutionBatchEdit') != 1) e.stopPropagation();
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Location to product list.
|
||||
*
|
||||
* @param int productID
|
||||
* @param int projectID
|
||||
* @param string status
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function byProduct(productID, projectID, status)
|
||||
{
|
||||
location.href = createLink('project', 'all', "status=" + status + "&project=" + projectID + "&orderBy=" + orderBy + '&productID=' + productID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set batch edit checkbox.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function setCheckbox()
|
||||
{
|
||||
$('#executionsForm .checkbox-primary').hide();
|
||||
$('.check-all, .sortable tr').removeClass('checked');
|
||||
$(":checkbox[name^='executionIDList']").prop('checked', false);
|
||||
$('#executionsForm').removeClass('has-row-checked');
|
||||
if($.cookie('showExecutionBatchEdit') == 1) $('#executionsForm .checkbox-primary').show();
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ $lang->execution->end = 'Ende';
|
||||
$lang->execution->dateRange = 'Dauer';
|
||||
$lang->execution->realBeganAB = 'Actual Begin';
|
||||
$lang->execution->realEndAB = 'Actual End';
|
||||
$lang->execution->teamCount = 'Anzahl der Personen';
|
||||
$lang->execution->realBegan = 'Tatsächlicher Start';
|
||||
$lang->execution->realEnd = 'Tatsächliches Ende';
|
||||
$lang->execution->to = 'An';
|
||||
@@ -341,6 +342,9 @@ $lang->execution->stats = '<strong>%s</strong> Verfügbar, <stron
|
||||
$lang->execution->taskSummary = "Aufgaben auf dieser Seite: <strong>%s</strong> Total, <strong>%s</strong> Wartend, <strong>%s</strong> In Arbeit; Stunden : <strong>%s</strong> geplant., <strong>%s</strong> genutzt, <strong>%s</strong> Rest.";
|
||||
$lang->execution->pageSummary = "Aufgaben auf dieser Seite: <strong>%total%</strong>, <strong>%wait%</strong> Wartend, <strong>%doing%</strong> In Arbeit; Stunden: <strong>%estimate%</strong> geplant, <strong>%consumed%</strong> genutzt, <strong>%left%</strong> Rest.";
|
||||
$lang->execution->checkedSummary = " <strong>%total%</strong> Geprüft, <strong>%wait%</strong> Wartend, <strong>%doing%</strong> In Arbeit; Stunden: <strong>%estimate%</strong> geplant, <strong>%consumed%</strong> genutzt, <strong>%left%</strong> Rest.";
|
||||
$lang->execution->executionSummary = "Total executions: <strong>%s</strong>.";
|
||||
$lang->execution->pageExecSummary = "Total executions: <strong>%total%</strong>. Waiting: <strong>%wait%</strong>. Doing: <strong>%doing%</strong>.";
|
||||
$lang->execution->checkedExecSummary = "Selected: <strong>%total%</strong>. Waiting: <strong>%wait%</strong>. Doing: <strong>%doing%</strong>.";
|
||||
$lang->execution->memberHoursAB = "%s hat <strong>%s</strong> Stunden";
|
||||
$lang->execution->memberHours = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">%s Arbeitsstunden</div><div class="segment-value">%s</div></div></div></div>';
|
||||
$lang->execution->countSummary = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">Aufgaben</div><div class="segment-value">%s</div></div><div class="segment"><div class="segment-title">In Arbeit</div><div class="segment-value"><span class="label label-dot label-primary"></span> %s</div></div><div class="segment"><div class="segment-title">Wait</div><div class="segment-value"><span class="label label-dot label-primary muted"></span> %s</div></div></div></div>';
|
||||
@@ -415,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 items';
|
||||
$lang->execution->checkedExecutions = 'Seleted %s executions.';
|
||||
|
||||
/* Statistics. */
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
@@ -54,6 +54,7 @@ $lang->execution->end = 'Planned End';
|
||||
$lang->execution->dateRange = 'Plan Duration';
|
||||
$lang->execution->realBeganAB = 'Actual Begin';
|
||||
$lang->execution->realEndAB = 'Actual End';
|
||||
$lang->execution->teamCount = 'number of people';
|
||||
$lang->execution->realBegan = 'Actual Begin';
|
||||
$lang->execution->realEnd = 'Actual End';
|
||||
$lang->execution->to = 'To';
|
||||
@@ -341,6 +342,9 @@ $lang->execution->stats = 'Available: <strong>%s</strong>(h). Est
|
||||
$lang->execution->taskSummary = "Total tasks on this page:<strong>%s</strong>. Waiting: <strong>%s</strong>. Doing: <strong>%s</strong>. Estimates: <strong>%s</strong>(h). Cost: <strong>%s</strong>(h). Left: <strong>%s</strong>(h).";
|
||||
$lang->execution->pageSummary = "Total tasks: <strong>%total%</strong>. Waiting: <strong>%wait%</strong>. Doing: <strong>%doing%</strong>. Estimates: <strong>%estimate%</strong>(h). Cost: <strong>%consumed%</strong>(h). Left: <strong>%left%</strong>(h).";
|
||||
$lang->execution->checkedSummary = "Selected: <strong>%total%</strong>. Waiting: <strong>%wait%</strong>. Doing: <strong>%doing%</strong>. Estimates: <strong>%estimate%</strong>(h). Cost: <strong>%consumed%</strong>(h). Left: <strong>%left%</strong>(h).";
|
||||
$lang->execution->executionSummary = "Total executions: <strong>%s</strong>.";
|
||||
$lang->execution->pageExecSummary = "Total executions: <strong>%total%</strong>. Waiting: <strong>%wait%</strong>. Doing: <strong>%doing%</strong>.";
|
||||
$lang->execution->checkedExecSummary = "Selected: <strong>%total%</strong>. Waiting: <strong>%wait%</strong>. Doing: <strong>%doing%</strong>.";
|
||||
$lang->execution->memberHoursAB = "%s has <strong>%s</ strong> hours.";
|
||||
$lang->execution->memberHours = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">%s Available Hours</div><div class="segment-value">%s</div></div></div></div>';
|
||||
$lang->execution->countSummary = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">Tasks</div><div class="segment-value">%s</div></div><div class="segment"><div class="segment-title">Doing</div><div class="segment-value"><span class="label label-dot label-primary"></span> %s</div></div><div class="segment"><div class="segment-title">Waiting</div><div class="segment-value"><span class="label label-dot label-primary muted"></span> %s</div></div></div></div>';
|
||||
@@ -415,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 items';
|
||||
$lang->execution->checkedExecutions = 'Seleted %s executions.';
|
||||
|
||||
/* Statistics. */
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
@@ -54,6 +54,7 @@ $lang->execution->end = 'Fin';
|
||||
$lang->execution->dateRange = 'Durée';
|
||||
$lang->execution->realBeganAB = 'Actual Begin';
|
||||
$lang->execution->realEndAB = 'Actual End';
|
||||
$lang->execution->teamCount = 'nombre de personnes';
|
||||
$lang->execution->realBegan = 'Début effectif';
|
||||
$lang->execution->realEnd = 'Clôture effective';
|
||||
$lang->execution->to = 'à';
|
||||
@@ -341,6 +342,9 @@ $lang->execution->stats = 'Disponible: <strong>%s</strong>(h). Es
|
||||
$lang->execution->taskSummary = "Total des tâches de cette page :<strong>%s</strong>. A Faire: <strong>%s</strong>. En cours: <strong>%s</strong>. Estimé: <strong>%s</strong>(h). Coût: <strong>%s</strong>(h). Reste: <strong>%s</strong>(h).";
|
||||
$lang->execution->pageSummary = "Total des tâches de cette page: <strong>%total%</strong>. A Faire: <strong>%wait%</strong>. En cours: <strong>%doing%</strong>. Estimé: <strong>%estimate%</strong>(h). Coût: <strong>%consumed%</strong>(h). Reste: <strong>%left%</strong>(h).";
|
||||
$lang->execution->checkedSummary = "Sélectionné: <strong>%total%</strong>. A Faire: <strong>%wait%</strong>. En cours: <strong>%doing%</strong>. Estimé: <strong>%estimate%</strong>(h). Coût: <strong>%consumed%</strong>(h). Reste: <strong>%left%</strong>(h).";
|
||||
$lang->execution->executionSummary = "Total executions: <strong>%s</strong>.";
|
||||
$lang->execution->pageExecSummary = "Total executions: <strong>%total%</strong>. Waiting: <strong>%wait%</strong>. Doing: <strong>%doing%</strong>.";
|
||||
$lang->execution->checkedExecSummary = "Selected: <strong>%total%</strong>. Waiting: <strong>%wait%</strong>. Doing: <strong>%doing%</strong>.";
|
||||
$lang->execution->memberHoursAB = "%s a <strong>%s</ strong> heures.";
|
||||
$lang->execution->memberHours = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">%s Heures Disponibles</div><div class="segment-value">%s</div></div></div></div>';
|
||||
$lang->execution->countSummary = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">Tâches</div><div class="segment-value">%s</div></div><div class="segment"><div class="segment-title">En Cours</div><div class="segment-value"><span class="label label-dot label-primary"></span> %s</div></div><div class="segment"><div class="segment-title">A Faire</div><div class="segment-value"><span class="label label-dot label-primary muted"></span> %s</div></div></div></div>';
|
||||
@@ -415,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 = "Pour s électionner l'élément%s";
|
||||
$lang->execution->checkedExecutions = "Pour s électionner l'élément%s.";
|
||||
|
||||
/* Statistics. */
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
@@ -54,6 +54,7 @@ $lang->execution->RD = 'Quản lý phát hành';
|
||||
$lang->execution->release = 'Phát hành';
|
||||
$lang->execution->acl = 'Quyền truy cập';
|
||||
$lang->execution->teamname = 'Tên đội nhóm';
|
||||
$lang->execution->teamCount = 'số người';
|
||||
$lang->execution->order = "Đánh giá {$lang->executionCommon}";
|
||||
$lang->execution->orderAB = "Đánh giá";
|
||||
$lang->execution->products = "Liên kết {$lang->productCommon}";
|
||||
|
||||
@@ -54,6 +54,7 @@ $lang->execution->end = '计划完成';
|
||||
$lang->execution->dateRange = '计划起止日期';
|
||||
$lang->execution->realBeganAB = '实际开始';
|
||||
$lang->execution->realEndAB = '实际完成';
|
||||
$lang->execution->teamCount = '人数';
|
||||
$lang->execution->realBegan = '实际开始日期';
|
||||
$lang->execution->realEnd = '实际完成日期';
|
||||
$lang->execution->to = '至';
|
||||
@@ -341,6 +342,9 @@ $lang->execution->stats = '可用工时 <strong>%s</strong> 工
|
||||
$lang->execution->taskSummary = "本页共 <strong>%s</strong> 个任务,未开始 <strong>%s</strong>,进行中 <strong>%s</strong>,总预计 <strong>%s</strong> 工时,已消耗 <strong>%s</strong> 工时,剩余 <strong>%s</strong> 工时。";
|
||||
$lang->execution->pageSummary = "本页共 <strong>%total%</strong> 个任务,未开始 <strong>%wait%</strong>,进行中 <strong>%doing%</strong>,总预计 <strong>%estimate%</strong> 工时,已消耗 <strong>%consumed%</strong> 工时,剩余 <strong>%left%</strong> 工时。";
|
||||
$lang->execution->checkedSummary = "选中 <strong>%total%</strong> 个任务,未开始 <strong>%wait%</strong>,进行中 <strong>%doing%</strong>,总预计 <strong>%estimate%</strong> 工时,已消耗 <strong>%consumed%</strong> 工时,剩余 <strong>%left%</strong> 工时。";
|
||||
$lang->execution->executionSummary = "本页共 <strong>%s</strong> 个{$lang->executionCommon}。";
|
||||
$lang->execution->pageExecSummary = "本页共 <strong>%total%</strong> 个{$lang->executionCommon},未开始 <strong>%wait%</strong>,进行中 <strong>%doing%</strong>。";
|
||||
$lang->execution->checkedExecSummary = "选中 <strong>%total%</strong> 个{$lang->executionCommon},未开始 <strong>%wait%</strong>,进行中 <strong>%doing%</strong>。";
|
||||
$lang->execution->memberHoursAB = "<div>%s有 <strong>%s</strong> 工时</div>";
|
||||
$lang->execution->memberHours = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">%s可用工时</div><div class="segment-value">%s</div></div></div></div>';
|
||||
$lang->execution->countSummary = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">总任务</div><div class="segment-value">%s</div></div><div class="segment"><div class="segment-title">进行中</div><div class="segment-value"><span class="label label-dot label-primary"></span> %s</div></div><div class="segment"><div class="segment-title">未开始</div><div class="segment-value"><span class="label label-dot label-primary muted"></span> %s</div></div></div></div>';
|
||||
@@ -415,7 +419,7 @@ $lang->execution->storyDragError = "该{$lang->SRCommon}不是激
|
||||
$lang->execution->countTip = '(%s人)';
|
||||
$lang->execution->pleaseInput = "请输入";
|
||||
$lang->execution->week = '周';
|
||||
$lang->execution->checkedExecutions = '已选择%s项';
|
||||
$lang->execution->checkedExecutions = "共选中%s个{$lang->execution->common}。";
|
||||
|
||||
/* 统计。*/
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
@@ -54,6 +54,7 @@ $lang->execution->execPM = "{$lang->execution->common}負責人";
|
||||
$lang->execution->QD = '測試負責人';
|
||||
$lang->execution->RD = '發佈負責人';
|
||||
$lang->execution->release = '發佈';
|
||||
$lang->execution->teamCount = '人數';
|
||||
$lang->execution->acl = '訪問控制';
|
||||
$lang->execution->teamname = '團隊名稱';
|
||||
$lang->execution->updateOrder = '排序';
|
||||
|
||||
@@ -1531,6 +1531,15 @@ class executionModel extends model
|
||||
$hours = $this->loadModel('project')->computerProgress($executions);
|
||||
$burns = $this->getBurnData($executions);
|
||||
|
||||
/* Get the number of execution teams. */
|
||||
$teams = $this->dao->select('t1.root,count(t1.id) as teams')->from(TABLE_TEAM)->alias('t1')
|
||||
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account')
|
||||
->where('t1.root')->in(array_keys($executions))
|
||||
->andWhere('t1.type')->ne('project')
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->groupBy('t1.root')
|
||||
->fetchAll('root');
|
||||
|
||||
if($withTasks) $executionTasks = $this->getTaskGroupByExecution(array_keys($executions));
|
||||
|
||||
/* Process executions. */
|
||||
@@ -1557,6 +1566,7 @@ class executionModel extends model
|
||||
|
||||
/* Process the hours. */
|
||||
$execution->hours = isset($hours[$execution->id]) ? $hours[$execution->id] : (object)$emptyHour;
|
||||
$execution->teamCount = isset($teams[$execution->id]) ? $teams[$execution->id]->teams : 0;
|
||||
|
||||
if(isset($executionTasks) and isset($executionTasks[$execution->id]))
|
||||
{
|
||||
@@ -4582,12 +4592,12 @@ class executionModel extends model
|
||||
if(!$isChild)
|
||||
{
|
||||
$trClass = 'is-top-level table-nest-child-hide';
|
||||
$trAttrs = "data-id='$execution->id' data-order='$execution->order' data-nested='true'";
|
||||
$trAttrs = "data-id='$execution->id' data-order='$execution->order' data-nested='true' data-status={$execution->status}";
|
||||
}
|
||||
else
|
||||
{
|
||||
$trClass = 'table-nest-hide';
|
||||
$trAttrs = "data-id={$execution->id} data-parent={$execution->parent}";
|
||||
$trAttrs = "data-id={$execution->id} data-parent={$execution->parent} data-status={$execution->status}";
|
||||
$trAttrs .= " data-nest-parent='$execution->parent' data-order='$execution->order' data-nest-path=',$execution->parent,$execution->id,'";
|
||||
}
|
||||
|
||||
@@ -4841,6 +4851,12 @@ class executionModel extends model
|
||||
if(!empty($execution->children)) $class .= ' has-child';
|
||||
}
|
||||
|
||||
if($id == 'teamCount')
|
||||
{
|
||||
$title = " title='{$execution->teamCount}'";
|
||||
$class .= ' text-right';
|
||||
}
|
||||
|
||||
if($id == 'project') $title = " title='{$execution->projectName}'";
|
||||
if($id == 'code') $title = " title='{$execution->code}'";
|
||||
|
||||
@@ -4909,6 +4925,9 @@ class executionModel extends model
|
||||
case 'begin':
|
||||
echo helper::isZeroDate($execution->begin) ? '' : $execution->begin;
|
||||
break;
|
||||
case 'teamCount':
|
||||
echo $execution->teamCount;
|
||||
break;
|
||||
case 'end':
|
||||
echo helper::isZeroDate($execution->end) ? '' : $execution->end;
|
||||
break;
|
||||
|
||||
@@ -19,14 +19,19 @@ $useDatatable = (isset($config->datatable->$datatableId->mode) and $config->data
|
||||
<?php js::set('unfoldExecutions', array());?>
|
||||
<?php js::set('useDatatable', $useDatatable);?>
|
||||
<?php js::set('from', $from);?>
|
||||
<?php js::set('checkedSummary', $lang->execution->checkedExecSummary);?>
|
||||
<?php js::set('pageSummary', $lang->execution->pageExecSummary);?>
|
||||
<?php js::set('executionSummary', $lang->execution->executionSummary);?>
|
||||
<?php js::set('checkedExecutions', $lang->execution->checkedExecutions);?>
|
||||
<?php
|
||||
/* Set unfold parent executionID. */
|
||||
js::set('unfoldAll', $lang->execution->treeLevel['all']);
|
||||
js::set('foldAll', $lang->execution->treeLevel['root']);
|
||||
js::set('isCNLang', !$this->loadModel('common')->checkNotCN())
|
||||
?>
|
||||
<?php $canBatchEdit = common::hasPriv('execution', 'batchEdit');?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<div class='btn-toolBar pull-left'>
|
||||
<?php if($from == 'project'):?>
|
||||
<div class='btn-group'>
|
||||
<?php $viewName = $productID != 0 ? zget($productList,$productID) : $lang->product->allProduct;?>
|
||||
@@ -51,6 +56,7 @@ js::set('isCNLang', !$this->loadModel('common')->checkNotCN())
|
||||
<?php if($status == $key) $label .= " <span class='label label-light label-badge'>{$pager->recTotal}</span>";?>
|
||||
<?php echo html::a($this->createLink($this->app->rawModule, $this->app->rawMethod, "status=$key&orderBy=$orderBy&productID=$productID"), $label, '', "class='btn btn-link' id='{$key}Tab' data-app='$from'");?>
|
||||
<?php endforeach;?>
|
||||
<?php if($canBatchEdit) echo html::checkbox('showEdit', array('1' => $lang->execution->editAction), $showBatchEdit);?>
|
||||
<a class="btn btn-link querybox-toggle" id='bysearchTab'><i class="icon icon-search muted"></i> <?php echo $lang->execution->byQuery;?></a>
|
||||
</div>
|
||||
<div class='btn-toolbar pull-right'>
|
||||
@@ -72,8 +78,7 @@ js::set('isCNLang', !$this->loadModel('common')->checkNotCN())
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<?php $canBatchEdit = common::hasPriv('execution', 'batchEdit'); ?>
|
||||
<form class='main-table' id='executionsForm' method='post' action='<?php echo inLink('batchEdit');?>' <?php if(!$useDatatable) echo "data-ride='table'";?>>
|
||||
<form class='main-table' id='executionsForm' method='post' action='<?php echo inLink('batchEdit');?>'>
|
||||
<div class="table-header fixed-right">
|
||||
<nav class="btn-toolbar pull-right setting"></nav>
|
||||
</div>
|
||||
@@ -106,7 +111,7 @@ js::set('isCNLang', !$this->loadModel('common')->checkNotCN())
|
||||
</thead>
|
||||
<tbody class='sortable' id='executionTableList'>
|
||||
<?php foreach($executionStats as $execution):?>
|
||||
<tr data-id='<?php echo $execution->id ?>' data-order='<?php echo $execution->order ?>'>
|
||||
<tr data-id='<?php echo $execution->id ?>' data-order='<?php echo $execution->order ?>' data-status='<?php echo $execution->status?>'>
|
||||
<?php foreach($setting as $key => $value) $this->execution->printCell($value, $execution, $users, $useDatatable ? 'datatable' : 'table', $isStage, $productID);?>
|
||||
</tr>
|
||||
<?php if(!empty($execution->children)):?>
|
||||
@@ -130,28 +135,15 @@ js::set('isCNLang', !$this->loadModel('common')->checkNotCN())
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<?php echo html::submitButton($lang->execution->batchEdit, '', 'btn');?>
|
||||
<div class="table-statistic"></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="table-statistic"></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<script>
|
||||
$("#<?php echo $status;?>Tab").addClass('btn-active-text');
|
||||
$(document).on('click', '.plan-toggle', function(e)
|
||||
{
|
||||
var $toggle = $(this);
|
||||
var id = $(this).data('id');
|
||||
var isCollapsed = $toggle.toggleClass('collapsed').hasClass('collapsed');
|
||||
$toggle.closest('[data-ride="table"]').find('tr.parent-' + id).toggle(!isCollapsed);
|
||||
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
</script>
|
||||
<?php js::set('orderBy', $orderBy)?>
|
||||
<?php js::set('status', $status)?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
<?php echo "<input type='checkbox' name='products[$i]' value='$productID' $checked $attr id='products{$productID}'>";?>
|
||||
<label class='text-ellipsis checkbox-inline' for='<?php echo 'products' . $productID;?>' title='<?php echo $productName;?>'><?php echo $productName;?></label>
|
||||
</div>
|
||||
<?php if(isset($allBranches[$productID][$branchID])) echo html::select("branch[$i]", $allBranches[$productID], $branchID, "class='form-control chosen' disabled='disabled'");?>
|
||||
<?php if(isset($allBranches[$productID][$branchID])) echo html::select("branch[$i]", $allBranches[$productID], $branchID, "class='form-control picker-select' disabled='disabled'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(!empty($attr)) echo html::hidden("products[$i]", $productID);?>
|
||||
@@ -64,7 +64,7 @@
|
||||
<?php echo "<input type='checkbox' name='products[$i]' value='$productID' id='products{$productID}'>";?>
|
||||
<label class='text-ellipsis checkbox-inline' for='<?php echo 'products' . $productID;?>'><?php echo $productName;?></label>
|
||||
</div>
|
||||
<?php if(isset($branchGroups[$productID])) echo html::select("branch[$i]", $branchGroups[$productID], '', "class='form-control chosen'");?>
|
||||
<?php if(isset($branchGroups[$productID])) echo html::select("branch[$i]", $branchGroups[$productID], '', "class='form-control picker-select'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php $i++;?>
|
||||
@@ -88,7 +88,7 @@
|
||||
<?php echo "<input type='checkbox' name='products[$i]' value='$productID' id='products{$productID}'>";?>
|
||||
<label class='text-ellipsis checkbox-inline' for='<?php echo 'products' . $productID;?>'><?php echo $productName;?></label>
|
||||
</div>
|
||||
<?php if(isset($branchGroups[$productID])) echo html::select("branch[$i]", $branchGroups[$productID], '', "class='form-control chosen'");?>
|
||||
<?php if(isset($branchGroups[$productID])) echo html::select("branch[$i]", $branchGroups[$productID], '', "class='form-control picker-select'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php $i++;?>
|
||||
|
||||
@@ -403,7 +403,7 @@ body {margin-bottom: 25px;}
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
// Update table summary text
|
||||
/* Update table summary text. */
|
||||
var checkedSummary = '<?php echo $lang->execution->checkedSummary?>';
|
||||
var pageSummary = '<?php echo $lang->execution->pageSummary?>';
|
||||
$('#executionTaskForm').table(
|
||||
@@ -425,7 +425,7 @@ $(function()
|
||||
$rows.each(function()
|
||||
{
|
||||
var $row = $(this);
|
||||
if ($originTable)
|
||||
if($originTable)
|
||||
{
|
||||
$row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]');
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ $lang->my->projects = '所属项目';
|
||||
$lang->my->executions = "所属{$lang->executionCommon}";
|
||||
|
||||
$lang->my->executionMenu = new stdclass();
|
||||
$lang->my->executionMenu->undone = '未结束';
|
||||
$lang->my->executionMenu->undone = '未完成';
|
||||
$lang->my->executionMenu->done = '已完成';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<th class='c-user' title='<?php echo $lang->team->roleAB;?>'><?php echo $lang->team->roleAB;?></th>
|
||||
<th class='c-date'><?php echo $lang->team->join;?></th>
|
||||
<th class='c-hours'><?php echo $lang->my->hours;?></th>
|
||||
<th class='c-user'><?php echo $lang->execution->myTask;?></th>
|
||||
<th class='c-user text-center'><?php echo $lang->execution->myTask;?></th>
|
||||
<th class='c-progress'><?php echo $lang->execution->progress;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -80,7 +80,7 @@
|
||||
<td><?php echo $execution->role;?></td>
|
||||
<td class='c-date'><?php echo $execution->join;?></td>
|
||||
<td><?php echo $execution->hours;?></td>
|
||||
<td><?php echo $execution->assignedToMeTasks;?></td>
|
||||
<td class="text-center"><?php echo $execution->assignedToMeTasks;?></td>
|
||||
<td>
|
||||
<div class='progress-pie' data-doughnut-size='90' data-color='#3CB371' data-value='<?php echo $execution->progress;?>' data-width='24' data-height='24' data-back-color='#e8edf3'>
|
||||
<div class='progress-info'><?php echo $execution->progress;?></div>
|
||||
|
||||
@@ -5,7 +5,7 @@ $.get(createLink('port', 'ajaxGetTbody','model=<?php echo $model;?>&lastID=0&pag
|
||||
$('#showData > tbody').append(data);
|
||||
if($('#showData tbody').find('tr').hasClass('showmore') === false) $('#showData tfoot').removeClass('hidden');
|
||||
$('#showData tbody').find('.picker-select').picker({chosenMode: true});
|
||||
$('.form-date').datetimepicker('update');
|
||||
$('.form-date').datetimepicker({minView: 2, format: "yyyy-mm-dd"});
|
||||
$('.form-datetime').datetimepicker('update');
|
||||
$('#showData > tbody').removeClass('load-indicator loading');
|
||||
})
|
||||
@@ -37,7 +37,7 @@ function loadData($showmore)
|
||||
$showmore.after(data);
|
||||
if($('#showData tbody').find('tr').hasClass('showmore') === false) $('#showData tfoot').removeClass('hidden');
|
||||
$('#showData tbody').find('.picker-select').picker({chosenMode: true}).removeClass('nopicker');
|
||||
$('.form-date').datetimepicker('update');
|
||||
$('.form-date').datetimepicker({minView: 2, format: "yyyy-mm-dd"});
|
||||
$('.form-datetime').datetimepicker('update');
|
||||
})
|
||||
}
|
||||
|
||||
@@ -10,4 +10,6 @@ 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;}
|
||||
#executionTableList > tr:not(.has-nest-child) .project-type-label {margin-left: 22px;}
|
||||
.table-statistic {padding-left: 10px;}
|
||||
#executionTableList .table-nest-icon {top: 6px;}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
$(function()
|
||||
{
|
||||
$("#" + status + "Tab").addClass('btn-active-text');
|
||||
|
||||
$('input[name^="showTask"]').click(function()
|
||||
{
|
||||
var show = $(this).is(':checked') ? 1 : 0;
|
||||
@@ -38,14 +40,10 @@ $(function()
|
||||
}
|
||||
if(notCheckedLength > 0) $('#executionForm .checkAll').prop('checked', false);
|
||||
|
||||
var summary = checkedExecutions.replace('%s', checkedLength);
|
||||
if(cilentLang == "en" && checkedLength < 2) summary = summary.replace('items', 'item');
|
||||
var statistic = "<div id='executionsSummary' class='table-statistic'>" + summary + "</div>";
|
||||
if(checkedLength > 0)
|
||||
{
|
||||
$('#executionSummary').addClass('hidden');
|
||||
$('#executionsSummary').remove();
|
||||
$('.editCheckbox').after(statistic);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -63,12 +61,8 @@ $(function()
|
||||
$("#executionForm .checkAll").prop('checked', true);
|
||||
$('#executionForm').addClass('has-row-checked');
|
||||
var checkedLength = $(":checkbox[name^='executionIDList']:checked").length;
|
||||
var summary = checkedExecutions.replace('%s', checkedLength);
|
||||
if(cilentLang == "en" && checkedLength < 2) summary = summary.replace('items', 'item');
|
||||
var statistic = "<div id='executionsSummary' class='table-statistic'>" + summary + "</div>";
|
||||
$('#executionSummary').addClass('hidden');
|
||||
$('#executionsSummary').remove();
|
||||
$('.editCheckbox').after(statistic);
|
||||
$(this).next('label').addClass('hover');
|
||||
}
|
||||
else
|
||||
@@ -91,6 +85,37 @@ $(function()
|
||||
});
|
||||
$('#executionsForm .checkAll').prop('checked', false);
|
||||
}, 10);
|
||||
|
||||
/* Update table summary text. */
|
||||
$('#executionForm').table(
|
||||
{
|
||||
statisticCreator: function(table)
|
||||
{
|
||||
var $table = table.getTable();
|
||||
var $checkedRows = $table.find(table.isDataTable ? '.datatable-row-left.checked' : 'tbody>tr.checked');
|
||||
var $originTable = table.isDataTable ? table.$.find('.datatable-origin') : null;
|
||||
var checkedTotal = $checkedRows.length;
|
||||
var $rows = checkedTotal ? $checkedRows : $table.find(table.isDataTable ? '.datatable-rows .datatable-row-left' : 'tbody>tr');
|
||||
|
||||
var checkedWait = 0;
|
||||
var checkedDoing = 0;
|
||||
var executionIDList = [];
|
||||
$rows.each(function()
|
||||
{
|
||||
var $row = $(this);
|
||||
if($originTable) $row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]');
|
||||
|
||||
var data = $row.data();
|
||||
executionIDList.push(data.id);
|
||||
|
||||
if(data.status === 'wait') checkedWait++;
|
||||
if(data.status === 'doing') checkedDoing++;
|
||||
});
|
||||
|
||||
if(status != 'all') return (checkedTotal ? checkedExecutions : executionSummary).replace('%s', $rows.length);
|
||||
return (checkedTotal ? checkedSummary : pageSummary).replace('%total%', $rows.length).replace('%wait%', checkedWait).replace('%doing%', checkedDoing);
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
window.addEventListener('scroll', this.handleScroll)
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
<?php js::set('disabledTaskTip', sprintf($lang->project->disabledInputTip, $lang->edit . $lang->executionCommon));?>
|
||||
<?php js::set('defaultExecutionTip', $lang->edit . $lang->executionCommon);?>
|
||||
<?php js::set('disabledExecutionTip', sprintf($lang->project->disabledInputTip, $lang->programplan->stageCustom->task));?>
|
||||
<?php js::set('checkedSummary', $lang->execution->checkedExecSummary);?>
|
||||
<?php js::set('pageSummary', $lang->execution->pageExecSummary);?>
|
||||
<?php js::set('executionSummary', $lang->execution->executionSummary);?>
|
||||
<?php js::set('checkedExecutions', $lang->execution->checkedExecutions);?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<div class='btn-group'>
|
||||
@@ -62,7 +66,7 @@
|
||||
</div>
|
||||
<?php else:?>
|
||||
<?php $canBatchEdit = common::hasPriv('execution', 'batchEdit'); ?>
|
||||
<form class='main-table' id='executionForm' method='post' data-ride='table' data-nested='true' data-expand-nest-child='false' data-checkable='false' data-enable-empty-nested-row='true' data-replace-id='executionTableList' data-preserve-nested='true'>
|
||||
<form class='main-table' id='executionForm' method='post' data-nested='true' data-expand-nest-child='false' data-enable-empty-nested-row='true' data-replace-id='executionTableList' data-preserve-nested='true'>
|
||||
<table class="table table-from table-fixed table-nested" id="executionList">
|
||||
<?php $vars = "status=$status&orderBy=%s";?>
|
||||
<thead>
|
||||
@@ -92,14 +96,12 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
<div class="table-statistic"></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php js::set('status', $status)?>
|
||||
<?php js::set('orderBy', $orderBy)?>
|
||||
<script>
|
||||
$("#<?php echo $status;?>Tab").addClass('btn-active-text');
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -245,6 +245,14 @@ class release extends control
|
||||
$this->view->storyPager = $storyPager;
|
||||
$this->view->bugPager = $bugPager;
|
||||
$this->view->leftBugPager = $leftBugPager;
|
||||
|
||||
if($this->app->getViewType() == 'json')
|
||||
{
|
||||
unset($this->view->storyPager);
|
||||
unset($this->view->bugPager);
|
||||
unset($this->view->leftBugPager);
|
||||
}
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
|
||||
@@ -80,10 +80,13 @@ $(function()
|
||||
modalTrigger.show();
|
||||
});
|
||||
|
||||
$('#duplicateStory').picker(
|
||||
if($('#duplicateStory').length > 0)
|
||||
{
|
||||
disableEmptySearch : true,
|
||||
dropWidth : 'auto',
|
||||
maxAutoDropWidth : document.body.scrollWidth + document.getElementById('duplicateStory').offsetWidth - document.getElementById('duplicateStoryBox').getBoundingClientRect().right
|
||||
});
|
||||
$('#duplicateStory').picker(
|
||||
{
|
||||
disableEmptySearch : true,
|
||||
dropWidth : 'auto',
|
||||
maxAutoDropWidth : document.body.scrollWidth + document.getElementById('duplicateStory').offsetWidth - document.getElementById('duplicateStoryBox').getBoundingClientRect().right
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
@@ -323,7 +323,7 @@ class testsuite extends control
|
||||
|
||||
/* Build the search form. */
|
||||
$this->loadModel('testcase');
|
||||
$this->config->testcase->search['params']['module']['values'] = $this->loadModel('tree')->getOptionMenu($productID, $viewType = 'case');
|
||||
$this->config->testcase->search['params']['module']['values'] = $this->loadModel('tree')->getOptionMenu($productID, $viewType = 'case', 0, 'all');
|
||||
$this->config->testcase->search['module'] = 'testsuite';
|
||||
$this->config->testcase->search['actionURL'] = inlink('linkCase', "suiteID=$suiteID¶m=myQueryID");
|
||||
unset($this->config->testcase->search['fields']['product']);
|
||||
|
||||
@@ -131,21 +131,18 @@ function initGroup(data)
|
||||
})
|
||||
}
|
||||
|
||||
$(document).on('change', "select[id^='visions']", function()
|
||||
/**
|
||||
* Get group data by selected vision.
|
||||
*
|
||||
* @param int $i
|
||||
* @access public
|
||||
* @return html
|
||||
*/
|
||||
function getGroupSelect(i)
|
||||
{
|
||||
var i = parseInt($(this).attr('id').replace(/[^0-9]/ig, ''));
|
||||
if(i < 1) return '';
|
||||
var visions = $('select[id="visions' + i + '"]').val();
|
||||
|
||||
var groups = $('#group' + i).val();
|
||||
if($.inArray('ditto', groups) >= 0) groups = '';
|
||||
|
||||
$.post(createLink('user', 'ajaxGetGroup', "visions=" + visions + '&i=' + i + '&selected=' + groups), function(data)
|
||||
{
|
||||
$('#group' + i).replaceWith(data);
|
||||
$('#group' + i + '_chosen').remove();
|
||||
$('#group' + i).chosen();
|
||||
})
|
||||
|
||||
visions = visions ? visions.join() : '';
|
||||
switch(visions)
|
||||
{
|
||||
@@ -158,14 +155,25 @@ $(document).on('change', "select[id^='visions']", function()
|
||||
case 'rnd,lite':
|
||||
var data = allGroupSelect;
|
||||
break;
|
||||
case 'ditto':
|
||||
var data = getGroupSelect(i - 1);
|
||||
break;
|
||||
default:
|
||||
var data = emptyGroupSelect;
|
||||
break;
|
||||
}
|
||||
for(n = i + 1; n <= batchCreateCount; n++)
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
$(document).on('change', "select[id^='visions']", function()
|
||||
{
|
||||
var i = parseInt($(this).attr('id').replace(/[^0-9]/ig, ''));
|
||||
var data = getGroupSelect(i);
|
||||
|
||||
for(n = i; n <= batchCreateCount; n++)
|
||||
{
|
||||
if(n == i) continue;
|
||||
if($.inArray('ditto', $('select[id="visions' + n + '"]').val()) < 0) break;
|
||||
if(n != i && $.inArray('ditto', $('select[id="visions' + n + '"]').val()) < 0) break;
|
||||
|
||||
((function(n)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user