]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-13660: Allow admin reports to have db tables, cron
authorsam_marshall <sam_marshall>
Tue, 26 Feb 2008 10:34:51 +0000 (10:34 +0000)
committersam_marshall <sam_marshall>
Tue, 26 Feb 2008 10:34:51 +0000 (10:34 +0000)
admin/cron.php
admin/index.php
lib/ddllib.php

index 9ffcd5105026e6b5389d0c69b4a1c9323b139a86..c21b74ecf7602fcc89e76871c45db32282ec0864 100644 (file)
                 $cron_function = $mod->name."_cron";
                 if (function_exists($cron_function)) {
                     mtrace("Processing module function $cron_function ...", '');
+                    $pre_dbqueries = null;
                     if (!empty($PERF->dbqueries)) {
                         $pre_dbqueries = $PERF->dbqueries;
                         $pre_time      = microtime(1);
     }
     mtrace('Finished blocks');
 
+    mtrace('Starting admin reports');
+    // Admin reports do not have a database table that lists them. Instead a
+    // report includes cron.php with function report_reportname_cron() if it wishes
+    // to be cronned. It is up to cron.php to handle e.g. if it only needs to
+    // actually do anything occasionally.
+    $reports = get_list_of_plugins($CFG->admin.'/report');
+    foreach($reports as $report) {
+        $cronfile = $CFG->dirroot.'/'.$CFG->admin.'/report/'.$report.'/cron.php';
+        if (file_exists($cronfile)) {
+            require_once($cronfile);
+            $cronfunction = 'report_'.$report.'_cron';
+            mtrace('Processing cron function for '.$report.'...', '');
+            $pre_dbqueries = null;
+            if (!empty($PERF->dbqueries)) {
+                $pre_dbqueries = $PERF->dbqueries;
+                $pre_time      = microtime(true);
+            }
+            $cronfunction();
+            if (isset($pre_dbqueries)) {
+                mtrace("... used " . ($PERF->dbqueries - $pre_dbqueries) . " dbqueries");
+                mtrace("... used " . round(microtime(true) - $pre_time, 2) . " seconds");
+            }
+            mtrace('done.');
+        }
+    }
+    mtrace('Finished admin reports');
+
     if (!empty($CFG->langcache)) {
         mtrace('Updating languages cache');
         get_list_of_languages(true);
     }
 
 
+
     mtrace('Starting main gradebook job ...');
     grade_cron();
     mtrace('done.');
index 178dc1c8a65cca2a1449c72f4ae51077fe8de6b9..79e7b708648a68040dec4f11ba0c06cfadcd489e 100644 (file)
 /// Check all message output plugins and upgrade if necessary
     upgrade_plugins('message','message/output',"$CFG->wwwroot/$CFG->admin/index.php");
 
+/// Check all admin report plugins and upgrade if necessary
+    upgrade_plugins('report', $CFG->admin.'/report', "$CFG->wwwroot/$CFG->admin/index.php");
+
 
 /// just make sure upgrade logging is properly terminated
     upgrade_log_finish();
index 576a7cd379f9b85041039b71f2b15753f726f2ff..7888d608b1c5e4edda837dff591cc263394091b2 100644 (file)
@@ -814,6 +814,13 @@ function get_db_directories() {
         }
     }
 
+/// Now admin report plugins (admin/report/xxx/db)
+    if ($plugins = get_list_of_plugins($CFG->admin.'/report', 'db')) {
+        foreach ($plugins as $plugin) {
+            $dbdirs[] = $CFG->dirroot.'/'.$CFG->admin.'/report/'.$plugin.'/db';
+        }
+    }
+
 /// Local database changes, if the local folder exists.
     if (file_exists($CFG->dirroot . '/local')) {
         $dbdirs[] = $CFG->dirroot.'/local/db';