From 0670d74c1eb28c9711785ceba5fd14f5c2fc0fb0 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sun, 24 Sep 2017 22:07:49 -0400 Subject: [PATCH] Pretty much wrapped up with the new ticket history --- admin/admin_reply_ticket.php | 7 ++++-- admin/admin_ticket.php | 38 +++++++++++++++++++++++++++++-- admin/assign_owner.php | 2 +- admin/change_status.php | 18 ++++++++------- admin/index.php | 36 +++++++++++++++-------------- css/mods-for-hesk-new.css | 6 ++--- internal-api/dao/calendar_dao.php | 13 +++++++++++ language/en/text.php | 4 ++++ 8 files changed, 91 insertions(+), 33 deletions(-) diff --git a/admin/admin_reply_ticket.php b/admin/admin_reply_ticket.php index 3ade28b2..29a0d5c8 100644 --- a/admin/admin_reply_ticket.php +++ b/admin/admin_reply_ticket.php @@ -189,9 +189,9 @@ if ($hesk_settings['attachments']['use'] && !empty($attachments)) { // Add reply $html = $modsForHesk_settings['rich_text_for_tickets']; if ($submit_as_customer) { - hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($hesk_settings['db_pfix']) . "replies` (`replyto`,`name`,`message`,`dt`,`attachments`,`html`) VALUES ('" . intval($replyto) . "','" . hesk_dbEscape(addslashes($ticket['name'])) . "','" . hesk_dbEscape($message . "

{$hesklang['creb']} {$_SESSION['name']}") . "',NOW(),'" . hesk_dbEscape($myattachments) . "', '" . $html . "')"); + hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($hesk_settings['db_pfix']) . "replies` (`replyto`,`name`,`message`,`dt`,`attachments`,`html`) VALUES ('" . intval($replyto) . "','" . hesk_dbEscape(addslashes($ticket['name'])) . "','" . hesk_dbEscape($message . "

{$hesklang['creb']} {$_SESSION['name']}") . "','" . hesk_dbEscape(hesk_date()) . "','" . hesk_dbEscape($myattachments) . "', '" . $html . "')"); } else { - hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($hesk_settings['db_pfix']) . "replies` (`replyto`,`name`,`message`,`dt`,`attachments`,`staffid`,`html`) VALUES ('" . intval($replyto) . "','" . hesk_dbEscape(addslashes($_SESSION['name'])) . "','" . hesk_dbEscape($message) . "',NOW(),'" . hesk_dbEscape($myattachments) . "','" . intval($_SESSION['id']) . "', '" . $html . "')"); + hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($hesk_settings['db_pfix']) . "replies` (`replyto`,`name`,`message`,`dt`,`attachments`,`staffid`,`html`) VALUES ('" . intval($replyto) . "','" . hesk_dbEscape(addslashes($_SESSION['name'])) . "','" . hesk_dbEscape($message) . "','" . hesk_dbEscape(hesk_date()) . "','" . hesk_dbEscape($myattachments) . "','" . intval($_SESSION['id']) . "', '" . $html . "')"); } /* Track ticket status changes for history */ @@ -252,6 +252,9 @@ if ($ticket['locked']) { if ($newStatus['IsClosed'] && hesk_checkPermission('can_resolve', 0)) { $audit_closed = array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')'); + $audit_status = array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')', + 1 => mfh_getDisplayTextForStatusId($new_status) + ); $sql_status = " , `closedat`=NOW(), `closedby`=" . intval($_SESSION['id']) . " "; // Lock the ticket if customers are not allowed to reopen tickets diff --git a/admin/admin_ticket.php b/admin/admin_ticket.php index a587f42f..d17ee27b 100644 --- a/admin/admin_ticket.php +++ b/admin/admin_ticket.php @@ -509,13 +509,26 @@ if (($can_reply || $can_edit) && isset($_POST['childTrackingId'])) { } hesk_dbQuery('UPDATE `' . hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets` SET `parent` = ' . intval($ticket['id']) . ' WHERE `trackid` = \'' . hesk_dbEscape(hesk_POST('childTrackingId')) . '\''); + mfh_insert_audit_trail_record($ticket['id'], 'TICKET', 'audit_linked_ticket', hesk_date(), + array( + 0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')', + 1 => hesk_POST('childTrackingId') + )); hesk_process_messages(sprintf($hesklang['link_added'], $_POST['childTrackingId']), 'admin_ticket.php?track=' . $trackingID . '&Refresh=' . mt_rand(10000, 99999), 'SUCCESS'); } /* Delete child action */ if (($can_reply || $can_edit) && isset($_GET['deleteChild'])) { //-- Delete the relationship + $innerTrackingRs = hesk_dbQuery("SELECT `trackid` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` WHERE `id` = " . hesk_dbEscape($_GET['deleteChild'])); + $innerTrackingId = hesk_dbFetchAssoc($innerTrackingRs); + hesk_dbQuery('UPDATE `' . hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets` SET `parent` = NULL WHERE `ID` = ' . hesk_dbEscape($_GET['deleteChild'])); + mfh_insert_audit_trail_record($ticket['id'], 'TICKET', 'audit_unlinked_ticket', hesk_date(), + array( + 0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')', + 1 => $innerTrackingId['trackid'] + )); hesk_process_messages($hesklang['ticket_no_longer_linked'], 'admin_ticket.php?track=' . $trackingID . '&Refresh=' . mt_rand(10000, 99999), 'SUCCESS'); } elseif (($can_reply || $can_edit) && isset($_GET['deleteParent'])) { @@ -1830,6 +1843,12 @@ function hesk_printTicketReplies() $b_date = strtotime($b['date']); } + if ($a_date === $b_date && $a['SORT_TYPE'] != $b['SORT_TYPE']) { + if ($a['SORT_TYPE'] != $b['SORT_TYPE']) { + return $a['SORT_TYPE'] == 'REPLY' ? -1 : 1; + } + } + return $a_date - $b_date; }); @@ -1938,7 +1957,7 @@ function mfh_print_audit_record($record) { $font_icon = 'fa-user-plus'; break; case 'audit_unassigned': - $font_icon = 'fa-user-minus'; + $font_icon = 'fa-user-times'; break; case 'audit_autoassigned': $font_icon = 'fa-bolt'; @@ -1991,7 +2010,22 @@ function mfh_print_audit_record($record) { $font_icon = 'fa-code-fork'; break; case 'audit_time_worked': - $font_icon = 'fa-clock'; + $font_icon = 'fa fa-clock-o'; + break; + case 'audit_due_date_removed': + $font_icon = 'fa fa-calendar-minus-o'; + break; + case 'audit_due_date_changed': + $font_icon = 'fa fa-calendar'; + + //-- Format the date + $record['replacement_values'][1] = date('Y-m-d', strtotime($record['replacement_values'][1])); + break; + case 'audit_linked_ticket': + $font_icon = 'fa fa-link'; + break; + case 'audit_unlinked_ticket': + $font_icon = 'fa fa-chain-broken'; break; default: $font_icon = 'fa-question-circle'; diff --git a/admin/assign_owner.php b/admin/assign_owner.php index 9afc5df7..e875b2a5 100755 --- a/admin/assign_owner.php +++ b/admin/assign_owner.php @@ -53,7 +53,7 @@ $owner = intval(hesk_REQUEST('owner')); /* If ID is -1 the ticket will be unassigned */ if ($owner == -1) { $res = hesk_dbQuery("UPDATE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` SET `owner`=0 WHERE `trackid`='" . hesk_dbEscape($trackingID) . "'"); - mfh_insert_audit_trail_record($ticket['id'], 'TICKET', 'audit_unassigned', date(), + mfh_insert_audit_trail_record($ticket['id'], 'TICKET', 'audit_unassigned', hesk_date(), array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')')); hesk_process_messages($hesklang['tunasi2'], $_SERVER['PHP_SELF'], 'SUCCESS'); diff --git a/admin/change_status.php b/admin/change_status.php index 9a7bfb74..cc3f1fa7 100644 --- a/admin/change_status.php +++ b/admin/change_status.php @@ -72,6 +72,8 @@ if ($statusRow['IsClosed']) // Closed $action = $hesklang['ticket_been'] . ' ' . $hesklang['close']; $audit_closed = array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')'); + $audit_status = array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')', + 1 => $status_options[$status]); if ($hesk_settings['custopen'] != 1) { @@ -120,22 +122,22 @@ if ($statusRow['IsClosed']) // Closed hesk_dbQuery("UPDATE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` SET `status`='{$status}', `locked`='{$locked}' $closedby_sql WHERE `trackid`='" . hesk_dbEscape($trackingID) . "'"); -if ($audit_closed != null) { +if ($audit_status !== null) { + mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_status', hesk_date(), + $audit_status); +} + +if ($audit_closed !== null) { mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_closed', hesk_date(), $audit_closed); } -if ($audit_locked != null) { +if ($audit_locked !== null) { mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_automatically_locked', hesk_date(), array()); } -if ($audit_status != null) { - mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_status', hesk_date(), - $audit_status); -} - -if ($audit_opened != null) { +if ($audit_opened !== null) { mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_opened', hesk_date(), $audit_opened); } diff --git a/admin/index.php b/admin/index.php index b822ed29..ba7c4b00 100644 --- a/admin/index.php +++ b/admin/index.php @@ -209,23 +209,25 @@ function do_login() $closedStatus = hesk_dbFetchAssoc($closedStatusRs); // Are we allowed to close tickets in this status? if ($closedStatus['Closable'] == 'yes' || $closedStatus['Closable'] == 'sonly') { - // Notify customer of closed ticket? - if ($hesk_settings['notify_closed']) { - // Get list of tickets - $result = hesk_dbQuery("SELECT * FROM `" . $hesk_settings['db_pfix'] . "tickets` WHERE `status` = " . $closedStatus['ID'] . " AND `lastchange` <= '" . hesk_dbEscape($dt) . "' "); - if (hesk_dbNumRows($result) > 0) { - global $ticket; - - // Load required functions? - if (!function_exists('hesk_notifyCustomer')) { - require(HESK_PATH . 'inc/email_functions.inc.php'); - } - while ($ticket = hesk_dbFetchAssoc($result)) { - $ticket['dt'] = hesk_date($ticket['dt'], true); - $ticket['lastchange'] = hesk_date($ticket['lastchange'], true); - $ticket = hesk_ticketToPlain($ticket, 1, 0); - mfh_insert_audit_trail_record($ticket['id'], 'TICKET', 'audit_automatically_closed', hesk_date(), array()); + $result = hesk_dbQuery("SELECT * FROM `" . $hesk_settings['db_pfix'] . "tickets` WHERE `status` = " . $closedStatus['ID'] . " AND `lastchange` <= '" . hesk_dbEscape($dt) . "' "); + if (hesk_dbNumRows($result) > 0) { + global $ticket; + + // Load required functions? + if (!function_exists('hesk_notifyCustomer')) { + require(HESK_PATH . 'inc/email_functions.inc.php'); + } + + while ($ticket = hesk_dbFetchAssoc($result)) { + $ticket['dt'] = hesk_date($ticket['dt'], true); + $ticket['lastchange'] = hesk_date($ticket['lastchange'], true); + $ticket = hesk_ticketToPlain($ticket, 1, 0); + mfh_insert_audit_trail_record($ticket['id'], 'TICKET', 'audit_automatically_closed', hesk_date(), array()); + + // Notify customer of closed ticket? + if ($hesk_settings['notify_closed']) { + // Get list of tickets hesk_notifyCustomer($modsForHesk_settings, 'ticket_closed'); } } @@ -234,7 +236,7 @@ function do_login() // Update ticket statuses and history in database if we're allowed to do so $defaultCloseRs = hesk_dbQuery('SELECT `ID` FROM `' . hesk_dbEscape($hesk_settings['db_pfix']) . 'statuses` WHERE `IsAutocloseOption` = 1'); $defaultCloseStatus = hesk_dbFetchAssoc($defaultCloseRs); - hesk_dbQuery("UPDATE `" . $hesk_settings['db_pfix'] . "tickets` SET `status`=" . intval($defaultCloseStatus['ID']) . ", `closedat`=NOW(), `closedby`='-1' WHERE `status` = '" . $closedStatus['ID'] . "' AND `lastchange` <= '" . hesk_dbEscape($dt) . "' "); + hesk_dbQuery("UPDATE `" . $hesk_settings['db_pfix'] . "tickets` SET `status`=" . intval($defaultCloseStatus['ID']) . ", `closedat`=NOW(), `closedby`='-1' WHERE `status` = " . $closedStatus['ID'] . " AND `lastchange` <= '" . hesk_dbEscape($dt) . "' "); } } diff --git a/css/mods-for-hesk-new.css b/css/mods-for-hesk-new.css index 56ddeb91..d1dec79a 100644 --- a/css/mods-for-hesk-new.css +++ b/css/mods-for-hesk-new.css @@ -352,7 +352,7 @@ div.ticket-info { outline: 0; } -.timeline-header.audit-record { - font-size: 12px !important; - +.timeline > li > .timeline-item > .timeline-header.audit-record { + font-size: 12px; + border-bottom: none; } \ No newline at end of file diff --git a/internal-api/dao/calendar_dao.php b/internal-api/dao/calendar_dao.php index 9c87e458..a3f15d98 100644 --- a/internal-api/dao/calendar_dao.php +++ b/internal-api/dao/calendar_dao.php @@ -194,12 +194,25 @@ function delete_event($id, $hesk_settings) { } function update_ticket_due_date($ticket, $hesk_settings) { + $ticket_id_rs = hesk_dbQuery("SELECT `id` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` WHERE `trackid` = '" . hesk_dbEscape($ticket['trackid']) . "'"); + $ticket_id = hesk_dbFetchAssoc($ticket_id_rs); + $due_date = 'NULL'; + $language_key = 'audit_due_date_removed'; + $audit_array = array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')'); if ($ticket['due_date'] != NULL) { + $audit_array = array( + 0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')', + 1 => date('Y-m-d H:i:s', strtotime($ticket['due_date'])) + ); $due_date = "'" . date('Y-m-d H:i:s', strtotime($ticket['due_date'])) . "'"; + $language_key = 'audit_due_date_changed'; } $sql = "UPDATE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` SET `due_date` = {$due_date}, `overdue_email_sent` = '0' WHERE `trackid` = '" . hesk_dbEscape($ticket['trackid']) . "'"; + mfh_insert_audit_trail_record($ticket_id['id'], 'TICKET', $language_key, hesk_date(), + $audit_array); + hesk_dbQuery($sql); } \ No newline at end of file diff --git a/language/en/text.php b/language/en/text.php index a5dc2321..d543ccd3 100644 --- a/language/en/text.php +++ b/language/en/text.php @@ -2210,6 +2210,10 @@ $hesklang['audit_merged']='%s merged ticket %s with this ticket'; // %s = date, $hesklang['audit_time_worked']='%s updated time worked to %s'; // %s = date, new time worked, user making change $hesklang['audit_submitted_by']='%s submitted ticket'; $hesklang['audit_submitted_via_pop']='Ticket submitted via POP3 fetching'; // thist16 +$hesklang['audit_due_date_removed'] = '%s removed due date'; +$hesklang['audit_due_date_changed'] = '%s changed due date to %s'; +$hesklang['audit_linked_ticket'] = '%s linked ticket %s to this ticket'; +$hesklang['audit_unlinked_ticket'] = '%s unlinked ticket %s'; // DO NOT CHANGE BELOW if (!defined('IN_SCRIPT')) die('PHP syntax OK!');