From 43195f4c46e3a5ff324ba6bd4c68b50a281d3f10 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Wed, 3 Dec 2014 11:44:24 -0600 Subject: [PATCH] Add `lastupdate` field to %ticket And manage it with updates to tickets. This will ease the sorting and display of tickets based on the time of last update in the ticket queues --- include/class.ticket.php | 7 ++++--- include/staff/tickets.inc.php | 2 +- include/upgrader/streams/core/b26f29a6-d7480e1c.patch.sql | 7 +++++-- setup/inc/streams/core/install-mysql.sql | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/class.ticket.php b/include/class.ticket.php index b113c1850..be7654565 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -970,7 +970,7 @@ class Ticket { $ecb = null; switch($status->getState()) { case 'closed': - $sql.=', closed=NOW(), duedate=NULL '; + $sql.=', closed=NOW(), lastupdate=NOW(), duedate=NULL '; if ($thisstaff) $sql.=', staff_id='.db_input($thisstaff->getId()); @@ -983,7 +983,7 @@ class Ticket { case 'open': // TODO: check current status if it allows for reopening if ($this->isClosed()) { - $sql .= ',closed=NULL, reopened=NOW() '; + $sql .= ',closed=NULL, lastupdate=NOW(), reopened=NOW() '; $ecb = function ($t) { $t->logEvent('reopened', 'closed'); }; @@ -1261,7 +1261,7 @@ class Ticket { function onMessage($message, $autorespond=true) { global $cfg; - db_query('UPDATE '.TICKET_TABLE.' SET isanswered=0,lastmessage=NOW() WHERE ticket_id='.db_input($this->getId())); + db_query('UPDATE '.TICKET_TABLE.' SET isanswered=0,lastupdate=NOW(),lastmessage=NOW() WHERE ticket_id='.db_input($this->getId())); // Auto-assign to closing staff or last respondent // If the ticket is closed and auto-claim is not enabled then put the @@ -2748,6 +2748,7 @@ class Ticket { //We are ready son...hold on to the rails. $number = $topic ? $topic->getNewTicketNumber() : $cfg->getNewTicketNumber(); $sql='INSERT INTO '.TICKET_TABLE.' SET created=NOW() ' + .' ,lastupdate= NOW() ' .' ,lastmessage= NOW()' .' ,user_id='.db_input($user->getId()) .' ,`number`='.db_input($number) diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php index 3d72b8838..df4c48374 100644 --- a/include/staff/tickets.inc.php +++ b/include/staff/tickets.inc.php @@ -103,7 +103,7 @@ case 'due': default: case 'updated': - $tickets->order_by('cdata__:priority__priority_urgency', '-updated'); + $tickets->order_by('cdata__:priority__priority_urgency', '-lastupdate'); break; } diff --git a/include/upgrader/streams/core/b26f29a6-d7480e1c.patch.sql b/include/upgrader/streams/core/b26f29a6-d7480e1c.patch.sql index a44de85cd..90cf32c4d 100644 --- a/include/upgrader/streams/core/b26f29a6-d7480e1c.patch.sql +++ b/include/upgrader/streams/core/b26f29a6-d7480e1c.patch.sql @@ -150,12 +150,15 @@ UPDATE `%TABLE_PREFIX%user_account` A1 DROP TABLE %TABLE_PREFIX%_timezones; ALTER TABLE `%TABLE_PREFIX%ticket` - ADD `est_duedate` datetime default NULL AFTER `duedate`; + ADD `est_duedate` datetime default NULL AFTER `duedate`, + ADD `lastupdate` datetime default NULL AFTER `lastresponse`; UPDATE `%TABLE_PREFIX%ticket` A1 JOIN `%TABLE_PREFIX%sla` A2 ON (A1.sla_id = A2.id) SET A1.`est_duedate` = - COALESCE(A1.`duedate`, A1.`created` + INTERVAL A2.`grace_period` HOUR); + COALESCE(A1.`duedate`, A1.`created` + INTERVAL A2.`grace_period` HOUR), + A1.`lastupdate` = + CAST(GREATEST(IFNULL(A1.lastmessage, 0), IFNULL(A1.closed, 0), IFNULL(A1.reopened, 0), A1.created) as DATETIME); -- Finished with patch UPDATE `%TABLE_PREFIX%config` diff --git a/setup/inc/streams/core/install-mysql.sql b/setup/inc/streams/core/install-mysql.sql index b2c5b3100..b10118f2f 100644 --- a/setup/inc/streams/core/install-mysql.sql +++ b/setup/inc/streams/core/install-mysql.sql @@ -614,6 +614,7 @@ CREATE TABLE `%TABLE_PREFIX%ticket` ( `closed` datetime default NULL, `lastmessage` datetime default NULL, `lastresponse` datetime default NULL, + `lastupdate` datetime default NULL, `created` datetime NOT NULL, `updated` datetime NOT NULL, PRIMARY KEY (`ticket_id`), -- GitLab