From d9b063277b7d800e0d259f2759b195c59725dc8a Mon Sep 17 00:00:00 2001 From: sam_marshall Date: Tue, 26 Feb 2008 10:34:51 +0000 Subject: [PATCH] MDL-13660: Allow admin reports to have db tables, cron --- admin/cron.php | 29 +++++++++++++++++++++++++++++ admin/index.php | 3 +++ lib/ddllib.php | 7 +++++++ 3 files changed, 39 insertions(+) diff --git a/admin/cron.php b/admin/cron.php index 9ffcd51050..c21b74ecf7 100644 --- a/admin/cron.php +++ b/admin/cron.php @@ -109,6 +109,7 @@ $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); @@ -159,6 +160,33 @@ } 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); @@ -191,6 +219,7 @@ } + mtrace('Starting main gradebook job ...'); grade_cron(); mtrace('done.'); diff --git a/admin/index.php b/admin/index.php index 178dc1c8a6..79e7b70864 100644 --- a/admin/index.php +++ b/admin/index.php @@ -466,6 +466,9 @@ /// 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(); diff --git a/lib/ddllib.php b/lib/ddllib.php index 576a7cd379..7888d608b1 100644 --- a/lib/ddllib.php +++ b/lib/ddllib.php @@ -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'; -- 2.39.5