Merged mailout fix from STABLE

This commit is contained in:
moodler 2004-11-07 15:27:19 +00:00
parent 7b0e3827ac
commit 9cc9b7c169

View File

@ -198,9 +198,15 @@ function assignment_cron () {
global $CFG, $USER; global $CFG, $USER;
$cutofftime = time() - $CFG->maxeditingtime; /// Notices older than 1 day will not be mailed. This is to avoid the problem where
/// cron has not been running for a long time, and then suddenly people are flooded
/// with mail from the past few weeks or months
if ($submissions = assignment_get_unmailed_submissions($cutofftime)) { $timenow = time();
$endtime = $timenow - $CFG->maxeditingtime;
$starttime = $endtime - 24 * 3600; /// One day earlier
if ($submissions = assignment_get_unmailed_submissions($starttime, $endtime)) {
foreach ($submissions as $key => $submission) { foreach ($submissions as $key => $submission) {
if (! set_field("assignment_submissions", "mailed", "1", "id", "$submission->id")) { if (! set_field("assignment_submissions", "mailed", "1", "id", "$submission->id")) {
@ -481,7 +487,7 @@ function assignment_get_users_done($assignment) {
ORDER BY a.timemodified DESC"); ORDER BY a.timemodified DESC");
} }
function assignment_get_unmailed_submissions($cutofftime) { function assignment_get_unmailed_submissions($starttime, $endtime) {
/// Return list of marked submissions that have not been mailed out for currently enrolled students /// Return list of marked submissions that have not been mailed out for currently enrolled students
global $CFG; global $CFG;
return get_records_sql("SELECT s.*, a.course, a.name return get_records_sql("SELECT s.*, a.course, a.name
@ -489,8 +495,8 @@ function assignment_get_unmailed_submissions($cutofftime) {
{$CFG->prefix}assignment a, {$CFG->prefix}assignment a,
{$CFG->prefix}user_students us {$CFG->prefix}user_students us
WHERE s.mailed = 0 WHERE s.mailed = 0
AND s.timemarked < $cutofftime AND s.timemarked <= $endtime
AND s.timemarked > 0 AND s.timemarked >= $starttime
AND s.assignment = a.id AND s.assignment = a.id
AND s.userid = us.userid AND s.userid = us.userid
AND a.course = us.course"); AND a.course = us.course");