function process_event($id, $name, $event_date, $event_time) { global $site_extras, $debug, $only_testing; global $EXTRA_REMINDER_WITH_OFFSET, $EXTRA_REMINDER_WITH_DATE; if ($debug) { printf("Event %d: \"%s\" at %s on %s <br />\n", $id, $name, $event_time, $event_date); } // Check to see if this event has any reminders $extras = get_site_extra_fields($id); for ($j = 0; $j < count($site_extras); $j++) { $extra_name = $site_extras[$j][0]; $extra_type = $site_extras[$j][2]; $extra_arg1 = $site_extras[$j][3]; $extra_arg2 = $site_extras[$j][4]; //if ( $debug ) // printf ( " name: %s\n type: %d\n arg1: %s\n arg2: %s\n", // $extra_name, $extra_type, $extra_arg1, $extra_arg2 ); if (!empty($extras[$extra_name]['cal_remind'])) { if ($debug) { echo " Reminder set for event. <br />\n"; } // how many minutes before event should we send the reminder? $ev_h = (int) ($event_time / 10000); $ev_m = $event_time / 100 % 100; $ev_year = substr($event_date, 0, 4); $ev_month = substr($event_date, 4, 2); $ev_day = substr($event_date, 6, 2); $event_time = mktime($ev_h, $ev_m, 0, $ev_month, $ev_day, $ev_year); if (($extra_arg2 & $EXTRA_REMINDER_WITH_OFFSET) > 0) { $minsbefore = $extras[$extra_name]['cal_data']; $remind_time = $event_time - $minsbefore * 60; } else { if (($extra_arg2 & $EXTRA_REMINDER_WITH_DATE) > 0) { $rd = $extras[$extra_name]['cal_date']; $r_year = substr($rd, 0, 4); $r_month = substr($rd, 4, 2); $r_day = substr($rd, 6, 2); $remind_time = mktime(0, 0, 0, $r_month, $r_day, $r_year); } else { $minsbefore = $extra_arg1; $remind_time = $event_time - $minsbefore * 60; } } if ($debug) { echo " Mins Before: {$minsbefore} <br />\n"; } if ($debug) { echo " Event time is: " . date("m/d/Y H:i", $event_time) . "<br />\n"; echo " Remind time is: " . date("m/d/Y H:i", $remind_time) . "<br />\n"; } if (time() >= $remind_time) { // It's remind time or later. See if one has already been sent $last_sent = 0; $res = dbi_query("SELECT MAX(cal_last_sent) FROM " . "webcal_reminder_log WHERE cal_id = " . $id . " AND cal_event_date = {$event_date}" . " AND cal_name = '" . $extra_name . "'"); if ($res) { if ($row = dbi_fetch_row($res)) { $last_sent = $row[0]; } dbi_free_result($res); } if ($debug) { echo " Last sent on: " . date("m/d/Y H:i", $last_sent) . "<br />\n"; } if ($last_sent < $remind_time) { // Send a reminder if ($debug) { echo " SENDING REMINDER! <br />\n"; } send_reminder($id, $event_date); // now update the db... log_reminder($id, $extra_name, $event_date); } } } } }
function process_event($id, $name, $start, $end, $new_date = '') { global $debug, $is_task, $only_testing; // Get reminders array. $reminder = getReminders($id); if (!empty($reminder)) { if ($debug) { echo " Reminder set for event.<br />\n"; } $times_sent = $reminder['times_sent']; $repeats = $reminder['repeats']; $lastsent = $reminder['last_sent']; $related = $reminder['related']; // If we are working with a repeat or overdue task, and we have sent all the // reminders for the basic event, then reset the counter to 0. if (!empty($new_date)) { if ($times_sent == $repeats + 1) { if (!$is_task || $related == 'E' && date('Ymd', $new_date) != date('Ymd', $end)) { // Tasks only. $times_sent = 0; } } $new_offset = date_to_epoch($new_date) - ($start - $start % 86400); $start += $new_offset; $end += $new_offset; } if ($debug) { printf("Event %d: \"%s\" on %s at %s GMT<br />\n", $id, $name, gmdate('Ymd', $start), gmdate('H:i:s', $start)); } // It is pointless to send reminders after this time! $pointless = $end; $remB4 = $reminder['before'] == 'Y'; if (!empty($reminder['date'])) { // We're using a date. $remind_time = $reminder['timestamp']; } else { // We're using offsets. $offset = $reminder['offset'] * 60; // Convert to seconds. if ($related == 'S') { // Relative to start. $offset_msg = ($remB4 ? ' Mins Before Start: ' : ' Mins After Start: ') . $reminder['offset']; $remind_time = $remB4 ? $start - $offset : $start + $offset; } else { // Relative to end/due. $offset_msg = ($remB4 ? ' Mins Before End: ' : ' Mins After End: ') . $reminder['offset']; $remind_time = $remB4 ? $end - $offset : $end + $offset; $pointless = $remB4 ? $end : $end + $offset; } } // Factor in repeats if set. if ($repeats > 0 && $times_sent <= $repeats) { $remind_time += $reminder['duration'] * 60 * $times_sent; } if ($debug) { echo (empty($offset_msg) ? '' : $offset_msg . '<br />') . ' Event ' . ($related == 'S' ? 'start time is: ' . gmdate('m/d/Y H:i', $start) : 'end time is: ' . gmdate('m/d/Y H:i', $end)) . ' GMT<br /> Remind time is: ' . gmdate('m/d/Y H:i', $remind_time) . ' GMT<br /> Effective delivery time is: ' . date('m/d/Y H:i T', $remind_time) . '<br /> Last sent on: ' . ($lastsent == 0 ? 'NEVER' : date('m/d/Y H:i T', $lastsent)) . '<br /><br /> times_sent = ' . $times_sent . ' repeats = ' . $repeats . ' time = ' . date('His', time()) . ' remind_time = ' . date('His', $remind_time) . ' lastsent = ' . ($lastsent > 0 ? date('Ymd His', $lastsent) : " NEVER ") . ' pointless = ' . date('Ymd His', $pointless) . ' is_task = ' . ($is_task ? 'true' : 'false') . '<br />'; } if ($times_sent < $repeats + 1 && time() >= $remind_time && $lastsent <= $remind_time && (time() <= $pointless || $is_task)) { // Send a reminder. if ($debug) { echo ' SENDING REMINDER!<br />' . "\n"; } send_reminder($id, $start); // Now update the db... if ($debug) { echo '<br /> LOGGING REMINDER!<br /><br />' . "\n"; } log_reminder($id, $times_sent + 1); } } }