diff --git a/module/testreport/control.php b/module/testreport/control.php index 6a8eaac2a0..ef44a8e118 100644 --- a/module/testreport/control.php +++ b/module/testreport/control.php @@ -31,6 +31,7 @@ class testreport extends control $this->loadModel('testcase'); $this->loadModel('testtask'); $this->loadModel('user'); + $this->app->loadLang('report'); } /** @@ -190,15 +191,9 @@ class testreport extends control $this->view->cases = $cases; $this->view->caseSummary = $this->testreport->getResultSummary($tasks, $cases); - $this->view->legacyBugs = $bugInfo['legacyBugs']; - $this->view->bugSeverityGroups = $bugInfo['bugSeverityGroups']; - $this->view->bugStatusGroups = $bugInfo['bugStatusGroups']; - $this->view->bugOpenedByGroups = $bugInfo['bugOpenedByGroups']; - $this->view->bugResolvedByGroups = $bugInfo['bugResolvedByGroups']; - $this->view->bugResolutionGroups = $bugInfo['bugResolutionGroups']; - $this->view->bugModuleGroups = $bugInfo['bugModuleGroups']; - $this->view->bugConfirmedRate = $bugInfo['bugConfirmedRate']; - $this->view->bugCreateByCaseRate = $bugInfo['bugCreateByCaseRate']; + $this->view->legacyBugs = $bugInfo['legacyBugs']; + unset($bugInfo['legacyBugs']); + $this->view->bugInfo = $bugInfo; $this->view->objectID = $objectID; $this->view->objectType = $objectType; @@ -212,22 +207,22 @@ class testreport extends control * @access public * @return void */ - public function view($reportID) + public function view($reportID, $from = 'product') { $report = $this->testreport->getById($reportID); $project = $this->project->getById($report->project); - if($report->objectType == 'testtask') + if($from == 'product' and is_numeric($report->product)) { - $task = $this->testtask->getById($report->objectID); - $productID = $this->commonAction($task->product, 'product'); - if($productID != $task->product) die('deny access'); + $product = $this->product->getById($report->product); + $productID = $this->commonAction($report->product, 'product'); + if($productID != $report->product) die('deny access'); - $browseLink = inlink('browse', "objectID=$productID&objectType=product&extra={$report->objectID}"); - $this->view->position[] = html::a($browseLink, $task->name); + $browseLink = inlink('browse', "objectID=$productID&objectType=product"); + $this->view->position[] = html::a($browseLink, $product->name); } - elseif($report->objectType == 'project') + else { - $projectID = $this->commonAction($report->objectID, 'project'); + $projectID = $this->commonAction($report->project, 'project'); if($projectID != $report->objectID) die('deny access'); $browseLink = inlink('browse', "objectID=$projectID&objectType=project"); @@ -268,15 +263,9 @@ class testreport extends control $this->view->storySummary = $this->product->summary($stories); $this->view->caseSummary = $this->testreport->getResultSummary($tasks, $cases); - $this->view->legacyBugs = $bugInfo['legacyBugs']; - $this->view->bugSeverityGroups = $bugInfo['bugSeverityGroups']; - $this->view->bugStatusGroups = $bugInfo['bugStatusGroups']; - $this->view->bugOpenedByGroups = $bugInfo['bugOpenedByGroups']; - $this->view->bugResolvedByGroups = $bugInfo['bugResolvedByGroups']; - $this->view->bugResolutionGroups = $bugInfo['bugResolutionGroups']; - $this->view->bugModuleGroups = $bugInfo['bugModuleGroups']; - $this->view->bugConfirmedRate = $bugInfo['bugConfirmedRate']; - $this->view->bugCreateByCaseRate = $bugInfo['bugCreateByCaseRate']; + $this->view->legacyBugs = $bugInfo['legacyBugs']; + unset($bugInfo['legacyBugs']); + $this->view->bugInfo = $bugInfo; $this->display(); } @@ -318,23 +307,9 @@ class testreport extends control $this->session->set('notHead', true); $output = $this->fetch('testreport', 'view', array('reportID' =>$reportID)); $this->session->set('notHead', false); - $style = << -body{font-size:14px}h1{font-size:16px;text-align:center} -.w-100px{width:100px}.w-p50{width:50%}.w-id{width:70px}.w-pri{width:40px}.w-user{width:80px}.w-80px{width:80px}.w-70px{width:70px}.w-hour[width:57px].w-status{width:60px}.w-130px{width:130px;}.w-type{width:80px}.w-150px{width:150px;} -.text-center{text-align:center}.text-top{vertical-align:top;}.text-left{text-align:left}.text-right{text-align:right;} -.table{width:100%;margin-bottom:5px;border:1px solid #ddd;border-collapse:collapse;border-spacing:0;} -.table caption{padding:8px 20px;border:1px solid #DDD;border-bottom:0;background:#fafafa;text-align:left}.table td, .table th{border-bottom:1px solid #ddd;padding:5px;} -.table>thead>tr>th{text-align:center;vertical-align:middle;background-color:#f1f1f1;border-bottom:1px solid #ddd;} -.table-form{border: none;}.table-form>tbody>tr>th,.table-form>tbody>tr>td{border-bottom:none;}.table-form>tbody>tr>th{text-align:right;} -.input-group{width:100%;}.input-group{position:relative;display:table;border-collapse:separate;} -.input-group-addon:first-child {border-right:0;} -.input-group-addon{background-color:#f5f5f5;padding:6px 12px;font-size:13px;font-weight:400;line-height:1;color:#222;text-align:center;background-color:#e5e5e5;border:1px solid #ccc;border-radius:0;display:table-cell;} -.input-group-addon:first-child{border-top-right-radius:0;border-bottom-right-radius:0;} -fieldset{margin-bottom:15px;border:1px solid #e5e5e5;padding:10px 15px 15px;}fieldset>legend{width:auto;margin:0 0 0 -5px;font-weight:bold;border-bottom:none;padding:0 5px;display:block;} - -EOD; - $content = "\n\n\n\n{$report->title}\n$style\n\n

{$report->title}

\n$output"; + $css = ''; + $js = ''; + $content = "\n\n\n\n{$report->title}\n$css\n$js\n\n\n

{$report->title}

\n$output"; $this->fetch('file', 'sendDownHeader', array('fileName' => $data->fileName, 'fileType' => $data->fileType, 'content' =>$content)); } $this->view->customExport = false; diff --git a/module/testreport/css/common.css b/module/testreport/css/common.css new file mode 100644 index 0000000000..72b1838290 --- /dev/null +++ b/module/testreport/css/common.css @@ -0,0 +1 @@ +.none-data{padding:8px !important;} diff --git a/module/testreport/css/export.css b/module/testreport/css/export.css new file mode 100644 index 0000000000..6fe3f2289d --- /dev/null +++ b/module/testreport/css/export.css @@ -0,0 +1,13 @@ +body{font-size:14px}h1{font-size:16px;text-align:center} +.w-100px{width:100px}.w-p50{width:50%}.w-p60{width:60%}.w-id{width:70px}.w-pri{width:40px}.w-user{width:80px}.w-80px{width:80px}.w-70px{width:70px}.w-hour[width:57px].w-status{width:60px}.w-130px{width:130px;}.w-type{width:80px}.w-150px{width:150px;} +.text-center{text-align:center}.text-top{vertical-align:top;}.text-left{text-align:left}.text-right{text-align:right;} +.table{width:100%;margin-bottom:5px;border:1px solid #ddd;border-collapse:collapse;border-spacing:0;} +.table caption{padding:8px 20px;border:1px solid #DDD;border-bottom:0;background:#fafafa;text-align:left}.table td, .table th{border-bottom:1px solid #ddd;padding:5px;} +.table>thead>tr>th{text-align:center;vertical-align:middle;background-color:#f1f1f1;border-bottom:1px solid #ddd;} +.main .nav-tabs{padding-left: 20px;padding-top:10px;margin-bottom:0;list-style:none;} +.main .nav-tabs:after{clear:both;display:table;content:" ";} +.nav-tabs > li{float:left;margin-bottom:-1px;position:relative;display:block;} +.nav-tabs > li > a{padding:5px 10px;color:#333;line-height:20px;max-height:32px;margin-right:2px;border:1px solid transparent;border-radius:0;position:relative;display:block;text-decoration:none;outline:none;} +.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus{color:#333;font-weight:bold;line-height: 20px;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;} +.tab-pane{display:none} +.tab-pane.active{display:block} diff --git a/module/testreport/css/view.css b/module/testreport/css/view.css new file mode 100644 index 0000000000..9306856b3a --- /dev/null +++ b/module/testreport/css/view.css @@ -0,0 +1,5 @@ +.main{padding:0px !important;} +.main .nav-tabs{padding-left:20px; padding-top:10px;} +.main .tab-content{border:0px; padding:0px;} +.tab-content #builds, .tab-content #cases,.tab-content #stories,.tab-content #bugs,.tab-content #legacyBugs{border:0px;} +.tab-content #builds tr:last-child td, .tab-content #cases tr:last-child td,.tab-content #stories tr:last-child td,.tab-content #bugs tr:last-child td,.tab-content #legacyBugs tr:last-child td{border-bottom:0px;} diff --git a/module/testreport/js/create.js b/module/testreport/js/create.js new file mode 100644 index 0000000000..4c34ff1682 --- /dev/null +++ b/module/testreport/js/create.js @@ -0,0 +1,16 @@ +$(function() +{ + var resizeChartTable = function() + { + $('.table-wrapper').each(function() + { + var $this = $(this); + $this.css('max-height', $this.closest('.table').find('.chart-wrapper').outerHeight()); + }); + }; + resizeChartTable(); + fixedTableHead('.table-wrapper'); + + $('.tab-pane').removeClass('active'); + $('.tab-pane:first').addClass('active'); +}); diff --git a/module/testreport/js/export.js b/module/testreport/js/export.js new file mode 100644 index 0000000000..559f3952cf --- /dev/null +++ b/module/testreport/js/export.js @@ -0,0 +1,33 @@ +function tab() +{ + tabContent = new Array(); + var divTags=document.getElementsByTagName("div"); + for(var divKey in divTags) + { + if(typeof(divTags[divKey]) == 'object' && divTags[divKey].getAttribute('class').indexOf('tab-pane') >= 0) + { + tabContent.push(divTags[divKey]); + divTags[divKey].setAttribute('class', 'tab-pane'); + } + } + tabContent[0].setAttribute('class', 'tab-pane active'); + + var aTags=document.getElementsByTagName("a"); + for(var i = 0;itestreport->report = '总结'; $lang->testreport->legacyBugs = '遗留的Bug'; $lang->testreport->createdDate = '创建时间'; $lang->testreport->objectID = '所属对象'; +$lang->testreport->profile = '概况'; $lang->testreport->value = '值'; $lang->testreport->none = '无'; $lang->testreport->all = '所有报告'; $lang->testreport->legendBasic = '基本信息'; -$lang->testreport->legendStoryAndBug = '测试的需求和Bug'; -$lang->testreport->legendBuild = '版本信息'; -$lang->testreport->legendCase = '执行的用例的信息'; -$lang->testreport->legendBug = '缺陷信息'; +$lang->testreport->legendStoryAndBug = '测试范围'; +$lang->testreport->legendBuild = '测试轮次'; +$lang->testreport->legendCase = '执行的用例'; +$lang->testreport->legendLegacyBugs = '遗留的Bug'; +$lang->testreport->legendReport = '报表'; +$lang->testreport->legendMore = '更多功能'; $lang->testreport->bugSeverityGroups = '产生Bug严重级别分布'; $lang->testreport->bugStatusGroups = '产生Bug状态分布'; @@ -39,5 +42,6 @@ $lang->testreport->legacyBugs = '遗留的Bug'; $lang->testreport->bugConfirmedRate = '有效Bug率 (确认的Bug / 测试创建的Bug)'; $lang->testreport->bugCreateByCaseRate = '用例发现Bug率 (用例创建的Bug / 时间区间中新增的Bug)'; -$lang->testreport->caseSummary = '共有%s个用例,共执行%s个用例,产生了%s个结果,失败的用例有%s个'; +$lang->testreport->caseSummary = '共有%s个用例,共执行%s个用例,产生了%s个结果,失败的用例有%s个。'; +$lang->testreport->bugSummary = '共产生%s个Bug,有效Bug率(确认的Bug / 产生的Bug):%s,用例发现Bug率(用例创建的Bug / 时间区间中新增的Bug):%s'; $lang->testreport->confirmDelete = '是否删除该报告?'; diff --git a/module/testreport/model.php b/module/testreport/model.php index 852b7515a9..ff543afba8 100644 --- a/module/testreport/model.php +++ b/module/testreport/model.php @@ -93,7 +93,7 @@ class testreportModel extends model return $this->dao->select('*')->from(TABLE_TESTREPORT)->where('deleted')->eq(0) ->beginIF($objectType == 'project')->andWhere('objectID')->eq($objectID)->andWhere('objectType')->eq('project')->fi() ->beginIF($objectType == 'product' and $extra)->andWhere('objectID')->eq((int)$extra)->andWhere('objectType')->eq('testtask')->fi() - ->beginIF($objectType == 'product' and empty($extra))->andWhere("CONCAT(',', product, ',') like '%,$objectID,%'")->fi() + ->beginIF($objectType == 'product' and empty($extra))->andWhere('product')->eq($objectID)->fi() ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); @@ -136,12 +136,13 @@ class testreportModel extends model if($bug->case) $byCaseNum ++; } $bugInfo['legacyBugs'] = $legacyBugs; + $bugInfo['countBugByTask'] = count($bugsByTask); $bugInfo['bugSeverityGroups'] = $severityGroups; $bugInfo['bugStatusGroups'] = $statusGroups; - $bugInfo['bugOpenedByGroups'] = $openedByGroups; - $bugInfo['bugResolvedByGroups'] = $resolvedByGroups; $bugInfo['bugResolutionGroups'] = $resolutionGroups; + $bugInfo['bugOpenedByGroups'] = $openedByGroups; $bugInfo['bugModuleGroups'] = $moduleGroups; + $bugInfo['bugResolvedByGroups'] = $resolvedByGroups; $bugInfo['bugConfirmedRate'] = round($confirmedNum / count($bugsByTask) * 100, 2); $bugInfo['bugCreateByCaseRate'] = empty($byCaseNum) ? 0 : round($byCaseNum / count($newBugs) * 100, 2); return $bugInfo; diff --git a/module/testreport/view/blockbuginfo.html.php b/module/testreport/view/blockbuginfo.html.php deleted file mode 100644 index 31d3213673..0000000000 --- a/module/testreport/view/blockbuginfo.html.php +++ /dev/null @@ -1,109 +0,0 @@ - - testreport->bugInfo?> - -
- testreport->bugConfirmedRate?> - - testreport->bugCreateByCaseRate?> - -
- - - - - - - - - - - -
- - - - - - - bug->severityList as $severityKey => $severityValue):?> - - - - - -
testreport->bugSeverityGroups?>
bug->severity?>testreport->value?>
-
- - - - - - - bug->statusList as $statusKey => $statusValue):?> - - - - - - -
testreport->bugStatusGroups?>
bug->status?>testreport->value?>
-
- - - - - - - bug->resolutionList as $resolutionKey => $resolutionValue):?> - - - - - -
testreport->bugResolutionGroups?>
bug->resolution?>testreport->value?>
-
- - - - - - - $num):?> - - - - - -
testreport->bugOpenedByGroups?>
bug->openedBy?>testreport->value?>
-
- - - - - - - - $num):?> - - - - - -
testreport->bugModuleGroups?>
bug->module?>testreport->value?>
-
- - - - - - - $num):?> - - - - - -
testreport->bugResolvedByGroups?>
bug->resolvedBy?>testreport->value?>
-
- - diff --git a/module/testreport/view/blockbugreport.html.php b/module/testreport/view/blockbugreport.html.php new file mode 100644 index 0000000000..e3b94b7980 --- /dev/null +++ b/module/testreport/view/blockbugreport.html.php @@ -0,0 +1,65 @@ + + + $infoValue):?> + ';?> + + + ';?> + +
+ + + + + + + + + + + +
testreport->$infoKey?>
testreport->none;?>
+
+
+ + + + + +
+
+
+
+ + + + + + + + + bug->severityList; + if($infoKey == 'bugStatusGroups') $list = $lang->bug->statusList; + if($infoKey == 'bugResolutionGroups') $list = $lang->bug->resolutionList; + ?> + $listValue):?> + + + + + + + + +
report->item;?>report->value;?>report->percent;?>
+
+
+
diff --git a/module/testreport/view/blockbugs.html.php b/module/testreport/view/blockbugs.html.php index e3c75c13f0..67925c47ea 100644 --- a/module/testreport/view/blockbugs.html.php +++ b/module/testreport/view/blockbugs.html.php @@ -1,35 +1,30 @@ - - testreport->bugs?> - - - - - - - - - - - - - - - - - - - - - - - - - - - -
idAB;?> priAB;?> bug->title;?> openedByAB;?>bug->resolvedBy;?>bug->resolvedDate;?> statusAB;?>
id . html::hidden('bugs[]', $bug->id)?>bug->priList, $bug->pri);?>title?>openedBy);?>resolvedBy);?>resolvedDate != '0000-00-00 00:00:00') echo substr($bug->resolvedDate, 2);?>bug->statusList, $bug->status);?>
- - testreport->none;?> - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
idAB;?> priAB;?> bug->title;?> openedByAB;?>bug->resolvedBy;?>bug->resolvedDate;?> statusAB;?>
id . html::hidden('bugs[]', $bug->id)?>bug->priList, $bug->pri);?>title?>openedBy);?>resolvedBy);?>resolvedDate != '0000-00-00 00:00:00') echo substr($bug->resolvedDate, 2);?>bug->statusList, $bug->status);?>
testreport->none;?>
diff --git a/module/testreport/view/blockbuilds.html.php b/module/testreport/view/blockbuilds.html.php index ec7051ad3e..17ec7c063a 100644 --- a/module/testreport/view/blockbuilds.html.php +++ b/module/testreport/view/blockbuilds.html.php @@ -1,4 +1,3 @@ - @@ -8,6 +7,7 @@ + @@ -18,7 +18,7 @@ + + +
build->date;?>
- - - diff --git a/module/testreport/view/blockcases.html.php b/module/testreport/view/blockcases.html.php index 1ceb5b1bb5..881616253f 100644 --- a/module/testreport/view/blockcases.html.php +++ b/module/testreport/view/blockcases.html.php @@ -1,4 +1,3 @@ - @@ -13,6 +12,7 @@ + @@ -28,8 +28,7 @@ - + + +
statusAB;?>
testreport->none;?>
- -testreport->none;?> - diff --git a/module/testreport/view/blocklegacybugs.html.php b/module/testreport/view/blocklegacybugs.html.php index bc9fa651aa..523a4dfd17 100644 --- a/module/testreport/view/blocklegacybugs.html.php +++ b/module/testreport/view/blocklegacybugs.html.php @@ -1,35 +1,30 @@ - - testreport->legacyBugs?> - - - - - - - - - - - - - - - - - - - - - - - - - - - -
idAB;?> priAB;?> bug->title;?> openedByAB;?>bug->resolvedBy;?>bug->resolvedDate;?> statusAB;?>
id?>bug->priList, $bug->pri);?>title?>openedBy);?>resolvedBy);?>resolvedDate != '0000-00-00 00:00:00') echo substr($bug->resolvedDate, 2);?>bug->statusList, $bug->status);?>
- - testreport->none;?> - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
idAB;?> priAB;?> bug->title;?> openedByAB;?>bug->resolvedBy;?>bug->resolvedDate;?> statusAB;?>
id?>bug->priList, $bug->pri);?>title?>openedBy);?>resolvedBy);?>resolvedDate != '0000-00-00 00:00:00') echo substr($bug->resolvedDate, 2);?>bug->statusList, $bug->status);?>
testreport->none;?>
diff --git a/module/testreport/view/blockstories.html.php b/module/testreport/view/blockstories.html.php index afb7b2fa51..1eb2afe1d9 100644 --- a/module/testreport/view/blockstories.html.php +++ b/module/testreport/view/blockstories.html.php @@ -1,38 +1,32 @@ - - testreport->stories?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
idAB;?> priAB;?> story->title;?>openedByAB;?>assignedToAB;?>story->estimateAB;?>statusAB;?>story->stageAB;?>
id . html::hidden('stories[]', $story->id)?>story->priList, $story->pri);?>title?>openedBy);?>assignedTo);?>estimate?>story->statusList, $story->status);?>story->stageList, $story->stage);?>
- - testreport->none;?> - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
idAB;?> priAB;?> story->title;?>openedByAB;?>assignedToAB;?>story->estimateAB;?>statusAB;?>story->stageAB;?>
id . html::hidden('stories[]', $story->id)?>story->priList, $story->pri);?>title?>openedBy);?>assignedTo);?>estimate?>story->statusList, $story->status);?>story->stageList, $story->stage);?>
testreport->none;?>
diff --git a/module/testreport/view/browse.html.php b/module/testreport/view/browse.html.php index 7611fd2e36..83cc25c448 100644 --- a/module/testreport/view/browse.html.php +++ b/module/testreport/view/browse.html.php @@ -34,7 +34,7 @@ id?> - id"), $report->title)?> + id&from=$objectType"), $report->title)?> createdBy);?> createdDate, 2);?> +
@@ -35,47 +36,56 @@
testreport->legendBasic?> - - - - - - - - - - - - - - - - - - +
testreport->startEnd?> -
- - ~ - - id) . html::hidden('tasks', $tasks); - echo html::hidden('objectID', $objectID) . html::hidden('objectType', $objectType); - ?> -
-
-
- testreport->owner?> - -
-
testreport->member?>
testreport->title?>
testreport->goal?>desc?>
+ + + + + + + + + + + + + + + + + + + + +
testreport->startEnd?> +
+ + ~ + + id) . html::hidden('tasks', $tasks); + echo html::hidden('objectID', $objectID) . html::hidden('objectType', $objectType); + ?> +
+
+
+ testreport->owner?> + +
+
testreport->member?>
testreport->title?>
testreport->goal?>desc?>
testreport->profile?> + ' . $storySummary . '

'; + echo '

' . $caseSummary . '

'; + echo '

' . sprintf($lang->testreport->bugSummary, $bugInfo['countBugByTask'], $bugInfo['bugConfirmedRate'] . '%', $bugInfo['bugCreateByCaseRate'] . '%') . '

'; + unset($bugInfo['countBugByTask']); unset($bugInfo['bugConfirmedRate']); unset($bugInfo['bugCreateByCaseRate']); + ?> +
testreport->legendStoryAndBug?> - -
testreport->legendBuild?> @@ -86,11 +96,12 @@
- testreport->legendBug?> - + testreport->legendLegacyBugs?> - -
+
+
+ testreport->legendReport?> +
testreport->report?> diff --git a/module/testreport/view/export.html.php b/module/testreport/view/export.html.php index 96740ee99d..807f6be5cd 100644 --- a/module/testreport/view/export.html.php +++ b/module/testreport/view/export.html.php @@ -10,8 +10,65 @@ * @link http://www.zentao.net */ ?> + exportFileTypeList); $lang->exportFileTypeList['html'] = 'html'; -include '../../file/view/export.html.php'; ?> + +
+
+ icons['export']);?> + export;?> +
+
+ + + + + + + +
+
+ setFileName;?> + +
+
+ exportFileTypeList, '', 'onchange=switchEncode(this.value) class="form-control"');?> + +
+ export, "onclick='setDownloading();' ");?> +
+
+ + diff --git a/module/testreport/view/view.html.php b/module/testreport/view/view.html.php index 6adb111498..9b708ace62 100644 --- a/module/testreport/view/view.html.php +++ b/module/testreport/view/view.html.php @@ -12,6 +12,7 @@ ?> session->notHead):?> +
@@ -26,6 +27,9 @@ echo "
"; common::printIcon('testreport', 'export', "reportID=$report->id", '', 'button', 'download-alt', '', 'iframe'); + echo '
'; + + echo "
"; if(common::hasPriv('testreport', 'create')) echo html::a(inLink('create', "objectID=$report->objectID&objectType=$report->objectType"), "", '', "class='btn' title='{$lang->testreport->recreate}'"); common::printIcon('testreport', 'delete', "reportID=$report->id", '', 'button', '', 'hiddenwin'); echo '
'; @@ -42,57 +46,66 @@
-
- testreport->legendBasic?> - - - - - - - - - - - - - - - - - - -
testreport->startEnd?> begin . ' ~ ' . $report->end;?>
testreport->owner?>owner);?>
testreport->member?>members) as $member)echo zget($users, $member) . '   ';?>
testreport->goal?>desc?>
-
-
- testreport->legendStoryAndBug?> - + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + session->notHead):?> + + + + + +
testreport->startEnd?> begin . ' ~ ' . $report->end;?>
testreport->owner?>owner);?>
testreport->member?>members) as $member)echo zget($users, $member) . '   ';?>
testreport->goal?>desc?>
testreport->profile?> + ' . $storySummary . '

'; + echo '

' . $caseSummary . '

'; + echo '

' . sprintf($lang->testreport->bugSummary, $bugInfo['countBugByTask'], $bugInfo['bugConfirmedRate'] . '%', $bugInfo['bugCreateByCaseRate'] . '%') . '

'; + unset($bugInfo['countBugByTask']); unset($bugInfo['bugConfirmedRate']); unset($bugInfo['bugCreateByCaseRate']); + ?> +
testreport->report?>report;?>
files?>fetch('file', 'printFiles', array('files' => $report->files, 'fieldset' => 'false'));?>
+
+
- -
-
- testreport->legendBuild?> - -
-
- testreport->legendCase?> - -
-
- testreport->legendBug?> - - - -
-
-
- testreport->report?> -
report;?>
-
- session->notHead):?> - fetch('file', 'printFiles', array('files' => $report->files, 'fieldset' => 'true'));?> - +
+
+
+
+
+
session->notHead):?>