diff --git a/bootstrap.php b/bootstrap.php index c37e3f6f04d6080f31e1c4ed15f0e4313e6bb2fd..d5e15e6802fbba4f24bf70b1ec4c6eaa1874f840 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -294,7 +294,6 @@ Bootstrap::init(); #CURRENT EXECUTING SCRIPT. define('THISPAGE', Misc::currentURL()); -define('THISURI', $_SERVER['REQUEST_URI']); define('DEFAULT_MAX_FILE_UPLOADS',ini_get('max_file_uploads')?ini_get('max_file_uploads'):5); define('DEFAULT_PRIORITY_ID',1); diff --git a/include/class.ticket.php b/include/class.ticket.php index 43656a33a4f4b3f639e92f725941952134423d8e..51cbbf9908cd44b3e63de358aa91596de3b34914 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -1839,47 +1839,57 @@ class Ticket { if(!$staff || (!is_object($staff) && !($staff=Staff::lookup($staff))) || !$staff->isStaff()) return null; - $sql='SELECT count(open.ticket_id) as open, count(answered.ticket_id) as answered ' - .' ,count(overdue.ticket_id) as overdue, count(assigned.ticket_id) as assigned, count(closed.ticket_id) as closed ' - .' FROM '.TICKET_TABLE.' ticket ' - .' LEFT JOIN '.TICKET_TABLE.' open - ON (open.ticket_id=ticket.ticket_id - AND open.status=\'open\' - AND open.isanswered=0 - '.((!($cfg->showAssignedTickets() || $staff->showAssignedTickets()))? - ' AND open.staff_id=0 ':'').') ' - .' LEFT JOIN '.TICKET_TABLE.' answered - ON (answered.ticket_id=ticket.ticket_id - AND answered.status=\'open\' - AND answered.isanswered=1) ' - .' LEFT JOIN '.TICKET_TABLE.' overdue - ON (overdue.ticket_id=ticket.ticket_id - AND overdue.status=\'open\' - AND overdue.isoverdue=1) ' - .' LEFT JOIN '.TICKET_TABLE.' assigned - ON (assigned.ticket_id=ticket.ticket_id - AND assigned.status=\'open\' - AND assigned.staff_id='.db_input($staff->getId()).')' - .' LEFT JOIN '.TICKET_TABLE.' closed - ON (closed.ticket_id=ticket.ticket_id - AND closed.status=\'closed\' )' - .' WHERE (ticket.staff_id='.db_input($staff->getId()); + $where = array(); + $where2 = ''; if(($teams=$staff->getTeams())) - $sql.=' OR ticket.team_id IN('.implode(',', db_input(array_filter($teams))).')'; + $where[] = 'ticket.team_id IN('.implode(',', db_input(array_filter($teams))).')'; if(!$staff->showAssignedOnly() && ($depts=$staff->getDepts())) //Staff with limited access just see Assigned tickets. - $sql.=' OR ticket.dept_id IN('.implode(',', db_input($depts)).') '; - - $sql.=')'; + $where[] = 'ticket.dept_id IN('.implode(',', db_input($depts)).') '; if(!$cfg || !($cfg->showAssignedTickets() || $staff->showAssignedTickets())) - $sql.=' AND (ticket.staff_id=0 OR ticket.staff_id='.db_input($staff->getId()).') '; - - return db_fetch_array(db_query($sql)); + $where2 =' AND (ticket.staff_id=0 OR ticket.staff_id='.db_input($staff->getId()).') '; + $where = implode(' OR ', $where); + if ($where) $where = 'AND ( '.$where.' ) '; + + $sql = 'SELECT \'open\', count( ticket.ticket_id ) AS tickets ' + .'FROM ' . TICKET_TABLE . ' ticket ' + .'WHERE ticket.status = \'open\' ' + .'AND ticket.isanswered =0 ' + . $where . $where2 + + .'UNION SELECT \'answered\', count( ticket.ticket_id ) AS tickets ' + .'FROM ' . TICKET_TABLE . ' ticket ' + .'WHERE ticket.status = \'open\' ' + .'AND ticket.isanswered =1 ' + . $where + + .'UNION SELECT \'overdue\', count( ticket.ticket_id ) AS tickets ' + .'FROM ' . TICKET_TABLE . ' ticket ' + .'WHERE ticket.status = \'open\' ' + .'AND ticket.isoverdue =1 ' + . $where + + .'UNION SELECT \'assigned\', count( ticket.ticket_id ) AS tickets ' + .'FROM ' . TICKET_TABLE . ' ticket ' + .'WHERE ticket.status = \'open\' ' + .'AND ticket.staff_id = ' . db_input($staff->getId()) . ' ' + . $where + + .'UNION SELECT \'closed\', count( ticket.ticket_id ) AS tickets ' + .'FROM ' . TICKET_TABLE . ' ticket ' + .'WHERE ticket.status = \'closed\' ' + . $where; + + $res = db_query($sql); + $stats = array(); + while($row = db_fetch_row($res)) { + $stats[$row[0]] = $row[1]; + } + return $stats; } - /* Quick client's tickets stats @email - valid email. */ diff --git a/scp/staff.inc.php b/scp/staff.inc.php index 0c835d46a780a5acf439af2268da039a73335905..359663a4c6fccd04dc466126c759d71a89acb5a4 100644 --- a/scp/staff.inc.php +++ b/scp/staff.inc.php @@ -49,7 +49,8 @@ require_once(INCLUDE_DIR.'class.csrf.php'); if(!function_exists('staffLoginPage')) { //Ajax interface can pre-declare the function to trap expired sessions. function staffLoginPage($msg) { global $ost, $cfg; - $_SESSION['_staff']['auth']['dest']=THISURI; + $_SESSION['_staff']['auth']['dest'] = + '/' . ltrim($_SERVER['REQUEST_URI'], '/'); $_SESSION['_staff']['auth']['msg']=$msg; require(SCP_DIR.'login.php'); exit;