2016-03-28 21:55:14 -04:00
#!/usr/bin/php -q
< ? php
define ( 'IN_SCRIPT' , 1 );
define ( 'HESK_PATH' , dirname ( dirname ( __FILE__ )) . '/' );
2016-04-20 18:38:52 -04:00
$LOCATION = 'Calendar Reminders Cron Job' ;
2016-03-28 21:55:14 -04:00
#echo HESK_PATH."\n";
// Get required files and functions
require ( HESK_PATH . 'hesk_settings.inc.php' );
require ( HESK_PATH . 'inc/common.inc.php' );
2016-04-20 18:38:52 -04:00
if ( defined ( 'HESK_DEMO' )) {
echo '>>>>>>> DEMO MODE IS ENABLED. CRON JOBS CANNOT BE EXECUTED WHILE IN DEMO MODE! <<<<<<<' ;
die ();
}
2016-03-28 21:55:14 -04:00
if ( hesk_check_maintenance ( false )) {
// If Debug mode is ON show "Maintenance mode" message
$message = $hesk_settings [ 'debug_mode' ] ? $hesklang [ 'mm1' ] : '' ;
$message .= " \n " ;
die ( $message );
}
2016-04-20 21:44:13 -04:00
hesk_load_cron_database_functions ();
2016-03-28 21:55:14 -04:00
hesk_dbConnect ();
if ( $hesk_settings [ 'debug_mode' ]) {
echo " Starting Calendar Reminders... \n " ;
}
// Get all reminders that have a reminder date that is now or earlier, and an email has not been sent for the event yet.
2016-03-29 13:44:57 -04:00
/*
* Reminder units :
* 0 - minutes
* 1 - hours
* 2 - days
* 3 - weeks
*/
2016-03-29 21:58:33 -04:00
$case_statement = " CASE
2016-03-29 13:44:57 -04:00
WHEN `unit` = '0' THEN DATE_SUB ( `event` . `start` , INTERVAL `reminder` . `amount` MINUTE )
WHEN `unit` = '1' THEN DATE_SUB ( `event` . `start` , INTERVAL `reminder` . `amount` HOUR )
WHEN `unit` = '2' THEN DATE_SUB ( `event` . `start` , INTERVAL `reminder` . `amount` DAY )
2016-03-29 21:58:33 -04:00
WHEN `unit` = '3' THEN DATE_SUB ( `event` . `start` , INTERVAL `reminder` . `amount` WEEK )
END " ;
2016-03-30 22:02:16 -04:00
$sql = " SELECT `reminder`.`id` AS `reminder_id`, `reminder`.`user_id` AS `user_id`, `reminder`.`event_id` AS `event_id`,
`event` . `name` AS `event_name` , `event` . `location` AS `event_location` , `event` . `comments` AS `event_comments` ,
`category` . `name` AS `event_category` , `event` . `start` AS `event_start` , `event` . `end` AS `event_end` ,
2016-03-31 09:00:39 -04:00
`event` . `all_day` AS `event_all_day` , `user` . `language` AS `user_language` , `user` . `email` AS `user_email` ,
2016-04-20 18:38:52 -04:00
" . $case_statement . " AS `reminder_date` , 'EVENT' AS `type`
2016-03-29 13:44:57 -04:00
FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "calendar_event_reminder` AS `reminder`
INNER JOIN `" . hesk_dbEscape($hesk_settings['db_pfix']) . "calendar_event` AS `event`
ON `reminder` . `event_id` = `event` . `id`
2016-03-30 22:02:16 -04:00
INNER JOIN `" . hesk_dbEscape($hesk_settings['db_pfix']) . "categories` AS `category`
ON `event` . `category` = `category` . `id`
INNER JOIN `" . hesk_dbEscape($hesk_settings['db_pfix']) . "users` AS `user`
ON `reminder` . `user_id` = `user` . `id`
2016-03-29 21:58:33 -04:00
WHERE ( " . $case_statement . " ) <= NOW ()
2016-03-28 21:55:14 -04:00
AND `email_sent` = '0' " ;
$rs = hesk_dbQuery ( $sql );
2016-04-20 18:38:52 -04:00
$modsForHesk_settings = mfh_getSettings ();
2016-03-31 09:00:39 -04:00
$reminders_to_flag = [];
2016-04-20 18:38:52 -04:00
$tickets_to_flag = [];
2016-03-31 09:00:39 -04:00
2016-04-20 18:38:52 -04:00
$included_email_functions = false ;
2016-03-31 09:00:39 -04:00
if ( hesk_dbNumRows ( $rs ) > 0 ) {
require ( HESK_PATH . 'inc/email_functions.inc.php' );
2016-04-20 18:38:52 -04:00
$included_email_functions = true ;
2016-03-31 09:00:39 -04:00
}
2016-03-28 21:55:14 -04:00
2016-03-31 09:00:39 -04:00
$successful_emails = 0 ;
$failed_emails = 0 ;
2016-03-28 21:55:14 -04:00
while ( $row = hesk_dbFetchAssoc ( $rs )) {
2016-03-31 09:00:39 -04:00
if ( mfh_sendCalendarReminder ( $row , $modsForHesk_settings )) {
$reminders_to_flag [] = $row [ 'reminder_id' ];
2016-04-20 18:38:52 -04:00
$successful_emails ++ ;
2016-03-31 09:00:39 -04:00
if ( $hesk_settings [ 'debug_mode' ]) {
2016-04-20 18:38:52 -04:00
$debug_msg = " Sent e-mail reminder for event: { $row [ 'event_name' ] } to { $row [ 'user_email' ] } \n " ;
echo $debug_msg ;
mfh_log_debug ( $LOCATION , $debug_msg , 'CRON' );
2016-03-31 09:00:39 -04:00
}
} else {
$failed_emails ++ ;
2016-04-20 18:38:52 -04:00
$warning_text = " Failed to send reminder e-mail for event: { $row [ 'event_name' ] } to { $row [ 'user_email' ] } . This will be re-sent next time reminders are processed. \n " ;
mfh_log_warning ( $LOCATION , $warning_text , 'CRON' );
echo $warning_text ;
2016-03-31 09:00:39 -04:00
}
}
2016-03-28 21:55:14 -04:00
2016-03-31 09:00:39 -04:00
if ( count ( $reminders_to_flag ) > 0 ) {
foreach ( $reminders_to_flag as $reminder_id ) {
$sql = " UPDATE ` " . hesk_dbEscape ( $hesk_settings [ 'db_pfix' ]) . " calendar_event_reminder` SET `email_sent` = '1' WHERE `id` = " . intval ( $reminder_id );
hesk_dbQuery ( $sql );
}
2016-03-28 21:55:14 -04:00
}
if ( $hesk_settings [ 'debug_mode' ]) {
2016-04-20 18:38:52 -04:00
$debug_msg = " Finished Calendar Reminders. { $successful_emails } reminder e-mails sent. { $failed_emails } emails failed to send. \n " ;
echo $debug_msg ;
mfh_log_debug ( $LOCATION , $debug_msg , 'CRON' );
}
// Overdue tickets
if ( $hesk_settings [ 'debug_mode' ]) {
echo " Starting Overdue Tickets... \n " ;
}
$sql = " SELECT `ticket`.`id` AS `id`, `ticket`.`trackid` AS `trackid`, `ticket`.`name` AS `name`, `ticket`.`subject` AS `subject`,
`ticket` . `message` AS `message` , `ticket` . `category` AS `category` , `ticket` . `priority` AS `priority` ,
`ticket` . `owner` AS `owner` , `ticket` . `status` AS `status` , `ticket` . `email` AS `email` , `ticket` . `dt` AS `dt` ,
`ticket` . `lastchange` AS `lastchange` , `ticket` . `due_date` AS `due_date` , `user` . `language` AS `user_language` , `user` . `email` AS `user_email` ,
`ticket` . `custom1` AS `custom1` , `ticket` . `custom2` AS `custom2` , `ticket` . `custom3` AS `custom3` , `ticket` . `custom4` AS `custom4` ,
`ticket` . `custom5` AS `custom5` , `ticket` . `custom6` AS `custom6` , `ticket` . `custom7` AS `custom7` , `ticket` . `custom8` AS `custom8` ,
`ticket` . `custom9` AS `custom9` , `ticket` . `custom10` AS `custom10` , `ticket` . `custom11` AS `custom11` , `ticket` . `custom12` AS `custom12` ,
`ticket` . `custom13` AS `custom13` , `ticket` . `custom14` AS `custom14` , `ticket` . `custom15` AS `custom15` , `ticket` . `custom16` AS `custom16` ,
`ticket` . `custom17` AS `custom17` , `ticket` . `custom18` AS `custom19` , `ticket` . `custom19` AS `custom19` , `ticket` . `custom20` AS `custom20` ,
`ticket` . `html` AS `html`
FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` AS `ticket`
INNER JOIN `" . hesk_dbEscape($hesk_settings['db_pfix']) . "users` AS `user`
ON `ticket` . `owner` = `user` . `id`
WHERE `due_date` IS NOT NULL
AND `due_date` <= NOW ()
AND `overdue_email_sent` = '0' " ;
$successful_emails = 0 ;
$failed_emails = 0 ;
$rs = hesk_dbQuery ( $sql );
if ( hesk_dbNumRows ( $rs ) > 0 && ! $included_email_functions ) {
require ( HESK_PATH . 'inc/email_functions.inc.php' );
$included_email_functions = true ;
}
2016-04-23 22:07:51 -04:00
$user_rs = hesk_dbQuery ( " SELECT `id`, `isadmin`, `categories`, `email`,
CASE WHEN `heskprivileges` LIKE '%can_view_unassigned%' THEN 1 ELSE 0 END AS `can_view_unassigned`
FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "users` WHERE `notify_overdue_unassigned` = '1'
AND ( `heskprivileges` LIKE '%can_view_tickets%' OR `isadmin` = '1' ) " );
$users = [];
while ( $row = hesk_dbFetchAssoc ( $user_rs )) {
$users [] = $row ;
}
2016-04-20 18:38:52 -04:00
$tickets_to_flag = [];
while ( $row = hesk_dbFetchAssoc ( $rs )) {
2016-04-23 22:07:51 -04:00
if ( mfh_sendOverdueTicketReminder ( $row , $users , $modsForHesk_settings )) {
2016-04-20 18:38:52 -04:00
$tickets_to_flag [] = $row [ 'id' ];
$successful_emails ++ ;
if ( $hesk_settings [ 'debug_mode' ]) {
$debug_msg = " Sent overdue e-mail for ticket: { $row [ 'trackid' ] } to user id: { $row [ 'owner' ] } \n " ;
mfh_log_debug ( $LOCATION , $debug_msg , 'CRON' );
echo $debug_msg ;
}
} else {
$failed_emails ++ ;
$warning_text = " Failed to send overdue reminder for ticket: { $row [ 'trackid' ] } to user id: { $row [ 'owner' ] } . This will be re-sent next time overdue tickets are processed. \n " ; \
mfh_log_warning ( $LOCATION , $warning_text , 'CRON' );
echo $warning_text ;
}
}
if ( count ( $tickets_to_flag ) > 0 ) {
foreach ( $tickets_to_flag as $ticket_id ) {
$sql = " UPDATE ` " . hesk_dbEscape ( $hesk_settings [ 'db_pfix' ]) . " tickets` SET `overdue_email_sent` = '1' WHERE `id` = " . intval ( $ticket_id );
hesk_dbQuery ( $sql );
}
}
if ( $hesk_settings [ 'debug_mode' ]) {
$debug_msg = " Finished Overdue Tickets. { $successful_emails } e-mails sent. { $failed_emails } emails failed to send. \n " ;
echo $debug_msg ;
mfh_log_debug ( $LOCATION , $debug_msg , 'CRON' );
2016-03-28 21:55:14 -04:00
}