khanat-code-old/code/web/private_php/ams/autoload/ticket_log.php
2017-03-15 17:43:49 +02:00

278 lines
8.8 KiB
PHP

<?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;
}
}