From 497c35cceb60f799f3c374c73d0d40a7df2cf7a8 Mon Sep 17 00:00:00 2001 From: wangchunsheng Date: Tue, 9 Mar 2010 09:34:55 +0000 Subject: [PATCH] + add the feature of report of bug. --- trunk/module/bug/config.php | 44 ++++---- trunk/module/bug/control.php | 37 +++++++ trunk/module/bug/lang/zh-cn.php | 62 ++++++++++++ trunk/module/bug/model.php | 139 ++++++++++++++++++++++++++ trunk/module/bug/view/browse.html.php | 1 + trunk/module/bug/view/report.html.php | 77 ++++++++++++++ trunk/module/common/lang/zh-cn.php | 8 +- trunk/module/group/lang/zh-cn.php | 1 + trunk/module/report/lang/zh-cn.php | 19 +++- trunk/module/report/model.php | 32 +++++- 10 files changed, 394 insertions(+), 26 deletions(-) create mode 100644 trunk/module/bug/view/report.html.php diff --git a/trunk/module/bug/config.php b/trunk/module/bug/config.php index c00b49f9bc..fb58394a95 100644 --- a/trunk/module/bug/config.php +++ b/trunk/module/bug/config.php @@ -22,29 +22,35 @@ $config->bug->search['fields']['mailto'] = $lang->bug->mailto; $config->bug->search['fields']['openedDate'] = $lang->bug->openedDate; $config->bug->search['fields']['openedBuild'] = $lang->bug->openedBuild; $config->bug->search['fields']['resolvedBuild'] = $lang->bug->resolvedBuild; +$config->bug->search['fields']['resolvedDate'] = $lang->bug->resolvedDate; $config->bug->search['fields']['assignedDate'] = $lang->bug->assignedDate; $config->bug->search['fields']['closedDate'] = $lang->bug->closedDate; $config->bug->search['fields']['lastEditedDate'] = $lang->bug->lastEditedDate; -$config->bug->search['params']['title'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); -$config->bug->search['params']['steps'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); -$config->bug->search['params']['product'] = array('operator' => '=', 'control' => 'select', 'values' => ''); -$config->bug->search['params']['module'] = array('operator' => '=', 'control' => 'select', 'values' => 'modules'); -$config->bug->search['params']['project'] = array('operator' => '=', 'control' => 'select', 'values' => 'projects'); -$config->bug->search['params']['assignedTo'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); -$config->bug->search['params']['resolvedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); -$config->bug->search['params']['openedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); -$config->bug->search['params']['closedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); -$config->bug->search['params']['lastEditedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); -$config->bug->search['params']['status'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->statusList); -$config->bug->search['params']['severity'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->severityList); -$config->bug->search['params']['type'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->typeList); -$config->bug->search['params']['os'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->osList); -$config->bug->search['params']['browser'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->browserList); -$config->bug->search['params']['resolution'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->resolutionList); -$config->bug->search['params']['mailto'] = array('operator' => 'include', 'control' => 'select', 'values' => 'users'); -$config->bug->search['params']['openedBuild'] = array('operator' => 'include', 'control' => 'select', 'values' => 'builds'); -$config->bug->search['params']['resolvedBuild']= array('operator' => '=', 'control' => 'select', 'values' => 'builds'); +$config->bug->search['params']['title'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); +$config->bug->search['params']['steps'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); +$config->bug->search['params']['product'] = array('operator' => '=', 'control' => 'select', 'values' => ''); +$config->bug->search['params']['module'] = array('operator' => '=', 'control' => 'select', 'values' => 'modules'); +$config->bug->search['params']['project'] = array('operator' => '=', 'control' => 'select', 'values' => 'projects'); +$config->bug->search['params']['assignedTo'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); +$config->bug->search['params']['resolvedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); +$config->bug->search['params']['openedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); +$config->bug->search['params']['closedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); +$config->bug->search['params']['lastEditedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); +$config->bug->search['params']['status'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->statusList); +$config->bug->search['params']['severity'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->severityList); +$config->bug->search['params']['type'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->typeList); +$config->bug->search['params']['os'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->osList); +$config->bug->search['params']['browser'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->browserList); +$config->bug->search['params']['resolution'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->bug->resolutionList); +$config->bug->search['params']['mailto'] = array('operator' => 'include', 'control' => 'select', 'values' => 'users'); +$config->bug->search['params']['openedBuild'] = array('operator' => 'include', 'control' => 'select', 'values' => 'builds'); +$config->bug->search['params']['resolvedBuild'] = array('operator' => '=', 'control' => 'select', 'values' => 'builds'); +$config->bug->search['params']['openedDate'] = array('operator' => '>=', 'control' => 'input', 'values' => ''); +$config->bug->search['params']['resolvedDate'] = array('operator' => '>=', 'control' => 'input', 'values' => ''); +$config->bug->search['params']['closedDate'] = array('operator' => '>=', 'control' => 'input', 'values' => ''); +$config->bug->search['params']['lastEditedDate']= array('operator' => '>=', 'control' => 'input', 'values' => ''); +$config->bug->search['params']['assignedDate'] = array('operator' => '>=', 'control' => 'input', 'values' => ''); $config->bug->create->requiredFields = 'title,openedBuild'; $config->bug->edit->requiredFields = $config->bug->create->requiredFields; diff --git a/trunk/module/bug/control.php b/trunk/module/bug/control.php index e744ab6076..c1d69bf687 100644 --- a/trunk/module/bug/control.php +++ b/trunk/module/bug/control.php @@ -112,6 +112,11 @@ class bug extends control $bugs = $this->dao->select('*')->from(TABLE_BUG)->where($bugQuery)->orderBy($orderBy)->page($pager)->fetchAll(); } + /* 处理查询语句,获取条件部分,并记录session。*/ + $sql = explode('WHERE', $this->dao->get()); + $sql = explode('ORDER', $sql[1]); + $this->session->set('bugReportCondition', $sql[0]); + $users = $this->user->getPairs('noletter'); $header['title'] = $this->products[$productID] . $this->lang->colon . $this->lang->bug->common; @@ -134,6 +139,38 @@ class bug extends control $this->display(); } + /* 统计报表。*/ + public function report($productID, $browseType, $moduleID) + { + $this->loadModel('report'); + $this->view->charts = array(); + $this->view->rendJS = ''; + + if(!empty($_POST)) + { + foreach($this->post->charts as $chart) + { + $chartFunc = 'getDataOf' . $chart; + $chartData = $this->bug->$chartFunc(); + $chartOption = $this->lang->bug->report->$chart; + $this->bug->mergeChartOption($chart); + + $chartXML = $this->report->createSingleXML($chartData, $chartOption->graph); + $this->view->charts[$chart] = $this->report->createJSChart($chartOption->swf, $chartXML, $chartOption->width, $chartOption->height); + $this->view->datas[$chart] = $this->report->computePercent($chartData); + } + $this->view->rendJS = $this->report->rendJsCharts(count($this->view->charts)); + } + + $this->bug->setMenu($this->products, $productID); + $this->view->header->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->common; + $this->view->productID = $productID; + $this->view->browseType = $browseType; + $this->view->moduleID = $moduleID; + $this->view->checkedCharts = $this->post->charts ? join(',', $this->post->charts) : ''; + $this->display(); + } + /* 创建Bug。extras是其他的参数,key和value之间使用=连接,多个键值对之间使用,隔开。*/ public function create($productID, $extras = '') { diff --git a/trunk/module/bug/lang/zh-cn.php b/trunk/module/bug/lang/zh-cn.php index 650c155bb9..c204d0ad6c 100644 --- a/trunk/module/bug/lang/zh-cn.php +++ b/trunk/module/bug/lang/zh-cn.php @@ -30,6 +30,7 @@ $lang->bug->view = 'Bug详情'; $lang->bug->resolve = '解决Bug'; $lang->bug->close = '关闭Bug'; $lang->bug->activate = '激活Bug'; +$lang->bug->reportChart = '报表统计'; $lang->bug->ajaxGetUserBugs = '接口:我的Bug'; $lang->bug->selectProduct = '请选择产品'; @@ -168,3 +169,64 @@ $lang->bug->tblResult = "[结果]\n"; $lang->bug->tblExpect = "[期望]\n"; $lang->bug->action->resolved = array('main' => '$date, 由 $actor 解决,方案为 $extra。', 'extra' => $lang->bug->resolutionList); + +$lang->bug->report->common = '统计报表'; +$lang->bug->report->select = '请选择报表类型'; +$lang->bug->report->create = '生成报表'; + +$lang->bug->report->charts['bugsPerProject'] = '项目Bug数量'; +$lang->bug->report->charts['bugsPerModule'] = '模块Bug数量'; +$lang->bug->report->charts['openedBugsPerDay'] = '每天新增Bug数'; +$lang->bug->report->charts['resolvedBugsPerDay'] = '每天解决Bug数'; +$lang->bug->report->charts['closedBugsPerDay'] = '每天关闭的Bug数'; +$lang->bug->report->charts['openedBugsPerUser'] = '每人提交的Bug数'; +$lang->bug->report->charts['resolvedBugsPerUser']= '每人解决的Bug数'; +$lang->bug->report->charts['closedBugsPerUser'] = '每人关闭的Bug数'; +$lang->bug->report->charts['bugsPerSeverity'] = 'Bug严重程度统计'; +$lang->bug->report->charts['bugsPerResolution'] = 'Bug解决方案统计'; +$lang->bug->report->charts['bugsPerStatus'] = 'Bug状态统计'; +$lang->bug->report->charts['bugsPerType'] = 'Bug类型统计'; +//$lang->bug->report->charts['bugLiveDays'] = 'Bug处理时间统计'; +//$lang->bug->report->charts['bugHistories'] = 'Bug处理步骤统计'; + +$lang->bug->report->options->swf = 'pie2d'; +$lang->bug->report->options->width = 'auto'; +$lang->bug->report->options->height = 300; +$lang->bug->report->options->graph->baseFontSize = 12; +$lang->bug->report->options->graph->showNames = 1; +$lang->bug->report->options->graph->formatNumber = 1; +$lang->bug->report->options->graph->decimalPrecision = 0; +$lang->bug->report->options->graph->animation = 0; +$lang->bug->report->options->graph->rotateNames = 0; +$lang->bug->report->options->graph->yAxisName = 'COUNT'; +$lang->bug->report->options->graph->pieRadius = 100; // 饼图直径。 +$lang->bug->report->options->graph->showColumnShadow = 0; // 是否显示柱状图阴影。 + +$lang->bug->report->bugsPerProject->graph->xAxisName = '项目'; +$lang->bug->report->bugsPerModule->graph->xAxisName = '模块'; + +$lang->bug->report->openedBugsPerDay->swf = 'column2d'; +$lang->bug->report->openedBugsPerDay->height = 400; +$lang->bug->report->openedBugsPerDay->graph->xAxisName = '日期'; +$lang->bug->report->openedBugsPerDay->graph->rotateNames = 1; + +$lang->bug->report->resolvedBugsPerDay->swf = 'column2d'; +$lang->bug->report->resolvedBugsPerDay->height = 400; +$lang->bug->report->resolvedBugsPerDay->graph->xAxisName = '日期'; +$lang->bug->report->resolvedBugsPerDay->graph->rotateNames = 1; + +$lang->bug->report->closedBugsPerDay->swf = 'column2d'; +$lang->bug->report->closedBugsPerDay->height = 400; +$lang->bug->report->closedBugsPerDay->graph->xAxisName = '日期'; +$lang->bug->report->closedBugsPerDay->graph->rotateNames = 1; + +$lang->bug->report->openedBugsPerUser->graph->xAxisName = '用户'; +$lang->bug->report->resolvedBugsPerUser->graph->xAxisName= '用户'; +$lang->bug->report->closedBugsPerUser->graph->xAxisName = '用户'; + +$lang->bug->report->bugsPerSeverity->graph->xAxisName = '严重程度'; +$lang->bug->report->bugsPerResolution->graph->xAxisName = '解决方案'; +$lang->bug->report->bugsPerStatus->graph->xAxisName = '状态'; +$lang->bug->report->bugsPerType->graph->xAxisName = '类型'; +$lang->bug->report->bugLiveDays->graph->xAxisName = '处理时间'; +$lang->bug->report->bugHistories->graph->xAxisName = '处理步骤'; diff --git a/trunk/module/bug/model.php b/trunk/module/bug/model.php index 8d6e358275..05dbad43bf 100644 --- a/trunk/module/bug/model.php +++ b/trunk/module/bug/model.php @@ -282,4 +282,143 @@ class bugModel extends model } return array('title' => $title, 'steps' => $bugSteps); } + + /* 按项目统计bug数。*/ + public function getDataOfBugsPerProject() + { + $datas = $this->dao->select('project as name, count(project) as value')->from(TABLE_BUG)->where($this->session->bugReportCondition)->groupBy('project')->orderBy('value DESC')->fetchAll('name'); + if(!$datas) return array(); + $projects = $this->loadModel('project')->getPairs(); + foreach($datas as $projectID => $data) $data->name = isset($projects[$projectID]) ? $projects[$projectID] : $this->lang->report->undefined; + return $datas; + } + + /* 按产品模块统计bug数。*/ + public function getDataOfBugsPerModule() + { + $datas = $this->dao->select('module as name, count(module) as value')->from(TABLE_BUG)->where($this->session->bugReportCondition)->groupBy('module')->orderBy('value DESC')->fetchAll('name'); + if(!$datas) return array(); + $modules = $this->dao->select('id, name')->from(TABLE_MODULE)->where('id')->in(array_keys($datas))->fetchPairs(); + foreach($datas as $moduleID => $data) $data->name = isset($modules[$moduleID]) ? $modules[$moduleID] : '/'; + return $datas; + } + + /* 按bug创建日期统计。*/ + public function getDataOfOpenedBugsPerDay() + { + return $this->dao->select('DATE_FORMAT(openedDate, "%Y-%m-%d") AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->session->bugReportCondition)->groupBy('name')->orderBy('openedDate')->fetchAll(); + } + + /* 按bug解决日期统计。*/ + public function getDataOfResolvedBugsPerDay() + { + return $this->dao->select('DATE_FORMAT(resolvedDate, "%Y-%m-%d") AS name, COUNT(*) AS value')->from(TABLE_BUG) + ->where($this->session->bugReportCondition)->groupBy('name') + ->having('name != 0000-00-00') + ->orderBy('resolvedDate') + ->fetchAll(); + } + + /* 按bug关闭日期统计。*/ + public function getDataOfClosedBugsPerDay() + { + return $this->dao->select('DATE_FORMAT(closedDate, "%Y-%m-%d") AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->session->bugReportCondition)->groupBy('name')->orderBy('closedDate')->fetchAll(); + } + + /* 按bug创建者统计。*/ + public function getDataOfOpenedBugsPerUser() + { + $datas = $this->dao->select('openedBy AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->session->bugReportCondition)->groupBy('name')->orderBy('value DESC')->fetchAll('name'); + if(!$datas) return array(); + if(!isset($this->users)) $this->users = $this->loadModel('user')->getPairs('noletter'); + foreach($datas as $account => $data) if(isset($this->users[$account])) $data->name = $this->users[$account]; + return $datas; + } + + /* 按bug解决者统计。*/ + public function getDataOfResolvedBugsPerUser() + { + $datas = $this->dao->select('resolvedBy AS name, COUNT(*) AS value') + ->from(TABLE_BUG)->where($this->session->bugReportCondition) + ->andWhere('resolvedBy')->ne('') + ->groupBy('name') + ->orderBy('value DESC')->fetchAll('name'); + if(!$datas) return array(); + if(!isset($this->users)) $this->users = $this->loadModel('user')->getPairs('noletter'); + foreach($datas as $account => $data) if(isset($this->users[$account])) $data->name = $this->users[$account]; + return $datas; + } + + /* 按bug关闭者统计。*/ + public function getDataOfClosedBugsPerUser() + { + $datas = $this->dao->select('closedBy AS name, COUNT(*) AS value') + ->from(TABLE_BUG) + ->where($this->session->bugReportCondition) + ->andWhere('closedBy')->ne('') + ->groupBy('name') + ->orderBy('value DESC')->fetchAll('name'); + if(!$datas) return array(); + if(!isset($this->users)) $this->users = $this->loadModel('user')->getPairs('noletter'); + foreach($datas as $account => $data) if(isset($this->users[$account])) $data->name = $this->users[$account]; + return $datas; + } + + /* 按bug严重程度统计。*/ + public function getDataOfBugsPerSeverity() + { + $datas = $this->dao->select('severity AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->session->bugReportCondition)->groupBy('name')->orderBy('value DESC')->fetchAll('name'); + if(!$datas) return array(); + foreach($datas as $severity => $data) if(isset($this->lang->bug->severityList[$severity])) $data->name = $this->lang->bug->severityList[$severity]; + return $datas; + } + + /* 按bug解决方案统计。*/ + public function getDataOfBugsPerResolution() + { + $datas = $this->dao->select('resolution AS name, COUNT(*) AS value') + ->from(TABLE_BUG) + ->where($this->session->bugReportCondition) + ->andWhere('resolution')->ne('') + ->groupBy('name')->orderBy('value DESC') + ->fetchAll('name'); + if(!$datas) return array(); + foreach($datas as $resolution => $data) if(isset($this->lang->bug->resolutionList[$resolution])) $data->name = $this->lang->bug->resolutionList[$resolution]; + return $datas; + } + + /* 按bug状态统计。*/ + public function getDataOfBugsPerStatus() + { + $datas = $this->dao->select('status AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->session->bugReportCondition)->groupBy('name')->orderBy('value DESC')->fetchAll('name'); + if(!$datas) return array(); + foreach($datas as $status => $data) if(isset($this->lang->bug->statusList[$status])) $data->name = $this->lang->bug->statusList[$status]; + return $datas; + } + + /* 按bug类型统计。*/ + public function getDataOfBugsPerType() + { + $datas = $this->dao->select('type AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->session->bugReportCondition)->groupBy('name')->orderBy('value DESC')->fetchAll('name'); + if(!$datas) return array(); + foreach($datas as $type => $data) if(isset($this->lang->bug->typeList[$type])) $data->name = $this->lang->bug->typeList[$type]; + return $datas; + } + + + /* 合并公共的chart设置和当前chart的设置。*/ + public function mergeChartOption($chartType) + { + $chartOption = $this->lang->bug->report->$chartType; + $commonOption = $this->lang->bug->report->options; + + /* 设置图表的标题和展示方式。*/ + $chartOption->graph->caption = $this->lang->bug->report->charts[$chartType]; + if(!isset($chartOption->swf)) $chartOption->swf = $commonOption->swf; + if(!isset($chartOption->width)) $chartOption->width = $commonOption->width; + if(!isset($chartOption->height)) $chartOption->height = $commonOption->height; + + /* 合并配置。*/ + foreach($commonOption->graph as $key => $value) if(!isset($chartOption->graph->$key)) $chartOption->graph->$key = $value; + } } diff --git a/trunk/module/bug/view/browse.html.php b/trunk/module/bug/view/browse.html.php index 2233c93aed..f8dfcd14a4 100644 --- a/trunk/module/bug/view/browse.html.php +++ b/trunk/module/bug/view/browse.html.php @@ -64,6 +64,7 @@ function browseBySearch(active) ?>
+ bug->report->common); ?> bug->create); ?>
diff --git a/trunk/module/bug/view/report.html.php b/trunk/module/bug/view/report.html.php new file mode 100644 index 0000000000..cb7e87f007 --- /dev/null +++ b/trunk/module/bug/view/report.html.php @@ -0,0 +1,77 @@ +. + * + * @copyright Copyright 2009-2010 Chunsheng Wang + * @author Chunsheng Wang + * @package bug + * @version $Id$ + * @link http://www.zentao.cn + */ +?> + + +
+
+
bug->report->common;?>
+
goback); ?>
+
+
+ +
+
+
bug->report->select;?>
+
+
+ bug->report->charts, $checkedCharts);?> +
bug->report->create);?>
+
+
+
+ +
+
+ + + $chartContent):?> + + + + + +
bug->report->common;?>
+ + + + + + + $data):?> + + + + + + +
report->item;?>report->value;?>report->percent;?>
name;?>value;?>percent * 100) . '%';?>
+
+
+
+
+ + diff --git a/trunk/module/common/lang/zh-cn.php b/trunk/module/common/lang/zh-cn.php index 51885a3f62..056ff62dc4 100644 --- a/trunk/module/common/lang/zh-cn.php +++ b/trunk/module/common/lang/zh-cn.php @@ -113,18 +113,18 @@ $lang->build->menu = $lang->project->menu; /* QA视图菜单设置。*/ $lang->bug->menu->product = '%s'; -$lang->bug->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s', 'alias' => 'view,create,edit,resolve,close,active', 'subModule' => 'tree'); +$lang->bug->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s', 'alias' => 'view,create,edit,resolve,close,active,report', 'subModule' => 'tree'); $lang->bug->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,edit'); $lang->bug->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s'); $lang->testcase->menu->product = '%s'; -$lang->testcase->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s', 'alias' => 'view,create,edit,resolve,close,active'); +$lang->testcase->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s'); $lang->testcase->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,edit', 'subModule' => 'tree'); $lang->testcase->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s'); $lang->testtask->menu->product = '%s'; -$lang->testtask->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s', 'alias' => 'view,create,edit,resolve,close,active'); -$lang->testtask->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,edit', 'subModule' => 'tree'); +$lang->testtask->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s'); +$lang->testtask->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s'); $lang->testtask->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase'); /* 组织结构视图菜单设置。*/ diff --git a/trunk/module/group/lang/zh-cn.php b/trunk/module/group/lang/zh-cn.php index ebc1740e85..eb50bfeab9 100644 --- a/trunk/module/group/lang/zh-cn.php +++ b/trunk/module/group/lang/zh-cn.php @@ -142,6 +142,7 @@ $lang->resource->bug->edit = 'edit'; $lang->resource->bug->resolve = 'resolve'; $lang->resource->bug->activate= 'activate'; $lang->resource->bug->close = 'close'; +$lang->resource->bug->report = 'reportChart'; $lang->resource->bug->ajaxGetUserBugs = 'ajaxGetUserBugs'; $lang->resource->testcase->index = 'index'; diff --git a/trunk/module/report/lang/zh-cn.php b/trunk/module/report/lang/zh-cn.php index 328cf76dcb..c7146b7bae 100644 --- a/trunk/module/report/lang/zh-cn.php +++ b/trunk/module/report/lang/zh-cn.php @@ -21,4 +21,21 @@ * @version $Id$ * @link http://www.zentao.cn */ -$lang->report->common = '报表'; +$lang->report->common = '报表'; +$lang->report->item = '条目'; +$lang->report->value = '值'; +$lang->report->percent = '百分比'; +$lang->report->undefined = '未设定'; + +$lang->report->colors[] = 'AFD8F8'; +$lang->report->colors[] = 'F6BD0F'; +$lang->report->colors[] = '8BBA00'; +$lang->report->colors[] = 'FF8E46'; +$lang->report->colors[] = '008E8E'; +$lang->report->colors[] = 'D64646'; +$lang->report->colors[] = '8E468E'; +$lang->report->colors[] = '588526'; +$lang->report->colors[] = 'B3AA00'; +$lang->report->colors[] = '008ED6'; +$lang->report->colors[] = '9D080D'; +$lang->report->colors[] = 'A186BE'; diff --git a/trunk/module/report/model.php b/trunk/module/report/model.php index d4039a8247..a79d951b45 100644 --- a/trunk/module/report/model.php +++ b/trunk/module/report/model.php @@ -72,15 +72,43 @@ EOT; } /* 生成single系列的xml数据。。 */ - function createSingleXML($sets, $chartOptions = array()) + public function createSingleXML($sets, $chartOptions = array()) { $data = pack("CCC", 0xef, 0xbb, 0xbf); $data .=""; + $data .= ' $value) $data .= " $key='$value'"; $data .= ">"; - foreach($sets as $set) $data .= ""; + + $colorCount = count($this->lang->report->colors); + $i = 0; + foreach($sets as $set) + { + if($i == $colorCount) $i = 0; + $color = $this->lang->report->colors[$i]; + $i ++; + $data .= ""; + } $data .= ""; return $data; } + + /* 输出渲染js图标的语句。*/ + public function rendJsCharts($chartCount) + { + $js = ''; + return $js; + } + + /* 计算每条数据所占的百分比。*/ + public function computePercent($datas) + { + $sum = 0; + foreach($datas as $data) $sum += $data->value; + foreach($datas as $data) $data->percent = round($data->value / $sum, 2); + return $datas; + } }