diff --git a/include/class.ticket.php b/include/class.ticket.php index b113c1850798d04820c6034aecc426eda875aa42..be76545652c1dba2d5725b1a7447a6b29d8cb0b9 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 3d72b883803150f312e5947a7a56ee95e5108ea5..df4c483746a54c00bd9818a7a3a00d15718128f8 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 a44de85cd550a7e0d0ecbc58e3b1a4936790406c..90cf32c4d6a2f19f37e562e2e1db6bd7c0aef45d 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 b2c5b31009713b15c9fd2954409a5754064883d1..b10118f2fb5dc49d4f42b74df3e0e5b01b147bc4 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`),