MDL-74106 reportbuilder: handle non-recurring schedules properly.

When a schedule is created with "No recurrence", it should only be
sent when both conditions are true: it's start time is after the
current time; and the time it was last sent is before it's start
time (either 0/never sent; or a time it was manually sent).
This commit is contained in:
Paul Holden 2022-03-07 12:46:53 +00:00
parent 1d99ba19a2
commit 2916f89d12
2 changed files with 22 additions and 1 deletions

View file

@ -207,7 +207,13 @@ class schedule {
return false; return false;
} }
return $schedule->get('timenextsend') <= $timenow; // If there's no recurrence, check whether it's been sent since initial scheduled start time. This ensures that even if
// the schedule was manually sent beforehand, it'll still be automatically sent once the start time is first reached.
if ($schedule->get('recurrence') === model::RECURRENCE_NONE) {
return $schedule->get('timelastsent') < $timescheduled;
}
return $schedule->get('timenextsend') <= $timenow;
} }
/** /**

View file

@ -300,10 +300,25 @@ class schedule_test extends advanced_testcase {
'recurrence' => model::RECURRENCE_NONE, 'recurrence' => model::RECURRENCE_NONE,
'timescheduled' => $yesterday, 'timescheduled' => $yesterday,
], true], ], true],
'Time scheduled in the past, already sent prior to schedule' => [[
'recurrence' => model::RECURRENCE_NONE,
'timescheduled' => $yesterday,
'timelastsent' => $yesterday - HOURSECS,
], true],
'Time scheduled in the past, already sent on schedule' => [[
'recurrence' => model::RECURRENCE_NONE,
'timescheduled' => $yesterday,
'timelastsent' => $yesterday,
], false],
'Time scheduled in the future' => [[ 'Time scheduled in the future' => [[
'recurrence' => model::RECURRENCE_NONE, 'recurrence' => model::RECURRENCE_NONE,
'timescheduled' => $tomorrow, 'timescheduled' => $tomorrow,
], false], ], false],
'Time scheduled in the future, already sent prior to schedule' => [[
'recurrence' => model::RECURRENCE_NONE,
'timelastsent' => $yesterday,
'timescheduled' => $tomorrow,
], false],
'Next send in the past' => [[ 'Next send in the past' => [[
'recurrence' => model::RECURRENCE_DAILY, 'recurrence' => model::RECURRENCE_DAILY,
'timescheduled' => $yesterday, 'timescheduled' => $yesterday,