MDL-72767 forum: Ensure digests are sent
Before this change if a new post was made after the digest time but before todays daily digest had been sent the run time on the digest would be set to the next day resulting in no digest being sent to the user. By adding the server midnight to the custom data on the task we ensure that in this case a new adhoc task is created for the next day leaving the current one to get processed. Server midnight is used so that if the digest time setting is changed we would not get two tasks queued for the same day.
This commit is contained in:
@@ -336,16 +336,19 @@ class cron_task extends \core\task\scheduled_task {
|
||||
if (!empty($digestpostdata)) {
|
||||
// Insert all of the records for the digest.
|
||||
$DB->insert_records('forum_queue', $digestpostdata);
|
||||
$digesttime = usergetmidnight($timenow, $sitetimezone) + ($CFG->digestmailtime * 3600);
|
||||
$servermidnight = usergetmidnight($timenow, $sitetimezone);
|
||||
$digesttime = $servermidnight + ($CFG->digestmailtime * 3600);
|
||||
|
||||
if ($digesttime < $timenow) {
|
||||
// Digest time is in the past. Get a new time for tomorrow.
|
||||
$digesttime = usergetmidnight($timenow + DAYSECS, $sitetimezone) + ($CFG->digestmailtime * 3600);
|
||||
$servermidnight = usergetmidnight($timenow + DAYSECS, $sitetimezone);
|
||||
$digesttime = $servermidnight + ($CFG->digestmailtime * 3600);
|
||||
}
|
||||
|
||||
$task = new \mod_forum\task\send_user_digests();
|
||||
$task->set_userid($user->id);
|
||||
$task->set_component('mod_forum');
|
||||
$task->set_custom_data(['servermidnight' => $servermidnight]);
|
||||
$task->set_next_run_time($digesttime);
|
||||
\core\task\manager::reschedule_or_queue_adhoc_task($task);
|
||||
$usercounts['digests']++;
|
||||
|
||||
Reference in New Issue
Block a user