diff --git a/admin/calendar.php b/admin/calendar.php
index 2a0ae1f2..884c6d17 100644
--- a/admin/calendar.php
+++ b/admin/calendar.php
@@ -49,6 +49,13 @@ hesk_isLoggedIn();
// Define required constants
define('MFH_CALENDAR', 1);
+// Get categories for the dropdown
+$rs = hesk_dbQuery("SELECT `id`, `name` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "categories` ORDER BY `cat_order`");
+$categories = [];
+while ($row = hesk_dbFetchAssoc($rs)) {
+ $categories[] = $row;
+}
+
/* Print header */
require_once(HESK_PATH . 'inc/headerAdmin.inc.php');
@@ -104,6 +111,23 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
+
@@ -121,7 +145,6 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
required>
-
+
@@ -309,6 +349,10 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
Location
+
+ Category
+
+
From
diff --git a/install/mods-for-hesk/sql/installSql.php b/install/mods-for-hesk/sql/installSql.php
index 22a845c9..11b397f5 100644
--- a/install/mods-for-hesk/sql/installSql.php
+++ b/install/mods-for-hesk/sql/installSql.php
@@ -727,7 +727,8 @@ function execute260Scripts()
`all_day` ENUM('0','1') NOT NULL,
`name` VARCHAR(255) NOT NULL,
`location` VARCHAR(255),
- `comments` MEDIUMTEXT) ENGINE = MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci");
+ `comments` MEDIUMTEXT,
+ `category` INT) ENGINE = MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci");
executeQuery("ALTER TABLE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` ADD COLUMN `due_date` DATETIME");
executeQuery("UPDATE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "settings` SET `Value` = '2.6.0' WHERE `Key` = 'modsForHeskVersion'");
}
\ No newline at end of file
diff --git a/internal-api/admin/calendar/index.php b/internal-api/admin/calendar/index.php
index 6e1ed9ff..25db18d6 100644
--- a/internal-api/admin/calendar/index.php
+++ b/internal-api/admin/calendar/index.php
@@ -32,6 +32,7 @@ if ($request_method === 'GET') {
$event['end'] = hesk_POST('endTime');
$event['all_day'] = hesk_POST('allDay') === 'true';
$event['comments'] = hesk_POST('comments');
+ $event['category'] = hesk_POST('categoryId');
$id = create_event($event, $hesk_settings);
@@ -47,6 +48,7 @@ if ($request_method === 'GET') {
$event['end'] = hesk_POST('endTime');
$event['all_day'] = hesk_POST('allDay') === 'true';
$event['comments'] = hesk_POST('comments');
+ $event['category'] = hesk_POST('categoryId');
update_event($event, $hesk_settings);
diff --git a/internal-api/dao/calendar_dao.php b/internal-api/dao/calendar_dao.php
index f0369267..d3ce7b9d 100644
--- a/internal-api/dao/calendar_dao.php
+++ b/internal-api/dao/calendar_dao.php
@@ -2,7 +2,10 @@
function get_events($start, $end, $hesk_settings) {
- $sql = "SELECT * FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "calendar_event` WHERE `start` >= FROM_UNIXTIME(" . intval($start)
+ $sql = "SELECT `events`.*, `categories`.`name` AS `category_name` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "calendar_event` AS `events`
+ INNER JOIN `" . hesk_dbEscape($hesk_settings['db_pfix']) . "categories` AS `categories`
+ ON `events`.`category` = `categories`.`id`
+ WHERE `start` >= FROM_UNIXTIME(" . intval($start)
. " / 1000) AND `end` <= FROM_UNIXTIME(" . intval($end) . " / 1000)";
$rs = hesk_dbQuery($sql);
@@ -17,10 +20,15 @@ function get_events($start, $end, $hesk_settings) {
$event['title'] = $row['name'];
$event['location'] = $row['location'];
$event['comments'] = $row['comments'];
+ $event['categoryId'] = $row['category'];
+ $event['categoryName'] = $row['category_name'];
$events[] = $event;
}
- $sql = "SELECT `trackid`, `subject`, `due_date` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets`
+ $sql = "SELECT `trackid`, `subject`, `due_date`, `category`, `categories`.`name` AS `category_name`
+ FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` AS `tickets`
+ INNER JOIN `" . hesk_dbEscape($hesk_settings['db_pfix']) . "categories` AS `categories`
+ ON `categories`.`id` = `tickets`.`category`
WHERE `due_date` >= FROM_UNIXTIME(" . intval($start) . " / 1000)
AND `due_date` <= FROM_UNIXTIME(" . intval($end) . " / 1000)
AND `status` IN (SELECT `id` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "statuses` WHERE `IsClosed` = 0) ";
@@ -32,6 +40,8 @@ function get_events($start, $end, $hesk_settings) {
$event['title'] = '[' . $row['trackid'] . '] ' . $row['subject'];
$event['startTime'] = $row['due_date'];
$event['url'] = $hesk_settings['hesk_url'] . '/' . $hesk_settings['admin_dir'] . '/admin_ticket.php?track=' . $event['trackingId'];
+ $event['categoryId'] = $row['category'];
+ $event['categoryName'] = $row['category_name'];
$events[] = $event;
}
@@ -45,9 +55,10 @@ function create_event($event, $hesk_settings) {
$event['all_day'] = $event['all_day'] ? 1 : 0;
$sql = "INSERT INTO `" . hesk_dbEscape($hesk_settings['db_pfix']) . "calendar_event` (`start`, `end`, `all_day`,
- `name`, `location`, `comments`) VALUES (
+ `name`, `location`, `comments`, `category`) VALUES (
'" . hesk_dbEscape($event['start']) . "', '" . hesk_dbEscape($event['end']) . "', '" . hesk_dbEscape($event['all_day']) . "',
- '" . hesk_dbEscape($event['title']) . "', '" . hesk_dbEscape($event['location']) . "', '" . hesk_dbEscape($event['comments']) . "')";
+ '" . hesk_dbEscape($event['title']) . "', '" . hesk_dbEscape($event['location']) . "', '" . hesk_dbEscape($event['comments']) . "',
+ " . intval($event['category']) . ")";
hesk_dbQuery($sql);
return hesk_dbInsertID();
@@ -65,7 +76,7 @@ function update_event($event, $hesk_settings) {
$sql = "UPDATE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "calendar_event` SET `start` = '" . hesk_dbEscape($event['start'])
. "', `end` = '" . hesk_dbEscape($event['end']) . "', `all_day` = '" . hesk_dbEscape($event['all_day']) . "', `name` = '"
. hesk_dbEscape($event['title']) . "', `location` = '" . hesk_dbEscape($event['location']) . "', `comments` = '"
- . hesk_dbEscape($event['comments']) . "' WHERE `id` = " . intval($event['id']);
+ . hesk_dbEscape($event['comments']) . "', `category` = " . intval($event['category']) . " WHERE `id` = " . intval($event['id']);
hesk_dbQuery($sql);
}
diff --git a/js/calendar/mods-for-hesk-calendar.js b/js/calendar/mods-for-hesk-calendar.js
index 241e49b6..47978f0b 100644
--- a/js/calendar/mods-for-hesk-calendar.js
+++ b/js/calendar/mods-for-hesk-calendar.js
@@ -75,6 +75,7 @@ $(document).ready(function() {
endTime: end,
allDay: event.allDay,
comments: event.comments,
+ categoryId: event.categoryId,
action: 'update'
};
$.ajax({
@@ -98,7 +99,7 @@ $(document).ready(function() {
}
var contents = $('.popover-template').html();
- $contents = $(contents);
+ var $contents = $(contents);
var format = 'dddd, MMMM Do YYYY';
var endDate = event.end == null ? event.start : event.end;
@@ -111,7 +112,8 @@ $(document).ready(function() {
$contents.find('.popover-location').hide();
}
- $contents.find('.popover-location span').text(event.location).end()
+ $contents.find('.popover-category span').text(event.categoryName).end()
+ .find('.popover-location span').text(event.location).end()
.find('.popover-from span').text(event.start.format(format)).end()
.find('.popover-to span').text(endDate.format(format));
var $eventMarkup = $(this);
@@ -199,6 +201,7 @@ $(document).ready(function() {
endTime: moment(end).format(dateFormat),
allDay: allDay,
comments: $('#create-form textarea[name="comments"]').val(),
+ categoryId: $('#create-form select[name="category"]').val(),
action: 'create',
type: 'CALENDAR'
};
@@ -240,6 +243,7 @@ $(document).ready(function() {
endTime: moment(end).format(dateFormat),
allDay: allDay,
comments: $form.find('textarea[name="comments"]').val(),
+ categoryId: $form.find('select[name="category"]').val(),
action: 'update'
};
@@ -284,7 +288,8 @@ function buildEvent(id, dbObject) {
url: dbObject.url,
color: endOfDay.isBefore() ? '#dd0000' : 'green',
allDay: true,
- type: dbObject.type
+ type: dbObject.type,
+ categoryId: dbObject.categoryId
};
}
@@ -296,7 +301,9 @@ function buildEvent(id, dbObject) {
end: moment(dbObject.endTime),
comments: dbObject.comments,
location: dbObject.location,
- type: dbObject.type
+ type: dbObject.type,
+ categoryId: dbObject.categoryId,
+ categoryName: dbObject.categoryName
};
}
@@ -361,5 +368,7 @@ function displayEditModal(date) {
$form.find('#create-ticket-button').prop('href', createTicketLink);
+ $form.find('select[name="category"] option[value="' + date.categoryId + '"]').prop('selected', true);
+
$('#edit-event-modal').modal('show');
}
\ No newline at end of file