<?php /** * Class that handles the logging. The logging will be used when a ticket is created, a reply is added, if someone views a ticket, * if someone assigns a ticket to him or if someone forwards a ticket. This class provides functions to get retrieve those logs and also make them. * *-the Action IDs being used are: * -# User X Created ticket * -# Admin X created ticket for arg * -# Read ticket * -# Added Reply ID: arg to ticket * -# Changed status to arg * -# Changed Priority to arg * -# assigned to the ticket * -# forwarded ticket to support group arg * -# unassigned to the ticket * -# added attachment to the ticket * * @author Daan Janssens, mentored by Matthew Lagoe */ class Ticket_Log{ private $tLogId; /**< The id of the log entry */ private $timestamp; /**< The timestamp of the log entry */ private $query; /**< The query (json encoded array containing action id & argument) */ private $author; /**< author of the log */ private $ticket; /**< the id of the ticket related to the log entry */ /**************************************** *Action ID's: * 1: User X Created Ticket * 2: Admin X created ticket for arg * 3: Read Ticket * 4: Added Reply ID: arg to ticket * 5: Changed status to arg * 6: Changed Priority to arg * 7: assigned to the ticket * 8: Forwarded ticket to support group arg * 9: unassigned to the ticket *10: added attachment to the ticket * ****************************************/ ////////////////////////////////////////////Functions//////////////////////////////////////////////////// /** * return all log entries related to a ticket. * @param $ticket_id the id of the ticket of which we want all related log entries returned. * @return an array of ticket_log objects, be aware that the author in the ticket_log object is a ticket_user object on its own (so not a simple integer). */ public static function getLogsOfTicket( $ticket_id) { $dbl = new DBLayer("lib"); $statement = $dbl->execute("SELECT * FROM ticket_log INNER JOIN ticket_user ON ticket_log.Author = ticket_user.TUserId and ticket_log.Ticket=:id ORDER BY ticket_log.TLogId ASC", array('id' => $ticket_id)); $row = $statement->fetchAll(); $result = Array(); foreach($row as $log){ $instanceAuthor = Ticket_User::constr_TUserId($log['Author']); $instanceAuthor->setExternId($log['ExternId']); $instanceAuthor->setPermission($log['Permission']); $instanceLog = new self(); $instanceLog->setTLogId($log['TLogId']); $instanceLog->setTimestamp($log['Timestamp']); $instanceLog->setAuthor($instanceAuthor); $instanceLog->setTicket($ticket_id); $instanceLog->setQuery($log['Query']); $result[] = $instanceLog; } return $result; } /** * create a new log entry. * It will check if the $TICKET_LOGGING global var is true, this var is used to turn logging on and off. In case it's on, the log message will be stored. * the action id and argument (which is -1 by default), will be json encoded and stored in the query field in the db. * @param $ticket_id the id of the ticket related to the new log entry * @param $author_id the id of the user that instantiated the logging. * @param $action the action id (see the list in the class description) * @param $arg argument for the action (default = -1) */ public static function createLogEntry( $ticket_id, $author_id, $action, $arg = -1) { global $TICKET_LOGGING; if($TICKET_LOGGING){ $dbl = new DBLayer("lib"); $values = Array('Query' => json_encode(array($action,$arg)), 'Ticket' => $ticket_id, 'Author' => $author_id); $dbl->insert("ticket_log", $values, array('Timestamp'=>'now()')); } } /** * return constructed element based on TLogId * @param $id ticket_log id of the entry that we want to load into our object. * @return constructed ticket_log object. */ public static function constr_TLogId( $id) { $instance = new self(); $instance->setTLogId($id); return $instance; } /** * return all log entries related to a ticket. * @param $ticket_id the id of the ticket of which we want all related log entries returned. * @return an array of ticket_log objects, here the author is an integer. * @todo only use one of the 2 comparable functions in the future and make the other depricated. */ public static function getAllLogs($ticket_id) { $dbl = new DBLayer("lib"); $statement = $dbl->execute("SELECT * FROM ticket_log INNER JOIN ticket_user ON ticket_log.Author = ticket_user.TUserId and ticket_log.Ticket=:id", array('id' => $ticket_id)); $row = $statement->fetchAll(); $result = Array(); foreach($row as $log){ $instance = new self(); $instance->set($log); $result[] = $instance; } return $result; } ////////////////////////////////////////////Methods//////////////////////////////////////////////////// /** * A constructor. * Empty constructor */ public function __construct() { } /** * sets the object's attributes. * @param $values should be an array. */ public function set($values) { $this->setTLogId($values['TLogId']); $this->setTimestamp($values['Timestamp']); $this->setQuery($values['Query']); $this->setTicket($values['Ticket']); $this->setAuthor($values['Author']); } /** * loads the object's attributes. * loads the object's attributes by giving a ticket_log entries ID (TLogId). * @param $id the id of the ticket_log entry that should be loaded */ public function load_With_TLogId( $id) { $dbl = new DBLayer("lib"); $dbl->select("ticket_log", array('id' => $id), "TLogId=:id"); $row = $statement->fetch(); $this->set($row); } /** * update attributes of the object to the DB. */ public function update(){ $dbl = new DBLayer("lib"); $values = Array('timestamp' => $this->getTimestamp(), 'query' => $this->getQuery(), 'author' => $this->getAuthor(), 'ticket' => $this->getTicket() ); $dbl->update("ticket_log", $values, "TLogId = $this->getTLogId()"); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// /** * get tLogId attribute of the object. */ public function getTLogId(){ return $this->tLogId; } /** * get timestamp attribute of the object. */ public function getTimestamp(){ return Helpers::outputTime($this->timestamp); } /** * get query attribute of the object. */ public function getQuery(){ return $this->query; } /** * get author attribute of the object. */ public function getAuthor(){ return $this->author; } /** * get ticket attribute of the object. */ public function getTicket(){ return $this->ticket; } /** * get the action id out of the query by decoding it. */ public function getAction(){ $decodedQuery = json_decode($this->query); return $decodedQuery[0]; } /** * get the argument out of the query by decoding it. */ public function getArgument(){ $decodedQuery = json_decode($this->query); return $decodedQuery[1]; } /** * get the action text(string) array. * this is being read from the language .ini files. */ public static function getActionTextArray(){ $variables = Helpers::handle_language(); $result = array(); foreach ( $variables['ticket_log'] as $key => $value ){ $result[$key] = $value; } return $result; } ////////////////////////////////////////////Setters//////////////////////////////////////////////////// /** * set tLogId attribute of the object. * @param $id integer id of the log entry */ public function setTLogId($id){ $this->tLogId = $id; } /** * set timestamp attribute of the object. * @param $t timestamp of the log entry */ public function setTimestamp($t){ $this->timestamp = $t; } /** * set query attribute of the object. * @param $q the encoded query */ public function setQuery($q){ $this->query = $q; } /** * set author attribute of the object. * @param $a integer id of the user who created the log entry */ public function setAuthor($a){ $this->author = $a; } /** * set ticket attribute of the object. * @param $t integer id of ticket of which the log entry is related to. */ public function setTicket($t){ $this->ticket = $t; } }