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->common;?>
+ $chartContent):?>
+
+ |
+
+
+
+ | report->item;?> |
+ report->value;?> |
+ report->percent;?> |
+
+ $data):?>
+
+ | 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;
+ }
}