You are here

function _datereminder_get_next_reminder in Date Reminder 6

Same name and namespace in other branches
  1. 6.2 includes/date.inc \_datereminder_get_next_reminder()
  2. 7 includes/date.inc \_datereminder_get_next_reminder()

Compute time of next reminder.

Parameters

reminder $r: One reminder.

string $datefield: Name of date field if known.

Return value

boolean TRUE if we changed the time of next reminder.

2 calls to _datereminder_get_next_reminder()
_datereminder_form_submit_user in ./datereminder.module
Callback on submit from datereminder_form.
_datereminder_update_reminder_nexts in ./datereminder.module
Recompute "next" time and write back a group of reminders.

File

includes/date.inc, line 32
Some functions dealing with dates.

Code

function _datereminder_get_next_reminder(&$r, $datefield = NULL) {
  module_load_include('inc', 'datereminder', 'includes/defines');

  // Fudge factor to deal with reminders that happen between
  // cron runs. Skew is half of the cron period in seconds.
  $skew = variable_get('datereminder_cron_frequency', DATEREMINDER_CRON_FREQUENCY);
  $skew *= 30;
  $skew += 1;
  if (!isset($datefield)) {

    // Caller didn't supply datefield, so we need to find it.
    $datefield = _datereminder_get_datefield($r);
  }
  $lead = $r->leadtime;
  $rtime = _datereminder_get_next_occurance($datefield, $lead + $skew);
  if (isset($rtime)) {
    $rtime
      ->modify("-{$lead} seconds");
    $rem = _datereminder_date_format_internal($rtime);
    $r->expired = FALSE;
  }
  elseif (!$r->expired) {

    // If not already expired and there's no new date, set expire date.
    $r->expired = TRUE;
    $rtime = _datereminder_now(_datereminder_retain_expired());
    $rem = _datereminder_date_format_internal($rtime);
  }
  else {
    return FALSE;
  }
  $ret = $rem != $r->next;
  $r->next = $rem;
  return $ret;
}