From: nfreear Date: Thu, 13 Sep 2007 09:13:00 +0000 (+0000) Subject: MDL-11160, Cron exhausts memory on "Removing expired enrolments ..." - changing neste... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=c5898fad4546a8983bf8aaf2d5c29a14e1a5378b;p=moodle.git MDL-11160, Cron exhausts memory on "Removing expired enrolments ..." - changing nested foreach to JOINs with while(..rs_fetch_next_record). --- diff --git a/admin/cron.php b/admin/cron.php index 9ba820b03e..d001e2e807 100644 --- a/admin/cron.php +++ b/admin/cron.php @@ -152,18 +152,23 @@ mtrace('Removing expired enrolments ...', ''); // See MDL-8785 $timenow = time(); $somefound = false; + // The preferred way saves memory, dmllib.php // find courses where limited enrolment is enabled - if($limitedcourses = get_records_select('course', 'enrolperiod > 0')) { - foreach($limitedcourses as $course) { - $context = get_context_instance(CONTEXT_COURSE, $course->id); - if ($oldenrolments = get_records_select('role_assignments', 'timeend > 0 AND timeend < ' . $timenow . ' AND contextid = ' . $context->id)) { - foreach ($oldenrolments as $oldenrolment) { - role_unassign($oldenrolment->roleid, $oldenrolment->userid, 0, $oldenrolment->contextid); - $somefound = true; - } - } - } + global $CFG; + $rs_enrol = get_recordset_sql("SELECT ra.roleid, ra.userid, ra.contextid + FROM {$CFG->prefix}course c + INNER JOIN {$CFG->prefix}context cx ON cx.instanceid = c.id + INNER JOIN {$CFG->prefix}role_assignments ra ON ra.contextid = cx.id + WHERE cx.contextlevel = '".CONTEXT_COURSE."' + AND ra.timeend > 0 + AND ra.timeend < '$timenow' + AND c.enrolperiod > 0 + "); + while ($oldenrolment = rs_fetch_next_record($rs_enrol)) { + role_unassign($oldenrolment->roleid, $oldenrolment->userid, 0, $oldenrolment->contextid); + $somefound = true; } + rs_close($rs_enrol); if($somefound) { mtrace('Done'); } else { @@ -462,4 +467,4 @@ echo ""; } -?> +?> \ No newline at end of file