2017-11-29 21:58:30 -05:00
< ? php
namespace DataAccess\Calendar ;
2017-12-21 22:10:45 -05:00
use BusinessLogic\Calendar\AbstractEvent ;
2017-12-06 21:37:42 -05:00
use BusinessLogic\Calendar\CalendarEvent ;
2017-12-17 22:05:32 -05:00
use BusinessLogic\Calendar\ReminderUnit ;
2017-12-06 21:37:42 -05:00
use BusinessLogic\Calendar\SearchEventsFilter ;
use BusinessLogic\Calendar\TicketEvent ;
2018-01-02 13:05:10 -05:00
use BusinessLogic\Helpers ;
2017-12-23 22:04:52 -05:00
use BusinessLogic\Security\UserContext ;
2018-01-23 22:14:25 -05:00
use BusinessLogic\Tickets\AuditTrail ;
use BusinessLogic\Tickets\AuditTrailEntityType ;
2017-12-17 22:05:32 -05:00
use Core\Constants\Priority ;
2017-11-29 21:58:30 -05:00
use DataAccess\CommonDao ;
class CalendarGateway extends CommonDao {
/**
2017-12-06 21:37:42 -05:00
* @ param $searchEventsFilter SearchEventsFilter
2017-11-29 21:58:30 -05:00
* @ param $heskSettings array
2017-12-21 22:10:45 -05:00
* @ return AbstractEvent []
2017-11-29 21:58:30 -05:00
*/
2017-12-27 22:00:30 -05:00
public function getEventsForStaff ( $searchEventsFilter , $heskSettings ) {
2017-11-29 21:58:30 -05:00
$this -> init ();
2017-12-17 22:05:32 -05:00
$events = array ();
2017-12-06 21:37:42 -05:00
// EVENTS
$sql = " SELECT `events`.*, `categories`.`name` AS `category_name`, `categories`.`background_color` AS `background_color`,
`categories` . `foreground_color` AS `foreground_color` , `categories` . `display_border_outline` AS `display_border` ,
2017-12-17 22:05:32 -05:00
`reminders` . `amount` AS `reminder_value` , `reminders` . `unit` AS `reminder_unit`
2017-12-06 21:37:42 -05:00
FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "calendar_event` AS `events`
INNER JOIN `" . hesk_dbEscape($heskSettings['db_pfix']) . "categories` AS `categories`
ON `events` . `category` = `categories` . `id`
LEFT JOIN `" . hesk_dbEscape($heskSettings['db_pfix']) . "calendar_event_reminder` AS `reminders`
ON `reminders` . `user_id` = " . intval( $searchEventsFilter->reminderUserId ) . "
AND `reminders` . `event_id` = `events` . `id`
2017-12-27 22:00:30 -05:00
WHERE 1 = 1 " ;
if ( $searchEventsFilter -> startTime !== null && $searchEventsFilter -> endTime !== null ) {
$startTimeSql = " CONVERT_TZ(FROM_UNIXTIME( " . hesk_dbEscape ( $searchEventsFilter -> startTime ) . " / 1000), @@session.time_zone, '+00:00') " ;
$endTimeSql = " CONVERT_TZ(FROM_UNIXTIME( " . hesk_dbEscape ( $searchEventsFilter -> endTime ) . " / 1000), @@session.time_zone, '+00:00') " ;
$sql .= " AND NOT (`end` < { $startTimeSql } OR `start` > { $endTimeSql } )
2018-01-09 12:37:29 -05:00
AND `categories` . `usage` <> 1 " ;
2017-12-27 22:00:30 -05:00
}
if ( $searchEventsFilter -> eventId !== null ) {
$sql .= " AND `events`.`id` = " . intval ( $searchEventsFilter -> eventId );
}
2017-12-06 21:37:42 -05:00
if ( ! empty ( $searchEventsFilter -> categories )) {
$categoriesAsString = implode ( ',' , $searchEventsFilter -> categories );
$sql .= " AND `events`.`category` IN ( " . $categoriesAsString . " ) " ;
2017-11-29 21:58:30 -05:00
}
2017-12-06 21:37:42 -05:00
$rs = hesk_dbQuery ( $sql );
while ( $row = hesk_dbFetchAssoc ( $rs )) {
$event = new CalendarEvent ();
$event -> id = intval ( $row [ 'id' ]);
$event -> startTime = $row [ 'start' ];
$event -> endTime = $row [ 'end' ];
2018-01-02 13:05:10 -05:00
$event -> allDay = Helpers :: boolval ( $row [ 'all_day' ]);
2017-12-06 21:37:42 -05:00
$event -> title = $row [ 'name' ];
$event -> location = $row [ 'location' ];
$event -> comments = $row [ 'comments' ];
2017-12-17 22:05:32 -05:00
$event -> categoryId = intval ( $row [ 'category' ]);
2018-01-02 13:05:10 -05:00
$event -> categoryName = Helpers :: heskHtmlSpecialCharsDecode ( $row [ 'category_name' ]);
2017-12-06 21:37:42 -05:00
$event -> backgroundColor = $row [ 'background_color' ];
$event -> foregroundColor = $row [ 'foreground_color' ];
2018-01-02 13:05:10 -05:00
$event -> displayBorder = Helpers :: boolval ( $row [ 'display_border' ]);
2017-12-17 22:05:32 -05:00
$event -> reminderValue = $row [ 'reminder_value' ] === null ? null : floatval ( $row [ 'reminder_value' ]);
$event -> reminderUnits = $row [ 'reminder_unit' ] === null ? null : ReminderUnit :: getByValue ( $row [ 'reminder_unit' ]);
2017-11-29 21:58:30 -05:00
2018-01-23 22:14:25 -05:00
$auditTrailSql = " SELECT `at`.`id` AS `id`, `at`.`entity_id`, `at`.`language_key`, `at`.`date`,
2018-01-24 13:01:23 -05:00
`values` . `replacement_index` , `values` . `replacement_value`
2018-01-23 22:14:25 -05:00
FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "audit_trail` AS `at`
INNER JOIN `" . hesk_dbEscape($heskSettings['db_pfix']) . "audit_trail_to_replacement_values` AS `values`
ON `at` . `id` = `values` . `audit_trail_id`
WHERE `entity_id` = " . intval( $event->id ) . "
AND `entity_type` = '" . AuditTrailEntityType::CALENDAR_EVENT . "' " ;
2018-01-24 13:01:23 -05:00
$auditTrailRs = hesk_dbQuery ( $auditTrailSql );
/* @var $auditTrailEntry AuditTrail */
2018-01-23 22:14:25 -05:00
$auditTrailEntry = null ;
2018-01-24 13:01:23 -05:00
while ( $row = hesk_dbFetchAssoc ( $auditTrailRs )) {
if ( $auditTrailEntry == null || intval ( $auditTrailEntry -> id ) !== intval ( $row [ 'id' ])) {
2018-01-23 22:14:25 -05:00
if ( $auditTrailEntry !== null ) {
2018-01-24 13:01:23 -05:00
$event -> auditTrail [] = $auditTrailEntry ;
2018-01-23 22:14:25 -05:00
}
$auditTrailEntry = new AuditTrail ();
2018-01-24 13:01:23 -05:00
$auditTrailEntry -> id = intval ( $row [ 'id' ]);
$auditTrailEntry -> entityId = intval ( $row [ 'entity_id' ]);
2018-01-23 22:14:25 -05:00
$auditTrailEntry -> entityType = AuditTrailEntityType :: CALENDAR_EVENT ;
$auditTrailEntry -> languageKey = $row [ 'language_key' ];
$auditTrailEntry -> date = $row [ 'date' ];
$auditTrailEntry -> replacementValues = array ();
}
$auditTrailEntry -> replacementValues [ intval ( $row [ 'replacement_index' ])] = $row [ 'replacement_value' ];
}
if ( $auditTrailEntry !== null ) {
2018-01-24 13:01:23 -05:00
$event -> auditTrail [] = $auditTrailEntry ;
2018-01-23 22:14:25 -05:00
}
2017-12-06 21:37:42 -05:00
$events [] = $event ;
2017-11-29 21:58:30 -05:00
}
2017-12-06 21:37:42 -05:00
// TICKETS
if ( $searchEventsFilter -> includeTickets ) {
$oldTimeSetting = $heskSettings [ 'timeformat' ];
$heskSettings [ 'timeformat' ] = 'Y-m-d' ;
$currentDate = hesk_date ();
$heskSettings [ 'timeformat' ] = $oldTimeSetting ;
2018-01-02 13:05:10 -05:00
$sql = " SELECT `tickets`.`id` AS `id`, `trackid`, `subject`, `due_date`, `category`, `categories`.`name` AS `category_name`, `categories`.`background_color` AS `background_color`,
2017-12-06 21:37:42 -05:00
`categories` . `foreground_color` AS `foreground_color` , `categories` . `display_border_outline` AS `display_border` ,
CASE WHEN `due_date` < '{$currentDate}' THEN 1 ELSE 0 END AS `overdue` , `owner` . `name` AS `owner_name` , `tickets` . `owner` AS `owner_id` ,
2018-01-21 22:03:54 -05:00
`tickets` . `priority` AS `priority` , `text_to_status_xref` . `text` AS `status_name`
2017-12-06 21:37:42 -05:00
FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "tickets` AS `tickets`
INNER JOIN `" . hesk_dbEscape($heskSettings['db_pfix']) . "categories` AS `categories`
ON `categories` . `id` = `tickets` . `category`
AND `categories` . `usage` <> 2
LEFT JOIN `" . hesk_dbEscape($heskSettings['db_pfix']) . "users` AS `owner`
ON `tickets` . `owner` = `owner` . `id`
2018-01-21 22:03:54 -05:00
LEFT JOIN `" . hesk_dbEscape($heskSettings['db_pfix']) . "text_to_status_xref` AS `text_to_status_xref`
ON `tickets` . `status` = `text_to_status_xref` . `status_id`
AND `text_to_status_xref` . `language` = '" . hesk_dbEscape($heskSettings[' language ']) . "'
2017-12-17 22:05:32 -05:00
WHERE `due_date` >= { $startTimeSql }
AND `due_date` <= { $endTimeSql }
2017-12-06 21:37:42 -05:00
AND `status` IN ( SELECT `id` FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "statuses` WHERE `IsClosed` = 0 )
AND ( `owner` = " . $searchEventsFilter->reminderUserId ;
if ( $searchEventsFilter -> includeUnassignedTickets ) {
2017-12-10 22:01:18 -05:00
$sql .= " OR `owner` = 0 " ;
}
if ( $searchEventsFilter -> includeTicketsAssignedToOthers ) {
$sql .= " OR `owner` NOT IN (0, " . $searchEventsFilter -> reminderUserId . " ) " ;
2017-12-06 21:37:42 -05:00
}
$sql .= " ) " ;
2017-12-10 22:01:18 -05:00
if ( ! empty ( $searchEventsFilter -> categories )) {
$categoriesAsString = implode ( ',' , $searchEventsFilter -> categories );
2017-12-21 22:10:45 -05:00
$sql .= " AND `tickets`.`category` IN ( " . $categoriesAsString . " ) " ;
2017-12-10 22:01:18 -05:00
}
$rs = hesk_dbQuery ( $sql );
while ( $row = hesk_dbFetchAssoc ( $rs )) {
$event = new TicketEvent ();
2018-01-02 13:05:10 -05:00
$event -> id = intval ( $row [ 'id' ]);
2017-12-10 22:01:18 -05:00
$event -> trackingId = $row [ 'trackid' ];
$event -> subject = $row [ 'subject' ];
$event -> title = $row [ 'subject' ];
$event -> startTime = $row [ 'due_date' ];
2017-12-17 22:05:32 -05:00
$event -> url = $heskSettings [ 'hesk_url' ] . '/' . $heskSettings [ 'admin_dir' ] . '/admin_ticket.php?track=' . $event -> trackingId ;
$event -> categoryId = intval ( $row [ 'category' ]);
2018-01-02 13:05:10 -05:00
$event -> categoryName = Helpers :: heskHtmlSpecialCharsDecode ( $row [ 'category_name' ]);
2017-12-10 22:01:18 -05:00
$event -> backgroundColor = $row [ 'background_color' ];
$event -> foregroundColor = $row [ 'foreground_color' ];
2018-01-02 13:05:10 -05:00
$event -> displayBorder = Helpers :: boolval ( $row [ 'display_border' ]);
2017-12-10 22:01:18 -05:00
$event -> owner = $row [ 'owner_name' ];
2017-12-17 22:05:32 -05:00
$event -> priority = Priority :: getByValue ( $row [ 'priority' ]);
2018-01-21 22:03:54 -05:00
$event -> status = $row [ 'status_name' ];
2017-12-10 22:01:18 -05:00
$events [] = $event ;
}
2017-11-29 21:58:30 -05:00
}
2017-12-06 21:37:42 -05:00
$this -> close ();
2017-12-17 22:05:32 -05:00
return $events ;
2017-12-06 21:37:42 -05:00
}
2017-12-23 22:04:52 -05:00
2017-12-27 22:00:30 -05:00
/**
* @ param $event CalendarEvent
* @ param $userContext UserContext
* @ param $heskSettings array
* @ return CalendarEvent
*/
public function createEvent ( $event , $userContext , $heskSettings ) {
$this -> init ();
hesk_dbQuery ( " INSERT INTO ` " . hesk_dbEscape ( $heskSettings [ 'db_pfix' ]) . " calendar_event` (`start`, `end`, `all_day`, `name`,
`location` , `comments` , `category` ) VALUES ( '" . hesk_dbEscape($event->startTime) . "' , '" . hesk_dbEscape($event->endTime) . "' ,
'" . ($event->allDay ? 1 : 0) . "' , '" . hesk_dbEscape(addslashes($event->title)) . "' ,
'" . hesk_dbEscape(addslashes($event->location)) . "' , '". hesk_dbEscape(addslashes($event->comments)) . "' , " . intval( $event->categoryId ) . " ) " );
$event -> id = hesk_dbInsertID ();
if ( $event -> reminderValue !== null ) {
hesk_dbQuery ( " INSERT INTO ` " . hesk_dbEscape ( $heskSettings [ 'db_pfix' ]) . " calendar_event_reminder` (`user_id`, `event_id`,
`amount` , `unit` ) VALUES ( " . intval( $userContext->id ) . " , " . intval( $event->id ) . " , " . intval( $event->reminderValue ) . " ,
" . intval( $event->reminderUnits ) . " ) " );
}
$this -> close ();
}
2017-12-23 22:04:52 -05:00
/**
* @ param $event CalendarEvent
* @ param $userContext UserContext
* @ param $heskSettings array
*/
public function updateEvent ( $event , $userContext , $heskSettings ) {
$this -> init ();
$sql = " UPDATE ` " . hesk_dbEscape ( $heskSettings [ 'db_pfix' ]) . " calendar_event` SET `start` = ' " . hesk_dbEscape ( $event -> startTime )
. " ', `end` = ' " . hesk_dbEscape ( $event -> endTime ) . " ', `all_day` = ' " . ( $event -> allDay ? 1 : 0 ) . " ', `name` = ' "
. hesk_dbEscape ( addslashes ( $event -> title )) . " ', `location` = ' " . hesk_dbEscape ( addslashes ( $event -> location )) . " ', `comments` = ' "
. hesk_dbEscape ( addslashes ( $event -> comments )) . " ', `category` = " . intval ( $event -> categoryId ) . " WHERE `id` = " . intval ( $event -> id );
2017-12-27 22:00:30 -05:00
if ( $event -> reminderValue !== null ) {
2017-12-23 22:04:52 -05:00
$delete_sql = " DELETE FROM ` " . hesk_dbEscape ( $heskSettings [ 'db_pfix' ]) . " calendar_event_reminder` WHERE `event_id` = " . intval ( $event -> id )
. " AND `user_id` = " . intval ( $userContext -> id );
hesk_dbQuery ( $delete_sql );
$insert_sql = " INSERT INTO ` " . hesk_dbEscape ( $heskSettings [ 'db_pfix' ]) . " calendar_event_reminder` (`user_id`, `event_id`,
`amount` , `unit` ) VALUES ( " . intval( $userContext->id ) . " , " . intval( $event->id ) . " , " . intval( $event->reminderValue ) . " ,
" . intval( $event->reminderUnits ) . " ) " ;
hesk_dbQuery ( $insert_sql );
}
hesk_dbQuery ( $sql );
$this -> close ();
}
2018-01-07 22:02:43 -05:00
/**
* @ param $id int
* @ param $userContext UserContext
* @ param $heskSettings array
*/
public function deleteEvent ( $id , $userContext , $heskSettings ) {
$this -> init ();
hesk_dbQuery ( " DELETE FROM ` " . hesk_dbEscape ( $heskSettings [ 'db_pfix' ]) . " calendar_event_reminder`
WHERE `event_id` = " . intval( $id ) . " AND `user_id` = " . intval( $userContext->id ));
hesk_dbQuery ( " DELETE FROM ` " . hesk_dbEscape ( $heskSettings [ 'db_pfix' ]) . " calendar_event`
WHERE `id` = " . intval( $id ));
$this -> close ();
}
2017-11-29 21:58:30 -05:00
}