Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into sprint/gfl_71875

This commit is contained in:
曹延义
2022-10-11 08:36:05 +08:00
79 changed files with 627 additions and 336 deletions
+72 -72
View File
@@ -24,7 +24,7 @@ $config->bug->list->allFields = 'id, module, execution, story, task,
lastEditedBy,
lastEditedDate';
$config->bug->list->defaultFields = 'id,severity,pri,title,openedBy,assignedTo,resolvedBy,resolution';
$config->bug->list->defaultFields = 'id,title,severity,pri,openedBy,assignedTo,resolvedBy,resolution';
$config->bug->exportFields = 'id, product, branch, module, project, execution, story, task,
title, keywords, severity, pri, type, os, browser,
@@ -159,7 +159,7 @@ $config->bug->search['params']['deadline'] = array('operator' => '=',
$config->bug->search['params']['activatedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
$config->bug->datatable = new stdclass();
$config->bug->datatable->defaultField = array('id', 'severity', 'pri', 'confirmed', 'title', 'status', 'openedBy', 'openedDate', 'assignedTo', 'resolution', 'actions');
$config->bug->datatable->defaultField = array('id', 'title', 'severity', 'pri', 'status', 'openedBy', 'openedDate', 'confirmed', 'assignedTo', 'resolution', 'actions');
$config->bug->datatable->fieldList['id']['title'] = 'idAB';
$config->bug->datatable->fieldList['id']['fixed'] = 'left';
@@ -174,6 +174,12 @@ $config->bug->datatable->fieldList['module']['control'] = 'select';
$config->bug->datatable->fieldList['module']['title'] = 'module';
$config->bug->datatable->fieldList['module']['dataSource'] = array('module' => 'tree', 'method' => 'getOptionMenu', 'params' => '$productID&bug');
$config->bug->datatable->fieldList['title']['title'] = 'title';
$config->bug->datatable->fieldList['title']['fixed'] = 'left';
$config->bug->datatable->fieldList['title']['width'] = 'auto';
$config->bug->datatable->fieldList['title']['required'] = 'yes';
$config->bug->datatable->fieldList['title']['minWidth'] = '200';
$config->bug->datatable->fieldList['severity']['title'] = 'severityAB';
$config->bug->datatable->fieldList['severity']['fixed'] = 'left';
$config->bug->datatable->fieldList['severity']['width'] = '50';
@@ -186,16 +192,10 @@ $config->bug->datatable->fieldList['pri']['width'] = '50';
$config->bug->datatable->fieldList['pri']['required'] = 'no';
$config->bug->datatable->fieldList['pri']['name'] = $lang->bug->pri;
$config->bug->datatable->fieldList['confirmed']['title'] = 'confirmedAB';
$config->bug->datatable->fieldList['confirmed']['fixed'] = 'left';
$config->bug->datatable->fieldList['confirmed']['width'] = '100';
$config->bug->datatable->fieldList['confirmed']['required'] = 'no';
$config->bug->datatable->fieldList['title']['title'] = 'title';
$config->bug->datatable->fieldList['title']['fixed'] = 'left';
$config->bug->datatable->fieldList['title']['width'] = 'auto';
$config->bug->datatable->fieldList['title']['required'] = 'yes';
$config->bug->datatable->fieldList['title']['minWidth'] = '200';
$config->bug->datatable->fieldList['status']['title'] = 'statusAB';
$config->bug->datatable->fieldList['status']['fixed'] = 'left';
$config->bug->datatable->fieldList['status']['width'] = '80';
$config->bug->datatable->fieldList['status']['required'] = 'no';
$config->bug->datatable->fieldList['branch']['title'] = 'branch';
$config->bug->datatable->fieldList['branch']['fixed'] = 'left';
@@ -230,10 +230,66 @@ $config->bug->datatable->fieldList['plan']['fixed'] = 'no';
$config->bug->datatable->fieldList['plan']['width'] = '120';
$config->bug->datatable->fieldList['plan']['required'] = 'no';
$config->bug->datatable->fieldList['status']['title'] = 'statusAB';
$config->bug->datatable->fieldList['status']['fixed'] = 'no';
$config->bug->datatable->fieldList['status']['width'] = '80';
$config->bug->datatable->fieldList['status']['required'] = 'no';
$config->bug->datatable->fieldList['openedBy']['title'] = 'openedByAB';
$config->bug->datatable->fieldList['openedBy']['fixed'] = 'no';
$config->bug->datatable->fieldList['openedBy']['width'] = '80';
$config->bug->datatable->fieldList['openedBy']['required'] = 'no';
$config->bug->datatable->fieldList['openedDate']['title'] = 'openedDateAB';
$config->bug->datatable->fieldList['openedDate']['fixed'] = 'no';
$config->bug->datatable->fieldList['openedDate']['width'] = '90';
$config->bug->datatable->fieldList['openedDate']['required'] = 'no';
$config->bug->datatable->fieldList['openedBuild']['title'] = 'openedBuild';
$config->bug->datatable->fieldList['openedBuild']['fixed'] = 'no';
$config->bug->datatable->fieldList['openedBuild']['width'] = '120';
$config->bug->datatable->fieldList['openedBuild']['required'] = 'no';
$config->bug->datatable->fieldList['openedBuild']['control'] = 'multiple';
$config->bug->datatable->fieldList['openedBuild']['dataSource'] = array('module' => 'build', 'method' =>'getBuildPairs', 'params' => '$productID&$branch&noempty,noterminate,nodone,withbranch');
$config->bug->datatable->fieldList['confirmed']['title'] = 'confirmedAB';
$config->bug->datatable->fieldList['confirmed']['fixed'] = 'no';
$config->bug->datatable->fieldList['confirmed']['width'] = '100';
$config->bug->datatable->fieldList['confirmed']['required'] = 'no';
$config->bug->datatable->fieldList['assignedTo']['title'] = 'assignedToAB';
$config->bug->datatable->fieldList['assignedTo']['fixed'] = 'no';
$config->bug->datatable->fieldList['assignedTo']['width'] = '120';
$config->bug->datatable->fieldList['assignedTo']['required'] = 'no';
$config->bug->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' =>'getPairs', 'params' => 'noclosed|noletter');
$config->bug->datatable->fieldList['assignedDate']['title'] = 'assignedDate';
$config->bug->datatable->fieldList['assignedDate']['fixed'] = 'no';
$config->bug->datatable->fieldList['assignedDate']['width'] = '90';
$config->bug->datatable->fieldList['assignedDate']['required'] = 'no';
$config->bug->datatable->fieldList['deadline']['title'] = 'deadline';
$config->bug->datatable->fieldList['deadline']['fixed'] = 'no';
$config->bug->datatable->fieldList['deadline']['width'] = '90';
$config->bug->datatable->fieldList['deadline']['required'] = 'no';
$config->bug->datatable->fieldList['deadline']['control'] = 'date';
$config->bug->datatable->fieldList['resolvedBy']['title'] = 'resolvedBy';
$config->bug->datatable->fieldList['resolvedBy']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolvedBy']['width'] = '100';
$config->bug->datatable->fieldList['resolvedBy']['required'] = 'no';
$config->bug->datatable->fieldList['resolution']['title'] = 'resolutionAB';
$config->bug->datatable->fieldList['resolution']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolution']['width'] = '110';
$config->bug->datatable->fieldList['resolution']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedDate']['title'] = 'resolvedDateAB';
$config->bug->datatable->fieldList['resolvedDate']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolvedDate']['width'] = '120';
$config->bug->datatable->fieldList['resolvedDate']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedBuild']['title'] = 'resolvedBuild';
$config->bug->datatable->fieldList['resolvedBuild']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolvedBuild']['width'] = '120';
$config->bug->datatable->fieldList['resolvedBuild']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedBuild']['control'] = 'select';
$config->bug->datatable->fieldList['resolvedBuild']['dataSource'] = array('module' => 'bug', 'method' =>'getRelatedObjects', 'params' => 'resolvedBuild&id,name');
$config->bug->datatable->fieldList['activatedCount']['title'] = 'activatedCountAB';
$config->bug->datatable->fieldList['activatedCount']['fixed'] = 'no';
@@ -283,62 +339,6 @@ $config->bug->datatable->fieldList['mailto']['fixed'] = 'no';
$config->bug->datatable->fieldList['mailto']['width'] = '100';
$config->bug->datatable->fieldList['mailto']['required'] = 'no';
$config->bug->datatable->fieldList['openedBy']['title'] = 'openedByAB';
$config->bug->datatable->fieldList['openedBy']['fixed'] = 'no';
$config->bug->datatable->fieldList['openedBy']['width'] = '80';
$config->bug->datatable->fieldList['openedBy']['required'] = 'no';
$config->bug->datatable->fieldList['openedDate']['title'] = 'openedDateAB';
$config->bug->datatable->fieldList['openedDate']['fixed'] = 'no';
$config->bug->datatable->fieldList['openedDate']['width'] = '90';
$config->bug->datatable->fieldList['openedDate']['required'] = 'no';
$config->bug->datatable->fieldList['openedBuild']['title'] = 'openedBuild';
$config->bug->datatable->fieldList['openedBuild']['fixed'] = 'no';
$config->bug->datatable->fieldList['openedBuild']['width'] = '120';
$config->bug->datatable->fieldList['openedBuild']['required'] = 'no';
$config->bug->datatable->fieldList['openedBuild']['control'] = 'multiple';
$config->bug->datatable->fieldList['openedBuild']['dataSource'] = array('module' => 'build', 'method' =>'getBuildPairs', 'params' => '$productID&$branch&noempty,noterminate,nodone,withbranch');
$config->bug->datatable->fieldList['assignedTo']['title'] = 'assignedToAB';
$config->bug->datatable->fieldList['assignedTo']['fixed'] = 'no';
$config->bug->datatable->fieldList['assignedTo']['width'] = '120';
$config->bug->datatable->fieldList['assignedTo']['required'] = 'no';
$config->bug->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' =>'getPairs', 'params' => 'noclosed|noletter');
$config->bug->datatable->fieldList['assignedDate']['title'] = 'assignedDate';
$config->bug->datatable->fieldList['assignedDate']['fixed'] = 'no';
$config->bug->datatable->fieldList['assignedDate']['width'] = '90';
$config->bug->datatable->fieldList['assignedDate']['required'] = 'no';
$config->bug->datatable->fieldList['deadline']['title'] = 'deadline';
$config->bug->datatable->fieldList['deadline']['fixed'] = 'no';
$config->bug->datatable->fieldList['deadline']['width'] = '90';
$config->bug->datatable->fieldList['deadline']['required'] = 'no';
$config->bug->datatable->fieldList['deadline']['control'] = 'date';
$config->bug->datatable->fieldList['resolvedBy']['title'] = 'resolvedByAB';
$config->bug->datatable->fieldList['resolvedBy']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolvedBy']['width'] = '100';
$config->bug->datatable->fieldList['resolvedBy']['required'] = 'no';
$config->bug->datatable->fieldList['resolution']['title'] = 'resolutionAB';
$config->bug->datatable->fieldList['resolution']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolution']['width'] = '110';
$config->bug->datatable->fieldList['resolution']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedDate']['title'] = 'resolvedDateAB';
$config->bug->datatable->fieldList['resolvedDate']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolvedDate']['width'] = '120';
$config->bug->datatable->fieldList['resolvedDate']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedBuild']['title'] = 'resolvedBuild';
$config->bug->datatable->fieldList['resolvedBuild']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolvedBuild']['width'] = '120';
$config->bug->datatable->fieldList['resolvedBuild']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedBuild']['control'] = 'select';
$config->bug->datatable->fieldList['resolvedBuild']['dataSource'] = array('module' => 'bug', 'method' =>'getRelatedObjects', 'params' => 'resolvedBuild&id,name');
$config->bug->datatable->fieldList['closedBy']['title'] = 'closedBy';
$config->bug->datatable->fieldList['closedBy']['fixed'] = 'no';
$config->bug->datatable->fieldList['closedBy']['width'] = '80';
+6
View File
@@ -1148,6 +1148,12 @@ class bug extends control
$assignedToList = array_filter($assignedToList);
if(empty($assignedToList)) $assignedToList = $this->user->getPairs('devfirst|noclosed');
}
if($bug->assignedTo and !isset($assignedToList[$bug->assignedTo]))
{
/* Fix bug #28378. */
$assignedTo = $this->user->getById($bug->assignedTo);
$assignedToList[$bug->assignedTo] = $assignedTo->realname;
}
if($bug->status == 'closed') $assignedToList['closed'] = 'Closed';
$branch = $product->type == 'branch' ? ($bug->branch > 0 ? $bug->branch . ',0' : '0') : '';
-1
View File
@@ -2,7 +2,6 @@
.closed, .closed a {color: gray; text-decoration:line-through;}
.resolved, .resolved a {color: #8EC21F; text-decoration: none;}
.tree .closed, .tree .closed a {color: #003366; text-decoration: none;}
td.delayed {color: #fff; background: #e84e0f !important;}
#bugForm .setting {height: 25px;}
.datatable-wrapper .table-datatable .datatable-row td {height: 37px;}
+4 -1
View File
@@ -3297,6 +3297,9 @@ class bugModel extends model
$class .= ' text-ellipsis';
$title = "title='" . $browser . "'";
break;
case 'deadline':
$class .= ' text-center';
break;
}
if($id == 'deadline' && isset($bug->delay) && $bug->status == 'active') $class .= ' delayed';
@@ -3440,7 +3443,7 @@ class bugModel extends model
echo helper::isZeroDate($bug->assignedDate) ? '' : substr($bug->assignedDate, 5, 11);
break;
case 'deadline':
echo helper::isZeroDate($bug->deadline) ? '' : substr($bug->deadline, 5, 11);
echo helper::isZeroDate($bug->deadline) ? '' : '<span>' . substr($bug->deadline, 5, 11) . '</span>';
break;
case 'resolvedBy':
echo zget($users, $bug->resolvedBy, $bug->resolvedBy);
+1 -1
View File
@@ -146,7 +146,7 @@ $lang->workingHour = '工时';
$lang->idAB = 'ID';
$lang->priAB = 'P';
$lang->statusAB = '状态';
$lang->openedByAB = '创建';
$lang->openedByAB = '创建者';
$lang->assignedToAB = '指派';
$lang->typeAB = '类型';
$lang->nameAB = '名称';
+1 -1
View File
@@ -136,7 +136,7 @@ $lang->workingHour = '工時';
$lang->idAB = 'ID';
$lang->priAB = 'P';
$lang->statusAB = '狀態';
$lang->openedByAB = '創建';
$lang->openedByAB = '創建者';
$lang->assignedToAB = '指派';
$lang->typeAB = '類型';
$lang->nameAB = '名稱';
+1 -1
View File
@@ -6,7 +6,7 @@
.dropdown-list > li > a {display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.53846154; color: #141414; white-space: nowrap;}
.dropdown-list > li > a:hover,
.dropdown-list > li > a:focus {color: #1a4f85; text-decoration: none; background-color: #ddd;}
td.delayed {color: #fff; background: #e84e0f !important;}
.c-severity {width: 80px;}
.c-confirmed {overflow: hidden;}
.c-deadline {text-align: center;}
-1
View File
@@ -27,4 +27,3 @@
.c-hours {white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: right;}
.c-user, .c-type {width: 70px;}
.c-progress {width: 60px;}
.delayed {background: #e84e0f !important; color: white;}
-1
View File
@@ -1,4 +1,3 @@
td.delayed {background: #e84e0f !important; color: white;}
#int-dropdown {margin-left: -8px; border-radius: 4px; border: 1px solid #0c64eb;}
#projectTaskForm table tbody tr td {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.table td.c-estimate, .table td.c-consumed, .table td.c-left {padding-right: 12px;}
+1 -1
View File
@@ -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();
+3 -3
View File
@@ -342,8 +342,8 @@ $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>. &nbsp;&nbsp;&nbsp; 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->executionSummary = "Total {$lang->executionCommon}: <strong>%s</strong>.";
$lang->execution->pageExecSummary = "Total {$lang->executionCommon}: <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>';
@@ -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();
+1 -1
View File
@@ -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();
+2 -1
View File
@@ -4603,7 +4603,8 @@ class executionModel extends model
$burns = join(',', $execution->burns);
echo "<tr $trAttrs class='$trClass'>";
echo "<td><span id=$execution->id class='table-nest-icon icon table-nest-toggle'></span>";
echo "<td class='c-name text-left flex sort-handler'>";
if(common::hasPriv('execution', 'batchEdit')) echo "<span id=$execution->id class='table-nest-icon icon table-nest-toggle'></span>";
if($this->config->systemMode == 'new')
{
$spanClass = $execution->type == 'stage' ? 'label-warning' : 'label-info';
+11 -7
View File
@@ -16,13 +16,17 @@
$datatableId = $this->moduleName . ucfirst($this->methodName);
$useDatatable = (isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable');
?>
<?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
js::set('unfoldExecutions', array());
js::set('useDatatable', $useDatatable);
js::set('from', $from);
/* Replace Iteration to Execution. */
js::set('checkedSummary', str_replace($lang->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));
?>
<?php
/* Set unfold parent executionID. */
js::set('unfoldAll', $lang->execution->treeLevel['all']);
+2 -2
View File
@@ -122,7 +122,7 @@
<th class="c-hours"><?php echo $lang->task->leftAB;?></th>
<th class="c-progress" title='<?php echo $lang->task->progress;?>'><?php echo $lang->task->progressAB;?></th>
<th class="c-type"><?php echo $lang->typeAB;?></th>
<th class="c-date"><?php echo $lang->task->deadlineAB;?></th>
<th class="c-date text-center"><?php echo $lang->task->deadlineAB;?></th>
<th class="c-actions-3"><?php echo $lang->actions;?></th>
</tr>
</thead>
@@ -207,7 +207,7 @@
<td class="c-hours em" title="<?php echo $task->left . ' ' . $lang->execution->workHour;?>"><?php echo $task->left . $lang->execution->workHourUnit;?></td>
<td class="c-num em"><?php echo $task->progress . '%';?></td>
<td class="c-type"><?php echo zget($lang->task->typeList, $task->type);?></td>
<td class='c-date <?php if(isset($task->delay)) echo 'delayed';?>'><?php if(substr($task->deadline, 0, 4) > 0) echo substr($task->deadline, 5, 6);?></td>
<td class='c-date text-center <?php if(isset($task->delay)) echo 'delayed';?>'><?php if(substr($task->deadline, 0, 4) > 0) echo '<span>' . substr($task->deadline, 5, 6) . '</span>';?></td>
<td class="c-actions">
<?php if(common::canModify('execution', $execution)):?>
<?php common::printIcon('task', 'assignTo', "executionID=$task->execution&taskID=$task->id", $task, 'list', '', '', 'iframe', true);?>
+2 -2
View File
@@ -42,7 +42,7 @@
<?php endif;?>
<th class='c-user'><?php echo $lang->task->assignedTo;?></th>
<th class='c-hour'><?php echo $lang->task->leftAB;?></th>
<th class='c-date'><?php echo $lang->task->deadlineAB;?></th>
<th class='c-date text-center'><?php echo $lang->task->deadlineAB;?></th>
<th class='c-status'><?php echo $lang->statusAB;?></th>
<th class='c-story'><?php echo $lang->task->story;?></th>
</tr>
@@ -63,7 +63,7 @@
<td class='text-left nobr'><?php if(!common::printLink('task', 'view', "task=$task->id", $task->name, '', "class='preview iframe' data-width='90%'", true, true)) echo $task->name;?></td>
<td <?php echo $class;?>><?php echo $task->assignedToRealName;?></td>
<td title="<?php echo $task->left . ' ' . $lang->execution->workHour;?>"><?php echo $task->left . ' ' . $lang->execution->workHourUnit;?></td>
<td class=<?php if(isset($task->delay)) echo 'delayed';?>><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
<td class="text-center <?php if(isset($task->delay)) echo 'delayed';?>"><?php if(substr($task->deadline, 0, 4) > 0) echo '<span>' . $task->deadline . '</span>';?></td>
<td><span class='status-task status-<?php echo $task->status;?>'><?php echo $this->processStatus('task', $task);?></span></td>
<td class='text-left text-ellipsis' title="<?php echo $task->storyTitle;?>">
<?php
+1 -2
View File
@@ -1,3 +1,2 @@
td.delayed {color: #fff; background: #e84e0f !important;}
.c-confirm {width:60px;}
[lang^=en] .c-assignedTo {width: 105px !important;}
+1
View File
@@ -11,3 +11,4 @@
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};}
.c-span {margin-left: 22px;}
[lang^=de] .c-hours{width: 105px;}
+1
View File
@@ -11,3 +11,4 @@
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};}
.c-actions-6 {width: 185px;}
[lang^=de] .c-hours {width: 105px;}
+1 -3
View File
@@ -1,5 +1,3 @@
td.delayed {background: #e84e0f !important; color: white;}
.table-children {border-left: 2px solid #cbd0db; border-right: 2px solid #cbd0db;}
.table tbody > tr.table-children.table-child-top {border-top: 2px solid #cbd0db;}
.table tbody > tr.table-children.table-child-bottom {border-bottom: 2px solid #cbd0db;}
@@ -28,7 +26,7 @@ html[lang="en"] .c-user-short {width: 88px;}
[lang^=de] #taskTable .c-date {width: 78px;}
[lang^=de] #taskTable .assigned-title {width: 123px !important;}
[lang^=de] #taskTable .c-user {width: 118px;}
[lang^=de] #taskTable .c-hours {width: 86px;}
[lang^=de] #taskTable .estimate, [lang^=de] #taskTable .consumed {width: 86px;}
[lang^=de] #taskTable .c-user-short {width: 75px;}
[lang^=fr] #taskTable .c-name {width: 120px;}
[lang^=fr] #taskTable .c-project {width: 100px;}
+1
View File
@@ -10,3 +10,4 @@
.panel-actions .btn-icon {padding-left: 7px;}
[lang^=de] .c-pri {width: 69px;}
[lang^=fr] .c-pri {width: 82px;}
[lang^=en] .c-user, [lang^=fr] .c-user {width: 100px !important;}
+13 -13
View File
@@ -62,24 +62,24 @@
<?php endif;?>
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
</th>
<th><?php common::printOrderLink('title', $orderBy, $vars, $lang->bug->title);?></th>
<th class='c-severity' title='<?php echo $lang->bug->severity;?>'><?php common::printOrderLink('severity', $orderBy, $vars, $lang->bug->severityAB);?></th>
<th class='c-pri' title='<?php echo $lang->bug->pri;?>'><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='c-confirm' title='<?php echo $lang->bug->confirmedAB;?>'><?php common::printOrderLink('confirmed', $orderBy, $vars, $lang->bug->confirmedAB);?></th>
<th><?php common::printOrderLink('title', $orderBy, $vars, $lang->bug->title);?></th>
<th class='c-type'><?php common::printOrderLink('type', $orderBy, $vars, $lang->bug->type);?></th>
<th class='c-product'><?php common::printOrderLink('product', $orderBy, $vars, $lang->bug->product);?></th>
<th class='c-type'><?php common::printOrderLink('type', $orderBy, $vars, $lang->typeAB);?></th>
<?php if($type != 'openedBy'): ?>
<th class='c-user'><?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
<th class='c-user'><?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->bug->openedByAB);?></th>
<?php endif;?>
<th class='c-confirm' title='<?php echo $lang->bug->confirmedAB;?>'><?php common::printOrderLink('confirmed', $orderBy, $vars, $lang->bug->confirmedAB);?></th>
<?php if($app->rawMethod == 'work'):?>
<th class='c-date text-center'><?php common::printOrderLink('deadline', $orderBy, $vars, $lang->bug->deadlineAB);?></th>
<th class='c-date text-center'><?php common::printOrderLink('deadline', $orderBy, $vars, $lang->bug->deadline);?></th>
<?php endif;?>
<?php if($type != 'assignedTo'): ?>
<th class='c-user c-assignedTo'><?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->bug->assignedTo);?></th>
<?php endif;?>
<?php if($type != 'resolvedBy'): ?>
<th class='c-user'><?php common::printOrderLink('resolvedBy', $orderBy, $vars, $lang->bug->resolvedByAB);?></th>
<th class='c-user'><?php common::printOrderLink('resolvedBy', $orderBy, $vars, $lang->bug->resolvedBy);?></th>
<?php endif;?>
<th class='c-resolution'><?php common::printOrderLink('resolution', $orderBy, $vars, $lang->bug->resolutionAB);?></th>
<th class='c-actions-5 text-center'><?php echo $lang->actions;?></th>
@@ -109,6 +109,10 @@
<?php endif;?>
<?php printf('%03d', $bug->id);?>
</td>
<td class='text-left nobr'>
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->title, null, "style='color: $bug->color' title='{$bug->title}'");?>
<?php if($bug->case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion"), "[" . $this->lang->testcase->common . "#$bug->case]", '', "class='bug' title='$bug->case'");?>
</td>
<td>
<?php if($hasCustomSeverity):?>
<span class='<?php echo 'label-severity-custom';?>' title='<?php echo zget($lang->bug->severityList, $bug->severity);?>' data-severity='<?php echo $bug->severity;?>'><?php echo zget($lang->bug->severityList, $bug->severity, $bug->severity);?></span>
@@ -117,24 +121,20 @@
<?php endif;?>
</td>
<td><span class='label-pri <?php echo 'label-pri-' . $bug->pri?>' title='<?php echo zget($lang->bug->priList, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri)?></span></td>
<td class="text-center"><span class='<?php echo $bug->confirmed == '1' ? 'confirmed' : 'unconfirmed';?>' title='<?php echo zget($lang->bug->confirmedList, $bug->confirmed);?>'><?php echo zget($lang->bug->confirmedList, $bug->confirmed)?></span></td>
<td class='text-left nobr'>
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->title, null, "style='color: $bug->color' title='{$bug->title}'");?>
<?php if($bug->case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion"), "[" . $this->lang->testcase->common . "#$bug->case]", '', "class='bug' title='$bug->case'");?>
</td>
<?php $param = $config->productLink == 'product-all' ? '' : "productID=$bug->product";?>
<td title="<?php echo zget($lang->bug->typeList, $bug->type, '');?>"><?php echo zget($lang->bug->typeList, $bug->type, '');?></td>
<td class='text-left nobr'>
<?php
$productLink = explode('-', $config->productLink);
echo html::a($this->createLink('product', $productLink[1], $param), $bug->productName, null, "title={$bug->productName}");
?>
</td>
<td title="<?php echo zget($lang->bug->typeList, $bug->type, '');?>"><?php echo zget($lang->bug->typeList, $bug->type, '');?></td>
<?php if($type != 'openedBy'): ?>
<td><?php echo zget($users, $bug->openedBy);?></td>
<?php endif;?>
<td class="text-center"><span class='<?php echo $bug->confirmed == '1' ? 'confirmed' : 'unconfirmed';?>' title='<?php echo zget($lang->bug->confirmedList, $bug->confirmed);?>'><?php echo zget($lang->bug->confirmedList, $bug->confirmed)?></span></td>
<?php if($app->rawMethod == 'work'):?>
<td class="text-center <?php echo (isset($bug->delay) and $bug->status == 'active') ? 'delayed' : '';?>"><?php if(substr($bug->deadline, 0, 4) > 0) echo substr($bug->deadline, 5, 6);?></td>
<td class="text-center <?php echo (isset($bug->delay) and $bug->status == 'active') ? 'delayed' : '';?>"><?php if(substr($bug->deadline, 0, 4) > 0) echo '<span>' . substr($bug->deadline, 5, 6) . '</span>';?></td>
<?php endif;?>
<?php if($type != 'assignedTo'): ?>
<td class='c-assignedTo has-btn'><?php $this->bug->printAssignedHtml($bug, $users);?></td>
+11
View File
@@ -47,7 +47,17 @@
</tr>
</thead>
<tbody id='projectTableList'>
<?php
$waitCount = 0;
$doingCount = 0;
$suspendedCount = 0;
$closedCount = 0;
?>
<?php foreach($projects as $project):?>
<?php if($project->status == 'wait') $waitCount ++;?>
<?php if($project->status == 'doing') $doingCount ++;?>
<?php if($project->status == 'suspended') $suspendedCount ++;?>
<?php if($project->status == 'closed') $closedCount ++;?>
<tr>
<td class='c-id'><?php printf('%03d', $project->id);?></td>
<td class='c-name text-left' title='<?php echo $project->name?>'>
@@ -101,6 +111,7 @@
</tbody>
</table>
<div class='table-footer'>
<div class="table-statistic"><?php echo $status == 'openedbyme' ? sprintf($lang->project->allSummary, count($projects), $waitCount, $doingCount, $suspendedCount, $closedCount) : sprintf($lang->project->summary, count($projects));?></div>
<?php $pager->show('right', 'pagerjs');?>
</div>
</form>
+9 -8
View File
@@ -50,6 +50,7 @@
$canBatchReview = common::hasPriv('requirement', 'batchReview');
$canBatchAssignTo = common::hasPriv('requirement', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchReview or $canBatchAssignTo);
$URTitle = common::checkNotCN() ? $lang->URCommon . ' ' . $lang->my->name : $lang->URCommon . $lang->my->name;
?>
<thead>
<tr>
@@ -61,12 +62,12 @@
<?php endif;?>
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
</th>
<th class='c-name'> <?php common::printOrderLink('title', $orderBy, $vars, $URTitle);?></th>
<th class='c-pri w-40px' title=<?php echo $lang->pri;?>><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='c-name'> <?php common::printOrderLink('title', $orderBy, $vars, $lang->my->name);?></th>
<th class='c-product'> <?php common::printOrderLink('productTitle', $orderBy, $vars, $lang->story->product);?></th>
<th class='c-user'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
<th class='c-hours'> <?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
<th class='c-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-product'> <?php common::printOrderLink('productTitle', $orderBy, $vars, $lang->story->product);?></th>
<th class='c-user'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->story->openedByAB);?></th>
<th class='c-hours'> <?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
<th class='c-stage'> <?php common::printOrderLink('stage', $orderBy, $vars, $lang->story->stageAB);?></th>
<th class='c-actions-6 text-center'> <?php echo $lang->actions;?></th>
</tr>
@@ -88,15 +89,15 @@
<?php endif;?>
<?php printf('%03d', $story->id);?>
</td>
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
<td class='c-name nobr <?php if(!empty($story->children)) echo "has-child" ?>'>
<?php echo common::hasPriv('requirement', 'view') ? html::a($storyLink, $story->title, null, "style='color: $story->color' data-group='product' title='$story->title'") : "<span title='$story->title'>$story->title</span>";?>
<?php if(!empty($story->children)) echo '<a class="story-toggle" data-id="' . $story->id . '"><i class="icon icon-angle-double-right"></i></a>';?>
</td>
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
<td class='c-status'><span class='status-story status-<?php echo $story->status;?>'><?php echo $this->processStatus('story', $story);?></span></td>
<td class='c-product' title="<?php echo $story->productTitle;?>"><?php echo $story->productTitle;?></td>
<td class='c-user'><?php echo zget($users, $story->openedBy);?></td>
<td class='c-hours' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
<td class='c-status'><span class='status-story status-<?php echo $story->status;?>'> <?php echo $this->processStatus('story', $story);?></span></td>
<td class='c-stage'><?php echo zget($lang->story->stageList, $story->stage);?></td>
<td class='c-actions'>
<?php
@@ -146,14 +147,14 @@
<span class="<?php echo $spanClass?>"></span>
<?php printf('%03d', $child->id);?>
</td>
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $child->pri;?>' title='<?php echo zget($lang->story->priList, $child->pri, $child->pri);?>'><?php echo zget($lang->story->priList, $child->pri, $child->pri);?></span></td>
<td class='c-name nobr'>
<?php echo '<span class="label label-badge label-light" title="' . $this->lang->story->children .'">SR</span> ' . (common::hasPriv('story', 'view') ? html::a($storyLink, $child->title, null, "style='color: $child->color' data-group='product' title='$child->title'") : $child->title);?>
</td>
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $child->pri;?>' title='<?php echo zget($lang->story->priList, $child->pri, $child->pri);?>'><?php echo zget($lang->story->priList, $child->pri, $child->pri);?></span></td>
<td class='c-status'><?php echo $child->URChanged ? "<span class='status-story status-changed'>{$this->lang->story->URChanged}</span>" : "<span class='status-story status-$child->status'>" . $this->processStatus('story', $child) . '</span>'?></td>
<td class='c-product' title="<?php echo $child->productTitle;?>"><?php echo $child->productTitle;?></td>
<td class='c-user'><?php echo zget($users, $child->openedBy);?></td>
<td class='c-hours'><?php echo $child->estimate . $config->hourUnit;?></td>
<td class='c-status'><?php echo $child->URChanged ? "<span class='status-story status-changed'>{$this->lang->story->URChanged}</span>" : "<span class='status-story status-$child->status'>" . $this->processStatus('story', $child) . '</span>'?></td>
<td class='c-stage'><?php echo zget($lang->story->stageList, $child->stage);?></td>
<td class='c-actions'>
<?php
+8 -7
View File
@@ -55,6 +55,7 @@
$canEdit = common::hasPriv('story', 'edit');
$canCreateCase = common::hasPriv('testcase', 'create');
$canClose = common::hasPriv('story', 'close');
$SRTitle = common::checkNotCN() ? $lang->SRCommon . ' ' . $lang->my->name : $lang->SRCommon . $lang->my->name;
?>
<thead>
<tr>
@@ -66,13 +67,13 @@
<?php endif;?>
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
</th>
<th class='c-name'> <?php common::printOrderLink('title', $orderBy, $vars, $SRTitle);?></th>
<th class='c-pri' title=<?php echo $lang->my->pri;?>><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='c-name'> <?php common::printOrderLink('title', $orderBy, $vars, $lang->my->name);?></th>
<th class='c-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-product'> <?php common::printOrderLink('product', $orderBy, $vars, $lang->story->product);?></th>
<th class='c-plan'> <?php common::printOrderLink('plan', $orderBy, $vars, $lang->story->plan);?></th>
<th class='c-user'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
<th class='c-user'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->story->openedByAB);?></th>
<th class='c-hours'> <?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
<th class='c-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-stage'> <?php common::printOrderLink('stage', $orderBy, $vars, $lang->story->stageAB);?></th>
<th class="c-actions-6 text-center"><?php echo $lang->actions;?></th>
</tr>
@@ -93,16 +94,16 @@
<?php endif;?>
<?php printf('%03d', $story->id);?>
</td>
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
<td class='c-name nobr <?php if(!empty($story->children)) echo "has-child" ?>' title='<?php echo $story->title;?>'>
<?php echo common::hasPriv('story', 'view') ? html::a($storyLink, $story->title, null, "style='color: $story->color' data-group='product'") : $story->title;?>
<?php if(!empty($story->children)) echo '<a class="story-toggle" data-id="' . $story->id . '"><i class="icon icon-angle-right"></i></a>';;?>
</td>
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
<td class='c-status'><span class='status-story status-<?php echo $story->status;?>'><?php echo $this->processStatus('story', $story);?></span></td>
<td class='c-product' title='<?php echo $story->productTitle;?>'><?php echo $story->productTitle;?></td>
<td class='c-plan'><?php echo $story->planTitle;?></td>
<td class='c-user'><?php echo zget($users, $story->openedBy);?></td>
<td class='c-hours' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
<td class='c-status'><span class='status-story status-<?php echo $story->status;?>'> <?php echo $this->processStatus('story', $story);?></span></td>
<td class='c-stage'><?php echo zget($lang->story->stageList, $story->stage);?></td>
<td class='c-actions'>
<?php
@@ -157,15 +158,15 @@
<?php endif;?>
<?php printf('%03d', $child->id);?>
</td>
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $child->pri;?>' title='<?php echo zget($lang->story->priList, $child->pri, $child->pri);?>'><?php echo zget($lang->story->priList, $child->pri, $child->pri);?></span></td>
<td class='c-name nobr'>
<?php echo '<span class="label label-badge label-light" title="' . $this->lang->story->children .'">' . $this->lang->story->childrenAB . '</span> ' . html::a($storyLink, $child->title, null, "style='color: $child->color' data-group='product' title='$child->title'");?>
</td>
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $child->pri;?>' title='<?php echo zget($lang->story->priList, $child->pri, $child->pri);?>'><?php echo zget($lang->story->priList, $child->pri, $child->pri);?></span></td>
<td class='c-status'><span class='status-story status-<?php echo $child->status;?>'><?php echo $this->processStatus('story', $child);?></span></td>
<td class='c-product' title='<?php echo $child->productTitle;?>'><?php echo $child->productTitle;?></td>
<td class='c-plan'><?php echo $child->planTitle;?></td>
<td class='c-user'><?php echo zget($users, $child->openedBy);?></td>
<td class='c-hours'><?php echo $child->estimate . $config->hourUnit;?></td>
<td class='c-status'><span class='status-story status-<?php echo $child->status;?>'> <?php echo $this->processStatus('story', $child);?></span></td>
<td class='c-stage'><?php echo zget($lang->story->stageList, $child->stage);?></td>
<td class='c-actions'>
<?php
+38 -33
View File
@@ -67,28 +67,28 @@
<?php endif;?>
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
</th>
<th class='c-pri' title=<?php echo $lang->task->pri;?>><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='c-name'><?php common::printOrderLink('name', $orderBy, $vars, $lang->task->name);?></th>
<th class='c-pri' title=<?php echo $lang->task->pri;?>><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<?php if($config->systemMode == 'new'):?>
<th class='c-project'><?php common::printOrderLink('project', $orderBy, $vars, $lang->my->projects);?></th>
<th class='c-project'><?php common::printOrderLink('execution', $orderBy, $vars, $lang->task->execution);?></th>
<?php else:?>
<th class='c-project'><?php common::printOrderLink('execution', $orderBy, $vars, $lang->my->executions);?></th>
<?php endif;?>
<?php if($type != 'openedBy'): ?>
<th class='c-user-short'><?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
<?php endif;?>
<th class='c-date text-center'><?php common::printOrderLink('deadline', $orderBy, $vars, $lang->task->deadlineAB);?></th>
<?php if($type != 'assignedTo'): ?>
<th class='c-user assigned-title'><?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->task->assignedTo);?></th>
<?php endif;?>
<?php if($type != 'finishedBy'): ?>
<th class='c-user'><?php common::printOrderLink('finishedBy', $orderBy, $vars, $lang->task->finishedBy);?></th>
<?php endif;?>
<th class='c-date text-center'><?php common::printOrderLink('deadline', $orderBy, $vars, $lang->task->deadlineAB);?></th>
<th class='c-hours estimate'><?php common::printOrderLink('estimate', $orderBy, $vars, $lang->task->estimateAB);?></th>
<th class='c-hours consumed'><?php common::printOrderLink('consumed', $orderBy, $vars, $lang->task->consumedAB);?></th>
<th class='c-hours'><?php common::printOrderLink('left', $orderBy, $vars, $lang->task->leftAB);?></th>
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<?php if($type != 'openedBy'): ?>
<th class='c-user-short'><?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->task->openedByAB);?></th>
<?php endif;?>
<?php if($type != 'finishedBy'): ?>
<th class='c-user'><?php common::printOrderLink('finishedBy', $orderBy, $vars, $lang->task->finishedByAB);?></th>
<?php endif;?>
<th class="c-actions-6 text-center"><?php echo $lang->actions;?></th>
</tr>
</thead>
@@ -105,7 +105,6 @@
<?php endif;?>
<?php printf('%03d', $task->id);?>
</td>
<td class="c-pri"><span class='label-pri <?php echo 'label-pri-' . $task->pri;?>' title='<?php echo zget($lang->task->priList, $task->pri);?>'><?php echo zget($lang->task->priList, $task->pri);?></span></td>
<td class='c-name <?php if(!empty($task->children)) echo 'has-child';?>' title='<?php echo $task->name?>'>
<?php if(!empty($task->team)) echo '<span class="label label-badge label-light">' . $this->lang->task->multipleAB . '</span> ';?>
<?php
@@ -122,6 +121,16 @@
?>
<?php if(!empty($task->children)) echo '<a class="task-toggle" data-id="' . $task->id . '"><i class="icon icon-angle-right"></i></a>';?>
</td>
<td class="c-pri"><span class='label-pri <?php echo 'label-pri-' . $task->pri;?>' title='<?php echo zget($lang->task->priList, $task->pri);?>'><?php echo zget($lang->task->priList, $task->pri);?></span></td>
<td class='c-status'>
<?php $storyChanged = (!empty($task->storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?>
<?php $storyChanged ? print("<span class='status-story status-changed'>{$this->lang->my->storyChanged}</span>") : print("<span class='status-task status-{$task->status}'> " . $this->processStatus('task', $task) . "</span>");?>
</td>
<td class="c-pri"><span class='label-pri <?php echo 'label-pri-' . $task->pri;?>' title='<?php echo zget($lang->task->priList, $task->pri);?>'><?php echo zget($lang->task->priList, $task->pri);?></span></td>
<td class='c-status'>
<?php $storyChanged = (!empty($task->storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?>
<?php !empty($storyChanged) ? print("<span class='status-story status-changed'>{$this->lang->my->storyChanged}</span>") : print("<span class='status-task status-{$task->status}'> " . $this->processStatus('task', $task) . "</span>");?>
</td>
<?php if($config->systemMode == 'new'):?>
<?php $projectName = isset($projects[$task->execution]->name) ? $projects[$task->execution]->name : '';?>
<?php $projectID = isset($projects[$task->execution]->id) ? $projects[$task->execution]->id : 0;?>
@@ -130,23 +139,19 @@
</td>
<?php endif;?>
<td class='c-project' title="<?php echo $task->executionName;?>"><?php echo html::a($this->createLink('execution', 'task', "executionID=$task->execution"), $task->executionName, '');?></td>
<?php if($type != 'openedBy'): ?>
<td class='c-user'><?php echo zget($users, $task->openedBy);?></td>
<?php endif;?>
<td class="text-center <?php echo isset($task->delay) ? 'delayed' : '';?>"><?php if(substr($task->deadline, 0, 4) > 0) echo substr($task->deadline, 5, 6);?></td>
<?php if($type != 'assignedTo'): ?>
<td class="c-assignedTo has-btn" title="<?php echo zget($users, $task->assignedTo);?>"> <?php $this->task->printAssignedHtml($task, $users);?></td>
<?php endif;?>
<td class="text-center <?php echo isset($task->delay) ? 'delayed' : '';?>"><?php if(substr($task->deadline, 0, 4) > 0) echo '<span>' . substr($task->deadline, 5, 6) . '</span>';?></td>
<td class='c-hours' title="<?php echo round($task->estimate, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->estimate, 1) . $lang->execution->workHourUnit;?></td>
<td class='c-hours' title="<?php echo round($task->consumed, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->consumed, 1) . $lang->execution->workHourUnit;?></td>
<td class='c-hours' title="<?php echo round($task->left, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->left, 1) . $lang->execution->workHourUnit;?></td>
<?php if($type != 'openedBy'): ?>
<td class='c-user'><?php echo zget($users, $task->openedBy);?></td>
<?php endif;?>
<?php if($type != 'finishedBy'): ?>
<td class='c-user'><?php echo zget($users, $task->finishedBy);?></td>
<?php endif;?>
<td class='c-hours' title="<?php echo round($task->estimate, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->estimate, 1) . $lang->execution->workHourUnit;?></td>
<td class='c-hours' title="<?php echo round($task->consumed, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->consumed, 1) . $lang->execution->workHourUnit;?></td>
<td class='c-hours' title="<?php echo round($task->left, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->left, 1) . $lang->execution->workHourUnit;?></td>
<td class='c-status'>
<?php $storyChanged = (!empty($task->storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?>
<?php !empty($storyChanged) ? print("<span class='status-story status-changed'>{$this->lang->my->storyChanged}</span>") : print("<span class='status-task status-{$task->status}'> " . $this->processStatus('task', $task) . "</span>");?>
</td>
<td class='c-actions'>
<?php
if($canBeChanged)
@@ -194,11 +199,15 @@
<?php endif;?>
<?php printf('%03d', $child->id);?>
</td>
<td class="c-pri"><span class='label-pri <?php echo 'label-pri-' . $child->pri;?>' title='<?php echo zget($lang->task->priList, $child->pri);?>'><?php echo zget($lang->task->priList, $child->pri);?></span></td>
<td class='c-name' title='<?php echo $child->name?>'>
<?php if($child->parent > 0) echo '<span class="label label-badge label-light">' . $this->lang->task->childrenAB . '</span> ';?>
<?php echo html::a($this->createLink('task', 'view', "taskID=$child->id", '', '', $child->project), $child->name, null, "style='color: $child->color'");?>
</td>
<td class="c-pri"><span class='label-pri <?php echo 'label-pri-' . $child->pri;?>' title='<?php echo zget($lang->task->priList, $child->pri);?>'><?php echo zget($lang->task->priList, $child->pri);?></span></td>
<td class='c-status'>
<?php $storyChanged = (!empty($child->storyStatus) and $child->storyStatus == 'active' and $child->latestStoryVersion > $child->storyVersion and !in_array($child->status, array('cancel', 'closed')));?>
<?php !empty($storyChanged) ? print("<span class='status-story status-changed'>{$this->lang->my->storyChanged}</span>") : print("<span class='status-task status-{$child->status}'> " . $this->processStatus('task', $child) . "</span>");?>
</td>
<?php if($config->systemMode == 'new'):?>
<?php $projectName = isset($projects[$child->execution]->name) ? $projects[$child->execution]->name : '';?>
<?php $projectID = isset($projects[$child->execution]->id) ? $projects[$child->execution]->id : 0;?>
@@ -207,23 +216,19 @@
</td>
<?php endif;?>
<td class='c-project' title="<?php echo $child->projectName;?>"><?php echo html::a($this->createLink('execution', 'task', "executionID=$child->project"), $child->executionName, '');?></td>
<?php if($type != 'openedBy'): ?>
<td class='c-user'><?php echo zget($users, $child->openedBy);?></td>
<?php endif;?>
<td class="text-center <?php echo isset($child->delay) ? 'delayed' : '';?>"><?php if(substr($child->deadline, 0, 4) > 0) echo substr($child->deadline, 5, 6);?></td>
<?php if($type != 'assignedTo'): ?>
<td class="c-assignedTo has-btn" title="<?php echo zget($users, $child->assignedTo);?>"> <?php $this->task->printAssignedHtml($child, $users);?></td>
<?php endif;?>
<td class="text-center <?php echo isset($child->delay) ? 'delayed' : '';?>"><?php if(substr($child->deadline, 0, 4) > 0) echo '<span>' . substr($child->deadline, 5, 6) . '</span>';?></td>
<td class='c-hours' title="<?php echo round($child->estimate, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($child->estimate, 1) . ' ' . $lang->execution->workHourUnit;?></td>
<td class='c-hours' title="<?php echo round($child->consumed, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($child->consumed, 1) . ' ' . $lang->execution->workHourUnit;?></td>
<td class='c-hours' title="<?php echo round($child->left, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($child->left, 1) . ' ' . $lang->execution->workHourUnit;?></td>
<?php if($type != 'openedBy'): ?>
<td class='c-user'><?php echo zget($users, $child->openedBy);?></td>
<?php endif;?>
<?php if($type != 'finishedBy'): ?>
<td class='c-user'><?php echo zget($users, $child->finishedBy);?></td>
<?php endif;?>
<td class='c-hours' title="<?php echo round($child->estimate, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($child->estimate, 1) . ' ' . $lang->execution->workHourUnit;?></td>
<td class='c-hours' title="<?php echo round($child->consumed, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($child->consumed, 1) . ' ' . $lang->execution->workHourUnit;?></td>
<td class='c-hours' title="<?php echo round($child->left, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($child->left, 1) . ' ' . $lang->execution->workHourUnit;?></td>
<td class='c-status'>
<?php $storyChanged = (!empty($child->storyStatus) and $child->storyStatus == 'active' and $child->latestStoryVersion > $child->storyVersion and !in_array($child->status, array('cancel', 'closed')));?>
<?php !empty($storyChanged) ? print("<span class='status-story status-changed'>{$this->lang->my->storyChanged}</span>") : print("<span class='status-task status-{$child->status}'> " . $this->processStatus('task', $child) . "</span>");?>
</td>
<td class='c-actions'>
<?php
if($canBeChanged)
+4 -4
View File
@@ -35,11 +35,11 @@
<tr>
<th class='c-id'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
<th> <?php common::printOrderLink('name', $orderBy, $vars, $lang->testtask->name);?></th>
<th class='c-execution'><?php common::printOrderLink('execution', $orderBy, $vars, $lang->testtask->execution);?></th>
<th class='c-build'> <?php common::printOrderLink('build', $orderBy, $vars, $lang->testtask->build);?></th>
<th class='c-execution'><?php common::printOrderLink('execution', $orderBy, $vars, $lang->testtask->execution);?></th>
<th class='c-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-date'> <?php common::printOrderLink('begin', $orderBy, $vars, $lang->testtask->begin);?></th>
<th class='c-date'> <?php common::printOrderLink('end', $orderBy, $vars, $lang->testtask->end);?></th>
<th class='c-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-actions-6 text-center'><?php echo $lang->actions;?></th>
</tr>
</thead>
@@ -48,11 +48,11 @@
<tr>
<td class="c-id"><?php printf('%03d', $task->id);?></td>
<td class='text-left nobr' title='<?php echo $task->name;?>'><?php echo html::a($this->createLink('testtask', 'view', "taskID=$task->id"), $task->name);?></td>
<td class='nobr' title='<?php echo $task->executionName;?>'><?php echo $task->executionName;?></td>
<td class='nobr' title='<?php echo $task->build == 'trunk' ? $lang->trunk : $task->buildName;?>'><?php $task->build == 'trunk' ? print($lang->trunk) : print(html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName));?></td>
<td class='nobr' title='<?php echo $task->executionName;?>'><?php echo $task->executionName;?></td>
<td title='<?php echo $this->processStatus('testtask', $task);?>'><span class="status-task status-<?php echo $task->status?>"><?php echo $this->processStatus('testtask', $task);?></span></td>
<td><?php echo $task->begin?></td>
<td><?php echo $task->end?></td>
<td title='<?php echo $this->processStatus('testtask', $task);?>'><span class="status-task status-<?php echo $task->status?>"><?php echo $this->processStatus('testtask', $task);?></span></td>
<td class='c-actions'>
<?php
common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap', '', '', '', "data-app='qa'");
+17 -9
View File
@@ -87,16 +87,20 @@
<?php endif;?>
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
</th>
<th class="c-date text-center"><?php common::printOrderLink('date', $orderBy, $vars, $lang->todo->date);?></th>
<th class="c-type"><?php common::printOrderLink('type', $orderBy, $vars, $lang->todo->type);?></th>
<th class="c-name"> <?php common::printOrderLink('name', $orderBy, $vars, $lang->todo->name);?></th>
<?php $style = $this->app->clientLang == 'en' ? "style='width:80px'" : '';?>
<th class="c-pri" <?php echo $style;?> title=<?php echo $lang->todo->pri;?>> <?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class="c-name"> <?php common::printOrderLink('name', $orderBy, $vars, $lang->todo->name);?></th>
<th class="c-date text-center"><?php common::printOrderLink('date', $orderBy, $vars, $lang->todo->date);?></th>
<th class="c-status"> <?php common::printOrderLink('status', $orderBy, $vars, $lang->todo->status);?></th>
<th class="c-type"><?php common::printOrderLink('type', $orderBy, $vars, $lang->todo->type);?></th>
<?php if($type == 'assignedToOther'):?>
<th class="c-user"> <?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->todo->assignedTo);?></th>
<?php else:?>
<th class="c-user"> <?php common::printOrderLink('assignedBy', $orderBy, $vars, $lang->todo->assignedBy);?></th>
<?php endif;?>
<th class="c-begin"> <?php common::printOrderLink('begin', $orderBy, $vars, $lang->todo->beginAB);?></th>
<th class="c-end"> <?php common::printOrderLink('end', $orderBy, $vars, $lang->todo->endAB);?></th>
<th class="c-status"> <?php common::printOrderLink('status', $orderBy, $vars, $lang->todo->status);?></th>
<th class="c-actions-5"><?php echo $lang->actions;?></th>
<th class="c-actions-5 text-center"><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
@@ -111,14 +115,18 @@
<?php endif;?>
<?php echo $todo->id?>
</td>
<td class="c-date text-center"><?php echo $todo->date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?></td>
<td class="c-type"><?php echo zget($lang->todo->typeList, $todo->type, '');?></td>
<td class="c-pri"><span title="<?php echo zget($lang->todo->priList, $todo->pri);?>" class='label-pri <?php echo 'label-pri-' . $todo->pri;?>' title='<?php echo zget($lang->todo->priList, $todo->pri, $todo->pri);?>'><?php echo zget($lang->todo->priList, $todo->pri)?></span></td>
<td class="c-name" title="<?php echo $todo->name;?>"><?php echo html::a($this->createLink('todo', 'view', "id=$todo->id&from=my", '', true), $todo->name, '', "data-toggle='modal' data-width='80%' data-type='iframe' data-title='" . $lang->todo->view . "' data-icon='check'");?></td>
<td class="c-pri"><span title="<?php echo zget($lang->todo->priList, $todo->pri);?>" class='label-pri <?php echo 'label-pri-' . $todo->pri;?>' title='<?php echo zget($lang->todo->priList, $todo->pri, $todo->pri);?>'><?php echo zget($lang->todo->priList, $todo->pri)?></span></td>
<td class="c-date text-center"><?php echo $todo->date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?></td>
<td class="c-status"><span class="status-todo status-<?php echo $todo->status;?>"><?php echo $lang->todo->statusList[$todo->status];?></span></td>
<td class="c-type"><?php echo zget($lang->todo->typeList, $todo->type, '');?></td>
<?php if($type == 'assignedToOther'):?>
<td><?php echo zget($users, $todo->assignedTo);?></td>
<?php else:?>
<td><?php echo zget($users, $todo->assignedBy);?></td>
<?php endif;?>
<td class="c-begin"><?php echo $todo->begin;?></td>
<td class="c-end"><?php echo $todo->end;?></td>
<td class="c-status"><span class="status-todo status-<?php echo $todo->status;?>"><?php echo $lang->todo->statusList[$todo->status];?></span></td>
<td class="c-actions">
<?php
common::printIcon('todo', 'start', "id=$todo->id", $todo, 'list', 'play', 'hiddenwin');
+1 -1
View File
@@ -1211,7 +1211,7 @@ class productModel extends model
->beginIF($branch !== '' and $branch !== 'all')->andWhere('t1.branch')->in($branch)->fi()
->andWhere('t2.deleted')->eq('0')
->orderBy($orderBy)
->page($pager)
->page($pager, 't2.id')
->fetchAll('id');
/* Determine how to display the name of the program. */
+15 -2
View File
@@ -62,8 +62,18 @@
</tr>
</thead>
<tbody>
<?php $id = 0;?>
<?php
$id = 0;
$waitCount = 0;
$doingCount = 0;
$suspendedCount = 0;
$closedCount = 0;
?>
<?php foreach($projectStats as $project):?>
<?php if($project->status == 'wait') $waitCount ++;?>
<?php if($project->status == 'doing') $doingCount ++;?>
<?php if($project->status == 'suspended') $suspendedCount ++;?>
<?php if($project->status == 'closed') $closedCount ++;?>
<tr>
<td><?php printf('%03d', $project->id);?></td>
<?php if($config->systemMode == 'new'):?>
@@ -107,7 +117,10 @@
<?php endforeach;?>
</tbody>
</table>
<div class='table-footer'><?php echo $pager->show('left', 'pagerjs');?></div>
<div class='table-footer'>
<div class="table-statistic"><?php echo strpos(',all,undone,', ",$status,") !== false ? sprintf($lang->project->allSummary, count($projectStats), $waitCount, $doingCount, $suspendedCount, $closedCount) : sprintf($lang->project->summary, count($projectStats));?></div>
<?php echo $pager->show('left', 'pagerjs');?>
</div>
</form>
<?php endif;?>
</div>
+3
View File
@@ -440,10 +440,12 @@ class productplan extends control
if($plan->branch > 0) $this->view->branchStatus = $this->loadModel('branch')->getById($plan->branch, $plan->product, 'status');
$storyIdList = array();
$modulePairs = $this->loadModel('tree')->getOptionMenu($plan->product, 'story', 0, 'all');
foreach($planStories as $story)
{
if(!isset($modulePairs[$story->module])) $modulePairs += $this->tree->getModulesName($story->module);
$storyIdList[] = $story->id;
}
$this->loadModel('datatable');
@@ -466,6 +468,7 @@ class productplan extends control
$this->view->storyPager = $storyPager;
$this->view->bugPager = $bugPager;
$this->view->canBeChanged = $canBeChanged;
$this->view->storyCases = $storyCases = $this->loadModel('testcase')->getStoryCaseCounts($storyIdList);;
if($this->app->getViewType() == 'json')
{
+42
View File
@@ -84,4 +84,46 @@ $(function()
history.pushState({}, 0, createLink('productplan', 'view', "planID=" + planID + '&type=story&orderBy=' + order));
});
});
$('.table-story').table(
{
statisticCreator: function(table)
{
var $checkedRows = table.getTable().find(table.isDataTable ? '.datatable-row-left.checked' : 'tbody>tr.checked');
var $originTable = table.isDataTable ? table.$.find('.datatable-origin') : null;
var checkedTotal = $checkedRows.length;
if(!checkedTotal) return;
var checkedEstimate = 0;
var checkedCase = 0;
var rateCount = checkedTotal;
$checkedRows.each(function()
{
var $row = $(this);
if($originTable)
{
$row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]');
}
var data = $row.data();
checkedEstimate += data.estimate;
if(data.cases > 0)
{
checkedCase += 1;
}
else if(data.children != undefined && data.children > 0)
{
rateCount -= 1;
}
});
var rate = '0%';
if(rateCount) rate = Math.round(checkedCase / rateCount * 100) + '%';
if(checkedTotal == 0) return storySummary;
return checkedSummary.replace('%total%', checkedTotal)
.replace('%estimate%', checkedEstimate.toFixed(1))
.replace('%rate%', rate);
}
});
});
+5 -2
View File
@@ -20,6 +20,9 @@
<?php js::set('storyPageID', $storyPager->pageID);?>
<?php js::set('storyRecPerPage', $storyPager->recPerPage);?>
<?php js::set('storyRecTotal', $storyPager->recTotal);?>
<?php js::set('storySummary', $summary);?>
<?php js::set('storyCommon', $lang->SRCommon);?>
<?php js::set('checkedSummary', str_replace('%storyCommon%', $lang->SRCommon, $lang->product->checkedSummary));?>
<div id='mainMenu' class='clearfix'>
<div class='btn-toolbar pull-left'>
<?php $browseLink = $this->session->productPlanList ? $this->session->productPlanList : inlink('browse', "planID=$plan->product");?>
@@ -100,7 +103,7 @@
<?php if(common::hasPriv('productplan', 'linkStory')):?>
<div class='linkBox cell hidden'></div>
<?php endif;?>
<form class='main-table table-story' data-ride="<?php echo $this->app->getViewType() == 'xhtml' ? '' : 'table' ?>" method='post' target='hiddenwin' action="<?php echo inlink('batchUnlinkStory', "planID=$plan->id&orderBy=$orderBy");?>">
<form class='main-table table-story' data-ride="" method='post' target='hiddenwin' action="<?php echo inlink('batchUnlinkStory', "planID=$plan->id&orderBy=$orderBy");?>">
<table class='table has-sort-head' id='storyList'>
<?php
$canBatchUnlink = common::hasPriv('productPlan', 'batchUnlinkStory');
@@ -158,7 +161,7 @@
$viewLink = $this->createLink('story', 'view', "storyID=$story->id");
$totalEstimate += $story->estimate;
?>
<tr data-id='<?php echo $story->id;?>'>
<tr data-id='<?php echo $story->id;?>' data-estimate='<?php echo $story->estimate?>' <?php if(!empty($story->children)) echo "data-children=" . count($story->children);?> data-cases='<?php echo zget($storyCases, $story->id, 0);?>'>
<?php if($this->app->getViewType() == 'xhtml'):?>
<td class='c-id text-left'>
<?php printf('%03d', $story->id);?>
+30
View File
@@ -1,5 +1,35 @@
$(function()
{
$('#projectsForm').table(
{
replaceId: 'projectIdList',
statisticCreator: function(table)
{
var $table = table.getTable();
var $checkedRows = $table.find('tbody>tr.checked');
var checkedTotal = $checkedRows.length;
var statistics = summary;
var checkedStatistics = checkedSummary.replace('%total%', checkedTotal);
if(browseType == 'all' || browseType == 'unclosed')
{
var checkedWait = $checkedRows.filter("[data-status=wait]").length;
var checkedDoing = $checkedRows.filter("[data-status=doing]").length;
var checkedSuspended = $checkedRows.filter("[data-status=suspended]").length;
var checkedClosed = $checkedRows.filter("[data-status=closed]").length;
statistics = allSummary;
checkedStatistics = checkedAllSummary.replace('%total%', checkedTotal)
.replace('%wait%', checkedWait)
.replace('%doing%', checkedDoing)
.replace('%suspended%', checkedSuspended)
.replace('%closed%', checkedClosed);
}
return checkedTotal ? checkedStatistics : statistics;
}
});
$('input[name^="showEdit"]').click(function()
{
$.cookie('showProjectBatchEdit', $(this).is(':checked') ? 1 : 0, {expires: config.cookieLife, path: config.webRoot});
+1 -1
View File
@@ -48,7 +48,7 @@
$originOrders[] = $program->order;
?>
<tr <?php echo $trAttrs;?> data-type="<?php echo $program->type;?>">
<tr <?php echo $trAttrs;?> data-type="<?php echo $program->type;?>" data-status="<?php echo $program->status?>">
<td class='c-name text-left <?php if($canOrder) echo 'sort-handler';?> has-prefix has-suffix' title='<?php echo $program->name?>'>
<?php
$icon = '';
+18 -3
View File
@@ -14,7 +14,11 @@
<?php
js::set('programID', $programID);
js::set('browseType', $browseType);
$canBatchEdit = common::hasPriv('project', 'batchEdit');
$canBatchEdit = common::hasPriv('project', 'batchEdit');
$waitCount = 0;
$doingCount = 0;
$suspendedCount = 0;
$closedCount = 0;
?>
<div id="mainMenu" class="clearfix">
<div class="btn-toolBar pull-left">
@@ -42,7 +46,7 @@ $canBatchEdit = common::hasPriv('project', 'batchEdit');
</p>
</div>
<?php else:?>
<form class='main-table' id='projectsForm' method='post' data-ride="table">
<form class='main-table' id='projectsForm' method='post'>
<?php
$vars = "programID=$programID&browseType=$browseType&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";
$setting = $this->datatable->getSetting('program');
@@ -62,8 +66,12 @@ $canBatchEdit = common::hasPriv('project', 'batchEdit');
</thead>
<tbody class="sortable" id='projectTableList'>
<?php foreach($projectStats as $project):?>
<tr data-id="<?php echo $project->id;?>">
<tr data-id="<?php echo $project->id;?>" data-status="<?php echo $project->status;?>">
<?php $project->from = 'pgmproject';?>
<?php if($project->status == 'wait') $waitCount ++;?>
<?php if($project->status == 'doing') $doingCount ++;?>
<?php if($project->status == 'suspended') $suspendedCount ++;?>
<?php if($project->status == 'closed') $closedCount ++;?>
<?php foreach($setting as $value) $this->project->printCell($value, $project, $users, $programID);?>
</tr>
<?php endforeach;?>
@@ -83,12 +91,19 @@ $canBatchEdit = common::hasPriv('project', 'batchEdit');
}
?>
</div>
<div class="table-statistic"><?php echo strpos(',all,unclosed,', ",$browseType,") !== false ? sprintf($lang->project->allSummary, count($projectStats), $waitCount, $doingCount, $suspendedCount, $closedCount) : sprintf($lang->project->summary, count($projectStats));?></div>
<?php $pager->show('right', 'pagerjs');?>
</div>
</form>
<?php endif;?>
</div>
</div>
<?php
js::set('summary', sprintf($lang->project->summary, count($projectStats)));
js::set('allSummary', sprintf($lang->project->allSummary, count($projectStats), $waitCount, $doingCount, $suspendedCount, $closedCount));
js::set('checkedSummary', $lang->project->checkedSummary);
js::set('checkedAllSummary', $lang->project->checkedAllSummary);
?>
<script>
$('input[name^="involved"]').click(function()
{
-1
View File
@@ -3,4 +3,3 @@
.text-remind {color: #ffa34d;}
.text-remind p{float: left; margin-right: 5px;}
#ignore {text-decoration: underline; cursor: pointer; color: #ef7b0f;}
td.delayed {color: #fff; background: #e84e0f !important;}
-1
View File
@@ -12,4 +12,3 @@ th.table-nest-title .check-all {position: absolute; left: 15px; top: 7px;}
#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;}
+4
View File
@@ -200,6 +200,10 @@ $lang->project->productTip = 'After clicking New Product, the projec
$lang->project->noDevStage = 'There is no R&D stage under this project, or you do not have access permissions. The creation of builds is not supported at the moment.';
$lang->project->budgetOverrun = "The project's budget exceeds the remaining budget of the parent program:";
$lang->project->disabledInputTip = 'Please cancel %s first';
$lang->project->summary = 'Total projects: <strong>%s</strong>.';
$lang->project->allSummary = 'Total projects: <strong>%s</strong>, Wait: <strong>%s</strong>, Doing: <strong>%s</strong>, Suspended: <strong>%s</strong>, Closed: <strong>%s</strong>.';
$lang->project->checkedSummary = 'Seleted: <strong>%total%</strong>.';
$lang->project->checkedAllSummary = 'Seleted: <strong>%total%</strong>, Wait: <strong>%wait%</strong>, Doing: <strong>%doing%</strong>, Suspended: <strong>%suspended%</strong>, Closed: <strong>%closed%</strong>.';
$lang->project->tenThousand = '';
$lang->project->hundredMillion = 'Hundred Million';
+4
View File
@@ -200,6 +200,10 @@ $lang->project->productTip = 'After clicking New Product, the projec
$lang->project->noDevStage = 'There is no R&D stage under this project, or you do not have access permissions. The creation of builds is not supported at the moment.';
$lang->project->budgetOverrun = "The project's budget exceeds the remaining budget of the parent program:";
$lang->project->disabledInputTip = 'Please cancel %s first';
$lang->project->summary = 'Total projects: <strong>%s</strong>.';
$lang->project->allSummary = 'Total projects: <strong>%s</strong>, Wait: <strong>%s</strong>, Doing: <strong>%s</strong>, Suspended: <strong>%s</strong>, Closed: <strong>%s</strong>.';
$lang->project->checkedSummary = 'Seleted: <strong>%total%</strong>.';
$lang->project->checkedAllSummary = 'Seleted: <strong>%total%</strong>, Wait: <strong>%wait%</strong>, Doing: <strong>%doing%</strong>, Suspended: <strong>%suspended%</strong>, Closed: <strong>%closed%</strong>.';
$lang->project->tenThousand = 'Ten Thousand';
$lang->project->hundredMillion = 'Hundred Million';
+4
View File
@@ -200,6 +200,10 @@ $lang->project->productTip = 'After clicking New Product, the projec
$lang->project->noDevStage = "Il n'y a pas de phase R&D dans ce projet, ou vous n'avez pas la permission d'accès. La version ne peut pas être créée pour le moment.";
$lang->project->budgetOverrun = "Le budget du projet a dépassé le budget restant du programme parent:";
$lang->project->disabledInputTip = 'Please cancel %s first';
$lang->project->summary = 'Total projects: <strong>%s</strong>.';
$lang->project->allSummary = 'Total projects: <strong>%s</strong>, Wait: <strong>%s</strong>, Doing: <strong>%s</strong>, Suspended: <strong>%s</strong>, Closed: <strong>%s</strong>.';
$lang->project->checkedSummary = 'Seleted: <strong>%total%</strong>.';
$lang->project->checkedAllSummary = 'Seleted: <strong>%total%</strong>, Wait: <strong>%wait%</strong>, Doing: <strong>%doing%</strong>, Suspended: <strong>%suspended%</strong>, Closed: <strong>%closed%</strong>.';
$lang->project->tenThousand = '';
$lang->project->hundredMillion = 'Hundred Million';
+4
View File
@@ -200,6 +200,10 @@ $lang->project->productTip = '点击新建产品后,项目将不
$lang->project->noDevStage = '该项目下没有研发类型的阶段,或者您没有权限访问,暂时不支持创建版本。';
$lang->project->budgetOverrun = '项目的预算超出了父项目集的剩余预算:';
$lang->project->disabledInputTip = '请先取消%s';
$lang->project->summary = '本页共 <strong>%s</strong> 个项目。';
$lang->project->allSummary = '本页共 <strong>%s</strong> 个项目,未开始 <strong>%s</strong>,进行中 <strong>%s</strong>,已挂起 <strong>%s</strong>,已关闭 <strong>%s</strong> 。';
$lang->project->checkedSummary = '选中 <strong>%total%</strong> 个项目。';
$lang->project->checkedAllSummary = '选中 <strong>%total%</strong> 个项目,未开始 <strong>%wait%</strong>,进行中 <strong>%doing%</strong>,已挂起 <strong>%suspended%</strong>,已关闭 <strong>%closed%</strong> 。';
$lang->project->tenThousand = '万';
$lang->project->hundredMillion = '亿';
+52 -3
View File
@@ -84,7 +84,7 @@
</p>
</div>
<?php else:?>
<form class='main-table' id='projectForm' method='post' data-ride="table">
<form class='main-table' id='projectForm' method='post'>
<div class="table-header fixed-right">
<nav class="btn-toolbar pull-right"></nav>
</div>
@@ -94,6 +94,10 @@
$useDatatable = (!commonModel::isTutorialMode() and (isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable'));
$setting = $this->datatable->getSetting('project');
$fixedFieldsWidth = $this->datatable->setFixedFieldWidth($setting);
$waitCount = 0;
$doingCount = 0;
$suspendedCount = 0;
$closedCount = 0;
if($useDatatable) include dirname(dirname(dirname(__FILE__))) . '/common/view/datatable.html.php';
?>
@@ -115,7 +119,11 @@
<tbody class="sortable">
<?php foreach($projectStats as $project):?>
<?php $project->from = 'project';?>
<tr data-id="<?php echo $project->id;?>">
<?php if($project->status == 'wait') $waitCount ++;?>
<?php if($project->status == 'doing') $doingCount ++;?>
<?php if($project->status == 'suspended') $suspendedCount ++;?>
<?php if($project->status == 'closed') $closedCount ++;?>
<tr data-id="<?php echo $project->id;?>" data-status="<?php echo $project->status;?>">
<?php foreach($setting as $value) $this->project->printCell($value, $project, $users, $programID);?>
</tr>
<?php endforeach;?>
@@ -136,10 +144,51 @@
}
?>
</div>
<div class="table-statistic"><?php echo strpos(',all,undone,', ",$browseType,") !== false ? sprintf($lang->project->allSummary, count($projectStats), $waitCount, $doingCount, $suspendedCount, $closedCount) : sprintf($lang->project->summary, count($projectStats));?></div>
<?php $pager->show('right', 'pagerjs');?>
</div>
</form>
<?php endif;?>
</div>
</div>
<?php js::set('useDatatable', isset($useDatatable) ? $useDatatable : false);?>
<?php
js::set('useDatatable', isset($useDatatable) ? $useDatatable : false);
js::set('summary', sprintf($lang->project->summary, count($projectStats)));
js::set('allSummary', sprintf($lang->project->allSummary, count($projectStats), $waitCount, $doingCount, $suspendedCount, $closedCount));
js::set('checkedSummary', $lang->project->checkedSummary);
js::set('checkedAllSummary', $lang->project->checkedAllSummary);
?>
<script>
$(function()
{
$('#projectForm').table(
{
replaceId: 'projectIdList',
statisticCreator: function(table)
{
var $table = table.getTable();
var $checkedRows = $table.find('tbody>tr.checked');
var checkedTotal = $checkedRows.length;
var statistics = summary;
var checkedStatistics = checkedSummary.replace('%total%', checkedTotal);
if(browseType == 'all' || browseType == 'undone')
{
var checkedWait = $checkedRows.filter("[data-status=wait]").length;
var checkedDoing = $checkedRows.filter("[data-status=doing]").length;
var checkedSuspended = $checkedRows.filter("[data-status=suspended]").length;
var checkedClosed = $checkedRows.filter("[data-status=closed]").length;
statistics = allSummary;
checkedStatistics = checkedAllSummary.replace('%total%', checkedTotal)
.replace('%wait%', checkedWait)
.replace('%doing%', checkedDoing)
.replace('%suspended%', checkedSuspended)
.replace('%closed%', checkedClosed);
}
return checkedTotal ? checkedStatistics : statistics;
}
});
});
</script>
+1
View File
@@ -16,6 +16,7 @@
#subHeader #dropMenu .col-left .list-group {margin-bottom: 0px; padding-top: 10px;}
#subHeader #dropMenu .col-left {padding-bottom: 0px;}
#currentBranch + #dropMenu .col-left {padding-bottom: 30px;}
.c-deadline {text-align: center;}
</style>
<div id="mainMenu" class="clearfix main-row fade in">
<div id="sidebarHeader">
+1 -1
View File
@@ -72,7 +72,7 @@
<thead>
<tr>
<th class='table-nest-title'>
<?php if($showToggleIcon):?>
<?php if($canBatchEdit and $showToggleIcon):?>
<a class='table-nest-toggle icon table-nest-toggle-global' data-expand-text='<?php echo $lang->expand; ?>' data-collapse-text='<?php echo $lang->collapse;?>'></a>
<?php endif;?>
<?php echo $lang->nameAB;?>
+1 -1
View File
@@ -24,7 +24,7 @@
{
$active = $type == $featureType ? 'btn-active-text' : '';
$label = "<span class='text'>$label</span>";
if($type == $featureType) $label .= " <span class='label label-light label-badge'>" . count($releases) . "</span>";
if($type == $featureType) $label .= " <span class='label label-light label-badge'>" . $pager->recTotal . "</span>";
echo html::a(inlink('browse', "projectID={$projectID}&executionID=$executionID&type=$featureType"), $label, '', "id='{$featureType}Tab' data-app='$from' class='btn btn-link $active'");
}
?>
+1 -1
View File
@@ -64,7 +64,7 @@ $lang->release->mailto = 'Mailto';
$lang->release->mailContent = '<p>Dear users,</p><p style="margin-left: 30px;">The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version.</p>';
$lang->release->storyList = '<p style="margin-left: 30px;">Story List:%s。</p>';
$lang->release->bugList = '<p style="margin-left: 30px;">Bug List:%s。</p>';
$lang->release->pageAllSummary = 'Total releases: <strong>%total%</strong>, Normal: <strong>%normal%</strong>, Terminate: <strong>%terminate%</strong>。';
$lang->release->pageAllSummary = 'Total releases: <strong>%total%</strong>, Normal: <strong>%normal%</strong>, Terminate: <strong>%terminate%</strong>.';
$lang->release->pageSummary = "Total releases: <strong>%s</strong>.";
$lang->release->storyTitle = 'Story Name';
+1 -1
View File
@@ -64,7 +64,7 @@ $lang->release->mailto = 'Mailto';
$lang->release->mailContent = '<p>Dear users,</p><p style = "margin-left: 30px;">The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version.</p>';
$lang->release->storyList = '<p style = "margin-left: 30px;">Story List:%s。</p>';
$lang->release->bugList = '<p style = "margin-left: 30px;">Bug List:%s。</p>';
$lang->release->pageAllSummary = 'Total releases: <strong>%total%</strong>, Normal: <strong>%normal%</strong>, Terminate: <strong>%terminate%</strong>。';
$lang->release->pageAllSummary = 'Total releases: <strong>%total%</strong>, Normal: <strong>%normal%</strong>, Terminate: <strong>%terminate%</strong>.';
$lang->release->pageSummary = "Total releases: <strong>%s</strong>.";
$lang->release->storyTitle = 'Story Name';
+1 -1
View File
@@ -64,7 +64,7 @@ $lang->release->mailto = 'Mailto';
$lang->release->mailContent = '<p>Dear users,</p><p style = "margin-left: 30px;">The following requirements and bugs you feedback have been released in the %s. Please contact your account manager to check the latest version.</p>';
$lang->release->storyList = '<p style = "margin-left: 30px;">Story List:%s。</p>';
$lang->release->bugList = '<p style = "margin-left: 30px;">Bug List:%s。</p>';
$lang->release->pageAllSummary = 'Total releases: <strong>%total%</strong>, Normal: <strong>%normal%</strong>, Terminate: <strong>%terminate%</strong>。';
$lang->release->pageAllSummary = 'Total releases: <strong>%total%</strong>, Normal: <strong>%normal%</strong>, Terminate: <strong>%terminate%</strong>.';
$lang->release->pageSummary = "Total releases: <strong>%s</strong>.";
$lang->release->storyTitle = 'Story Name';
+17 -6
View File
@@ -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.
-18
View File
@@ -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.
*
+24
View File
@@ -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();
});
}
-24
View File
@@ -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());
-13
View File
@@ -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("<span class='input-group-addon'>" + storyModule + "</span>");
$moduleIDBox.fixInputGroup();
});
loadURS();
}
/**
+49 -49
View File
@@ -51,7 +51,7 @@ $config->task->custom->batchEditFields = 'module,assignedTo,status,pri,estimat
$config->task->excludeCheckFileds = ',pri,estStartedDitto,deadlineDitto,parent,regions,lanes,vision,region,';
$config->task->datatable = new stdclass();
$config->task->datatable->defaultField = array('id', 'pri', 'name', 'status', 'assignedTo', 'finishedBy', 'estimate', 'consumed', 'left', 'progress', 'deadline', 'actions');
$config->task->datatable->defaultField = array('id', 'name', 'pri', 'assignedTo', 'status', 'finishedBy', 'deadline', 'estimate', 'consumed', 'left', 'progress', 'actions');
global $lang;
$config->task->datatable->fieldList['id']['title'] = 'idAB';
@@ -59,19 +59,10 @@ $config->task->datatable->fieldList['id']['fixed'] = 'left';
$config->task->datatable->fieldList['id']['width'] = '70';
$config->task->datatable->fieldList['id']['required'] = 'yes';
$config->task->datatable->fieldList['module']['title'] = 'idAB';
$config->task->datatable->fieldList['module']['control'] = 'select';
$config->task->datatable->fieldList['module']['dataSource'] = array('module' => 'tree', 'method' => 'getTaskOptionMenu', 'params' => '$executionID');
$config->task->datatable->fieldList['execution']['title'] = 'idAB';
$config->task->datatable->fieldList['execution']['control'] = 'hidden';
$config->task->datatable->fieldList['execution']['dataSource'] = array('module' => 'execution', 'method' => 'getPairs');
$config->task->datatable->fieldList['mode']['title'] = 'idAB';
$config->task->datatable->fieldList['mode']['control'] = 'hidden';
$config->task->datatable->fieldList['desc']['title'] = 'idAB';
$config->task->datatable->fieldList['desc']['control'] = 'textarea';
$config->task->datatable->fieldList['name']['title'] = 'name';
$config->task->datatable->fieldList['name']['fixed'] = 'left';
$config->task->datatable->fieldList['name']['width'] = 'auto';
$config->task->datatable->fieldList['name']['required'] = 'yes';
$config->task->datatable->fieldList['pri']['title'] = 'priAB';
$config->task->datatable->fieldList['pri']['fixed'] = 'left';
@@ -79,10 +70,17 @@ $config->task->datatable->fieldList['pri']['width'] = '35';
$config->task->datatable->fieldList['pri']['required'] = 'no';
$config->task->datatable->fieldList['pri']['name'] = $lang->task->pri;
$config->task->datatable->fieldList['name']['title'] = 'name';
$config->task->datatable->fieldList['name']['fixed'] = 'left';
$config->task->datatable->fieldList['name']['width'] = 'auto';
$config->task->datatable->fieldList['name']['required'] = 'yes';
$config->task->datatable->fieldList['assignedTo']['title'] = 'assignedTo';
$config->task->datatable->fieldList['assignedTo']['fixed'] = 'no';
$config->task->datatable->fieldList['assignedTo']['width'] = '100';
$config->task->datatable->fieldList['assignedTo']['required'] = 'no';
$config->task->datatable->fieldList['assignedTo']['control'] = 'select';
$config->task->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' => 'getTeamMemberPairs', 'params' => '$executionID&execution');
$config->task->datatable->fieldList['assignedDate']['title'] = 'assignedDate';
$config->task->datatable->fieldList['assignedDate']['fixed'] = 'no';
$config->task->datatable->fieldList['assignedDate']['width'] = '110';
$config->task->datatable->fieldList['assignedDate']['required'] = 'no';
$config->task->datatable->fieldList['type']['title'] = 'typeAB';
$config->task->datatable->fieldList['type']['fixed'] = 'no';
@@ -94,18 +92,17 @@ $config->task->datatable->fieldList['status']['fixed'] = 'no';
$config->task->datatable->fieldList['status']['width'] = '60';
$config->task->datatable->fieldList['status']['required'] = 'no';
$config->task->datatable->fieldList['assignedTo']['title'] = 'assignedTo';
$config->task->datatable->fieldList['assignedTo']['fixed'] = 'no';
$config->task->datatable->fieldList['assignedTo']['width'] = '100';
$config->task->datatable->fieldList['assignedTo']['required'] = 'no';
$config->task->datatable->fieldList['assignedTo']['control'] = 'select';
$config->task->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' => 'getTeamMemberPairs', 'params' => '$executionID&execution');
$config->task->datatable->fieldList['finishedBy']['title'] = 'finishedByAB';
$config->task->datatable->fieldList['finishedBy']['fixed'] = 'no';
$config->task->datatable->fieldList['finishedBy']['width'] = '80';
$config->task->datatable->fieldList['finishedBy']['required'] = 'no';
$config->task->datatable->fieldList['deadline']['title'] = 'deadlineAB';
$config->task->datatable->fieldList['deadline']['fixed'] = 'no';
$config->task->datatable->fieldList['deadline']['width'] = '70';
$config->task->datatable->fieldList['deadline']['required'] = 'no';
$config->task->datatable->fieldList['deadline']['control'] = 'date';
$config->task->datatable->fieldList['estimate']['title'] = 'estimateAB';
$config->task->datatable->fieldList['estimate']['fixed'] = 'no';
$config->task->datatable->fieldList['estimate']['width'] = '55';
@@ -128,12 +125,6 @@ $config->task->datatable->fieldList['progress']['required'] = 'no';
$config->task->datatable->fieldList['progress']['sort'] = 'no';
$config->task->datatable->fieldList['progress']['name'] = $lang->task->progress;
$config->task->datatable->fieldList['deadline']['title'] = 'deadlineAB';
$config->task->datatable->fieldList['deadline']['fixed'] = 'no';
$config->task->datatable->fieldList['deadline']['width'] = '65';
$config->task->datatable->fieldList['deadline']['required'] = 'no';
$config->task->datatable->fieldList['deadline']['control'] = 'date';
$config->task->datatable->fieldList['openedBy']['title'] = 'openedByAB';
$config->task->datatable->fieldList['openedBy']['fixed'] = 'no';
$config->task->datatable->fieldList['openedBy']['width'] = '90';
@@ -155,11 +146,6 @@ $config->task->datatable->fieldList['realStarted']['fixed'] = 'no';
$config->task->datatable->fieldList['realStarted']['width'] = '95';
$config->task->datatable->fieldList['realStarted']['required'] = 'no';
$config->task->datatable->fieldList['assignedDate']['title'] = 'assignedDate';
$config->task->datatable->fieldList['assignedDate']['fixed'] = 'no';
$config->task->datatable->fieldList['assignedDate']['width'] = '110';
$config->task->datatable->fieldList['assignedDate']['required'] = 'no';
$config->task->datatable->fieldList['finishedDate']['title'] = 'finishedDateAB';
$config->task->datatable->fieldList['finishedDate']['fixed'] = 'no';
$config->task->datatable->fieldList['finishedDate']['width'] = '105';
@@ -191,19 +177,6 @@ $config->task->datatable->fieldList['closedReason']['width'] = '120';
$config->task->datatable->fieldList['closedReason']['required'] = 'no';
$config->task->datatable->fieldList['closedReason']['dataSource'] = array('lang' => 'reasonList');
$config->task->datatable->fieldList['story']['title'] = "storyAB";
$config->task->datatable->fieldList['story']['fixed'] = 'no';
$config->task->datatable->fieldList['story']['width'] = '70';
$config->task->datatable->fieldList['story']['required'] = 'no';
$config->task->datatable->fieldList['story']['name'] = $lang->task->story;
$config->task->datatable->fieldList['story']['control'] = 'select';
$config->task->datatable->fieldList['story']['dataSource'] = array('module' => 'story', 'method' => 'getExecutionStories', 'params' => '$executionID', 'pairs' => array('id', 'title'));
$config->task->datatable->fieldList['mailto']['title'] = 'mailto';
$config->task->datatable->fieldList['mailto']['fixed'] = 'no';
$config->task->datatable->fieldList['mailto']['width'] = '100';
$config->task->datatable->fieldList['mailto']['required'] = 'no';
$config->task->datatable->fieldList['lastEditedBy']['title'] = 'lastEditedBy';
$config->task->datatable->fieldList['lastEditedBy']['fixed'] = 'no';
$config->task->datatable->fieldList['lastEditedBy']['width'] = '95';
@@ -219,6 +192,33 @@ $config->task->datatable->fieldList['activatedDate']['fixed'] = 'no';
$config->task->datatable->fieldList['activatedDate']['width'] = '90';
$config->task->datatable->fieldList['activatedDate']['required'] = 'no';
$config->task->datatable->fieldList['story']['title'] = "storyAB";
$config->task->datatable->fieldList['story']['fixed'] = 'no';
$config->task->datatable->fieldList['story']['width'] = '70';
$config->task->datatable->fieldList['story']['required'] = 'no';
$config->task->datatable->fieldList['story']['name'] = $lang->task->story;
$config->task->datatable->fieldList['story']['control'] = 'select';
$config->task->datatable->fieldList['story']['dataSource'] = array('module' => 'story', 'method' => 'getExecutionStories', 'params' => '$executionID', 'pairs' => array('id', 'title'));
$config->task->datatable->fieldList['mailto']['title'] = 'mailto';
$config->task->datatable->fieldList['mailto']['fixed'] = 'no';
$config->task->datatable->fieldList['mailto']['width'] = '100';
$config->task->datatable->fieldList['mailto']['required'] = 'no';
$config->task->datatable->fieldList['module']['title'] = 'idAB';
$config->task->datatable->fieldList['module']['control'] = 'select';
$config->task->datatable->fieldList['module']['dataSource'] = array('module' => 'tree', 'method' => 'getTaskOptionMenu', 'params' => '$executionID');
$config->task->datatable->fieldList['execution']['title'] = 'idAB';
$config->task->datatable->fieldList['execution']['control'] = 'hidden';
$config->task->datatable->fieldList['execution']['dataSource'] = array('module' => 'execution', 'method' => 'getPairs');
$config->task->datatable->fieldList['mode']['title'] = 'idAB';
$config->task->datatable->fieldList['mode']['control'] = 'hidden';
$config->task->datatable->fieldList['desc']['title'] = 'idAB';
$config->task->datatable->fieldList['desc']['control'] = 'textarea';
$config->task->datatable->fieldList['actions']['title'] = 'actions';
$config->task->datatable->fieldList['actions']['fixed'] = 'right';
$config->task->datatable->fieldList['actions']['width'] = '180';
+16 -1
View File
@@ -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. */
+1
View File
@@ -116,6 +116,7 @@ $lang->task->assignedTo = 'Zuständiger';
$lang->task->assignedToAB = 'Zuständiger';
$lang->task->assignedDate = 'Zugewisen am';
$lang->task->openedBy = 'Ersteller';
$lang->task->openedByAB = 'Created';
$lang->task->openedDate = 'Erstellt am';
$lang->task->openedDateAB = 'Hinzufügen';
$lang->task->finishedBy = 'Abgeschlossen';
+1
View File
@@ -116,6 +116,7 @@ $lang->task->assignedTo = 'AssignTo';
$lang->task->assignedToAB = 'AssignedTo';
$lang->task->assignedDate = 'AssignedDate';
$lang->task->openedBy = 'CreatedBy';
$lang->task->openedByAB = 'Created';
$lang->task->openedDate = 'CreatedDate';
$lang->task->openedDateAB = 'CreatedOn';
$lang->task->finishedBy = 'FinishedBy';
+1
View File
@@ -116,6 +116,7 @@ $lang->task->assignedTo = 'Affectée à';
$lang->task->assignedToAB = 'Assigné à';
$lang->task->assignedDate = 'Date Assign.';
$lang->task->openedBy = 'Créé par';
$lang->task->openedByAB = 'Créer';
$lang->task->openedDate = 'Date création';
$lang->task->openedDateAB = 'Date création';
$lang->task->finishedBy = 'Terminé par';
+1
View File
@@ -116,6 +116,7 @@ $lang->task->assignedTo = '指派给';
$lang->task->assignedToAB = '指派给';
$lang->task->assignedDate = '指派日期';
$lang->task->openedBy = '由谁创建';
$lang->task->openedByAB = '创建者';
$lang->task->openedDate = '创建日期';
$lang->task->openedDateAB = '创建';
$lang->task->finishedBy = '由谁完成';
+1 -1
View File
@@ -3777,7 +3777,7 @@ class taskModel extends model
echo round($task->progress, 2) . '%';
break;
case 'deadline':
if(substr($task->deadline, 0, 4) > 0) echo substr($task->deadline, 5, 6);
if(substr($task->deadline, 0, 4) > 0) echo '<span>' . substr($task->deadline, 5, 6) . '</span>';
break;
case 'openedBy':
echo zget($users, $task->openedBy);
+1 -1
View File
@@ -72,7 +72,7 @@
<td><?php echo html::select("branch[{$case->id}]", $caseBranches, $caseBranch, "class='form-control' onchange='updateModules($productID, this.value, $case->id)'")?></td>
<?php endif;?>
<td><span class='label-pri <?php echo 'label-pri-' . $case->pri;?>' title='<?php echo zget($lang->testcase->priList, $case->pri, $case->pri);?>'><?php echo $case->pri == '0' ? '' : zget($lang->testcase->priList, $case->pri, $case->pri);?></span></td>
<td class='text-left nobr'><?php if(!common::printLink('testcase', 'view', "caseID=$case->id", $case->title)) echo $case->title;?></td>
<td class='text-left nobr'><?php if(!common::printLink('testcase', 'view', "caseID=$case->id", $case->title, '', 'class="iframe" data-width="80%"', true, true)) echo $case->title;?></td>
<?php $libModule = zget($libModules, $case->module, '');?>
<td class='text-left' title='<?php echo $libModule?>'><?php echo $libModule;?></td>
<td class='text-left' data-module='<?php echo $case->module?>' style='overflow:visible'>
+12
View File
@@ -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();
}
+2 -1
View File
@@ -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 = '<div>Sie haben keine Module</div><div>Jetzt verwalten</div>';
$lang->testsuite->noTestsuite = 'Keine Suite. ';
$lang->testsuite->summary = "Total suites: <strong>%total%</strong>, public: <strong>%public%</strong>, private: <strong>%private%</strong>.";
$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';
+2 -1
View File
@@ -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 = '<div>You have no modules.</div><div>Manage it now.</div>';
$lang->testsuite->noTestsuite = 'No suites yet.';
$lang->testsuite->summary = "Total suites: <strong>%total%</strong>, public: <strong>%public%</strong>, private: <strong>%private%</strong>.";
$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';
+2 -1
View File
@@ -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 = '<div>Vous avez aucun Module.</div><div>Gérer les Modules maintenant.</div>';
$lang->testsuite->noTestsuite = 'Aucun Cahier de Recette.';
$lang->testsuite->summary = "Total suites: <strong>%total%</strong>, public: <strong>%public%</strong>, private: <strong>%private%</strong>.";
$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';
+2 -1
View File
@@ -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 = '<div>Chưa có Module.</div><div>Quản lý ngay.</div>';
$lang->testsuite->noTestsuite = 'Không có suites nào';
$lang->testsuite->summary = "Tổng <strong>%total%</strong> suites nào, Công khai: <strong>%public%</strong>, Riêng tư: <strong>%private%</strong>.";
$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';
+2 -1
View File
@@ -48,6 +48,7 @@ $lang->testsuite->confirmUnlinkCase = '您确认要移除该用例吗?';
$lang->testsuite->noticeNone = '您还没有创建套件';
$lang->testsuite->noModule = '<div>您现在还没有模块信息</div><div>请维护用例库模块</div>';
$lang->testsuite->noTestsuite = '暂时没有套件。';
$lang->testsuite->summary = "本页共 <strong>%total%</strong> 个套件,公开 <strong>%public%</strong> 个,私有 <strong>%private%</strong> 个。";
$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'] = '套件列表';
+1
View File
@@ -47,6 +47,7 @@ $lang->testsuite->confirmUnlinkCase = '您確認要移除該用例嗎?';
$lang->testsuite->noticeNone = '您還沒有創建套件';
$lang->testsuite->noModule = '<div>您現在還沒有模組信息</div><div>請維護用例庫模組</div>';
$lang->testsuite->noTestsuite = '暫時沒有套件。';
$lang->testsuite->summary = "本頁共 <strong>%total%</strong> 個套件,公開 <strong>%public%</strong> 個,私有 <strong>%private%</strong> 個。";
$lang->testsuite->lblCases = '用例列表';
$lang->testsuite->lblUnlinkCase = '移除用例';
+4 -1
View File
@@ -82,7 +82,10 @@
<?php endforeach;?>
</tbody>
</table>
<div class='table-footer'><?php $pager->show('right', 'pagerjs');?></div>
<div class='table-footer'>
<div class='table-statistic'><?php echo $summary;?></div>
<?php $pager->show('right', 'pagerjs');?>
</div>
<?php endif;?>
</div>
<?php include '../../common/view/footer.html.php';?>
+7 -6
View File
@@ -60,13 +60,13 @@ $status = $this->session->testTaskVersionStatus;
<tr>
<th class='c-id text-left'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
<th class='c-name text-left'> <?php common::printOrderLink('name', $orderBy, $vars, $lang->testtask->name);?></th>
<th class='text-left'> <?php common::printOrderLink('build', $orderBy, $vars, $lang->testtask->build);?></th>
<th class='text-left'> <?php common::printOrderLink('product', $orderBy, $vars, $lang->testtask->product);?></th>
<th class='text-left'> <?php common::printOrderLink('execution', $orderBy, $vars, $lang->testtask->execution);?></th>
<th class='text-left'> <?php common::printOrderLink('build', $orderBy, $vars, $lang->testtask->build);?></th>
<th class='c-status text-left'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-user text-left'> <?php common::printOrderLink('owner', $orderBy, $vars, $lang->testtask->owner);?></th>
<th class='c-date text-left'> <?php common::printOrderLink('begin', $orderBy, $vars, $lang->testtask->begin);?></th>
<th class='c-date text-left'> <?php common::printOrderLink('end', $orderBy, $vars, $lang->testtask->end);?></th>
<th class='c-status text-left'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<?php
$extendFields = $this->testtask->getFlowExtendFields();
foreach($extendFields as $extendField) echo "<th>{$extendField->name}</th>";
@@ -79,18 +79,19 @@ $status = $this->session->testTaskVersionStatus;
<tr class='text-left'>
<td><?php echo html::a(inlink('cases', "taskID=$task->id"), sprintf('%03d', $task->id));?></td>
<td class='c-name' title="<?php echo $task->name?>"><?php echo html::a(inlink('cases', "taskID=$task->id"), $task->name);?></td>
<td class='c-name' title="<?php echo $task->buildName?>"><?php echo ($task->build == 'trunk' || empty($task->buildName)) ? $lang->trunk : html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName, '', "data-group=execution");?></td>
<td class='c-name' title="<?php echo $task->productName?>"><?php echo $task->productName?></td>
<td class='c-name' title="<?php echo $task->executionName?>"><?php echo $task->executionName?></td>
<td class='c-name' title="<?php echo $task->buildName?>"><?php echo ($task->build == 'trunk' || empty($task->buildName)) ? $lang->trunk : html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName, '', "data-group=execution");?></td>
<td title="<?php echo zget($users, $task->owner);?>"><?php echo zget($users, $task->owner);?></td>
<td><?php echo $task->begin?></td>
<td><?php echo $task->end?></td>
<?php $status = $this->processStatus('testtask', $task);?>
<td title='<?php echo $status;?>'>
<span class='status-task status-<?php echo $task->status?>'>
<?php echo $status;?>
</span>
</td>
<td title="<?php echo zget($users, $task->owner);?>"><?php echo zget($users, $task->owner);?></td>
<td><?php echo $task->begin?></td>
<td><?php echo $task->end?></td>
<?php foreach($extendFields as $extendField) echo "<td>" . $this->loadModel('flow')->getFieldValue($extendField, $task) . "</td>";?>
<td class='c-actions'>
<?php echo $this->testtask->buildOperateMenu($task, 'browse');?>
+3 -1
View File
@@ -1,2 +1,4 @@
td.delayed {color: #fff; background: #e84e0f !important;}
.hours {white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: right;}
.c-execution {width: 180px;}
.c-hour, .c-status {width: 70px;}
.c-deadline {width: 100px;}
+1 -1
View File
@@ -55,7 +55,7 @@
<td class='text-left nobr'><?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->title);?></td>
<td><span class='<?php echo 'severity' . zget($lang->bug->severityList, $bug->severity, $bug->severity)?>'><?php echo zget($lang->bug->severityList, $bug->severity, $bug->severity)?></span></td>
<td><span class='<?php echo 'pri' . zget($lang->bug->priList, $bug->pri, $bug->pri)?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></span></td>
<td><?php echo $lang->bug->typeList[$bug->type]?></td>
<td><?php echo zget($lang->bug->typeList, $bug->type, '');?></td>
<td><?php echo zget($users, $bug->openedBy);?></td>
<td><?php echo zget($users, $bug->resolvedBy);?></td>
<td><?php echo zget($lang->bug->resolutionList, $bug->resolution);?></td>
+11 -11
View File
@@ -41,15 +41,15 @@
<?php $vars = "userID={$user->id}&type=$type&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}"; ?>
<thead>
<tr class='colhead'>
<th class='w-id'><?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
<th class='w-pri' title='<?php echo $lang->pri;?>'><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th><?php common::printOrderLink('execution', $orderBy, $vars, $lang->task->execution);?></th>
<th class='c-id'><?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
<th class='c-pri' title='<?php echo $lang->pri;?>'><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='c-execution'><?php common::printOrderLink('execution', $orderBy, $vars, $lang->task->execution);?></th>
<th><?php common::printOrderLink('name', $orderBy, $vars, $lang->task->name);?></th>
<th class='w-70px hours'><?php common::printOrderLink('estimate', $orderBy, $vars, $lang->task->estimateAB);?></th>
<th class='w-70px hours'><?php common::printOrderLink('consumed', $orderBy, $vars, $lang->task->consumedAB);?></th>
<th class='w-hour hours'><?php common::printOrderLink('left', $orderBy, $vars, $lang->task->leftAB);?></th>
<th class='w-date'><?php common::printOrderLink('deadline', $orderBy, $vars, $lang->task->deadlineAB);?></th>
<th class='w-70px'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-hour hours'><?php common::printOrderLink('estimate', $orderBy, $vars, $lang->task->estimateAB);?></th>
<th class='c-hour hours'><?php common::printOrderLink('consumed', $orderBy, $vars, $lang->task->consumedAB);?></th>
<th class='c-hour hours'><?php common::printOrderLink('left', $orderBy, $vars, $lang->task->leftAB);?></th>
<th class='c-deadline text-center'><?php common::printOrderLink('deadline', $orderBy, $vars, $lang->task->deadlineAB);?></th>
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
</tr>
</thead>
<tbody>
@@ -57,7 +57,7 @@
<tr class='text-left'>
<td><?php echo html::a($this->createLink('task', 'view', "taskID=$task->id"), sprintf('%03d', $task->id));?></td>
<td><span class='label-pri label-pri-<?php echo $task->pri;?>'><?php echo zget($lang->task->priList, $task->pri, $task->pri);?></span></td>
<td class='text-left nobr'><?php echo html::a($this->createLink('execution', 'browse', "executionID=$task->executionID"), $task->executionName);?></td>
<td class='text-left nobr' title="<?php echo $task->executionName?>"><?php echo html::a($this->createLink('execution', 'browse', "executionID=$task->executionID"), $task->executionName);?></td>
<td class='text-left nobr'>
<?php if(!empty($task->team)) echo '<span class="label label-badge label-light">' . $this->lang->task->multipleAB . '</span> ';?>
<?php if($task->parent > 0) echo '<span class="label label-badge label-light">' . $this->lang->task->childrenAB . '</span> ';?>
@@ -65,12 +65,12 @@
$onlybody = $task->executionType == 'kanban' ? true : '';
$class = $task->executionType == 'kanban' ? 'iframe' : '';
?>
<?php 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'");?>
<?php 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' title='$task->name'");?>
</td>
<td class='hours' title="<?php echo $task->estimate . ' ' . $lang->execution->workHour;?>"><?php echo $task->estimate . $lang->execution->workHourUnit;?></td>
<td class='hours' title="<?php echo $task->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $task->consumed . $lang->execution->workHourUnit;?></td>
<td class='hours' title="<?php echo $task->left . ' ' . $lang->execution->workHour;?>"><?php echo $task->left . $lang->execution->workHourUnit;?></td>
<td class=<?php if(isset($task->delay)) echo 'delayed';?>><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
<td class="deadline text-center <?php if(isset($task->delay)) echo 'delayed';?>"><?php if(substr($task->deadline, 0, 4) > 0) echo '<span>' . $task->deadline . '</span>';?></td>
<td class='<?php echo $task->status;?>'><?php echo $this->processStatus('task', $task);?></td>
</tr>
<?php endforeach;?>
+13 -1
View File
@@ -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();
Regular → Executable
+3 -1
View File
@@ -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'); //检查用户权限,返回布尔值
Regular → Executable
+44 -1
View File
@@ -10,8 +10,51 @@ title=测试 repoModel->create();
cid=1
pid=1
正常创建gitlab版本库 >> 1
当已有版本库时提示已有记录 >> 『名称』已经有『jktest』这条记录了。如果您确定该记录已删除,请到后台-系统-数据-回收站还原。
当数据类型为Gitea时提示写版本号 >> 因为安全原因,需要检测客户端版本,请将版本号写入文件
*/
$repo = new repoTest();
r($repo->createTest()) && p() && e();
$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();
+3
View File
@@ -202,6 +202,9 @@ switch($argv[1])
case 'webhook':
ztfRun('model/webhook');
break;
case 'repo':
ztfRun('model/repo');
break;
default:
ztfExtract($argv[1]);
+2 -1
View File
@@ -139,12 +139,13 @@ body.xxc-embed.m-productplan-view,body.xxc-embed.m-bug-browse,body.xxc-embed.m-p
#toggleFold > .icon {display: inline-block; color: #838a9d; font-size: 16px; transition: transform .2s; transform: rotate(-90deg);}
#toggleFold.collapsed > .icon {transform: rotate(90deg);}
#executionTableList .c-name .label-danger {position: absolute; top: 8px; right: 0px;}
#programTableList .c-name .label-danger {position: absolute; right: 4px; padding: 2px 4px;}
#projectForm .c-name,
#executionTableList .c-name,
#programTableList .c-name {padding-right: 64px;}
td.delayed > span {display: inline-block; height: 20px; line-height: 18px; background: #FFEBEB; color: #FB2B2B; border-radius: 20px; padding: 2px 8px;}
.table .table-children,
.table .is-nest-child {background: #F8F8F8;}
.table tbody td.has-child .icon-angle-right {color: #838a9d;}