| Current Path : /var/www/html/administrator/components/com_jssupportticket/models/ |
| Current File : /var/www/html/administrator/components/com_jssupportticket/models/export.php |
<?php
/**
* @Copyright Copyright (C) 2015 ... Ahmad Bilal
* @license GNU/GPL http://www.gnu.org/copyleft/gpl.html
* Company: Buruj Solutions
+ Contact: www.burujsolutions.com , info@burujsolutions.com
* Created on: May 22, 2015
^
+ Project: JS Tickets
^
*/
defined('_JEXEC') or die('Not Allowed');
jimport('joomla.application.component.model');
jimport('joomla.html.html');
class JSSupportticketModelExport extends JSSupportTicketModel {
function __construct() {
parent::__construct();
}
private function getOverallExportData(){
$db = $this->getDBO();
//Overall Data by status
$result = array();
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL)";
$db->setQuery($query);
$result['bystatus']['openticket'] = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4";
$db->setQuery($query);
$result['bystatus']['closeticket'] = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0";
$db->setQuery($query);
$result['bystatus']['answeredticket'] = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4";
$db->setQuery($query);
$result['bystatus']['overdueticket'] = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00')";
$db->setQuery($query);
$result['bystatus']['pendingticket'] = $db->loadResult();
//Overall tickets by departments
$query = "SELECT dept.departmentname,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE departmentid = dept.id) AS totalticket
FROM `#__js_ticket_departments` AS dept";
$db->setQuery($query);
$result['bydepartments'] = $db->loadObjectList();
//Overall tickets by prioritys
$query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id) AS totalticket
FROM `#__js_ticket_priorities` AS priority";
$db->setQuery($query);
$result['bypriority'] = $db->loadObjectList();
//Overall tickets by medium
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE ticketviaemail = 1";
$db->setQuery($query);
$result['bymedium']['ticketviaemail'] = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE ticketviaemail = 0";
$db->setQuery($query);
$result['bymedium']['directticket'] = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_replies` WHERE ticketviaemail = 1";
$db->setQuery($query);
$result['bymedium']['replyviaemail'] = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_replies` WHERE ticketviaemail = 0";
$db->setQuery($query);
$result['bymedium']['directreply'] = $db->loadResult();
//Overall tickets by staffmembers
$query = "SELECT CONCAT(staff.firstname,' ',staff.lastname) AS name ,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE staffid = staff.id) AS totalticket
FROM `#__js_ticket_staff` AS staff";
$db->setQuery($query);
$result['bystaff'] = $db->loadObjectList();
return $result;
}
function setOverallExport(){
$tb = "\t";
$nl = "\n";
$result = $this->getOverallExportData();
if(empty($result))
return null;
// by staus
$data = '';
$data = JText::_('JS Support Ticket Overall Reports').$nl.$nl;
$data .= JText::_('Tickets By Status').$nl;
$data .= JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
$data .= '"'.$result['bystatus']['openticket'].'"'.$tb.'"'.$result['bystatus']['answeredticket'].'"'.$tb.'"'.$result['bystatus']['closeticket'].'"'.$tb.'"'.$result['bystatus']['pendingticket'].'"'.$tb.'"'.$result['bystatus']['overdueticket'].'"'.$nl.$nl.$nl;
// by dep
$data .= JText::_('Tickets By Departments').$nl.$nl;
if(!empty($result['bydepartments'])){
foreach ($result['bydepartments'] as $key) {
$data .= JText::_($key->departmentname).$tb;
}
$data .= $nl;
foreach ($result['bydepartments'] as $key) {
$data .= '"'.$key->totalticket.'"'.$tb;
}
$data .= $nl.$nl.$nl;
}
// by pri
$data .= JText::_('Tickets By Priorities').$nl.$nl;
if(!empty($result['bypriority'])){
foreach ($result['bypriority'] as $key) {
$data .= JText::_($key->priority).$tb;
}
$data .= $nl;
foreach ($result['bypriority'] as $key) {
$data .= '"'.$key->totalticket.'"'.$tb;
}
$data .= $nl.$nl.$nl;
}
// by channel
$data .= JText::_('Tickets By Channel').$nl.$nl;
$data .= JText::_('Direct').$tb.JText::_('Direct reply').$tb.JText::_('Email').$tb.JText::_('Email reply').$nl;
$data .= '"'.$result['bymedium']['directticket'].'"'.$tb.'"'.$result['bymedium']['directreply'].'"'.$tb.'"'.$result['bymedium']['ticketviaemail'].'"'.$tb.'"'.$result['bymedium']['replyviaemail'].'"'.$nl.$nl.$nl;
// by staff
$data .= JText::_('Tickets By staff').$nl.$nl;
if(!empty($result['bystaff'])){
foreach ($result['bystaff'] as $key) {
$data .= JText::_($key->name).$tb;
}
$data .= $nl;
foreach ($result['bystaff'] as $key) {
$data .= '"'.$key->totalticket.'"'.$tb;
}
}
return $data;
}
private function getStaffExportData(){
$db = $this->getDBO();
$curdate = JFactory::getApplication()->input->get('date_start');
$fromdate = JFactory::getApplication()->input->get('date_end');
$uid = JFactory::getApplication()->input->get('uid');
if( empty($curdate) OR empty($fromdate))
return null;
if($uid)
if(! is_numeric($uid))
return null;
$result['curdate'] = $curdate;
$result['fromdate'] = $fromdate;
$result['uid'] = $uid;
$staffid = $this->getJSModel('staff')->getStaffId($uid);
$result['name'] = $this->getJSModel('staff')->getMyName($staffid);
$tmp = $curdate;
$curdate = $fromdate;
$fromdate = $tmp;
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $fromdate);
$fromdate = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $curdate);
$curdate = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $fromdate);
$fromdate = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $curdate);
$curdate = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$fromdate = JHTML::_('date',strtotime($fromdate),"Y-m-d H:i:s" );
$curdate = JHTML::_('date',strtotime($curdate),"Y-m-d H:i:s" );
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$result['openticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$result['closeticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$result['answeredticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$result['overdueticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND status != 4 AND isoverdue != 1 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$result['pendingticket'] = $db->loadObjectList();
$query = "SELECT staff.photo,staff.id,staff.firstname,staff.lastname,staff.username,staff.email,user.name AS display_name,user.email AS user_email,user.username AS user_nicename,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS pendingticket,
(SELECT AVG(feed.rating) FROM `#__js_ticket_feedbacks` AS feed JOIN `#__js_ticket_tickets` AS ticket ON ticket.id= feed.ticketid WHERE date(ticket.created) <= " . $db->quote($curdate) . " AND date(ticket.created) >= " . $db->quote($fromdate) . " AND ticket.staffid = staff.id) AS avragerating
FROM `#__js_ticket_staff` AS staff
JOIN `#__users` AS user ON user.id = staff.uid";
if($uid) $query .= ' WHERE staff.uid = '.$uid;
$db->setQuery($query);
$staffs = $db->loadObjectList();
foreach ($staffs as $staff) {
$staff->time = $this->getJSModel('staff')->getAverageTimeByStaffId($staff->id);// time 0 contains avergage time in seconds and 1 contains wheter it is conflicted or not
}
$result['staffs'] = $staffs;
return $result;
}
function setStaffMemberExport(){
$db = $this->getDBO();
$tb = "\t";
$nl = "\n";
$result = $this->getStaffExportData();
if(empty($result))
return '';
$fromdate = date('Y-m-d',strtotime($result['curdate']));
$todate = date('Y-m-d',strtotime($result['fromdate']));
if($result['uid']){
$data = JText::_('Report By').' '.$result['name'].' '.JText::_('staff member').' '.JText::_('From').' '.$fromdate.'-'.JText::_('To').' '.$todate.$nl.$nl;
}else{
$data = JText::_('Report By Staff Members').' '.JText::_('From').' '.$fromdate.'-'.JText::_('To').' '.$todate.$nl.$nl;
}
// By 1 month
$data .= JText::_('Ticket status by days').$nl.$nl;
$data .= JText::_('Date').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
while (strtotime($fromdate) <= strtotime($todate)) {
$openticket = 0;
$closeticket = 0;
$answeredticket = 0;
$overdueticket = 0;
$pendingticket = 0;
foreach ($result['openticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$openticket += 1;
}
foreach ($result['closeticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$closeticket += 1;
}
foreach ($result['answeredticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$answeredticket += 1;
}
foreach ($result['overdueticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$overdueticket += 1;
}
foreach ($result['pendingticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$pendingticket += 1;
}
$data .= '"'.$fromdate.'"'.$tb.'"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl;
$fromdate = date("Y-m-d", strtotime("+1 day", strtotime($fromdate)));
}
$data .= $nl.$nl.$nl;
// END By 1 month
// by staus
$openticket = count($result['openticket']);
$closeticket = count($result['closeticket']);
$answeredticket = count($result['answeredticket']);
$overdueticket = count($result['overdueticket']);
$pendingticket = count($result['pendingticket']);
$data .= JText::_('Tickets By Status').$nl;
$data .= JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
$data .= '"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl.$nl.$nl;
// by staffs
$data .= JText::_('Tickets Staff').$nl.$nl;
if(!empty($result['staffs'])){
$data .= JText::_('Name').$tb.JText::_('username').$tb.JText::_('email').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$tb.JText::_('Average Rating').$tb.JText::_('Average Time').$nl;
foreach ($result['staffs'] as $key) {
if($key->firstname && $key->lastname){
$staffname = $key->firstname . ' ' . $key->lastname;
}else{
$staffname = $key->display_name;
}
if($key->username){
$username = $key->username;
}else{
$username = $key->user_nicename;
}
if($key->email){
$email = $key->email;
}else{
$email = $key->user_email;
}
$hours = floor($key->time[0] / 3600);
$mins = floor($key->time[0] / 60 % 60);
$secs = floor($key->time[0] % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= '"'.$staffname.'"'.$tb.'"'.$username.'"'.$tb.'"'.$email.'"'.$tb.'"'.$key->openticket.'"'.$tb.'"'.$key->answeredticket.'"'.$tb.'"'.$key->closeticket.'"'.$tb.'"'.$key->pendingticket.'"'.$tb.'"'.$key->overdueticket.'"'.$tb.'"'. round($key->avragerating,2).'"'.$tb.'"'.$time.'"'.$nl;
}
$data .= $nl.$nl.$nl;
}
return $data;
}
private function getStaffExportDataByStaffId(){
$db = $this->getDBO();
$curdate = JFactory::getApplication()->input->get('date_start');
$fromdate = JFactory::getApplication()->input->get('date_end');
$id = JFactory::getApplication()->input->get('uid');
if( empty($curdate) OR empty($fromdate))
return null;
if(! is_numeric($id))
return null;
$result['curdate'] = $curdate;
$result['fromdate'] = $fromdate;
$result['id'] = $id;
$tmp = $curdate;
$curdate = $fromdate;
$fromdate = $tmp;
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $fromdate);
$fromdate = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $curdate);
$curdate = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $fromdate);
$fromdate = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $curdate);
$curdate = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$fromdate = JHTML::_('date',strtotime($fromdate),"Y-m-d H:i:s" );
$curdate = JHTML::_('date',strtotime($curdate),"Y-m-d H:i:s" );
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$result['openticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$result['closeticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$result['answeredticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$result['overdueticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$result['pendingticket'] = $db->loadObjectList();
$query = "SELECT staff.photo,staff.id,staff.firstname,staff.lastname,staff.username,staff.email,user.name AS display_name,user.email AS user_email,user.username AS user_nicename,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS pendingticket ,
(SELECT AVG(feed.rating) FROM `#__js_ticket_feedbacks` AS feed JOIN `#__js_ticket_tickets` AS ticket ON ticket.id= feed.ticketid WHERE date(ticket.created) <= " . $db->quote($curdate) . " AND date(ticket.created) >= " . $db->quote($fromdate) . " AND ticket.staffid = staff.id) AS avragerating
FROM `#__js_ticket_staff` AS staff
JOIN `#__users` AS user ON user.id = staff.uid
WHERE staff.id = ".$id;
$db->setQuery($query);
$staff = $db->loadObject();
$staff->time = $this->getJSModel('staff')->getAverageTimeByStaffId($staff->id);// time 0 contains avergage time in seconds and 1 contains wheter it is conflicted or not
$result['staffs'] = $staff;
//Tickets
$query = "SELECT ticket.*,priority.priority, priority.prioritycolour , feedback.rating
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
LEFT JOIN `#__js_ticket_feedbacks` AS feedback ON feedback.ticketid = ticket.id
WHERE staffid = ".$id." AND date(ticket.created) >= " . $db->quote($fromdate) . " AND date(ticket.created) <= " . $db->quote($curdate);
$db->setQuery($query);
$result['tickets'] = $db->loadObjectList();
foreach ($result['tickets'] as $ticket) {
$ticket->time = $this->getJSModel('staff')->getTimeTakenByTicketId($ticket->id);
}
return $result;
}
function setStaffMemberExportByStaffId(){
$db = $this->getDBO();
$tb = "\t";
$nl = "\n";
$result = $this->getStaffExportDataByStaffId();
if(empty($result))
return '';
$fromdate = date('Y-m-d',strtotime($result['curdate']));
$todate = date('Y-m-d',strtotime($result['fromdate']));
$data = JText::_('Report By staff member').' '.JText::_('From').' '.$fromdate.' - '.$todate.$nl.$nl;
// By 1 month
$data .= JText::_('Ticket status by days').$nl.$nl;
$data .= JText::_('Date').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
while (strtotime($fromdate) <= strtotime($todate)) {
$openticket = 0;
$closeticket = 0;
$answeredticket = 0;
$overdueticket = 0;
$pendingticket = 0;
foreach ($result['openticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$openticket += 1;
}
foreach ($result['closeticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$closeticket += 1;
}
foreach ($result['answeredticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$answeredticket += 1;
}
foreach ($result['overdueticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$overdueticket += 1;
}
foreach ($result['pendingticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$pendingticket += 1;
}
$data .= '"'.$fromdate.'"'.$tb.'"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl;
$fromdate = date("Y-m-d", strtotime("+1 day", strtotime($fromdate)));
}
$data .= $nl.$nl.$nl;
// END By 1 month
// by staffs
$data .= JText::_('Tickets Staff').$nl.$nl;
if(!empty($result['staffs'])){
$data .= JText::_('Name').$tb.JText::_('username').$tb.JText::_('email').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$tb.JText::_('Average Rating').$tb.JText::_('Average Time').$nl;
$key = $result['staffs'];
if($key->firstname && $key->lastname){
$staffname = $key->firstname . ' ' . $key->lastname;
}else{
$staffname = $key->display_name;
}
if($key->username){
$username = $key->username;
}else{
$username = $key->user_nicename;
}
if($key->email){
$email = $key->email;
}else{
$email = $key->user_email;
}
$hours = floor($key->time[0] / 3600);
$mins = floor($key->time[0] / 60 % 60);
$secs = floor($key->time[0] % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= '"'.$staffname.'"'.$tb.'"'.$username.'"'.$tb.'"'.$email.'"'.$tb.'"'.$key->openticket.'"'.$tb.'"'.$key->answeredticket.'"'.$tb.'"'.$key->closeticket.'"'.$tb.'"'.$key->pendingticket.'"'.$tb.'"'.$key->overdueticket.'"'.$tb.'"'. round($key->avragerating,2).'"'.$tb.'"'.$time.'"'.$nl;
$data .= $nl.$nl.$nl;
}
// by priorits tickets
$data .= JText::_('Tickets').$nl.$nl;
if(!empty($result['tickets'])){
$data .= JText::_('Subject').$tb.JText::_('Status').$tb.JText::_('Priority').$tb.JText::_('Created').$tb.JText::_('Rating').$tb.JText::_('Time').$nl;
$status = '';
foreach ($result['tickets'] as $ticket) {
switch($ticket->status){
case 0:
$status = JText::_('New');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 1:
$status = JText::_('Pending');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 2:
$status = JText::_('In Progress');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 3:
$status = JText::_('Answered');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 4:
$status = JText::_('Closed');
break;
}
$created = date('Y-m-d',strtotime($ticket->created));
$hours = floor($ticket->time / 3600);
$mins = floor($ticket->time / 60 % 60);
$secs = floor($ticket->time % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= '"'.$ticket->subject.'"'.$tb.'"'.$status.'"'.$tb.'"'.$ticket->priority.'"'.$tb.'"'.$created.'"'.$tb.'"'.$ticket->rating.'"'.$tb.'"'.$time.'"'.$nl;
}
$data .= $nl.$nl.$nl;
}
return $data;
}
private function getUsersExportData(){
$db = $this->getDBO();
$curdate = JFactory::getApplication()->input->get('date_start');
$fromdate = JFactory::getApplication()->input->get('date_end');
$uid = JFactory::getApplication()->input->get('uid');
if( empty($curdate) OR empty($fromdate))
return null;
if($uid)
if(! is_numeric($uid))
return null;
$result['curdate'] = $curdate;
$result['fromdate'] = $fromdate;
$result['uid'] = $uid;
$tmp = $curdate;
$curdate = $fromdate;
$fromdate = $tmp;
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $fromdate);
$fromdate = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $curdate);
$curdate = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $fromdate);
$fromdate = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $curdate);
$curdate = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$fromdate = JHTML::_('date',strtotime($fromdate),"Y-m-d H:i:s" );
$curdate = JHTML::_('date',strtotime($curdate),"Y-m-d H:i:s" );
$result['username'] = $this->getJSModel('staff')->getUserNameById($uid);
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$result['openticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$result['closeticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$result['answeredticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$result['overdueticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$result['pendingticket'] = $db->loadObjectList();
$query = "SELECT user.name AS display_name,user.email AS user_email,user.username AS user_nicename,user.id,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS pendingticket
FROM `#__users` AS user
WHERE NOT EXISTS (SELECT id FROM `#__js_ticket_staff` WHERE uid = user.id)";
if($uid) $query .= " AND user.id = ".$uid;
$db->setQuery($query);
$users = $db->loadObjectList();
$result['users'] = $users;
return $result;
}
function setUsersExport(){
$db = $this->getDBO();
$tb = "\t";
$nl = "\n";
$result = $this->getUsersExportData();
if(empty($result))
return '';
$fromdate = date('Y-m-d',strtotime($result['curdate']));
$todate = date('Y-m-d',strtotime($result['fromdate']));
if($result['uid']){
$data = JText::_('User report').' '.$result['username'].' '.JText::_('From').' '.$fromdate.' - '.$todate.$nl.$nl;
}else{
$data = JText::_('Users report').' '.JText::_('From').' '.$fromdate.' - '.$todate.$nl.$nl;
}
// By 1 month
$data .= JText::_('Ticket status by days').$nl.$nl;
$data .= JText::_('Date').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
while (strtotime($fromdate) <= strtotime($todate)) {
$openticket = 0;
$closeticket = 0;
$answeredticket = 0;
$overdueticket = 0;
$pendingticket = 0;
foreach ($result['openticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$openticket += 1;
}
foreach ($result['closeticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$closeticket += 1;
}
foreach ($result['answeredticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$answeredticket += 1;
}
foreach ($result['overdueticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$overdueticket += 1;
}
foreach ($result['pendingticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$pendingticket += 1;
}
$data .= '"'.$fromdate.'"'.$tb.'"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl;
$fromdate = date("Y-m-d", strtotime("+1 day", strtotime($fromdate)));
}
$data .= $nl.$nl.$nl;
// END By 1 month
// by staus
$openticket = count($result['openticket']);
$closeticket = count($result['closeticket']);
$answeredticket = count($result['answeredticket']);
$overdueticket = count($result['overdueticket']);
$pendingticket = count($result['pendingticket']);
$data .= JText::_('Tickets By Status').$nl;
$data .= JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
$data .= '"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl.$nl.$nl;
// by staffs
$data .= JText::_('Users tickets').$nl.$nl;
if(!empty($result['users'])){
$data .= JText::_('Name').$tb.JText::_('username').$tb.JText::_('email').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
foreach ($result['users'] as $key) {
$name = $key->display_name;
$username = $key->user_nicename;
$email = $key->user_email;
$data .= '"'.$name.'"'.$tb.'"'.$username.'"'.$tb.'"'.$email.'"'.$tb.'"'.$key->openticket.'"'.$tb.'"'.$key->answeredticket.'"'.$tb.'"'.$key->closeticket.'"'.$tb.'"'.$key->pendingticket.'"'.$tb.'"'.$key->overdueticket.'"'.$nl;
}
$data .= $nl.$nl.$nl;
}
return $data;
}
private function getUserDetailReportByUserId(){
$db = $this->getDBO();
$curdate = JFactory::getApplication()->input->get('date_start');
$fromdate = JFactory::getApplication()->input->get('date_end');
$id = JFactory::getApplication()->input->get('uid');
if( empty($curdate) OR empty($fromdate))
return null;
if(! is_numeric($id))
return null;
$result['curdate'] = $curdate;
$result['fromdate'] = $fromdate;
$result['id'] = $id;
$tmp = $curdate;
$curdate = $fromdate;
$fromdate = $tmp;
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $fromdate);
$fromdate = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $curdate);
$curdate = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $fromdate);
$fromdate = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $curdate);
$curdate = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$fromdate = JHTML::_('date',strtotime($fromdate),"Y-m-d H:i:s" );
$curdate = JHTML::_('date',strtotime($curdate),"Y-m-d H:i:s" );
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$result['openticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$result['closeticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$result['answeredticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$result['overdueticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$result['pendingticket'] = $db->loadObjectList();
//user detail
$query = "SELECT user.name AS display_name,user.email AS user_email,user.username AS user_nicename,user.id,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS pendingticket
FROM `#__users` AS user
WHERE user.id = ".$id;
$db->setQuery($query);
$user = $db->loadObject();
$result['users'] = $user;
//Tickets
$query = "SELECT ticket.*,priority.priority, priority.prioritycolour , feedback.rating
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
LEFT JOIN `#__js_ticket_feedbacks` AS feedback ON feedback.ticketid = ticket.id
WHERE uid = ".$id." AND date(ticket.created) >= " . $db->quote($fromdate) . " AND date(ticket.created) <= " . $db->quote($curdate);
$db->setQuery($query);
$result['tickets'] = $db->loadObjectList();
foreach ($result['tickets'] as $ticket) {
$ticket->time = $this->getJSModel('staff')->getTimeTakenByTicketId($ticket->id);
}
return $result;
}
function setUserExportByuid(){
$db = $this->getDBO();
$tb = "\t";
$nl = "\n";
$result = $this->getUserDetailReportByUserId();
if(empty($result))
return '';
$fromdate = date('Y-m-d',strtotime($result['curdate']));
$todate = date('Y-m-d',strtotime($result['fromdate']));
$data = JText::_('User Report').' '.JText::_('From').' '.$fromdate.' - '.$todate.$nl.$nl;
// By 1 month
$data .= JText::_('Ticket status by days').$nl.$nl;
$data .= JText::_('Date').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
while (strtotime($fromdate) <= strtotime($todate)) {
$openticket = 0;
$closeticket = 0;
$answeredticket = 0;
$overdueticket = 0;
$pendingticket = 0;
foreach ($result['openticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$openticket += 1;
}
foreach ($result['closeticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$closeticket += 1;
}
foreach ($result['answeredticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$answeredticket += 1;
}
foreach ($result['overdueticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$overdueticket += 1;
}
foreach ($result['pendingticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$pendingticket += 1;
}
$data .= '"'.$fromdate.'"'.$tb.'"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl;
$fromdate = date("Y-m-d", strtotime("+1 day", strtotime($fromdate)));
}
$data .= $nl.$nl.$nl;
// END By 1 month
// by staffs
$data .= JText::_('Users Ticekts').$nl.$nl;
if(!empty($result['users'])){
$data .= JText::_('Name').$tb.JText::_('username').$tb.JText::_('email').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
$key = $result['users'];
$staffname = $key->display_name;
$username = $key->user_nicename;
$email = $key->user_email;
$data .= '"'.$staffname.'"'.$tb.'"'.$username.'"'.$tb.'"'.$email.'"'.$tb.'"'.$key->openticket.'"'.$tb.'"'.$key->answeredticket.'"'.$tb.'"'.$key->closeticket.'"'.$tb.'"'.$key->pendingticket.'"'.$tb.'"'.$key->overdueticket.'"'.$nl;
$data .= $nl.$nl.$nl;
}
// by priorits tickets
$data .= JText::_('Tickets').$nl.$nl;
if(!empty($result['tickets'])){
$data .= JText::_('Subject').$tb.JText::_('Status').$tb.JText::_('Priority').$tb.JText::_('Created').$tb.JText::_('Rating').$tb.JText::_('Time').$nl;
$status = '';
foreach ($result['tickets'] as $ticket) {
switch($ticket->status){
case 0:
$status = JText::_('New');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 1:
$status = JText::_('Pending');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 2:
$status = JText::_('In Progress');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 3:
$status = JText::_('Answered');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 4:
$status = JText::_('Closed');
break;
}
$created = date('Y-m-d',strtotime($ticket->created));
$hours = floor($ticket->time / 3600);
$mins = floor($ticket->time / 60 % 60);
$secs = floor($ticket->time % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= '"'.$ticket->subject.'"'.$tb.'"'.$status.'"'.$tb.'"'.$ticket->priority.'"'.$tb.'"'.$created.'"'.$tb.'"'.$ticket->rating.'"'.$tb.'"'.$time.'"'.$nl;
}
$data .= $nl.$nl.$nl;
}
return $data;
}
// new exports
private function getDepartmentExportDataByDepartmentId(){
$db = $this->getDBO();
$curdate = JFactory::getApplication()->input->get('date_start');
$fromdate = JFactory::getApplication()->input->get('date_end');
$id = JFactory::getApplication()->input->get('id');
if( empty($curdate) OR empty($fromdate))
return null;
if(! is_numeric($id))
return null;
$result['curdate'] = $curdate;
$result['fromdate'] = $fromdate;
$result['id'] = $id;
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND (lastreply = '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$result['openticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$result['closeticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$result['answeredticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$result['overdueticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$result['pendingticket'] = $db->loadObjectList();
$query = "SELECT department.id,department.departmentname,email.email,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND lastreply = '0000-00-00 00:00:00' AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS pendingticket
FROM `#__js_ticket_departments` AS department
LEFT JOIN `#__js_ticket_email` AS email ON department.emailid = email.id
WHERE department.id = ".$id;
$db->setQuery($query);
$depatments = $db->loadObject();
$result['depatments'] =$depatments;
//Tickets
$query = "SELECT ticket.*,priority.priority, priority.prioritycolour , feedback.rating
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
LEFT JOIN `#__js_ticket_feedbacks` AS feedback ON feedback.ticketid = ticket.id
WHERE departmentid = ".$id." AND date(ticket.created) >= " . $db->quote($curdate) . " AND date(ticket.created) <= " . $db->quote($fromdate) . " ";
$db->setQuery($query);
$result['tickets'] = $db->loadObjectList();
foreach ($result['tickets'] as $ticket) {
$ticket->time = $this->getJSModel('staff')->getTimeTakenByTicketId($ticket->id);
}
return $result;
}
function setDepartmentExportByDepartmentId(){
$db = $this->getDBO();
$tb = "\t";
$nl = "\n";
$result = $this->getDepartmentExportDataByDepartmentId();
if(empty($result))
return '';
$fromdate = date('Y-m-d',strtotime($result['curdate']));
$todate = date('Y-m-d',strtotime($result['fromdate']));
$data = JText::_('Report By department').' '.JText::_('From').' '.$fromdate.' - '.$todate.$nl.$nl;
// By 1 month
$data .= JText::_('Ticket status by days').$nl.$nl;
$data .= JText::_('Date').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
while (strtotime($fromdate) <= strtotime($todate)) {
$openticket = 0;
$closeticket = 0;
$answeredticket = 0;
$overdueticket = 0;
$pendingticket = 0;
foreach ($result['openticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$openticket += 1;
}
foreach ($result['closeticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$closeticket += 1;
}
foreach ($result['answeredticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$answeredticket += 1;
}
foreach ($result['overdueticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$overdueticket += 1;
}
foreach ($result['pendingticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$pendingticket += 1;
}
$data .= '"'.$fromdate.'"'.$tb.'"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl;
$fromdate = date("Y-m-d", strtotime("+1 day", strtotime($fromdate)));
}
$data .= $nl.$nl.$nl;
// END By 1 month
// by departments
$data .= JText::_('Tickets By Department').$nl.$nl;
if(!empty($result['departments'])){
$data .= JText::_('Department Name').$tb.JText::_('email').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
$key = $result['departments'];
$departmentname = $key->departmentname;
$email = $key->email;
$data .= '"'.$departmentname.'"'.$tb.'"'.$email.'"'.$tb.'"'.$key->openticket.'"'.$tb.'"'.$key->answeredticket.'"'.$tb.'"'.$key->closeticket.'"'.$tb.'"'.$key->pendingticket.'"'.$tb.'"'.$key->overdueticket.'"'.$nl;
$data .= $nl.$nl.$nl;
}
// by priorits tickets
$data .= JText::_('Tickets').$nl.$nl;
if(!empty($result['tickets'])){
$data .= JText::_('Subject').$tb.JText::_('Status').$tb.JText::_('Priority').$tb.JText::_('Created').$tb.JText::_('Rating').$tb.JText::_('Time').$nl;
$status = '';
foreach ($result['tickets'] as $ticket) {
$hours = floor($ticket->time / 3600);
$mins = floor($ticket->time / 60 % 60);
$secs = floor($ticket->time % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
switch($ticket->status){
case 0:
$status = JText::_('New');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 1:
$status = JText::_('Pending');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 2:
$status = JText::_('In Progress');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 3:
$status = JText::_('Answered');
if($ticket->isoverdue == 1)
$status = JText::_('Overdue');
break;
case 4:
$status = JText::_('Closed');
break;
}
$created = date('Y-m-d',strtotime($ticket->created));
$hours = floor($ticket->time / 3600);
$mins = floor($ticket->time / 60 % 60);
$secs = floor($ticket->time % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= '"'.$ticket->subject.'"'.$tb.'"'.$status.'"'.$tb.'"'.$ticket->priority.'"'.$tb.'"'.$created.'"'.$tb.'"'.$ticket->rating.'"'.$tb.'"'.$time.'"'.$nl;
}
$data .= $nl.$nl.$nl;
}
return $data;
}
private function getDepartmentExportData(){
$db = $this->getDBO();
$curdate = JFactory::getApplication()->input->get('date_start');
$fromdate = JFactory::getApplication()->input->get('date_end');
if( empty($curdate) OR empty($fromdate))
return null;
$result['curdate'] = $curdate;
$result['fromdate'] = $fromdate;
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
$db->setQuery($query);
$result['openticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
$db->setQuery($query);
$result['closeticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
$db->setQuery($query);
$result['answeredticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
$db->setQuery($query);
$result['overdueticket'] = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00' OR lastreply IS NOT NULL) AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate);
$db->setQuery($query);
$result['pendingticket'] = $db->loadObjectList();
$query = "SELECT department.id,department.departmentname,email.email,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($curdate) . " AND date(created) <= " . $db->quote($fromdate) . " AND departmentid = department.id) AS pendingticket
FROM `#__js_ticket_departments` AS department
LEFT JOIN `#__js_ticket_email` AS email ON department.emailid = email.id";
$db->setQuery($query);
$departments = $db->loadObjectList();
$result['departments'] = $departments;
return $result;
}
function setDepartmentExport(){
$db = $this->getDBO();
$tb = "\t";
$nl = "\n";
$result = $this->getDepartmentExportData();
if(empty($result))
return '';
$fromdate = date('Y-m-d',strtotime($result['curdate']));
$todate = date('Y-m-d',strtotime($result['fromdate']));
$data = JText::_('Report By Departments').' '.JText::_('From').' '.$fromdate.'-'.JText::_('To').' '.$todate.$nl.$nl;
// By 1 month
$data .= JText::_('Ticket status by days').$nl.$nl;
$data .= JText::_('Date').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
while (strtotime($fromdate) <= strtotime($todate)) {
$openticket = 0;
$closeticket = 0;
$answeredticket = 0;
$overdueticket = 0;
$pendingticket = 0;
foreach ($result['openticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$openticket += 1;
}
foreach ($result['closeticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$closeticket += 1;
}
foreach ($result['answeredticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$answeredticket += 1;
}
foreach ($result['overdueticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$overdueticket += 1;
}
foreach ($result['pendingticket'] as $ticket) {
$ticket_date = date('Y-m-d', strtotime($ticket->created));
if($ticket_date == $fromdate)
$pendingticket += 1;
}
$data .= '"'.$fromdate.'"'.$tb.'"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl;
$fromdate = date("Y-m-d", strtotime("+1 day", strtotime($fromdate)));
}
$data .= $nl.$nl.$nl;
// END By 1 month
// by staus
$openticket = count($result['openticket']);
$closeticket = count($result['closeticket']);
$answeredticket = count($result['answeredticket']);
$overdueticket = count($result['overdueticket']);
$pendingticket = count($result['pendingticket']);
$data .= JText::_('Tickets By Status').$nl;
$data .= JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
$data .= '"'.$openticket.'"'.$tb.'"'.$answeredticket.'"'.$tb.'"'.$closeticket.'"'.$tb.'"'.$pendingticket.'"'.$tb.'"'.$overdueticket.'"'.$nl.$nl.$nl;
// by departments
$data .= JText::_('Tickets By Departments').$nl.$nl;
if(!empty($result['departments'])){
$data .= JText::_('Department Name').$tb.JText::_('email').$tb.JText::_('NEW').$tb.JText::_('Answered').$tb.JText::_('Closed').$tb.JText::_('Pending').$tb.JText::_('Overdue').$nl;
foreach ($result['departments'] as $key) {
$departmentname = $key->departmentname;
$email = $key->email;
$data .= '"'.$departmentname.'"'.$tb.'"'.$email.'"'.$tb.'"'.$key->openticket.'"'.$tb.'"'.$key->answeredticket.'"'.$tb.'"'.$key->closeticket.'"'.$tb.'"'.$key->pendingticket.'"'.$tb.'"'.$key->overdueticket.'"'.$nl;
}
$data .= $nl.$nl.$nl;
}
return $data;
}
private function getTicketsDataForExport(){
$db = $this->getDBO();
$data = JFactory::getApplication()->input->post->getArray();
$wherequery = '';
if(!empty($data)){
if(isset($data['startdate']) && $data['startdate'] != '' ){
$wherequery .= ' AND ticket.created >= '.$db->quote(date("Y-m-d",strtotime($data['startdate']))).' ';
}
if(isset($data['enddate']) && $data['enddate'] != '' ){
$wherequery .= ' AND ticket.created <= '.$db->quote(date("Y-m-d",strtotime($data['enddate']))).' ';
}
if(isset($data['departmentid']) && $data['departmentid'] != '' ){
$wherequery .= ' AND ticket.departmentid = '.$data['departmentid'];
}
if(isset($data['staffid']) && $data['staffid'] != '' ){
$wherequery .= ' AND ticket.staffid = '.$data['staffid'];
}
if(isset($data['priorityid']) && $data['priorityid'] != '' ){
$wherequery .= ' AND ticket.priorityid = '.$data['priorityid'];
}
if(isset($data['uid']) && $data['uid'] != '' ){
$wherequery .= ' AND ticket.uid = '.$data['uid'];
}
if(isset($data['ticketstatus']) && $data['ticketstatus'] != '' ){
$wherequery .= ' AND ticket.status = '.$data['ticketstatus'];
}
if(isset($data['isoverdue']) && $data['isoverdue'] != '' ){
if($data['isoverdue'] == 1){
$wherequery .= ' AND ticket.isoverdue = '.$data['isoverdue'];
}else{
$wherequery .= ' AND ticket.isoverdue <> 1';
}
}
}
//Tickets
$query = "SELECT ticket.*,department.departmentname AS departmentname ,priority.priority AS priority,priority.prioritycolour AS prioritycolour,user.name AS display_name,user.email AS user_email,user.username AS user_nicename,
helptopic.topic AS helptopic ,CONCAT(staff.firstname ,' ' ,staff.lastname) AS staffname, staff.id AS staffid, staff.photo AS staffphoto, staffphoto.photo AS staffphotophoto,staffphoto.id AS staffphotoid,feedback.rating
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON ticket.priorityid = priority.id
LEFT JOIN `#__js_ticket_departments` AS department ON ticket.departmentid = department.id
LEFT JOIN `#__js_ticket_help_topics` AS helptopic ON ticket.helptopicid = helptopic.id
LEFT JOIN `#__js_ticket_staff` AS staff ON ticket.staffid = staff.id
LEFT JOIN `#__js_ticket_staff` AS staffphoto ON ticket.uid = staffphoto.uid
LEFT JOIN `#__users` AS user ON user.ID = ticket.uid
LEFT JOIN `#__js_ticket_feedbacks` AS feedback ON feedback.ticketid = ticket.id
WHERE 1 = 1 ";
$query .= $wherequery;
$db->setQuery($query);
$result['tickets'] = $db->loadObjectList();
$attachmentmodel = $this->getJSModel('attachments');
foreach ($result['tickets'] as $ticket) {
$query = "SELECT note.*,ticket.staffid AS staffid,CONCAT(staff.firstname,' ',staff.lastname) AS staffname,staff.photo AS staffphoto,staff.id AS staffid,time.usertime,time.systemtime,time.description
FROM `#__js_ticket_notes` AS note
LEFT JOIN `#__js_ticket_tickets` AS ticket ON note.ticketid = ticket.id
LEFT JOIN `#__js_ticket_staff` AS staff ON note.staffid = staff.id
LEFT JOIN `#__js_ticket_staff_time` AS time ON time.referenceid = note.id AND time.referencefor = 2
WHERE note.ticketid=" . $ticket->id . " ORDER BY note.created DESC ";
$db->setQuery($query);
$ticket->notes = $db->loadObjectList();
$query = "SELECT replies.*, staff.appendsignature AS appendsignature, staff.signature AS signature,
CONCAT(staff.firstname,' ',staff.lastname) AS staffname,staff.photo AS staffphoto,staff.id AS staffid, time.systemtime,time.usertime AS time,time.description
FROM`#__js_ticket_replies` AS replies
LEFT JOIN `#__js_ticket_staff` AS staff ON replies.staffid = staff.id
LEFT JOIN `#__js_ticket_staff_time` AS time ON time.referenceid = replies.id AND time.referencefor = 1
WHERE replies.ticketid = " . $ticket->id . " ORDER BY replies.created ASC";
$db->setQuery($query);
$replies = $db->loadObjectList();
foreach ($replies AS $reply) {
$reply->attachments = $attachmentmodel->getAttachmentForReply($ticket->id, $reply->id);
}
$ticket->replies = $replies;
$query = "SELECT * FROM `#__js_ticket_attachments` WHERE ticketid = ".$ticket->id ." AND replyattachmentid = 0 ";
$db->setQuery($query);
$attachments = $db->loadObjectList();
$ticket->attachments = $attachments;
}
return $result;
}
function setTicketsExport(){
$db = $this->getDBO();
$tb = "\t";
$nl = "\n";
$result = $this->getTicketsDataForExport();
if(empty($result))
return '';
$data = JText::_('Tickets Data').$nl.$nl;
// by priorits tickets
$data .= JText::_('Tickets').$nl.$nl;
if(!empty($result['tickets'])){
$status = '';
$customfields = getCustomFieldClass()->userFieldsData(1);// custom fields
// attachment path
$config = $this->getJSModel('config')->getConfigs();
$datadirectory = $config['data_directory'];
$path = JUri::root();
$path = $path .'/'.$datadirectory;
$path = $path . '/attachmentdata';
foreach ($result['tickets'] as $ticket) {
// attachment directory
$folder = $path . '/ticket/' . $ticket->attachmentdir;
// custom fields for individaul tickets
$data .=
JText::_('Subject').$tb.
JText::_('Message').$tb.
JText::_('Status').$tb.
JText::_('Overdue').$tb.
JText::_('Priority').$tb.
JText::_('Ticket Id').$tb.
JText::_('Department').$tb.
JText::_('Assigned To').$tb.
JText::_('Rating').$tb.
JText::_('Created').$tb.
JText::_('Last Reply').$tb.
JText::_('Requester Name').$tb.
JText::_('Requester Email').$tb.
JText::_('Requester Phone').$tb.
JText::_('Requester help Topic').$tb;
foreach ($customfields as $field) {// custom fields
$array = getCustomFieldClass()->showCustomFields($field,5, $ticket->params,false);
$data .= JText::_($array['title']).$tb;
}
foreach ($ticket->attachments AS $attachment) {// attachments
$data .= JText::_('Ticket Attachment').$tb;
}
foreach ($ticket->notes AS $note) {// Internal notes
$data .= JText::_('Posted By').$tb;
$data .= JText::_('Note Title').$tb;
$data .= JText::_('Note Message').$tb;
$data .= JText::_('Posted Date').$tb;
$data .= JText::_('Note Attachment').$tb;
$data .= JText::_('User Time').$tb;
$data .= JText::_('System Time').$tb;
$data .= JText::_('Edit reason').$tb;
}
foreach ($ticket->replies AS $reply) {// ticket Replies
$data .= JText::_('Reply Date').$tb;
$data .= JText::_('Reply By').$tb;
$data .= JText::_('Message').$tb;
foreach ($reply->attachments AS $attachment) {
$data .= JText::_('Reply Attachment').$tb;
}
if($reply->staffid !=0){
$data .= JText::_('User Time').$tb;
$data .= JText::_('System Time').$tb;
$data .= JText::_('Edit Reason').$tb;
}
}
$data .= $nl;
$overdue = ' ';
$status = ' ';
switch($ticket->status){
case 0:
$status = JText::_('New');
if($ticket->isoverdue == 1)
$overdue = JText::_('Overdue');
break;
case 1:
$status = JText::_('Pending');
if($ticket->isoverdue == 1)
$overdue = JText::_('Overdue');
break;
case 2:
$status = JText::_('In Progress');
if($ticket->isoverdue == 1)
$overdue = JText::_('Overdue');
break;
case 3:
$status = JText::_('Answered');
if($ticket->isoverdue == 1)
$overdue = JText::_('Overdue');
break;
case 4:
$status = JText::_('Closed');
break;
}
$created = date('Y-m-d',strtotime($ticket->created));
$lastreply = date('Y-m-d',strtotime($ticket->lastreply));
$data .= '"'.
$ticket->subject.'"'.$tb.'"'.
$ticket->message.'"'.$tb.'"'.
$status.'"'.$tb.'"'.
$overdue.'"'.$tb.'"'.
$ticket->priority.'"'.$tb.'"'.
$ticket->ticketid.'"'.$tb.'"'.
$ticket->departmentname.'"'.$tb.'"'.
$ticket->staffname.'"'.$tb.'"'.
$ticket->rating.'"'.$tb.'"'.
$created.'"'.$tb.'"'.
$lastreply.'"'.$tb.'"'.
$ticket->name.'"'.$tb.'"'.
$ticket->email.'"'.$tb.'"'.
$ticket->phone.'"'.$tb.'"'.
$ticket->helptopic.'"'.$tb.'"';
foreach ($customfields as $field) {
$array = getCustomFieldClass()->showCustomFields($field,5, $ticket->params,false);
$data .= JText::_($array['value']).'"'.$tb.'"';
}
foreach ($ticket->attachments AS $attachment) {
$data .= $folder.'/'.$attachment->filename .'"'.$tb.'"';
}
foreach ($ticket->notes AS $note) {// Internal notes
$data .= !empty($note->staffname) ? $note->staffname.'"'.$tb.'"' : 'staff member' .'"'.$tb.'"';
$data .= $note->title.'"'.$tb.'"';
$data .= $note->note.'"'.$tb.'"';
$data .= date("l F d, Y, h:i:s", strtotime($note->created)).'"'.$tb.'"';
$data .= $folder.'/'.$note->filename.'"'.$tb.'"';
$hours = floor($note->usertime / 3600);
$mins = floor($note->usertime / 60 % 60);
$secs = floor($note->usertime % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= $time.'"'.$tb.'"';
$hours = floor($note->systemtime / 3600);
$mins = floor($note->systemtime / 60 % 60);
$secs = floor($note->systemtime % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= $time.'"'.$tb.'"';
$data .= $note->description.'"'.$tb.'"';
}
foreach ($ticket->replies AS $reply) {// ticket Replies
$data .= date("l F d, Y, h:i:s", strtotime($reply->created)).'"'.$tb.'"';
$data .= $reply->name.'"'.$tb.'"';
$data .= $reply->message.'"'.$tb.'"';
foreach ($reply->attachments AS $attachment) {
$data .= $folder.'/'.$attachment->filename.'"'.$tb.'"';
}
if($reply->staffid !=0){
$hours = floor($reply->time / 3600);
$mins = floor($reply->time / 60 % 60);
$secs = floor($reply->time % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= $time.'"'.$tb.'"';
$hours = floor($reply->systemtime / 3600);
$mins = floor($reply->systemtime / 60 % 60);
$secs = floor($reply->systemtime % 60);
$time = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
$data .= $time.'"'.$tb.'"';
$data .= $reply->description.'"'.$tb.'"';
}
}
$data .= '"'.$nl;
$data .= $nl;
}
$data .= $nl.$nl.$nl;
}
return $data;
}
}
?>