You are here

function _datereminder_get_next_reminder in Date Reminder 7

Same name and namespace in other branches
  1. 6.2 includes/date.inc \_datereminder_get_next_reminder()
  2. 6 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

bool TRUE if we changed the time of next reminder.

3 calls to _datereminder_get_next_reminder()
datereminder_rules_action_set_reminder in ./datereminder.rules.inc
Called as a rule action to set a reminder on the given node.
_datereminder_form_submit_user in ./datereminder.module
Callback on submit from datereminder_form.
_datereminder_update_reminder_nexts in includes/node.inc
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 = 0;
  }
  elseif (!isset($r->expired) || $r->expired == 0) {

    // If not already expired and there's no new date, set expire date.
    $r->expired = 1;

    // TODO: Expire time should be after last date occurrance.
    $rtime = _datereminder_now(_datereminder_retain_expired());
    $rem = _datereminder_date_format_internal($rtime);
  }
  else {
    return FALSE;
  }
  $ret = !isset($r->next_due) || $rem != $r->next_due;
  $r->next_due = $rem;
  return $ret;
}