2017-03-15 19:43:10 +00:00
< ? php
/**
* Data class that holds a lot of queries that load specific tickets .
* These queries are being used by the ticket_queue_handler class . An object of this class holds 2 attributes : the query and the params used for the query .
* @ author Daan Janssens , mentored by Matthew Lagoe
*/
class Ticket_Queue {
private $query ; /**< The query that loads specific tickets */
private $params ; /**< The parameter array that's being needed by the query */
/**
* loads the not yet assigned tickets query into the objects attributes .
*/
public function loadAllNotAssignedTickets (){
$this -> query = " SELECT ticket . * FROM ticket LEFT JOIN assigned ON ticket.TId = assigned.Ticket WHERE assigned.Ticket IS NULL " ;
$this -> params = array ();
}
/**
* loads the 'all' tickets query into the objects attributes .
*/
public function loadAllTickets (){
$this -> query = " SELECT * FROM `ticket` " ;
$this -> params = array ();
}
/**
* loads the 'all open' tickets query into the objects attributes .
*/
public function loadAllOpenTickets (){
$this -> query = " SELECT * FROM ticket INNER JOIN ticket_user ON ticket.Author = ticket_user.TUserId and ticket.Status!=3 " ;
$this -> params = array ();
}
/**
* loads the 'closed' tickets query into the objects attributes .
*/
public function loadAllClosedTickets (){
$this -> query = " SELECT * FROM ticket INNER JOIN ticket_user ON ticket.Author = ticket_user.TUserId and ticket.Status=3 " ;
$this -> params = array ();
}
/**
* loads the 'todo' tickets query & params into the objects attributes .
* first : find the tickets assigned to the user with status = waiting on support ,
* second find all not assigned tickets that aren ' t forwarded yet .
* find all tickets assigned to someone else witht status waiting on support , with timestamp of last reply > 1 day ,
* find all non - assigned tickets forwarded to the support groups to which that user belongs
* @ param $user_id the user ' s id to whom the tickets should be assigned
*/
public function loadToDoTickets ( $user_id ){
$this -> query = " SELECT * FROM `ticket` t LEFT JOIN `assigned` a ON t.TId = a.Ticket LEFT JOIN `ticket_user` tu ON tu.TUserId = a.User LEFT JOIN `forwarded` f ON t.TId = f.Ticket
WHERE ( tu . ExternId = : user_id AND t . Status = 1 )
OR ( a . Ticket IS NULL AND f . Group IS NULL )
OR ( tu . ExternId != : user_id AND t . Status = 1 AND ( SELECT ticket_reply . Timestamp FROM `ticket_reply` WHERE Ticket = t . TId ORDER BY TReplyId DESC LIMIT 1 ) < NOW () - INTERVAL 1 DAY )
OR ( a . Ticket IS NULL AND EXISTS ( SELECT * FROM `in_support_group` isg JOIN `ticket_user` tu2 ON isg . User = tu2 . TUserId WHERE isg . Group = f . Group ))
" ;
$this -> params = array ( 'user_id' => $user_id );
}
/**
* loads the 'tickets asssigned to a user and waiting on support' query & params into the objects attributes .
* @ param $user_id the user ' s id to whom the tickets should be assigned
*/
public function loadAssignedandWaiting ( $user_id ){
$this -> query = " SELECT * FROM `ticket` t LEFT JOIN `assigned` a ON t.TId = a.Ticket LEFT JOIN `ticket_user` tu ON tu.TUserId = a.User
WHERE ( tu . ExternId = : user_id AND t . Status = 1 ) " ;
$this -> params = array ( 'user_id' => $user_id );
}
/**
* loads the 'created' query & params into the objects attributes .
* This function creates dynamically a query based on the selected features .
* @ param $who specifies if we want to user the user_id or group_id to form the query .
* @ param $userid the user ' s id to whom the tickets should be assigned / not assigned
* @ param $groupid the group ' s id to whom the tickets should be forwarded / not forwarded
* @ param $what specifies what kind of tickets we want to return : waiting for support , waiting on user , closed
* @ param $how specifies if the tickets should be or shouldn ' t be assigned / forwarded to the group / user selected .
*/
public function createQueue ( $userid , $groupid , $what , $how , $who ){
if ( $who == " user " ){
$selectfrom = " SELECT * FROM `ticket` t LEFT JOIN `assigned` a ON t.TId = a.Ticket LEFT JOIN `ticket_user` tu ON tu.TUserId = a.User " ;
if ( $how == " both " ){
$assign = " " ;
} else if ( $how == " assigned " ){
$assign = " tu.TUserId = :id " ;
} else if ( $how == " not_assigned " ){
$assign = " (tu.TUserId != :id OR a.Ticket IS NULL) " ;
}
} else if ( $who == " support_group " ){
$selectfrom = " SELECT * FROM `ticket` t LEFT JOIN `assigned` a ON t.TId = a.Ticket LEFT JOIN `ticket_user` tu ON tu.TUserId = a.User LEFT JOIN `forwarded` f ON t.TId = f.Ticket " ;
if ( $how == " both " ){
$assign = " " ;
} else if ( $how == " assigned " ){
$assign = " f.Group = :id " ;
} else if ( $how == " not_assigned " ){
$assign = " (f.Group != :id OR f.Ticket IS NULL) " ;
}
}
if ( $what == " waiting_for_support " ){
$status = " t.Status = 1 " ;
} else if ( $what == " waiting_for_users " ){
$status = " t.Status = 0 " ;
} else if ( $what == " closed " ){
$status = " t.Status = 3 " ;
}
if ( $assign == " " ) {
$query = $selectfrom ;
if ( isset ( $status )){
$query = $query . " WHERE " . $status ;
}
} else {
$query = $selectfrom . " WHERE " . $assign ;
if ( isset ( $status )){
$query = $query . " AND " . $status ;
}
}
if ( $who == " user " ){
$params = array ( 'id' => $userid );
} else if ( $who == " support_group " ){
$params = array ( 'id' => $groupid );
}
$this -> query = $query ;
$this -> params = $params ;
//print_r($this);
}
////////////////////////////////////////////Getters////////////////////////////////////////////////////
/**
* get query attribute of the object .
*/
public function getQuery (){
return $this -> query ;
}
/**
* get params attribute of the object .
*/
public function getParams (){
return $this -> params ;
}
2013-07-14 14:38:36 +00:00
}