diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php index ad5c0e4b0..bd9000652 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php @@ -69,18 +69,43 @@ class Ticket{ * creates a ticket + first initial reply and fills in the content of it! * */ - public static function create_Ticket( $title, $content, $category, $author) { + public static function create_Ticket( $title, $content, $category, $author, $real_author) { $ticket = new Ticket(); $ticket->set($title,1,0,$category,$author,0); $ticket->create(); $ticket_id = $ticket->getTId(); - Ticket_Reply::createReply($content, $author, $ticket_id); + Ticket_Reply::createReply($content, $author, $ticket_id); + if ( $author == $real_author){ + Ticket_Log::createLogEntry( $ticket_id, $author, 1); + }else{ + Ticket_Log::createLogEntry( $ticket_id, $real_author, 2, $author); + } return $ticket_id; } + /*FUNCTION: updateTicketStatusAndPriority() + * creates a ticket + first initial reply and fills in the content of it! + * + */ + public static function updateTicketStatusAndPriority( $ticket_id, $newStatus, $newPriority, $author) { + + $ticket = new Ticket(); + $ticket->load_With_TId($ticket_id); + if ($ticket->getStatus() != $newStatus){ + $ticket->setStatus($newStatus); + Ticket_Log::createLogEntry( $ticket_id, $author, 5, $newStatus); + } + if ($ticket->getPriority() != $newPriority){ + $ticket->setPriority($newPriority); + Ticket_Log::createLogEntry( $ticket_id, $author, 6, $newPriority); + } + $ticket->update(); + + } + //return constructed element based on TCategoryId public static function getLatestReply( $ticket_id) { $dbl = new DBLayer("lib"); diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php index c8c06a9aa..bffbec7b9 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_log.php @@ -2,39 +2,55 @@ class Ticket_Log{ - private $tCategoryId; - private $name; + private $tLogId; + private $timestamp; + private $query; + private $author; + private $ticket; + + /**************************************** + *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 + * + ****************************************/ + ////////////////////////////////////////////Functions//////////////////////////////////////////////////// - //Creates a ticket_Catergory in the DB - public static function createTicketCategory( $name) { - $dbl = new DBLayer("lib"); - $query = "INSERT INTO ticket_category (Name) VALUES (:name)"; - $values = Array('name' => $name); - $dbl->execute($query, $values); - + //Creates a log entry + public static function createLogEntry( $ticket_id, $author_id, $action, $arg = -1) { + global $TICKET_LOGGING; + if($TICKET_LOGGING){ + $dbl = new DBLayer("lib"); + $query = "INSERT INTO ticket_log (Timestamp, Query, Ticket, Author) VALUES (now(), :query, :ticket, :author )"; + $values = Array('ticket' => $ticket_id, 'author' => $author_id, 'query' => json_encode(array($action,$arg))); + $dbl->execute($query, $values); + } } - //return constructed element based on TCategoryId - public static function constr_TCategoryId( $id) { + //return constructed element based on TLogId + public static function constr_TLogId( $id) { $instance = new self(); - $instance->setTCategoryId($id); + $instance->setTLogId($id); return $instance; } - //returns list of all category objects - public static function getAllCategories() { + //returns list of all logs of a ticket + public static function getAllLogs($ticket_id) { $dbl = new DBLayer("lib"); - $statement = $dbl->executeWithoutParams("SELECT * FROM ticket_category"); + $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 $category){ + foreach($row as $log){ $instance = new self(); - $instance->tCategoryId = $category['TCategoryId']; - $instance->name = $category['Name']; + $instance->set($log); $result[] = $instance; } return $result; @@ -45,48 +61,85 @@ class Ticket_Log{ public function __construct() { } + + //set values + public function set($values) { + $this->setTLogId($values['TLogId']); + $this->setTimestamp($values['Timestamp']); + $this->setQuery($values['Query']); + $this->setTicket($values['Ticket']); + $this->setAuthor($values['Author']); + } - //return constructed element based on TCategoryId - public function load_With_TCategoryId( $id) { + //Load with tlogId + public function load_With_TLogId( $id) { $dbl = new DBLayer("lib"); - $statement = $dbl->execute("SELECT * FROM ticket_category WHERE TCategoryId=:id", array('id' => $id)); + $statement = $dbl->execute("SELECT * FROM ticket_log WHERE TLogId=:id", array('id' => $id)); $row = $statement->fetch(); - $this->tCategoryId = $row['TCategoryId']; - $this->name = $row['Name']; + $this->set($row); } //update private data to DB. public function update(){ $dbl = new DBLayer("lib"); - $query = "UPDATE ticket_category SET Name = :name WHERE TCategoryId=:id"; - $values = Array('id' => $this->tCategoryId, 'name' => $this->name); + $query = "UPDATE ticket_log SET Timestamp = :timestamp, Query = :query, Author = :author, Ticket = :ticket WHERE TLogId=:id"; + $values = Array('id' => $this->getTLogId(), 'timestamp' => $this->getTimestamp(), 'query' => $this->getQuery(), 'author' => $this->getAuthor(), 'ticket' => $this->getTicket() ); $statement = $dbl->execute($query, $values); } ////////////////////////////////////////////Getters//////////////////////////////////////////////////// - public function getName(){ - if ($this->name == ""){ - $this->load_With_TCategoryId($this->tCategoryId); - } - return $this->name; + public function getTLogId(){ + return $this->tLogId; } - - public function getTCategoryId(){ - return $this->tCategoryId; + public function getTimestamp(){ + return $this->timestamp; } + public function getQuery(){ + return $this->query; + } + + public function getAuthor(){ + return $this->author; + } + + public function getTicket(){ + return $this->ticket; + } + + public function getAcion(){ + $decodedQuery = json_decode($this->ticket); + return $decodedQuery[0]; + } + + public function getArgument(){ + $decodedQuery = json_decode($this->ticket); + return $decodedQuery[1]; + } ////////////////////////////////////////////Setters//////////////////////////////////////////////////// - public function setName($n){ - $this->name = $n; + public function setTLogId($id){ + $this->tLogId = $id; } - public function setTCategoryId($id){ - $this->tCategoryId = $id; + public function setTimestamp($t){ + $this->timestamp = $t; + } + + public function setQuery($q){ + $this->query = $q; + } + + public function setAuthor($a){ + $this->author = $a; + } + + public function setTicket($t){ + $this->ticket = $t; } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php index b77d20a43..d61eff3c7 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_reply.php @@ -53,6 +53,9 @@ class Ticket_Reply{ $ticket_reply = new Ticket_Reply(); $ticket_reply->set(Array('Ticket' => $ticket_id,'Content' => $content_id,'Author' => $author)); $ticket_reply->create(); + $reply_id = $ticket_reply->getTReplyId(); + + Ticket_Log::createLogEntry( $ticket_id, $author, 4, $reply_id); } ////////////////////////////////////////////Methods//////////////////////////////////////////////////// @@ -76,7 +79,7 @@ class Ticket_Reply{ $dbl = new DBLayer("lib"); $query = "INSERT INTO ticket_reply (Ticket, Content, Author, Timestamp) VALUES (:ticket, :content, :author, now())"; $values = Array('ticket' => $this->ticket, 'content' => $this->content, 'author' => $this->author); - $dbl->execute($query, $values); + $this->tReplyId = $dbl->executeReturnId($query, $values); } //return constructed element based on TId diff --git a/code/ryzom/tools/server/ryzom_ams/www/config.php b/code/ryzom/tools/server/ryzom_ams/www/config.php index b896879a9..37590d3c3 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/config.php +++ b/code/ryzom/tools/server/ryzom_ams/www/config.php @@ -40,3 +40,5 @@ $AMS_CACHEDIR = $AMS_LIB . '/cache'; $DEFAULT_LANGUAGE = 'en'; $SITEBASE = dirname( __FILE__ ) . '/html/' ; + +$TICKET_LOGGING = true; \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php index 045cb688d..62e9e20fa 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/create_ticket.php @@ -18,7 +18,7 @@ function create_ticket(){ }else{ $author= Ticket_User::constr_ExternId($_POST['target_id'])->getTUserId(); } - $ticket_id = Ticket::create_Ticket($title, $content, $category, $author); + $ticket_id = Ticket::create_Ticket($title, $content, $category, $author, $_SESSION['ticket_user']->getTUserId()); header("Location: index.php?page=show_ticket&id=".$ticket_id); exit; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/func/reply_on_ticket.php b/code/ryzom/tools/server/ryzom_ams/www/html/func/reply_on_ticket.php index beb9c086b..c5aa27862 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/func/reply_on_ticket.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/func/reply_on_ticket.php @@ -12,19 +12,15 @@ function reply_on_ticket(){ if(($target_ticket->getAuthor() == $_SESSION['ticket_user']->getTUserId()) || WebUsers::isAdmin() ){ try{ + $author = $_SESSION['ticket_user']->getTUserId(); if(isset($_POST['ChangeStatus']) && $_POST['Content'] != ""){ $content = filter_var($_POST['Content'], FILTER_SANITIZE_STRING); - $author = $_SESSION['ticket_user']->getTUserId(); Ticket_Reply::createReply($content, $author, $ticket_id); } if(isset($_POST['ChangeStatus']) && isset($_POST['ChangePriority']) && WebUsers::isAdmin()){ $newStatus = filter_var($_POST['ChangeStatus'], FILTER_SANITIZE_NUMBER_INT); $newPriority = filter_var($_POST['ChangePriority'], FILTER_SANITIZE_NUMBER_INT); - $ticket = new Ticket(); - $ticket->load_With_TId($ticket_id); - $ticket->setStatus($newStatus); - $ticket->setPriority($newPriority); - $ticket->update(); + Ticket::updateTicketStatusAndPriority($ticket_id,$newStatus, $newPriority, $author); } header("Location: index.php?page=show_ticket&id=".$ticket_id); exit; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket.php b/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket.php index a6ac5557e..b380acb9c 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/inc/show_ticket.php @@ -11,6 +11,7 @@ function show_ticket(){ if(($target_ticket->getAuthor() == $_SESSION['ticket_user']->getTUserId()) || WebUsers::isAdmin() ){ $entire_ticket = Ticket::getEntireTicket( $result['ticket_id']); + Ticket_Log::createLogEntry($result['ticket_id'],$_SESSION['ticket_user']->getTUserId(), 3); $result['ticket_tId'] = $entire_ticket['ticket_obj']->getTId(); $result['ticket_title'] = $entire_ticket['ticket_obj']->getTitle(); $result['ticket_timestamp'] = $entire_ticket['ticket_obj']->getTimestamp(); diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_ticket.tpl b/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_ticket.tpl index 3d3bf93b5..91c0e0c44 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_ticket.tpl +++ b/code/ryzom/tools/server/ryzom_ams/www/html/templates/show_ticket.tpl @@ -31,7 +31,7 @@ {foreach from=$ticket_replies item=reply} - + {/foreach} + + {if $ticket_status eq 3} + + + + {/if} +

{$reply.timestamp} {if $reply.permission eq '1'} @@ -41,10 +41,19 @@ {/if} {if isset($isAdmin) and $isAdmin eq "TRUE"} {$reply.author}{else}{$reply.author} {/if}

-

{$reply.replyContent}

+

{$reply.replyContent}

+

Ticket is closed.

+