]> git.mjollnir.org Git - moodle.git/commitdiff
Improved cron jobs for central clean up tasks.
authormoodler <moodler>
Sun, 27 Jul 2003 12:20:29 +0000 (12:20 +0000)
committermoodler <moodler>
Sun, 27 Jul 2003 12:20:29 +0000 (12:20 +0000)
 - there is now a randomiser so that these jobs are only run 20% of the time

 - duplicate enrolments are now cleaned up.

admin/cron.php

index 00bdf1afb1d6912c43b85bed0acea136a1d7a19c..2ea8a6768cdfb9e3cb3788b2886ea4ac75bf746d 100644 (file)
 
     require_once("../config.php");
 
-    echo "<PRE>\n";
+    echo "<pre>\n";
 
     $timenow  = time();
 
-///  Run all cron jobs for each module
+/// Run all cron jobs for each module
 
     if ($mods = get_records_select("modules", "cron > 0 AND (($timenow - lastcron) > cron)")) {
         foreach ($mods as $mod) {
         }
     }
 
+/// 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.
 
-/// Unenrol users who haven't logged in for $CFG->longtimenosee
+    srand ((double) microtime() * 10000000);
+    $random100 = rand(0,100);
 
-    if ($CFG->longtimenosee) { // value in days
-        $longtime = $timenow - ($CFG->longtimenosee * 3600 * 24);
-        if ($users = get_users_longtimenosee($longtime)) {
+    if ($random100 < 20) {     // Approximately 20% of the time.
+
+        /// 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 (unenrol_student($user->id)) {
-                    echo "Deleted student enrolment for $user->firstname $user->lastname ($user->id)\n";
+                if (delete_records("user", "id", $user->id)) {
+                    echo "Deleted unconfirmed user 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 queued mail that didn't get sent within 30 minutes
-
-    $oldmailtime = $timenow - 1800;
-    delete_records_select("mail_queue", "timecreated < '$oldmailtime'");
-
-
-/// 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'");
+    
+    
+        /// 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";