diff --git a/admin/view_message_log.php b/admin/view_message_log.php
new file mode 100644
index 00000000..66fce341
--- /dev/null
+++ b/admin/view_message_log.php
@@ -0,0 +1,98 @@
+');
+
+/* Print header */
+require_once(HESK_PATH . 'inc/headerAdmin.inc.php');
+
+/* Print main manage users page */
+require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
+?>
+
+
+
+' . $hesklang['manage_statuses'] . '';
}
+ if (hesk_checkPermission('can_view_logs', 0)) {
+ $tools_count++;
+ $dropdown_items .= '' . $hesklang['view_message_log'] . '';
+ }
$dropdown_items .= '';
if ($tools_count > 1) {
@@ -224,6 +228,12 @@ if (hesk_check_kb_only(false)) {
$active = ' class="active"';
}
echo ' ' . $hesklang['tools'] . '';
+ } elseif (hesk_checkPermission('can_view_logs', 0)) {
+ $active = '';
+ if (defined('PAGE_TITLE') && PAGE_TITLE == 'ADMIN_TOOLS') {
+ $active = ' class="active"';
+ }
+ echo ' ' . $hesklang['tools'] . '';
}
}
if (hesk_checkPermission('can_man_settings', 0)) {
diff --git a/install/mods-for-hesk/sql/installSql.php b/install/mods-for-hesk/sql/installSql.php
index 7483550e..73d0d42b 100644
--- a/install/mods-for-hesk/sql/installSql.php
+++ b/install/mods-for-hesk/sql/installSql.php
@@ -702,6 +702,13 @@ function execute260Scripts()
hesk_dbConnect();
executeQuery("INSERT INTO `" . hesk_dbEscape($hesk_settings['db_pfix']) . "settings` (`Key`, `Value`) VALUES ('public_api', '1')");
+ executeQuery("CREATE TABLE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "logging` (
+ `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ `username` VARCHAR(200),
+ `message` MEDIUMTEXT NOT NULL,
+ `severity` INT NOT NULL,
+ `location` MEDIUMTEXT,
+ `timestamp` TIMESTAMP NOT NULL) ENGINE = MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci");
executeQuery("CREATE TABLE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "user_api_tokens` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
diff --git a/internal-api/admin/message-log/index.php b/internal-api/admin/message-log/index.php
new file mode 100644
index 00000000..e5f5bff1
--- /dev/null
+++ b/internal-api/admin/message-log/index.php
@@ -0,0 +1,24 @@
+= '" . hesk_dbEscape($from_date) . " 00:00:00' ";
+ }
+ $to_date_format = preg_match("/\d{4}-\d{2}-\d{2}/", $to_date);
+ if ($to_date != NULL
+ && $to_date_format === 1) {
+ $sql .= "AND `timestamp` <= '" . hesk_dbEscape($to_date) . " 23:59:59' ";
+ }
+ if ($severity_id != NULL) {
+ $sql .= "AND `severity` = " . intval($severity_id);
+ }
+
+ $rs = hesk_dbQuery($sql);
+
+ $results = [];
+ while ($row = hesk_dbFetchAssoc($rs)) {
+ $row['timestamp'] = hesk_date($row['timestamp'], true);
+ $results[] = $row;
+ }
+
+ return $results;
+}
\ No newline at end of file
diff --git a/internal-api/js/view-message-log.js b/internal-api/js/view-message-log.js
new file mode 100644
index 00000000..c95f484a
--- /dev/null
+++ b/internal-api/js/view-message-log.js
@@ -0,0 +1,72 @@
+$(document).ready(function() {
+ // We should show the latest 50 logs when the user first views the page.
+ searchLogs(null, null, null, null);
+
+ $('#search-button').click(function() {
+ var location = getNullableField($('input[name="location"]').val());
+ var dateFrom = getNullableField($('input[name="from-date"]').val());
+ var dateTo = getNullableField($('input[name="to-date"]').val());
+ var severity = $('select[name="severity"]').val();
+ if (severity == -1) {
+ severity = null;
+ }
+
+ searchLogs(location, dateFrom, dateTo, severity);
+ });
+});
+
+function getNullableField(value) {
+ return value !== "" ? value : null;
+}
+
+function searchLogs(location, fromDate, toDate, severity) {
+ var endpoint = getHelpdeskUrl();
+ endpoint += '/internal-api/admin/message-log/';
+
+ $.ajax({
+ url: endpoint,
+ data: {
+ location: location,
+ fromDate: fromDate,
+ toDate: toDate,
+ severityId: severity
+ },
+ method: 'POST',
+ success: displayResults,
+ error: function(data) {
+ console.error(data);
+ }
+ });
+}
+
+function displayResults(data) {
+ data = $.parseJSON(data);
+ var table = $('#results-table > tbody');
+ table.empty();
+
+ if (data.length === 0) {
+ table.append('No results found |
');
+ } else {
+ for (var index in data) {
+ var result = data[index];
+ table.append('' +
+ '' + result.timestamp + ' | ' +
+ '' + result.username + ' | ' +
+ '' + result.location + ' | ' +
+ '' + result.message + ' | ');
+ }
+ }
+}
+
+function getRowColor(result) {
+ switch (result.severity) {
+ case "1":
+ return 'class="info"';
+ case "2":
+ return 'class="warning"';
+ case "3":
+ return 'class="danger"';
+ }
+
+ return '';
+}
\ No newline at end of file
diff --git a/language/en/text.php b/language/en/text.php
index 62ac627a..4b041e7e 100644
--- a/language/en/text.php
+++ b/language/en/text.php
@@ -21,6 +21,18 @@ $hesklang['_COLLATE']='utf8_unicode_ci';
// This is the email break line that will be used in email piping
$hesklang['EMAIL_HR']='------ Reply above this line ------';
+// ADDED OR MODIFIED IN Mods for HESK 2.6.0
+$hesklang['search_logs'] = 'Search Logs';
+$hesklang['date_logged'] = 'Date Logged';
+$hesklang['from_date'] = 'From Date';
+$hesklang['to_date'] = 'To Date';
+$hesklang['severity'] = 'Severity';
+$hesklang['debug'] = 'Debug';
+$hesklang['warning_title_case'] = 'Warning';
+$hesklang['logs'] = 'Logs';
+$hesklang['view_message_log'] = 'View Message Log';
+$hesklang['can_view_logs'] = 'Can view message logs';
+
// ADDED OR MODIFIED IN Mods for HESK 2.5.2
$hesklang['manage_statuses'] = 'Manage Statuses';
$hesklang['manage_service_messages'] = 'Manage Service Messages';