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