Beispiel #1
0
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);
        }
    }
}