\n"; $timenow = time(); /// Run all cron jobs for each module if ($mods = get_records_select("modules", "cron > 0 AND (($timenow - lastcron) > cron)")) { foreach ($mods as $mod) { $libfile = "$CFG->dirroot/mod/$mod->name/lib.php"; if (file_exists($libfile)) { include_once($libfile); $cron_function = $mod->name."_cron"; if (function_exists($cron_function)) { if ($cron_function()) { if (! set_field("modules", "lastcron", $timenow, "id", $mod->id)) { echo "Error: could not update timestamp for $mod->fullname\n"; } } } } } } /// Run all core cron jobs, but not every time since they aren't too important. /// These don't have a timer to reduce load, so we'll use a random number /// to randomly choose the percentage of times we should run these jobs. srand ((double) microtime() * 10000000); $random100 = rand(0,100); if ($random100 < 20) { // Approximately 20% of the time. echo "Running clean-up tasks...\n"; /// Unenrol users who haven't logged in for $CFG->longtimenosee if ($CFG->longtimenosee) { // value in days $longtime = $timenow - ($CFG->longtimenosee * 3600 * 24); if ($users = get_users_longtimenosee($longtime)) { foreach ($users as $user) { if (unenrol_student($user->id)) { echo "Deleted student enrolment for $user->firstname $user->lastname ($user->id)\n"; } } } } /// Delete users who haven't confirmed within seven days $oneweek = $timenow - (7 * 24 * 3600); if ($users = get_users_unconfirmed($oneweek)) { foreach ($users as $user) { if (delete_records("user", "id", $user->id)) { echo "Deleted unconfirmed user for $user->firstname $user->lastname ($user->id)\n"; } } } /// Delete duplicate enrolments (don't know what causes these yet - expired sessions?) if ($users = get_records_select("user_students", "userid > 0 GROUP BY course, userid ". "HAVING count(*) > 1", "", "*,count(*)")) { foreach ($users as $user) { delete_records_select("user_students", "userid = '$user->userid' ". "AND course = '$user->course' AND id <> '$user->id'"); } } /// Delete old logs to save space (this might need a timer to slow it down...) if (!empty($CFG->loglifetime)) { // value in days $loglifetime = $timenow - ($CFG->loglifetime * 3600 * 24); delete_records_select("log", "time < '$loglifetime'"); } } echo "Cron script completed correctly\n"; $difftime = microtime_diff($starttime, microtime()); echo "Execution took ".$difftime." seconds\n"; ?>