\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 ($students = get_users_longtimenosee($longtime)) { foreach ($students as $student) { if (unenrol_student($student->userid, $student->course)) { echo "Deleted student enrolment for user $student->userid from course $student->course\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 ".fullname($user, true)." ($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'"); } } if (file_exists("$CFG->dataroot/cronextra.php")) { include("$CFG->dataroot/cronextra.php"); } //Execute backup's cron //Perhaps a long time and memory could help in large sites //ini_set("max_execution_time","3000"); //ini_set("memory_limit","56M"); if (file_exists("../backup/backup_scheduled.php") && file_exists("../backup/backuplib.php") && file_exists("../backup/lib.php")) { echo "Running backup tasks\n"; include_once("../backup/backup_scheduled.php"); include_once("../backup/backuplib.php"); include_once("../backup/lib.php"); schedule_backup_cron(); } echo "Cron script completed correctly\n"; $difftime = microtime_diff($starttime, microtime()); echo "Execution took ".$difftime." seconds\n"; ?>