function _datereminder_get_next_reminder in Date Reminder 7
Same name and namespace in other branches
- 6.2 includes/date.inc \_datereminder_get_next_reminder()
- 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;
}