public $summary_precond = array('IDF_Precondition::accessIssues');␊ |
public function summary($request, $match)␊ |
{␊ |
$tagStatistics = array();␊ |
$ownerStatistics = array();␊ |
$status = array();␊ |
$isTrackerEmpty = false;␊ |
␊ |
$prj = $request->project;␊ |
$opened = $prj->getIssueCountByStatus('open');␊ |
$closed = $prj->getIssueCountByStatus('closed');␊ |
$otags = implode(',', $prj->getTagIdsByStatus('open'));␊ |
␊ |
// Issue status statistics␊ |
$status = array();␊ |
$status['Open'] = array($opened, (int)(100 * $opened / ($opened + $closed)));␊ |
$status['Closed'] = array($closed, (int)(100 * $closed / ($opened + $closed)));␊ |
␊ |
// Issue owner statistics␊ |
$sqlIssueTable = Pluf::factory('IDF_Issue')->getSqlTable();␊ |
$sqlUsersTable = Pluf::factory('Pluf_User')->getSqlTable();␊ |
$query = <<<"QUERY"␊ |
// Check if the tracker is empty␊ |
if ($opened === 0 && $closed === 0) {␊ |
$isTrackerEmpty = true;␊ |
} else {␊ |
if ($opened > 0 || $closed > 0) {␊ |
// Issue status statistics␊ |
$status['Open'] = array($opened, (int)(100 * $opened / ($opened + $closed)));␊ |
$status['Closed'] = array($closed, (int)(100 * $closed / ($opened + $closed)));␊ |
}␊ |
␊ |
if ($opened > 0) {␊ |
// Issue owner statistics␊ |
$sqlIssueTable = Pluf::factory('IDF_Issue')->getSqlTable();␊ |
$sqlUsersTable = Pluf::factory('Pluf_User')->getSqlTable();␊ |
$otags = implode(',', $prj->getTagIdsByStatus('open'));␊ |
$query = <<<"QUERY"␊ |
SELECT CONCAT(first_name, " ", last_name) as name, nb FROM (SELECT uid as id,count(uid) as nb FROM (SELECT ifnull(owner, -1) as uid FROM $sqlIssueTable WHERE status IN ($otags)) as ff group by uid) AS ff LEFT JOIN $sqlUsersTable using(id)␊ |
QUERY;␊ |
$db = Pluf::db();␊ |
$dbData = $db->select($query);␊ |
$ownerStatistics = array();␊ |
foreach ($dbData as $k => $v) {␊ |
$key = ($v['name'] === null) ? __('Not assigned') : $v['name'];␊ |
$ownerStatistics[$key] = array($v['nb'], (int)(100 * $v['nb'] / $opened));␊ |
}␊ |
$db = Pluf::db();␊ |
$dbData = $db->select($query);␊ |
foreach ($dbData as $k => $v) {␊ |
$key = ($v['name'] === null) ? __('Not assigned') : $v['name'];␊ |
$ownerStatistics[$key] = array($v['nb'], (int)(100 * $v['nb'] / $opened));␊ |
}␊ |
␊ |
// Issue class tag statistics␊ |
$tags = $prj->getTagCloud();␊ |
$tagStatistics = array();␊ |
foreach ($tags as $t) {␊ |
$tagStatistics[$t->class][$t->name] = array($t->nb_use, $t->id);␊ |
}␊ |
foreach($tagStatistics as $k => $v) {␊ |
$nbIssueInClass = 0;␊ |
foreach ($v as $val) {␊ |
$nbIssueInClass += $val[0];␊ |
}␊ |
foreach ($v as $kk => $vv) {␊ |
$tagStatistics[$k][$kk] = array($vv[0], (int)(100 * $vv[0] / $nbIssueInClass), $vv[1]);␊ |
// Issue class tag statistics␊ |
$tags = $prj->getTagCloud();␊ |
foreach ($tags as $t) {␊ |
$tagStatistics[$t->class][$t->name] = array($t->nb_use, $t->id);␊ |
}␊ |
foreach($tagStatistics as $k => $v) {␊ |
$nbIssueInClass = 0;␊ |
foreach ($v as $val) {␊ |
$nbIssueInClass += $val[0];␊ |
}␊ |
foreach ($v as $kk => $vv) {␊ |
$tagStatistics[$k][$kk] = array($vv[0], (int)(100 * $vv[0] / $nbIssueInClass), $vv[1]);␊ |
}␊ |
}␊ |
␊ |
// Sort␊ |
krsort($tagStatistics);␊ |
arsort($ownerStatistics);␊ |
}␊ |
}␊ |
␊ |
// Sort␊ |
krsort($tagStatistics);␊ |
arsort($ownerStatistics);␊ |
␊ |
$title = sprintf(__('Summary of tracked issues in %s.'), (string) $prj);␊ |
␊ |
return Pluf_Shortcuts_RenderToResponse('idf/issues/summary.html',␊ |
array('page_title' => $title,␊ |
'trackerEmpty' => $isTrackerEmpty,␊ |
'project' => $prj,␊ |
'tagStatistics' => $tagStatistics,␊ |
'ownerStatistics' => $ownerStatistics,␊ |