Skip to content
Snippets Groups Projects
Commit a3b6e39e authored by Jared Hancock's avatar Jared Hancock
Browse files

Track ticket owners at each tracked ticket event

Track assigned department, team, staff, and help topic when the ticket event
occurs. This will greatly help in correlation of various reports and queries

Also start plowing the way toward incremental database updates using a
patching technique. The hash of the main install SQL script for a respective
database will be used to track the signature of the database currently. The
signature will be stored in %config::schema_signature, and the main.inc.php
script can simply check the value in the schema against the value known to
the source code to be the signature the code expects. Should the two
signatures differ, patches in the setup/inc/sql/patches folder should exist
and be executed to assist in incrementally upgrading the database to the
new-current schema version.
parent 9fdb3efc
Branches
Tags
No related merge requests found
...@@ -653,10 +653,14 @@ class Ticket{ ...@@ -653,10 +653,14 @@ class Ticket{
//Set staff ID...assign/unassign/release (id can be 0) //Set staff ID...assign/unassign/release (id can be 0)
function setStaffId($staffId){ function setStaffId($staffId){
$sql='UPDATE '.TICKET_TABLE.' SET updated=NOW(), staff_id='.db_input($staffId) $sql='UPDATE '.TICKET_TABLE.' SET updated=NOW(), staff_id='.db_input($staffId)
.' WHERE ticket_id='.db_input($this->getId()); .' WHERE ticket_id='.db_input($this->getId());
return (db_query($sql) && db_affected_rows()); if (db_query($sql) && db_affected_rows()) {
$this->staff_id = $staffId;
return true;
}
return false;
} }
function setSLAId($slaId) { function setSLAId($slaId) {
...@@ -768,7 +772,7 @@ class Ticket{ ...@@ -768,7 +772,7 @@ class Ticket{
$sql.=' WHERE ticket_id='.db_input($this->getId()); $sql.=' WHERE ticket_id='.db_input($this->getId());
$this->track('closed'); $this->logEvent('closed');
return (db_query($sql) && db_affected_rows()); return (db_query($sql) && db_affected_rows());
} }
...@@ -782,7 +786,7 @@ class Ticket{ ...@@ -782,7 +786,7 @@ class Ticket{
//TODO: log reopen event here //TODO: log reopen event here
$this->track('reopened'); $this->logEvent('reopened');
return (db_query($sql) && db_affected_rows()); return (db_query($sql) && db_affected_rows());
} }
...@@ -1126,8 +1130,8 @@ class Ticket{ ...@@ -1126,8 +1130,8 @@ class Ticket{
if(!db_query($sql) || !db_affected_rows()) if(!db_query($sql) || !db_affected_rows())
return false; return false;
$this->logEvent('overdue');
$this->onOverdue($whine); $this->onOverdue($whine);
$this->track('overdue');
return true; return true;
} }
...@@ -1148,6 +1152,7 @@ class Ticket{ ...@@ -1148,6 +1152,7 @@ class Ticket{
$this->reopen(); $this->reopen();
$this->reload(); //reload - new dept!! $this->reload(); //reload - new dept!!
$this->logEvent('transferred');
//Send out alerts if enabled AND requested //Send out alerts if enabled AND requested
if(!$alert || !$cfg->alertONTransfer() || !($dept=$this->getDept())) return true; //no alerts!! if(!$alert || !$cfg->alertONTransfer() || !($dept=$this->getDept())) return true; //no alerts!!
...@@ -1194,7 +1199,6 @@ class Ticket{ ...@@ -1194,7 +1199,6 @@ class Ticket{
} }
} }
$this->track('transferred');
return true; return true;
} }
...@@ -1207,8 +1211,8 @@ class Ticket{ ...@@ -1207,8 +1211,8 @@ class Ticket{
return false; return false;
$this->onAssign($note, $alert); $this->onAssign($note, $alert);
$this->logEvent('assigned');
$this->track('assigned');
return true; return true;
} }
...@@ -1226,8 +1230,8 @@ class Ticket{ ...@@ -1226,8 +1230,8 @@ class Ticket{
$this->setStaffId(0); $this->setStaffId(0);
$this->onAssign($note, $alert); $this->onAssign($note, $alert);
$this->logEvent('assigned');
$this->track('assigned');
return true; return true;
} }
...@@ -1432,7 +1436,7 @@ class Ticket{ ...@@ -1432,7 +1436,7 @@ class Ticket{
} }
// History log -- used for statistics generation (pretty reports) // History log -- used for statistics generation (pretty reports)
function track($state, $staff=null) { function logEvent($state, $staff=null) {
global $thisstaff; global $thisstaff;
if ($staff === null) { if ($staff === null) {
...@@ -1440,8 +1444,12 @@ class Ticket{ ...@@ -1440,8 +1444,12 @@ class Ticket{
else $staff='SYSTEM'; # XXX: Security Violation ? else $staff='SYSTEM'; # XXX: Security Violation ?
} }
return db_query('INSERT INTO '.TICKET_HISTORY_TABLE return db_query('INSERT INTO '.TICKET_EVENT_TABLE
.' SET ticket_id='.db_input($this->getId()) .' SET ticket_id='.db_input($this->getId())
.', staff_id='.db_input($this->getStaffId())
.', team_id='.db_input($this->getTeamId())
.', dept_id='.db_input($this->getDeptId())
.', topic_id='.db_input($this->getTopicId())
.', timestamp=NOW(), state='.db_input($state) .', timestamp=NOW(), state='.db_input($state)
.', staff='.db_input($staff)) .', staff='.db_input($staff))
&& db_affected_rows() == 1; && db_affected_rows() == 1;
...@@ -1960,6 +1968,9 @@ class Ticket{ ...@@ -1960,6 +1968,9 @@ class Ticket{
&& ($client->getNumOpenTickets()==$cfg->getMaxOpenTickets())) { && ($client->getNumOpenTickets()==$cfg->getMaxOpenTickets())) {
$ticket->onOpenLimit(($autorespond && strcasecmp($origin, 'staff'))); $ticket->onOpenLimit(($autorespond && strcasecmp($origin, 'staff')));
} }
/* Start tracking ticket lifecycle events */
$ticket->logEvent('created');
/* Phew! ... time for tea (KETEPA) */ /* Phew! ... time for tea (KETEPA) */
......
...@@ -142,7 +142,7 @@ ...@@ -142,7 +142,7 @@
define('TICKET_PRIORITY_TABLE',TABLE_PREFIX.'ticket_priority'); define('TICKET_PRIORITY_TABLE',TABLE_PREFIX.'ticket_priority');
define('PRIORITY_TABLE',TICKET_PRIORITY_TABLE); define('PRIORITY_TABLE',TICKET_PRIORITY_TABLE);
define('TICKET_LOCK_TABLE',TABLE_PREFIX.'ticket_lock'); define('TICKET_LOCK_TABLE',TABLE_PREFIX.'ticket_lock');
define('TICKET_HISTORY_TABLE',TABLE_PREFIX.'ticket_history'); define('TICKET_EVENT_TABLE',TABLE_PREFIX.'ticket_event');
define('EMAIL_TABLE',TABLE_PREFIX.'email'); define('EMAIL_TABLE',TABLE_PREFIX.'email');
define('EMAIL_TEMPLATE_TABLE',TABLE_PREFIX.'email_template'); define('EMAIL_TEMPLATE_TABLE',TABLE_PREFIX.'email_template');
......
...@@ -598,10 +598,14 @@ CREATE TABLE `%TABLE_PREFIX%ticket_lock` ( ...@@ -598,10 +598,14 @@ CREATE TABLE `%TABLE_PREFIX%ticket_lock` (
KEY `staff_id` (`staff_id`) KEY `staff_id` (`staff_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `%TABLE_PREFIX%ticket_history`; DROP TABLE IF EXISTS `%TABLE_PREFIX%ticket_event`;
CREATE TABLE `%TABLE_PREFIX%ticket_history` ( CREATE TABLE `%TABLE_PREFIX%ticket_event` (
`ticket_id` int(11) unsigned NOT NULL default '0', `ticket_id` int(11) unsigned NOT NULL default '0',
`state` enum('opened','closed','assigned','transferred','overdue') NOT NULL, `staff_id` int(11) unsigned NOT NULL,
`team_id` int(11) unsigned NOT NULL,
`dept_id` int(11) unsigned NOT NULL,
`topic_id` int(11) unsigned NOT NULL,
`state` enum('created','closed','reopened','assigned','transferred','overdue') NOT NULL,
`staff` varchar(255) NOT NULL default 'SYSTEM', `staff` varchar(255) NOT NULL default 'SYSTEM',
`timestamp` datetime NOT NULL, `timestamp` datetime NOT NULL,
KEY `ticket_state` (`ticket_id`, `state`, `timestamp`), KEY `ticket_state` (`ticket_id`, `state`, `timestamp`),
......
f8856d56e51c5cc3416389de78b54515
UPDATE `%TABLE_PREFIX%email_template`
SET `overlimit_body` = '%name\r\n\r\nYou have reached the maximum number of open tickets allowed.\r\n\r\nTo be able to open another ticket, one of your pending tickets must be closed. To update or add comments to an open ticket simply login using the link below.\r\n\r\n%url/view.php?e=%email\r\n\r\nThank you.\r\n\r\nSupport Ticket System'
WHERE `tpl_id` = 1 AND `cfg_id` = 1;
UPDATE `%TABLE_PREFIX%config`
SET `schema_signature`='60fcbee1da3180d1b690187aa5006c88';
UPDATE `%TABLE_PREFIX%sla`
SET `created` = NOW(),
`updated` = NOW()
WHERE `created` IS NULL;
UPDATE `%TABLE_PREFIX%config`
SET `schema_signature`='02decaa20c10c9615558762018e25507';
ALTER TABLE `%TABLE_PREFIX%history`
ADD `staff_id` int(11) unsigned NOT NULL AFTER `ticket_id`,
ADD `team_id` int(11) unsigned NOT NULL AFTER `staff_id`,
ADD `dept_id` int(11) unsigned NOT NULL AFTER `team_id`,
ADD `topic_id` int(11) unsigned NOT NULL AFTER `dept_id`;
RENAME TABLE `%TABLE_PREFIX%history` TO `%TABLE_PREFIX%event`;
UPDATE `%TABLE_PREFIX%config`
SET `schema_signature`='f8856d56e51c5cc3416389de78b54515';
UPDATE `%TABLE_PREFIX%email_template`
SET `ticket_overlimit_subj` = 'Open Tickets Limit Reached'
WHERE `tpl_id` = 1 AND `cfg_id` = 1;
UPDATE `%TABLE_PREFIX%config`
SET `schema_signature`='522e5b783c2824c67222260ee22baa93';
...@@ -26,10 +26,14 @@ ALTER TABLE `%TABLE_PREFIX%ticket` ...@@ -26,10 +26,14 @@ ALTER TABLE `%TABLE_PREFIX%ticket`
'Web', 'Email', 'Phone', 'API', 'Other') NOT NULL DEFAULT 'Other'; 'Web', 'Email', 'Phone', 'API', 'Other') NOT NULL DEFAULT 'Other';
-- Add table for ticket history (statistics) tracking -- Add table for ticket history (statistics) tracking
DROP TABLE IF EXISTS `%TABLE_PREFIX%ticket_history`; DROP TABLE IF EXISTS `%TABLE_PREFIX%ticket_event`;
CREATE TABLE `%TABLE_PREFIX%ticket_history` ( CREATE TABLE `%TABLE_PREFIX%ticket_event` (
`ticket_id` int(11) unsigned NOT NULL default '0', `ticket_id` int(11) unsigned NOT NULL default '0',
`state` enum('opened','closed','assigned','transferred','overdue') NOT NULL, `staff_id` int(11) unsigned NOT NULL,
`team_id` int(11) unsigned NOT NULL,
`dept_id` int(11) unsigned NOT NULL,
`topic_id` int(11) unsigned NOT NULL,
`state` enum('created','closed','reopened','assigned','transferred','overdue') NOT NULL,
`staff` varchar(255) NOT NULL default 'SYSTEM', `staff` varchar(255) NOT NULL default 'SYSTEM',
`timestamp` datetime NOT NULL, `timestamp` datetime NOT NULL,
KEY `ticket_state` (`ticket_id`, `state`, `timestamp`), KEY `ticket_state` (`ticket_id`, `state`, `timestamp`),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment