Pretty much wrapped up with the new ticket history
This commit is contained in:
parent
44ab918292
commit
0670d74c1e
@ -189,9 +189,9 @@ if ($hesk_settings['attachments']['use'] && !empty($attachments)) {
|
|||||||
// Add reply
|
// Add reply
|
||||||
$html = $modsForHesk_settings['rich_text_for_tickets'];
|
$html = $modsForHesk_settings['rich_text_for_tickets'];
|
||||||
if ($submit_as_customer) {
|
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 . "<br /><br /><i>{$hesklang['creb']} {$_SESSION['name']}</i>") . "',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 . "<br /><br /><i>{$hesklang['creb']} {$_SESSION['name']}</i>") . "','" . hesk_dbEscape(hesk_date()) . "','" . hesk_dbEscape($myattachments) . "', '" . $html . "')");
|
||||||
} else {
|
} 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 */
|
/* Track ticket status changes for history */
|
||||||
@ -252,6 +252,9 @@ if ($ticket['locked']) {
|
|||||||
|
|
||||||
if ($newStatus['IsClosed'] && hesk_checkPermission('can_resolve', 0)) {
|
if ($newStatus['IsClosed'] && hesk_checkPermission('can_resolve', 0)) {
|
||||||
$audit_closed = array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')');
|
$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']) . " ";
|
$sql_status = " , `closedat`=NOW(), `closedby`=" . intval($_SESSION['id']) . " ";
|
||||||
|
|
||||||
// Lock the ticket if customers are not allowed to reopen tickets
|
// Lock the ticket if customers are not allowed to reopen tickets
|
||||||
|
@ -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')) . '\'');
|
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');
|
hesk_process_messages(sprintf($hesklang['link_added'], $_POST['childTrackingId']), 'admin_ticket.php?track=' . $trackingID . '&Refresh=' . mt_rand(10000, 99999), 'SUCCESS');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Delete child action */
|
/* Delete child action */
|
||||||
if (($can_reply || $can_edit) && isset($_GET['deleteChild'])) {
|
if (($can_reply || $can_edit) && isset($_GET['deleteChild'])) {
|
||||||
//-- Delete the relationship
|
//-- 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']));
|
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');
|
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'])) {
|
} elseif (($can_reply || $can_edit) && isset($_GET['deleteParent'])) {
|
||||||
@ -1830,6 +1843,12 @@ function hesk_printTicketReplies()
|
|||||||
$b_date = strtotime($b['date']);
|
$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;
|
return $a_date - $b_date;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1938,7 +1957,7 @@ function mfh_print_audit_record($record) {
|
|||||||
$font_icon = 'fa-user-plus';
|
$font_icon = 'fa-user-plus';
|
||||||
break;
|
break;
|
||||||
case 'audit_unassigned':
|
case 'audit_unassigned':
|
||||||
$font_icon = 'fa-user-minus';
|
$font_icon = 'fa-user-times';
|
||||||
break;
|
break;
|
||||||
case 'audit_autoassigned':
|
case 'audit_autoassigned':
|
||||||
$font_icon = 'fa-bolt';
|
$font_icon = 'fa-bolt';
|
||||||
@ -1991,7 +2010,22 @@ function mfh_print_audit_record($record) {
|
|||||||
$font_icon = 'fa-code-fork';
|
$font_icon = 'fa-code-fork';
|
||||||
break;
|
break;
|
||||||
case 'audit_time_worked':
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
$font_icon = 'fa-question-circle';
|
$font_icon = 'fa-question-circle';
|
||||||
|
@ -53,7 +53,7 @@ $owner = intval(hesk_REQUEST('owner'));
|
|||||||
/* If ID is -1 the ticket will be unassigned */
|
/* If ID is -1 the ticket will be unassigned */
|
||||||
if ($owner == -1) {
|
if ($owner == -1) {
|
||||||
$res = hesk_dbQuery("UPDATE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` SET `owner`=0 WHERE `trackid`='" . hesk_dbEscape($trackingID) . "'");
|
$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'] . ')'));
|
array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')'));
|
||||||
|
|
||||||
hesk_process_messages($hesklang['tunasi2'], $_SERVER['PHP_SELF'], 'SUCCESS');
|
hesk_process_messages($hesklang['tunasi2'], $_SERVER['PHP_SELF'], 'SUCCESS');
|
||||||
|
@ -72,6 +72,8 @@ if ($statusRow['IsClosed']) // Closed
|
|||||||
|
|
||||||
$action = $hesklang['ticket_been'] . ' ' . $hesklang['close'];
|
$action = $hesklang['ticket_been'] . ' ' . $hesklang['close'];
|
||||||
$audit_closed = array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')');
|
$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) {
|
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) . "'");
|
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_closed', hesk_date(),
|
|
||||||
$audit_closed);
|
|
||||||
}
|
|
||||||
|
|
||||||
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(),
|
mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_status', hesk_date(),
|
||||||
$audit_status);
|
$audit_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($audit_opened != null) {
|
if ($audit_closed !== null) {
|
||||||
|
mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_closed', hesk_date(),
|
||||||
|
$audit_closed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($audit_locked !== null) {
|
||||||
|
mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_automatically_locked', hesk_date(),
|
||||||
|
array());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($audit_opened !== null) {
|
||||||
mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_opened', hesk_date(),
|
mfh_insert_audit_trail_record($ticket_id, 'TICKET', 'audit_opened', hesk_date(),
|
||||||
$audit_opened);
|
$audit_opened);
|
||||||
}
|
}
|
||||||
|
@ -209,23 +209,25 @@ function do_login()
|
|||||||
$closedStatus = hesk_dbFetchAssoc($closedStatusRs);
|
$closedStatus = hesk_dbFetchAssoc($closedStatusRs);
|
||||||
// Are we allowed to close tickets in this status?
|
// Are we allowed to close tickets in this status?
|
||||||
if ($closedStatus['Closable'] == 'yes' || $closedStatus['Closable'] == 'sonly') {
|
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?
|
$result = hesk_dbQuery("SELECT * FROM `" . $hesk_settings['db_pfix'] . "tickets` WHERE `status` = " . $closedStatus['ID'] . " AND `lastchange` <= '" . hesk_dbEscape($dt) . "' ");
|
||||||
if (!function_exists('hesk_notifyCustomer')) {
|
if (hesk_dbNumRows($result) > 0) {
|
||||||
require(HESK_PATH . 'inc/email_functions.inc.php');
|
global $ticket;
|
||||||
}
|
|
||||||
|
|
||||||
while ($ticket = hesk_dbFetchAssoc($result)) {
|
// Load required functions?
|
||||||
$ticket['dt'] = hesk_date($ticket['dt'], true);
|
if (!function_exists('hesk_notifyCustomer')) {
|
||||||
$ticket['lastchange'] = hesk_date($ticket['lastchange'], true);
|
require(HESK_PATH . 'inc/email_functions.inc.php');
|
||||||
$ticket = hesk_ticketToPlain($ticket, 1, 0);
|
}
|
||||||
mfh_insert_audit_trail_record($ticket['id'], 'TICKET', 'audit_automatically_closed', hesk_date(), array());
|
|
||||||
|
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');
|
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
|
// 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');
|
$defaultCloseRs = hesk_dbQuery('SELECT `ID` FROM `' . hesk_dbEscape($hesk_settings['db_pfix']) . 'statuses` WHERE `IsAutocloseOption` = 1');
|
||||||
$defaultCloseStatus = hesk_dbFetchAssoc($defaultCloseRs);
|
$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) . "' ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -352,7 +352,7 @@ div.ticket-info {
|
|||||||
outline: 0;
|
outline: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.timeline-header.audit-record {
|
.timeline > li > .timeline-item > .timeline-header.audit-record {
|
||||||
font-size: 12px !important;
|
font-size: 12px;
|
||||||
|
border-bottom: none;
|
||||||
}
|
}
|
@ -194,12 +194,25 @@ function delete_event($id, $hesk_settings) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function update_ticket_due_date($ticket, $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';
|
$due_date = 'NULL';
|
||||||
|
$language_key = 'audit_due_date_removed';
|
||||||
|
$audit_array = array(0 => $_SESSION['name'] . ' (' . $_SESSION['user'] . ')');
|
||||||
if ($ticket['due_date'] != NULL) {
|
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'])) . "'";
|
$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'
|
$sql = "UPDATE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` SET `due_date` = {$due_date}, `overdue_email_sent` = '0'
|
||||||
WHERE `trackid` = '" . hesk_dbEscape($ticket['trackid']) . "'";
|
WHERE `trackid` = '" . hesk_dbEscape($ticket['trackid']) . "'";
|
||||||
|
|
||||||
|
mfh_insert_audit_trail_record($ticket_id['id'], 'TICKET', $language_key, hesk_date(),
|
||||||
|
$audit_array);
|
||||||
|
|
||||||
hesk_dbQuery($sql);
|
hesk_dbQuery($sql);
|
||||||
}
|
}
|
@ -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_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_by']='%s submitted ticket';
|
||||||
$hesklang['audit_submitted_via_pop']='Ticket submitted via POP3 fetching'; // thist16
|
$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
|
// DO NOT CHANGE BELOW
|
||||||
if (!defined('IN_SCRIPT')) die('PHP syntax OK!');
|
if (!defined('IN_SCRIPT')) die('PHP syntax OK!');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user