// Class ttChartHelper is a helper class for charts.
class ttChartHelper {
- // getTotals - returns total times by project or activity for a given user in a specified period.
- static function getTotals($user_id, $ch_type, $cl_date, $cl_period = null) {
+ // getTotals - returns total times by project or task for a given user in a specified period.
+ static function getTotals($user_id, $chart_type, $selected_date, $interval_type) {
$period = null;
- if (isset($cl_period) && isset($cl_date)) {
- switch ($cl_period) {
- case INTERVAL_THIS_DAY:
- $period = new Period(INTERVAL_THIS_DAY, new DateAndTime(DB_DATEFORMAT, $cl_date));
- break;
+ switch ($interval_type) {
+ case INTERVAL_THIS_DAY:
+ $period = new Period(INTERVAL_THIS_DAY, new DateAndTime(DB_DATEFORMAT, $selected_date));
+ break;
- case INTERVAL_THIS_WEEK:
- $period = new Period(INTERVAL_THIS_WEEK, new DateAndTime(DB_DATEFORMAT, $cl_date));
- break;
+ case INTERVAL_THIS_WEEK:
+ $period = new Period(INTERVAL_THIS_WEEK, new DateAndTime(DB_DATEFORMAT, $selected_date));
+ break;
- case INTERVAL_THIS_MONTH:
- $period = new Period(INTERVAL_THIS_MONTH, new DateAndTime(DB_DATEFORMAT, $cl_date));
- break;
+ case INTERVAL_THIS_MONTH:
+ $period = new Period(INTERVAL_THIS_MONTH, new DateAndTime(DB_DATEFORMAT, $selected_date));
+ break;
- case INTERVAL_THIS_YEAR:
- $period = new Period(INTERVAL_THIS_YEAR, new DateAndTime(DB_DATEFORMAT, $cl_date));
- break;
- }
+ case INTERVAL_THIS_YEAR:
+ $period = new Period(INTERVAL_THIS_YEAR, new DateAndTime(DB_DATEFORMAT, $selected_date));
+ break;
}
-
+
$result = array();
$mdb2 = getConnection();
$q_period = '';
if ($period != null) {
- $q_period = " and date >= '".$period->getBeginDate(DB_DATEFORMAT)."' and date <= '".$period->getEndDate(DB_DATEFORMAT)."'";
+ $q_period = " and date >= '".$period->getStartDate(DB_DATEFORMAT)."' and date <= '".$period->getEndDate(DB_DATEFORMAT)."'";
}
- if (CHART_PROJECTS == $ch_type) {
+ if (CHART_PROJECTS == $chart_type) {
// Data for projects.
$sql = "select p.name as name, sum(time_to_sec(l.duration)) as time from tt_log l
- inner join tt_projects p on (p.id = l.project_id)
+ left join tt_projects p on (p.id = l.project_id)
where l.status = 1 and l.duration > 0 and l.user_id = $user_id $q_period group by l.project_id";
- } elseif (CHART_TASKS == $ch_type) {
+ } elseif (CHART_TASKS == $chart_type) {
// Data for tasks.
$sql = "select t.name as name, sum(time_to_sec(l.duration)) as time from tt_log l
- inner join tt_tasks t on (t.id = l.task_id)
+ left join tt_tasks t on (t.id = l.task_id)
where l.status = 1 and l.duration > 0 and l.user_id = $user_id $q_period group by l.task_id";
- } elseif (CHART_CLIENTS == $ch_type) {
+ } elseif (CHART_CLIENTS == $chart_type) {
// Data for clients.
$sql = "select coalesce(c.name, 'NULL') as name, sum(time_to_sec(l.duration)) as time from tt_log l
left join tt_clients c on (c.id = l.client_id)
- where l.status = 1 and l.duration > 0 and l.user_id = $user_id $q_period group by l.client_id";
+ where l.status = 1 and l.duration > 0 and l.user_id = $user_id $q_period group by l.client_id";
}
-
+
$res = $mdb2->query($sql);
if (!is_a($res, 'PEAR_Error')) {
while ($val = $res->fetchRow()) {
$result[] = array('name'=>$val['name'],'time'=>$val['time']); // name - project name, time - total for project in seconds.
}
}
-
- // Get total time. We'll need it calculate percentages (for labels to the right of diagram).
+
+ // Get total time. We'll need it to calculate percentages (for labels to the right of diagram).
$total = 0;
foreach ($result as $one_val) {
$total += $one_val['time'];
- }
- // Add a string representation of time + percentage to names. Example: "Time Tracker (1:15 - 6%)".
- foreach ($result as &$one_val) {
- $percent = round(100*$one_val['time']/$total).'%';
+ }
+ // Add a string representation of time + percentage to names. Example: "Time Tracker (1:15 - 6%)".
+ foreach ($result as &$one_val) {
+ $percent = round(100*$one_val['time']/$total).'%';
$one_val['name'] .= ' ('.sec_to_time_fmt_hm($one_val['time']).' - '.$percent.')';
- }
-
- // Note: the remaining code here is needed to display labels on the side of a diagram.
- // We print lables ourselves (not using libchart.php) because quality of libchart labels is not good.
-
- // Note: Optimize this sorting and reversing.
+ }
+
+ // Note: the remaining code here is needed to display labels on the side of the diagram.
+ // We print labels ourselves (not using libchart.php) because quality of libchart labels is not good.
+
+ // Note: Optimize this sorting and reversing.
$result = mu_sort($result, 'time');
$result = array_reverse($result); // This is to assign correct colors to labels.
-
+
// Add color to array items. This is used in labels on the side of a chart.
$colors = array(
array(2, 78, 0),
$color = $colors[$i%count($colors)];
$result[$i]['color_html'] = sprintf('#%02x%02x%02x', $color[0], $color[1], $color[2]);
}
-
+
return $result;
}
}