array(0=>'',1=>''), 'time' => array(1=>'',2=>'',3=>'',4=>'',5=>'',6=>'',7=>'',8=>'',9=>'',10=>'',11=>'',12=>''), 'type' => array(1=>'',2=>'',3=>'',4=>''), ); $is_all_time = 0; /* Default this month to date */ $date_from = date('Y-m-d',mktime(0, 0, 0, date("m"), 1, date("Y"))); $date_to = date('Y-m-d'); $input_datefrom = date('m/d/Y', strtotime('last month')); $input_dateto = date('m/d/Y'); /* Date */ if (!empty($_GET['w'])) { $df = preg_replace('/[^0-9]/','', hesk_GET('datefrom') ); if (strlen($df) == 8) { $date_from = substr($df,4,4) . '-' . substr($df,0,2) . '-' . substr($df,2,2); $input_datefrom = substr($df,0,2) . '/' . substr($df,2,2) . '/' . substr($df,4,4); } else { $date_from = date('Y-m-d', strtotime('last month') ); } $dt = preg_replace('/[^0-9]/','', hesk_GET('dateto') ); if (strlen($dt) == 8) { $date_to = substr($dt,4,4) . '-' . substr($dt,0,2) . '-' . substr($dt,2,2); $input_dateto = substr($dt,0,2) . '/' . substr($dt,2,2) . '/' . substr($dt,4,4); } else { $date_to = date('Y-m-d'); } if ($date_from > $date_to) { $tmp = $date_from; $tmp2 = $input_datefrom; $date_from = $date_to; $input_datefrom = $input_dateto; $date_to = $tmp; $input_dateto = $tmp2; $note_buffer = $hesklang['datetofrom']; } if ($date_to > date('Y-m-d')) { $date_to = date('Y-m-d'); $input_dateto = date('m/d/Y'); } $query_string = 'reports.php?w=1&datefrom='.urlencode($input_datefrom).'&dateto='.urlencode($input_dateto); $selected['w'][1]='checked="checked"'; $selected['time'][3]='selected="selected"'; } else { $selected['w'][0]='checked="checked"'; $_GET['time'] = intval( hesk_GET('time', 3) ); switch ($_GET['time']) { case 1: /* Today */ $date_from = date('Y-m-d'); $date_to = $date_from; $selected['time'][1]='selected="selected"'; $is_all_time = 1; break; case 2: /* Yesterday */ $date_from = date('Y-m-d',mktime(0, 0, 0, date("m"), date("d")-1, date("Y"))); $date_to = $date_from; $selected['time'][2]='selected="selected"'; $is_all_time = 1; break; case 4: /* Last month */ $date_from = date('Y-m-d',mktime(0, 0, 0, date("m")-1, 1, date("Y"))); $date_to = date('Y-m-d',mktime(0, 0, 0, date("m"), 0, date("Y"))); $selected['time'][4]='selected="selected"'; break; case 5: /* Last 30 days */ $date_from = date('Y-m-d',mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); $date_to = date('Y-m-d'); $selected['time'][5]='selected="selected"'; break; case 6: /* This week */ list($date_from,$date_to)=dateweek(0); $date_to = date('Y-m-d'); $selected['time'][6]='selected="selected"'; break; case 7: /* Last week */ list($date_from,$date_to)=dateweek(-1); $selected['time'][7]='selected="selected"'; break; case 8: /* This business week */ list($date_from,$date_to)=dateweek(0,1); $date_to = date('Y-m-d'); $selected['time'][8]='selected="selected"'; break; case 9: /* Last business week */ list($date_from,$date_to)=dateweek(-1,1); $selected['time'][9]='selected="selected"'; break; case 10: /* This year */ $date_from = date('Y').'-01-01'; $date_to = date('Y-m-d'); $selected['time'][10]='selected="selected"'; break; case 11: /* Last year */ $date_from = date('Y')-1 . '-01-01'; $date_to = date('Y')-1 . '-12-31'; $selected['time'][11]='selected="selected"'; break; case 12: /* All time */ $date_from = hesk_getOldestDate(); $date_to = date('Y-m-d'); $selected['time'][12]='selected="selected"'; $is_all_time = 1; break; default: $_GET['time'] = 3; $selected['time'][3]='selected="selected"'; } $query_string = 'reports.php?w=0&time='.$_GET['time']; } unset($tmp); /* Type */ $type = intval( hesk_GET('type', 1) ); if (isset($selected['type'][$type])) { $selected['type'][$type] = 'selected="selected"'; } /* Print header */ require_once(HESK_PATH . 'inc/headerAdmin.inc.php'); /* Print main manage users page */ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); ?>
/>
/>

-

{$hesklang['roo']}

"; } /* Report type */ switch ($type) { case 2: hesk_ticketsByMonth(); break; case 3: hesk_ticketsByUser(); break; case 4: hesk_ticketsByCategory(); break; default: hesk_ticketsByDay(); } require_once(HESK_PATH . 'inc/footer.inc.php'); exit(); /*** START FUNCTIONS ***/ function hesk_ticketsByCategory() { global $hesk_settings, $hesklang, $date_from, $date_to, $can_run_reports_full; /* List of categories */ $cat = array(); $res = hesk_dbQuery("SELECT `id`,`name` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."categories` WHERE " . ( $can_run_reports_full ? '1' : hesk_myCategories('id') ) . " ORDER BY `id` ASC"); while ($row=hesk_dbFetchAssoc($res)) { $cat[$row['id']]=$row['name']; } $tickets = array(); $totals = array('num_tickets' => 0, 'resolved' => 0, 'all_replies' => 0, 'staff_replies' => 0, 'worked' => 0); /* Populate category counts */ foreach ($cat as $id => $name) { $tickets[$id] = array( 'num_tickets' => 0, 'resolved' => 0, 'all_replies' => 0, 'staff_replies' => 0, 'worked' => '', ); } /* SQL query for category stats */ $res = hesk_dbQuery(" SELECT DISTINCT `t1`.`category`, `t2`.`num_tickets`, `t2`.`seconds_worked` AS `seconds_worked`, IFNULL(`t3`.`all_replies`,0) AS `all_replies`, IFNULL(`t4`.`staff_replies`,0) AS `staff_replies` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` AS `t1` LEFT JOIN (SELECT COUNT(*) AS `num_tickets`, SUM( TIME_TO_SEC(`time_worked`) ) AS `seconds_worked`, `category` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` AS `t1` WHERE DATE(`t1`.`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' " . ( $can_run_reports_full ? "" : " AND `t1`.`owner` = '" . intval($_SESSION['id']) . "'" ) . " GROUP BY `category`) AS `t2` ON `t1`.`category`=`t2`.`category` LEFT JOIN (SELECT COUNT(*) AS `all_replies`, `t1`.`category` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` AS `t1`, `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` AS `t5` WHERE `t1`.`id`=`t5`.`replyto` AND DATE(`t5`.`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' " . ( $can_run_reports_full ? "" : " AND `t1`.`owner` = '" . intval($_SESSION['id']) . "'" ) . " GROUP BY `t1`.`category`) AS `t3` ON `t1`.`category`=`t3`.`category` LEFT JOIN (SELECT COUNT(*) AS `staff_replies`, `t1`.`category` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` AS `t1`, `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` AS `t5` WHERE `t1`.`id`=`t5`.`replyto` AND " . ( $can_run_reports_full ? "`t5`.`staffid` > 0" : "`t5`.`staffid` = '" . intval($_SESSION['id']) . "'" ) . " AND DATE(`t5`.`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `t1`.`category`) AS `t4` ON `t1`.`category`=`t4`.`category` WHERE DATE(`t1`.`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "'" . ( $can_run_reports_full ? "" : " AND `t1`.`owner` = '" . intval($_SESSION['id']) . "'" ) ); /* Update ticket values */ while ($row = hesk_dbFetchAssoc($res)) { if (isset($cat[$row['category']])) { $tickets[$row['category']]['num_tickets'] += $row['num_tickets']; $tickets[$row['category']]['all_replies'] += $row['all_replies']; $tickets[$row['category']]['staff_replies'] += $row['staff_replies']; $tickets[$row['category']]['worked'] = hesk_SecondsToHHMMSS($row['seconds_worked']); } else { /* Category deleted */ if ( ! isset($tickets[9999]) ) { $cat[9999] = $hesklang['catd']; $tickets[9999] = array('num_tickets' => $row['num_tickets'], 'resolved' => 0, 'all_replies' => $row['all_replies'], 'staff_replies' => $row['staff_replies'], 'worked' => $row['seconds_worked']); } else { $tickets[9999]['num_tickets'] += $row['num_tickets']; $tickets[9999]['all_replies'] += $row['all_replies']; $tickets[9999]['staff_replies'] += $row['staff_replies']; $tickets[9999]['worked'] += $row['seconds_worked']; } } $totals['num_tickets'] += $row['num_tickets']; $totals['all_replies'] += $row['all_replies']; $totals['staff_replies'] += $row['staff_replies']; $totals['worked'] += $row['seconds_worked']; } // Get number of resolved tickets $res = hesk_dbQuery("SELECT COUNT(*) AS `num_tickets` , `category` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `status` IN (SELECT `ID` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `IsClosed` = 1) " . ( $can_run_reports_full ? "" : " AND `owner` = '" . intval($_SESSION['id']) . "'" ) . " AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `category`"); // Update number of open and resolved tickets while ($row = hesk_dbFetchAssoc($res)) { if (isset($cat[$row['category']])) { $tickets[$row['category']]['resolved'] += $row['num_tickets']; } else { // Category deleted $tickets[9999]['resolved'] += $row['num_tickets']; } $totals['resolved'] += $row['num_tickets']; } // Convert total seconds worked to HH:MM:SS $totals['worked'] = hesk_SecondsToHHMMSS($totals['worked']); if ( isset($tickets[9999]) ) { $tickets[9999]['worked'] = hesk_SecondsToHHMMSS($tickets[9999]['worked']); } ?> 10) { ?> $d) { ?>
0, 'resolved' => 0, 'tickets' => 0, 'replies' => 0, 'worked' => 0); // Get list of users $admins = array(); // I. ADMINISTRATORS can view all users if ($_SESSION['isadmin'] || hesk_checkPermission('can_run_reports_full', 0) ) { // -> get list of users $res = hesk_dbQuery("SELECT `id`,`name` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."users` ORDER BY `id` ASC"); // -> populate $admins and $tickets arrays while ($row=hesk_dbFetchAssoc($res)) { $admins[$row['id']] = $row['name']; $tickets[$row['id']] = array( 'asstickets' => 0, 'resolved' => 0, 'tickets' => 0, 'replies' => 0, 'worked' => '', ); } // -> get list of tickets $res = hesk_dbQuery("SELECT `owner`, COUNT(*) AS `cnt`, SUM( TIME_TO_SEC(`time_worked`) ) AS `seconds_worked` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `owner` IN ('" . implode("','", array_keys($admins) ) . "') AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `owner`"); // -> update ticket list values while ($row = hesk_dbFetchAssoc($res)) { $tickets[$row['owner']]['asstickets'] += $row['cnt']; $totals['asstickets'] += $row['cnt']; $tickets[$row['owner']]['worked'] = hesk_SecondsToHHMMSS($row['seconds_worked']); $totals['worked'] += $row['seconds_worked']; } // -> get list of resolved tickets $res = hesk_dbQuery("SELECT `owner`, COUNT(*) AS `cnt` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `owner` IN ('" . implode("','", array_keys($admins) ) . "') AND `status` IN (SELECT `ID` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `IsClosed` = 1) AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `owner`"); // -> update resolved ticket list values while ($row = hesk_dbFetchAssoc($res)) { $tickets[$row['owner']]['resolved'] += $row['cnt']; $totals['resolved'] += $row['cnt']; } // -> get number of replies $res = hesk_dbQuery("SELECT `staffid`, COUNT(*) AS `cnt`, COUNT(DISTINCT `replyto`) AS `tcnt` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` WHERE `staffid` IN ('" . implode("','", array_keys($admins) ) . "') AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `staffid`"); // -> update number of replies values while ($row = hesk_dbFetchAssoc($res)) { $tickets[$row['staffid']]['tickets'] += $row['tcnt']; $tickets[$row['staffid']]['replies'] += $row['cnt']; $totals['tickets'] += $row['tcnt']; $totals['replies'] += $row['cnt']; } } // II. OTHER STAFF may only see their own stats else { $admins[$_SESSION['id']] = $_SESSION['name']; // -> get list of tickets $res = hesk_dbQuery("SELECT COUNT(*) AS `cnt`, SUM( TIME_TO_SEC(`time_worked`) ) AS `seconds_worked` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `owner` = '" . intval($_SESSION['id']) . "' AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "'"); $row = hesk_dbFetchAssoc($res); // -> update ticket values $tickets[$_SESSION['id']]['asstickets'] = $row['cnt']; $totals['asstickets'] = $row['cnt']; $tickets[$_SESSION['id']]['worked'] = hesk_SecondsToHHMMSS($row['seconds_worked']); $totals['worked'] += $row['seconds_worked']; // -> get list of resolved tickets $res = hesk_dbQuery("SELECT COUNT(*) AS `cnt` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `owner` = '" . intval($_SESSION['id']) . "' AND `status`='3' AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "'"); $row = hesk_dbFetchAssoc($res); // -> update resolved ticket values $tickets[$_SESSION['id']]['resolved'] = $row['cnt']; $totals['resolved'] = $row['cnt']; // -> get number of replies $res = hesk_dbQuery("SELECT COUNT(*) AS `cnt`, COUNT(DISTINCT `replyto`) AS `tcnt` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` WHERE `staffid` = '" . intval($_SESSION['id']) . "' AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "'"); $row = hesk_dbFetchAssoc($res); $tickets[$_SESSION['id']]['tickets'] = $row['tcnt']; $tickets[$_SESSION['id']]['replies'] = $row['cnt']; $totals['tickets'] = $row['tcnt']; $totals['replies'] = $row['cnt']; } // Convert total seconds worked to HH:MM:SS $totals['worked'] = hesk_SecondsToHHMMSS($totals['worked']); ?> 10) { ?> $d) { ?>
0, 'resolved' => 0, 'worked' => 0); $dt = MonthsArray($date_from,$date_to); // Pre-populate date values foreach ($dt as $month) { $tickets[$month] = array( 'all' => 0, 'resolved' => 0, 'worked' => '', ); } // SQL query for all $res = hesk_dbQuery("SELECT YEAR(`dt`) AS `myyear`, MONTH(`dt`) AS `mymonth`, COUNT(*) AS `cnt`, SUM( TIME_TO_SEC(`time_worked`) ) AS `seconds_worked` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE " . ( $can_run_reports_full ? '1' : "`owner` = '" . intval($_SESSION['id']) . "'" ) . " AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `myyear`,`mymonth`"); // Update ticket values while ($row = hesk_dbFetchAssoc($res)) { $row['mymonth'] = sprintf('%02d',$row['mymonth']); $tickets[$row['myyear'].'-'.$row['mymonth'].'-01']['all'] += $row['cnt']; $tickets[$row['myyear'].'-'.$row['mymonth'].'-01']['worked'] = hesk_SecondsToHHMMSS($row['seconds_worked']); $totals['all'] += $row['cnt']; $totals['worked'] += $row['seconds_worked']; } // SQL query for resolved $res = hesk_dbQuery("SELECT YEAR(`dt`) AS `myyear`, MONTH(`dt`) AS `mymonth`, COUNT(*) AS `cnt` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE " . ( $can_run_reports_full ? '1' : "`owner` = '" . intval($_SESSION['id']) . "'" ) . " AND `status` = '3' AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `myyear`,`mymonth`"); // Update ticket values while ($row = hesk_dbFetchAssoc($res)) { $row['mymonth'] = sprintf('%02d',$row['mymonth']); $tickets[$row['myyear'].'-'.$row['mymonth'].'-01']['resolved'] += $row['cnt']; $totals['resolved'] += $row['cnt']; } // Convert total seconds worked to HH:MM:SS $totals['worked'] = hesk_SecondsToHHMMSS($totals['worked']); ?> 10) { ?> $d) { ?>
0, 'resolved' => 0, 'worked' => 0); $dt = DateArray($date_from,$date_to); // Pre-populate date values foreach ($dt as $day) { $tickets[$day] = array( 'all' => 0, 'resolved' => 0, 'worked' => '', ); } // SQL query for all $res = hesk_dbQuery("SELECT DATE(`dt`) AS `mydt`, COUNT(*) AS `cnt`, SUM( TIME_TO_SEC(`time_worked`) ) AS `seconds_worked` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE " . ( $can_run_reports_full ? '1' : "`owner` = '" . intval($_SESSION['id']) . "'" ) . " AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `mydt`"); // Update ticket values while ($row = hesk_dbFetchAssoc($res)) { $tickets[$row['mydt']]['all'] += $row['cnt']; $tickets[$row['mydt']]['worked'] = hesk_SecondsToHHMMSS($row['seconds_worked']); $totals['all'] += $row['cnt']; $totals['worked'] += $row['seconds_worked']; } // SQL query for resolved $res = hesk_dbQuery("SELECT DATE(`dt`) AS `mydt`, COUNT(*) AS `cnt` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE " . ( $can_run_reports_full ? '1' : "`owner` = '" . intval($_SESSION['id']) . "'" ) . " AND `status` IN (SELECT `ID` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `IsClosed` = 1) AND DATE(`dt`) BETWEEN '" . hesk_dbEscape($date_from) . "' AND '" . hesk_dbEscape($date_to) . "' GROUP BY `mydt`"); // Update ticket values while ($row = hesk_dbFetchAssoc($res)) { $tickets[$row['mydt']]['resolved'] += $row['cnt']; $totals['resolved'] += $row['cnt']; } // Convert total seconds worked to HH:MM:SS $totals['worked'] = hesk_SecondsToHHMMSS($totals['worked']); ?> 10) { ?> $d) { ?>