From 17da2e6f28d3477eb4ccfe5ac94c9cebb8456c8e Mon Sep 17 00:00:00 2001 From: skodak Date: Fri, 19 Jun 2009 14:25:56 +0000 Subject: [PATCH] MDL-16438 centralise information about plugins to avoid duplication, includes local customisation conversion to standard plugin structure + fixes for some recent regressions; see tracker for more details and links to docs and forums discussions --- admin/auth.php | 3 - admin/cron.php | 41 ++-- admin/enrol.php | 9 +- admin/enrol_config.php | 4 +- admin/report/unittest/test_tables.php | 10 +- admin/settings/courses.php | 4 +- admin/settings/grades.php | 19 +- admin/settings/plugins.php | 18 +- admin/settings/users.php | 8 +- admin/uploaduser.php | 3 +- admin/xmldb/actions/XMLDBAction.class.php | 8 +- blocks/admin/block_admin.php | 4 +- course/edit_form.php | 6 +- course/import.php | 6 +- course/report.php | 6 +- grade/edit/settings/form.php | 6 +- grade/lib.php | 16 +- grade/report/index.php | 12 +- lib/accesslib.php | 100 ++------ lib/adminlib.php | 95 +++----- lib/db/messages.php | 10 +- lib/db/upgrade.php | 60 +++++ lib/ddl/database_manager.php | 2 +- lib/editorlib.php | 2 +- lib/eventslib.php | 41 +--- lib/gradelib.php | 6 +- lib/javascript-mod.php | 32 +-- lib/locallib.php | 175 -------------- lib/messagelib.php | 39 +--- lib/moodlelib.php | 272 ++++++++++++++++------ lib/portfoliolib.php | 4 +- lib/questionlib.php | 16 +- lib/setup.php | 9 +- lib/upgradelib.php | 139 +++-------- lib/weblib.php | 36 ++- local/readme.txt | 174 ++++++++++++++ message/db/messages.php | 37 --- mod/assignment/lib.php | 18 +- mod/assignment/restorelib.php | 2 +- mod/chat/lib.php | 8 +- mod/choice/lib.php | 15 +- mod/choice/mod_form.php | 2 +- mod/data/lib.php | 4 +- mod/feedback/lib.php | 5 +- mod/forum/lib.php | 2 - mod/hotpot/lib.php | 9 +- mod/label/lib.php | 1 - mod/lesson/lib.php | 2 - mod/quiz/lib.php | 2 +- mod/quiz/report/reportlib.php | 4 +- mod/quiz/settingstree.php | 6 +- mod/resource/lib.php | 7 +- mod/scorm/lib.php | 1 - mod/survey/lib.php | 5 +- mod/wiki/lib.php | 7 +- rss/file.php | 3 +- theme/index.php | 8 +- user/editadvanced_form.php | 6 +- user/filters/lib.php | 4 +- version.php | 2 +- 60 files changed, 726 insertions(+), 829 deletions(-) delete mode 100644 lib/locallib.php create mode 100644 local/readme.txt delete mode 100644 message/db/messages.php diff --git a/admin/auth.php b/admin/auth.php index 7115ff04cf..fbd9a7cd46 100644 --- a/admin/auth.php +++ b/admin/auth.php @@ -19,9 +19,6 @@ $returnurl = "$CFG->wwwroot/$CFG->admin/settings.php?section=manageauths"; $action = optional_param('action', '', PARAM_ACTION); $auth = optional_param('auth', '', PARAM_SAFEDIR); -// get currently installed and enabled auth plugins -$authsavailable = get_list_of_plugins('auth'); - get_enabled_auth_plugins(true); // fix the list of enabled auths if (empty($CFG->auth)) { $authsenabled = array(); diff --git a/admin/cron.php b/admin/cron.php index 2af42acc75..eee679d26f 100644 --- a/admin/cron.php +++ b/admin/cron.php @@ -183,9 +183,9 @@ // 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'; + $reports = get_plugin_list('report'); + foreach($reports as $report => $reportdir) { + $cronfile = $reportdir.'/cron.php'; if (file_exists($cronfile)) { require_once($cronfile); $cronfunction = 'report_'.$report.'_cron'; @@ -506,10 +506,10 @@ } // run gradebook import/export/report cron - if ($gradeimports = get_list_of_plugins('grade/import')) { - foreach ($gradeimports as $gradeimport) { - if (file_exists($CFG->dirroot.'/grade/import/'.$gradeimport.'/lib.php')) { - require_once($CFG->dirroot.'/grade/import/'.$gradeimport.'/lib.php'); + if ($gradeimports = get_plugin_list('gradeimport')) { + foreach ($gradeimports as $gradeimport => $plugindir) { + if (file_exists($plugindir.'/lib.php')) { + require_once($plugindir.'/lib.php'); $cron_function = 'grade_import_'.$gradeimport.'_cron'; if (function_exists($cron_function)) { mtrace("Processing gradebook import function $cron_function ...", ''); @@ -519,10 +519,10 @@ } } - if ($gradeexports = get_list_of_plugins('grade/export')) { - foreach ($gradeexports as $gradeexport) { - if (file_exists($CFG->dirroot.'/grade/export/'.$gradeexport.'/lib.php')) { - require_once($CFG->dirroot.'/grade/export/'.$gradeexport.'/lib.php'); + if ($gradeexports = get_plugin_list('gradeexport')) { + foreach ($gradeexports as $gradeexport => $plugindir) { + if (file_exists($plugindir.'/lib.php')) { + require_once($plugindir.'/lib.php'); $cron_function = 'grade_export_'.$gradeexport.'_cron'; if (function_exists($cron_function)) { mtrace("Processing gradebook export function $cron_function ...", ''); @@ -532,10 +532,10 @@ } } - if ($gradereports = get_list_of_plugins('grade/report')) { - foreach ($gradereports as $gradereport) { - if (file_exists($CFG->dirroot.'/grade/report/'.$gradereport.'/lib.php')) { - require_once($CFG->dirroot.'/grade/report/'.$gradereport.'/lib.php'); + if ($gradereports = get_plugin_list('gradereport')) { + foreach ($gradereports as $gradereport => $plugindir) { + if (file_exists($plugindir.'/lib.php')) { + require_once($plugindir.'/lib.php'); $cron_function = 'grade_report_'.$gradereport.'_cron'; if (function_exists($cron_function)) { mtrace("Processing gradebook report function $cron_function ...", ''); @@ -550,10 +550,13 @@ $fs->cron(); // run any customized cronjobs, if any - // looking for functions in lib/local/cron.php - if (file_exists($CFG->dirroot.'/local/cron.php')) { - mtrace('Processing customized cron script ...', ''); - include_once($CFG->dirroot.'/local/cron.php'); + if ($locals = get_plugin_list('local')) { + mtrace('Processing customized cron scripts ...', ''); + foreach ($locals as $local => $localdir) { + if (file_exists("$localdir/cron.php")) { + include("$localdir/cron.php"); + } + } mtrace('done.'); } diff --git a/admin/enrol.php b/admin/enrol.php index bed502be41..5e68bd1056 100644 --- a/admin/enrol.php +++ b/admin/enrol.php @@ -51,9 +51,9 @@ admin_externalpage_print_header(); - $modules = get_list_of_plugins("enrol"); + $modules = get_plugin_list('enrol'); $options = array(); - foreach ($modules as $module) { + foreach ($modules as $module => $moduledir) { $options[$module] = get_string("enrolname", "enrol_$module"); } asort($options); @@ -71,12 +71,11 @@ $table->width = '700'; $table->data = array(); - $modules = get_list_of_plugins("enrol"); $enabledplugins = explode(',', $CFG->enrol_plugins_enabled); - foreach ($modules as $module) { + foreach ($modules as $module => $moduledir) { // skip if directory is empty - if (!file_exists("$CFG->dirroot/enrol/$module/enrol.php")) { + if (!file_exists("$moduledir/enrol.php")) { continue; } diff --git a/admin/enrol_config.php b/admin/enrol_config.php index cb48a975b4..95990d454f 100644 --- a/admin/enrol_config.php +++ b/admin/enrol_config.php @@ -34,8 +34,8 @@ unset($options); - $modules = get_list_of_plugins("enrol"); - foreach ($modules as $module) { + $modules = get_plugin_list('enrol'); + foreach ($modules as $module => $enroldir) { $options[$module] = get_string("enrolname", "enrol_$module"); } asort($options); diff --git a/admin/report/unittest/test_tables.php b/admin/report/unittest/test_tables.php index 6cbaaaa8ea..c0baa05a36 100644 --- a/admin/report/unittest/test_tables.php +++ b/admin/report/unittest/test_tables.php @@ -83,10 +83,9 @@ die;die;die; /// upgrade all plugins types - $upgradedplugins = false; $plugintypes = get_plugin_types(); - foreach ($plugintypes as $type=>$location) { - $upgradedplugins = upgrade_plugins($type, $location) || $upgradedplugins; + foreach ($plugintypes as $type => $location) { + upgrade_plugins($type); } /// Check for changes to RPC functions @@ -95,11 +94,6 @@ die;die;die; upgrade_RPC_functions($return_url); // Return here afterwards } -/// Check for local database customisations -/// first old *.php update and then the new upgrade.php script - require_once("$CFG->dirroot/lib/locallib.php"); - upgrade_local_db($return_url); // Return here afterwards - /// just make sure upgrade logging is properly terminated upgrade_finished(); diff --git a/admin/settings/courses.php b/admin/settings/courses.php index a131cf4621..a6b9073fb5 100644 --- a/admin/settings/courses.php +++ b/admin/settings/courses.php @@ -17,9 +17,9 @@ if ($hassiteconfig /// NOTE: these settings must be applied after all other settings because they depend on them ///main course settings $temp = new admin_settingpage('coursesettings', get_string('coursesettings')); - $courseformats = get_list_of_plugins('course/format'); + $courseformats = get_plugin_list('format'); $formcourseformats = array(); - foreach ($courseformats as $courseformat) { + foreach ($courseformats as $courseformat => $courseformatdir) { $formcourseformats["$courseformat"] = get_string("format$courseformat","format_$courseformat"); if ($formcourseformats["$courseformat"]=="[[format$courseformat]]") { $formcourseformats["$courseformat"] = get_string("format$courseformat"); diff --git a/admin/settings/grades.php b/admin/settings/grades.php index ac902c48d7..414b79549b 100644 --- a/admin/settings/grades.php +++ b/admin/settings/grades.php @@ -173,12 +173,12 @@ if (has_capability('moodle/grade:manage', $systemcontext) // Reports $ADMIN->add('grades', new admin_category('gradereports', get_string('reportsettings', 'grades'))); - foreach (get_list_of_plugins('grade/report') as $plugin) { + foreach (get_plugin_list('gradereport') as $plugin => $plugindir) { // Include all the settings commands for this plugin if there are any - if (file_exists($CFG->dirroot.'/grade/report/'.$plugin.'/settings.php')) { + if (file_exists($plugindir.'/settings.php')) { $settings = new admin_settingpage('gradereport'.$plugin, get_string('modulename', 'gradereport_'.$plugin), 'moodle/grade:manage'); if ($ADMIN->fulltree) { - include($CFG->dirroot.'/grade/report/'.$plugin.'/settings.php'); + include($plugindir.'/settings.php'); } $ADMIN->add('gradereports', $settings); } @@ -186,13 +186,13 @@ if (has_capability('moodle/grade:manage', $systemcontext) // Imports $ADMIN->add('grades', new admin_category('gradeimports', get_string('importsettings', 'grades'))); - foreach (get_list_of_plugins('grade/import') as $plugin) { + foreach (get_plugin_list('gradeimport') as $plugin => $plugindir) { // Include all the settings commands for this plugin if there are any - if (file_exists($CFG->dirroot.'/grade/import/'.$plugin.'/settings.php')) { + if (file_exists($plugindir.'/settings.php')) { $settings = new admin_settingpage('gradeimport'.$plugin, get_string('modulename', 'gradeimport_'.$plugin), 'moodle/grade:manage'); if ($ADMIN->fulltree) { - include($CFG->dirroot.'/grade/import/'.$plugin.'/settings.php'); + include($plugindir.'/settings.php'); } $ADMIN->add('gradeimports', $settings); } @@ -201,12 +201,12 @@ if (has_capability('moodle/grade:manage', $systemcontext) // Exports $ADMIN->add('grades', new admin_category('gradeexports', get_string('exportsettings', 'grades'))); - foreach (get_list_of_plugins('grade/export') as $plugin) { + foreach (get_plugin_list('gradeexport') as $plugin => $plugindir) { // Include all the settings commands for this plugin if there are any - if (file_exists($CFG->dirroot.'/grade/export/'.$plugin.'/settings.php')) { + if (file_exists($plugindir.'/settings.php')) { $settings = new admin_settingpage('gradeexport'.$plugin, get_string('modulename', 'gradeexport_'.$plugin), 'moodle/grade:manage'); if ($ADMIN->fulltree) { - include($CFG->dirroot.'/grade/export/'.$plugin.'/settings.php'); + include($plugindir.'/settings.php'); } $ADMIN->add('gradeexports', $settings); } @@ -214,4 +214,3 @@ if (has_capability('moodle/grade:manage', $systemcontext) } // end of speedup -?> diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index bffb8b11a1..e5105cdc00 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -258,20 +258,30 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) /// Now add reports -foreach (get_list_of_plugins($CFG->admin.'/report') as $plugin) { - $settings_path = "$CFG->dirroot/$CFG->admin/report/$plugin/settings.php"; +foreach (get_plugin_list('report') as $plugin => $plugindir) { + $settings_path = "$plugindir/settings.php"; if (file_exists($settings_path)) { include($settings_path); continue; } - $index_path = "$CFG->dirroot/$CFG->admin/report/$plugin/index.php"; + $index_path = "$plugindir/index.php"; if (!file_exists($index_path)) { continue; } // old style 3rd party plugin without settings.php - $www_path = "$CFG->dirroot/$CFG->admin/report/$plugin/index.php"; + $www_path = "$CFG->wwwroot/$CFG->admin/report/$plugin/index.php"; $reportname = get_string($plugin, 'report_' . $plugin); $ADMIN->add('reports', new admin_externalpage('report'.$plugin, $reportname, $www_path, 'moodle/site:viewreports')); } + +/// Add all local plugins - must be always last! + +foreach (get_plugin_list('local') as $plugin => $plugindir) { + $settings_path = "$plugindir/settings.php"; + if (file_exists($settings_path)) { + include($settings_path); + continue; + } +} \ No newline at end of file diff --git a/admin/settings/users.php b/admin/settings/users.php index c725cf4e1c..9d61028e83 100644 --- a/admin/settings/users.php +++ b/admin/settings/users.php @@ -36,22 +36,22 @@ if ($hassiteconfig $ADMIN->add('authsettings', $temp); - if ($auths = get_list_of_plugins('auth')) { + if ($auths = get_plugin_list('auth')) { $authsenabled = get_enabled_auth_plugins(); $authbyname = array(); - foreach ($auths as $auth) { + foreach ($auths as $auth => $authdir) { $strauthname = auth_get_plugin_title($auth); $authbyname[$strauthname] = $auth; } ksort($authbyname); foreach ($authbyname as $strauthname=>$authname) { - if (file_exists($CFG->dirroot.'/auth/'.$authname.'/settings.php')) { + if (file_exists($authdir.'/settings.php')) { // do not show disabled auths in tree, keep only settings link on manage page $settings = new admin_settingpage('authsetting'.$authname, $strauthname, 'moodle/site:config', !in_array($authname, $authsenabled)); if ($ADMIN->fulltree) { - include($CFG->dirroot.'/auth/'.$authname.'/settings.php'); + include($authdir.'/settings.php'); } // TODO: finish implementation of common settings - locking, etc. $ADMIN->add('authsettings', $settings); diff --git a/admin/uploaduser.php b/admin/uploaduser.php index 9b55b3c484..5d67b4f008 100755 --- a/admin/uploaduser.php +++ b/admin/uploaduser.php @@ -159,7 +159,8 @@ if ($formdata = $mform->is_cancelled()) { $allowedauths = uu_allowed_auths(); $allowedauths = array_keys($allowedauths); - $availableauths = get_list_of_plugins('auth'); + $availableauths = get_plugin_list('auth'); + $availableauths = array_keys($availableauths); $allowedroles = uu_allowed_roles(true); foreach ($allowedroles as $rid=>$rname) { diff --git a/admin/xmldb/actions/XMLDBAction.class.php b/admin/xmldb/actions/XMLDBAction.class.php index 149858c08b..c0cb9031b1 100644 --- a/admin/xmldb/actions/XMLDBAction.class.php +++ b/admin/xmldb/actions/XMLDBAction.class.php @@ -201,23 +201,23 @@ class XMLDBAction { * @param xmldb_structure structure object containing all the info * @return string PHP code to be used to stabilish a savepoint */ - function upgrade_savepoint_php ($structure) { + function upgrade_savepoint_php($structure) { $path = $structure->getPath(); /// Trim "db" from path $path = dirname($path); - /// Get all the available plugin types - $plugintypes = get_plugin_types(); - /// Get pluginname, plugindir and plugintype $pluginname = basename($path); if ($path == 'lib') { /// exception for lib (not proper plugin) $plugindir = 'lib'; $plugintype = 'lib'; } else { /// rest of plugins + //TODO: this is not nice and may fail, plugintype should be passed around somehow instead + $plugintypes = get_plugin_types(false); $plugindir = dirname($path); + $plugindir = str_replace('\\', '/', $plugindir); $plugintype = array_search($plugindir, $plugintypes); } diff --git a/blocks/admin/block_admin.php b/blocks/admin/block_admin.php index bb82b72713..5432733a98 100644 --- a/blocks/admin/block_admin.php +++ b/blocks/admin/block_admin.php @@ -62,9 +62,9 @@ class block_admin extends block_list { if (has_capability('moodle/grade:viewall', $context)) { $reportavailable = true; } else if (!empty($course->showgrades)) { - if ($reports = get_list_of_plugins('grade/report')) { // Get all installed reports + if ($reports = get_plugin_list('gradereport')) { // Get all installed reports arsort($reports); // user is last, we want to test it first - foreach ($reports as $plugin) { + foreach ($reports as $plugin => $plugindir) { if (has_capability('gradereport/'.$plugin.':view', $context)) { //stop when the first visible plugin is found $reportavailable = true; diff --git a/course/edit_form.php b/course/edit_form.php index 1cb7a83bbb..abcd88c6bb 100644 --- a/course/edit_form.php +++ b/course/edit_form.php @@ -112,10 +112,10 @@ class course_edit_form extends moodleform { $mform->setHelpButton('summary', array('text2', get_string('helptext')), true); $mform->setType('summary', PARAM_RAW); - $courseformats = get_list_of_plugins('course/format'); + $courseformats = get_plugin_list('format'); $formcourseformats = array(); - foreach ($courseformats as $courseformat) { - $formcourseformats["$courseformat"] = get_string("format$courseformat","format_$courseformat"); + foreach ($courseformats as $courseformat => $formatdir) { + $formcourseformats["$courseformat"] = get_string("format$courseformat", "format_$courseformat"); if($formcourseformats["$courseformat"]=="[[format$courseformat]]") { $formcourseformats["$courseformat"] = get_string("format$courseformat"); } diff --git a/course/import.php b/course/import.php index f33b64a977..4853bb6640 100644 --- a/course/import.php +++ b/course/import.php @@ -37,11 +37,11 @@ print_header($course->fullname.': '.$strimport, $course->fullname.': '.$strimport, $navigation); - $directories = get_list_of_plugins('course/import'); + $imports = get_plugin_list('import'); - foreach ($directories as $directory) { + foreach ($imports as $import => $importdir) { echo '
'; - include_once($CFG->dirroot.'/course/import/'.$directory.'/mod.php'); + include($importdir.'/mod.php'); echo '
'; } diff --git a/course/report.php b/course/report.php index 593da6bc3b..07b8218d75 100644 --- a/course/report.php +++ b/course/report.php @@ -21,10 +21,10 @@ $navigation = build_navigation($navlinks); print_header($course->fullname.': '.$strreports, $course->fullname.': '.$strreports, $navigation); - $directories = get_list_of_plugins('course/report'); + $reports = get_plugin_list('report'); - foreach ($directories as $directory) { - $pluginfile = $CFG->dirroot.'/course/report/'.$directory.'/mod.php'; + foreach ($reports as $report => $reportdirectory) { + $pluginfile = $reportdirectory.'/mod.php'; if (file_exists($pluginfile)) { ob_start(); include($pluginfile); // Fragment for listing diff --git a/grade/edit/settings/form.php b/grade/edit/settings/form.php index 9c7232e790..acc35917a1 100644 --- a/grade/edit/settings/form.php +++ b/grade/edit/settings/form.php @@ -100,10 +100,10 @@ class course_settings_form extends moodleform { $types = array('report', 'export', 'import'); foreach($types as $type) { - foreach (get_list_of_plugins('grade/'.$type) as $plugin) { + foreach (get_plugin_list('grade'.$type) as $plugin => $plugindir) { // Include all the settings commands for this plugin if there are any - if (file_exists($CFG->dirroot.'/grade/'.$type.'/'.$plugin.'/lib.php')) { - require_once($CFG->dirroot.'/grade/'.$type.'/'.$plugin.'/lib.php'); + if (file_exists($plugindir.'/lib.php')) { + require_once($plugindir.'/lib.php'); $functionname = 'grade_'.$type.'_'.$plugin.'_settings_definition'; if (function_exists($functionname)) { $mform->addElement('header', 'grade_'.$type.$plugin, get_string('modulename', 'grade'.$type.'_'.$plugin, NULL)); diff --git a/grade/lib.php b/grade/lib.php index 924da2240b..81c63f6bbb 100644 --- a/grade/lib.php +++ b/grade/lib.php @@ -494,10 +494,10 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) { // report plugins with its special structure // Get all installed reports - if ($reports = get_list_of_plugins('grade/report', 'CVS')) { + if ($reports = get_plugin_list('gradereport')) { // Remove ones we can't see - foreach ($reports as $key => $plugin) { + foreach ($reports as $plugin => $unused) { if (!has_capability('gradereport/'.$plugin.':view', $context)) { unset($reports[$key]); } @@ -507,7 +507,7 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) { $reportnames = array(); if (!empty($reports)) { - foreach ($reports as $plugin) { + foreach ($reports as $plugin => $plugindir) { $pluginstr = get_string('modulename', 'gradereport_'.$plugin); $url = $url_prefix.'report/'.$plugin.'/index.php?id='.$courseid; if ($active_type == 'report' and $active_plugin == $plugin ) { @@ -516,7 +516,7 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) { $reportnames[$plugin] = new grade_plugin_info($plugin, $url, $pluginstr); // Add link to preferences tab if such a page exists - if (file_exists($CFG->dirroot . '/grade/report/'.$plugin.'/preferences.php')) { + if (file_exists($plugindir.'/preferences.php')) { $pref_url = $url_prefix.'report/'.$plugin.'/preferences.php?id='.$courseid; $plugin_info['preferences'][$plugin] = new grade_plugin_info($plugin, $pref_url, $pluginstr); } @@ -631,8 +631,8 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) { } // standard import plugins - if ($imports = get_list_of_plugins('grade/import', 'CVS')) { // Get all installed import plugins - foreach ($imports as $key => $plugin) { // Remove ones we can't see + if ($imports = get_plugin_list('gradeimport')) { // Get all installed import plugins + foreach ($imports as $plugin => $plugindir) { // Remove ones we can't see if (!has_capability('gradeimport/'.$plugin.':view', $context)) { unset($imports[$key]); } @@ -656,7 +656,7 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) { } // standard export plugins - if ($exports = get_list_of_plugins('grade/export', 'CVS')) { // Get all installed export plugins + if ($exports = get_plugin_list('gradeexport')) { // Get all installed export plugins foreach ($exports as $key => $plugin) { // Remove ones we can't see if (!has_capability('gradeexport/'.$plugin.':view', $context)) { unset($exports[$key]); @@ -665,7 +665,7 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) { } $exportnames = array(); if (!empty($exports)) { - foreach ($exports as $plugin) { + foreach ($exports as $plugin => $plugindir) { $pluginstr = get_string('modulename', 'gradeexport_'.$plugin); $url = $url_prefix.'export/'.$plugin.'/index.php?id='.$courseid; if ($active_type == 'export' and $active_plugin == $plugin ) { diff --git a/grade/report/index.php b/grade/report/index.php index 4092346aea..e50c3c4b4a 100644 --- a/grade/report/index.php +++ b/grade/report/index.php @@ -34,11 +34,12 @@ require_login($course); $context = get_context_instance(CONTEXT_COURSE, $course->id); /// find all accessible reports -if ($reports = get_list_of_plugins('grade/report', 'CVS')) { // Get all installed reports - foreach ($reports as $key => $plugin) { // Remove ones we can't see - if (!has_capability('gradereport/'.$plugin.':view', $context)) { - unset($reports[$key]); - } +$reports = get_plugin_list('gradereport'); // Get all installed reports +$reports = array_keys($reports); + +foreach ($reports as $plugin => $plugindir) { // Remove ones we can't see + if (!has_capability('gradereport/'.$plugin.':view', $context)) { + unset($reports[$key]); } } @@ -75,4 +76,3 @@ if (empty($last)) { //redirect to last or guessed report redirect($CFG->wwwroot.'/grade/report/'.$last.'/index.php?id='.$course->id); -?> diff --git a/lib/accesslib.php b/lib/accesslib.php index bd303244fd..b55a65cd1b 100755 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -3025,13 +3025,12 @@ function role_assign($roleid, $userid, $groupid, $contextid, $timestart=0, $time } /// Ask all the modules if anything needs to be done for this user - if ($mods = get_list_of_plugins('mod')) { - foreach ($mods as $mod) { - include_once($CFG->dirroot.'/mod/'.$mod.'/lib.php'); - $functionname = $mod.'_role_assign'; - if (function_exists($functionname)) { - $functionname($userid, $context, $roleid); - } + $mods = get_plugin_list('mod'); + foreach ($mods as $mod => $moddir) { + include_once($moddir.'/lib.php'); + $functionname = $mod.'_role_assign'; + if (function_exists($functionname)) { + $functionname($userid, $context, $roleid); } } @@ -3087,7 +3086,7 @@ function role_unassign($roleid=0, $userid=0, $groupid=0, $contextid=0, $enrol=NU if ($select) { if ($ras = $DB->get_records_select('role_assignments', implode(' AND ', $select), $params)) { - $mods = get_list_of_plugins('mod'); + $mods = get_plugin_list('mod'); foreach($ras as $ra) { $fireevent = false; /// infinite loop protection when deleting recursively @@ -3117,8 +3116,8 @@ function role_unassign($roleid=0, $userid=0, $groupid=0, $contextid=0, $enrol=NU } /// Ask all the modules if anything needs to be done for this user - foreach ($mods as $mod) { - include_once($CFG->dirroot.'/mod/'.$mod.'/lib.php'); + foreach ($mods as $mod=>$moddir) { + include_once($moddir.'/lib.php'); $functionname = $mod.'_role_unassign'; if (function_exists($functionname)) { $functionname($ra->userid, $context); // watch out, $context might be NULL if something goes wrong @@ -3208,101 +3207,34 @@ function enrol_into_course($course, $user, $enrol) { * capabilities are defined for the component, we simply return an empty array. * * @global object - * @param string $component examples: 'moodle', 'mod/forum', 'block/quiz_results' + * @param string $component full plugin name, examples: 'moodle', 'mod_forum' * @return array array of capabilities */ function load_capability_def($component) { - global $CFG; - - if ($component == 'moodle') { - $defpath = $CFG->libdir.'/db/access.php'; - $varprefix = 'moodle'; - } else { - $compparts = explode('/', $component); - - if ($compparts[0] == 'report') { - $defpath = $CFG->dirroot.'/'.$CFG->admin.'/report/'.$compparts[1].'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; - - } else if ($compparts[0] == 'block') { - // Blocks are an exception. Blocks directory is 'blocks', and not - // 'block'. So we need to jump through hoops. - $defpath = $CFG->dirroot.'/'.$compparts[0]. - 's/'.$compparts[1].'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; - - } else if ($compparts[0] == 'format') { - // Similar to the above, course formats are 'format' while they - // are stored in 'course/format'. - $defpath = $CFG->dirroot.'/course/'.$component.'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; + $defpath = get_component_directory($component).'/db/access.php'; - } else if ($compparts[0] == 'editor') { - $defpath = $CFG->dirroot.'/lib/editor/'.$compparts[1].'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; - - } else if ($compparts[0] == 'gradeimport') { - $defpath = $CFG->dirroot.'/grade/import/'.$compparts[1].'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; - - } else if ($compparts[0] == 'gradeexport') { - $defpath = $CFG->dirroot.'/grade/export/'.$compparts[1].'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; - - } else if ($compparts[0] == 'gradereport') { - $defpath = $CFG->dirroot.'/grade/report/'.$compparts[1].'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; - - } else if ($compparts[0] == 'quizreport') { - $defpath = $CFG->dirroot.'/mod/quiz/report/'.$compparts[1].'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; - - } else if ($compparts[0] == 'coursereport') { - $defpath = $CFG->dirroot.'/course/report/'.$compparts[1].'/db/access.php'; - $varprefix = $compparts[0].'_'.$compparts[1]; - - } else { - $defpath = $CFG->dirroot.'/'.$component.'/db/access.php'; - $varprefix = str_replace('/', '_', $component); - } - } $capabilities = array(); - if (file_exists($defpath)) { require($defpath); - $capabilities = ${$varprefix.'_capabilities'}; + $capabilities = ${$component.'_capabilities'}; } + return $capabilities; } /** * Gets the capabilities that have been cached in the database for this component. - * - * @global object - * @param string $component - examples: 'moodle', 'mod/forum', 'block/quiz_results' + * @param string $component - examples: 'moodle', 'mod_forum' * @return array array of capabilities */ function get_cached_capabilities($component='moodle') { global $DB; - - if ($component == 'moodle') { - $storedcaps = $DB->get_records_select('capabilities', "name LIKE ?", array('moodle/%:%')); - - } else if ($component == 'local') { - $storedcaps = $DB->get_records_select('capabilities', "name LIKE ?", array('moodle/local:%')); - - } else { - $storedcaps = $DB->get_records_select('capabilities', "name LIKE ?", array("$component:%")); - } - - return $storedcaps; + return $DB->get_records('capabilities', array('component'=>$component)); } /** * Returns default capabilities for given legacy role type. - * - * @global object * @param string $legacyrole legacy role name * @return array */ @@ -3336,8 +3268,6 @@ function get_default_capabilities($legacyrole) { * Reset role capabilitites to default according to selected legacy capability. * If several legacy caps selected, use the first from get_default_capabilities. * If no legacy selected, removes all capabilities. - * - * @global object * @param int @roleid */ function reset_role_capabilities($roleid) { diff --git a/lib/adminlib.php b/lib/adminlib.php index ebec3dfeeb..75a74a2d99 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -198,38 +198,6 @@ function get_used_table_names() { return $table_names; } -/** - * Lists all plugin types - * - * @global object - * @return array Array of strings - name=>location - */ -function get_plugin_types() { - global $CFG; - - return array('mod' => 'mod', - 'qtype' => 'question/type', - 'block' => 'blocks', - 'auth' => 'auth', - 'enrol' => 'enrol', - 'format' => 'course/format', - 'editor' => 'lib/editor', - 'gradeexport' => 'grade/export', - 'gradeimport' => 'grade/import', - 'gradereport' => 'grade/report', - 'message' => 'message/output', - 'coursereport' => 'course/report', - 'report' => $CFG->admin.'/report', - 'portfolio' => 'portfolio/type', - 'repository' => 'repository', - - // following types a very ugly hacks - we should not make exceptions like this - all plugins should be equal; - // these plugins may cause problems such as when wanting to uninstall them - 'quizreport' => 'mod/quiz/report', - 'assignment_type' => 'mod/assignment/type', - ); -} - /** * Returns list of all directories where we expect install.xml files * @@ -245,21 +213,15 @@ function get_db_directories() { $dbdirs[] = $CFG->libdir.'/db'; /// Then, all the ones defined by get_plugin_types() - if ($plugintypes = get_plugin_types()) { - foreach ($plugintypes as $plugintype => $pluginbasedir) { - if ($plugins = get_list_of_plugins($pluginbasedir, 'db')) { - foreach ($plugins as $plugin) { - $dbdirs[] = $CFG->dirroot . '/' . $pluginbasedir . '/' . $plugin . '/db'; - } + $plugintypes = get_plugin_types(); + foreach ($plugintypes as $plugintype => $pluginbasedir) { + if ($plugins = get_plugin_list($plugintype)) { + foreach ($plugins as $plugin => $plugindir) { + $dbdirs[] = $plugindir.'/db'; } } } -/// Local database changes, if the local folder exists. - if (file_exists($CFG->dirroot . '/local')) { - $dbdirs[] = $CFG->dirroot.'/local/db'; - } - return $dbdirs; } @@ -4125,8 +4087,8 @@ class admin_setting_special_gradeexport extends admin_setting_configmulticheckbo } $this->choices = array(); - if ($plugins = get_list_of_plugins('grade/export')) { - foreach($plugins as $plugin) { + if ($plugins = get_plugin_list('gradeexport')) { + foreach($plugins as $plugin => $unused) { $this->choices[$plugin] = get_string('modulename', 'gradeexport_'.$plugin); } } @@ -4301,9 +4263,9 @@ class admin_setting_grade_profilereport extends admin_setting_configselect { global $CFG; require_once($CFG->libdir.'/gradelib.php'); - foreach (get_list_of_plugins('grade/report') as $plugin) { - if (file_exists($CFG->dirroot.'/grade/report/'.$plugin.'/lib.php')) { - require_once($CFG->dirroot.'/grade/report/'.$plugin.'/lib.php'); + foreach (get_plugin_list('gradereport') as $plugin => $plugindir) { + if (file_exists($plugindir.'/lib.php')) { + require_once($plugindir.'/lib.php'); $functionname = 'grade_report_'.$plugin.'_profilereport'; if (function_exists($functionname)) { $this->choices[$plugin] = get_string('modulename', 'gradereport_'.$plugin); @@ -4457,9 +4419,9 @@ class admin_enrolment_page extends admin_externalpage { $found = false; - if ($modules = get_list_of_plugins('enrol')) { + if ($modules = get_plugin_list('enrol')) { $textlib = textlib_get_instance(); - foreach ($modules as $plugin) { + foreach ($modules as $plugin => $dir) { if (strpos($plugin, $query) !== false) { $found = true; break; @@ -4655,8 +4617,8 @@ class admin_setting_manageauths extends admin_setting { } $textlib = textlib_get_instance(); - $authsavailable = get_list_of_plugins('auth'); - foreach ($authsavailable as $auth) { + $authsavailable = get_plugin_list('auth'); + foreach ($authsavailable as $auth => $dir) { if (strpos($auth, $query) !== false) { return true; } @@ -4687,7 +4649,7 @@ class admin_setting_manageauths extends admin_setting { 'up', 'down', 'none')); $txt->updown = "$txt->up/$txt->down"; - $authsavailable = get_list_of_plugins('auth'); + $authsavailable = get_plugin_list('auth'); get_enabled_auth_plugins(true); // fix the list of enabled auths if (empty($CFG->auth)) { $authsenabled = array(); @@ -4710,7 +4672,7 @@ class admin_setting_manageauths extends admin_setting { } } - foreach ($authsavailable as $auth) { + foreach ($authsavailable as $auth => $dir) { if (array_key_exists($auth, $displayauths)) { continue; //already in the list } @@ -5081,8 +5043,8 @@ class admin_setting_manageportfolio extends admin_setting { } $textlib = textlib_get_instance(); - $portfolios= get_list_of_plugins('portfolio/type'); - foreach ($portfolios as $p) { + $portfolios = get_plugin_list('portfolio'); + foreach ($portfolios as $p => $dir) { if (strpos($p, $query) !== false) { return true; } @@ -5112,7 +5074,8 @@ class admin_setting_manageportfolio extends admin_setting { $namestr = get_string('name'); $pluginstr = get_string('plugin', 'portfolio'); - $plugins = get_list_of_plugins('portfolio/type'); + $plugins = get_plugin_list('portfolio'); + $plugins = array_keys($plugins); $instances = portfolio_instances(false, false); $alreadyplugins = array(); @@ -5418,10 +5381,6 @@ function admin_get_root($reload=false, $requirefulltree=true) { } require($CFG->dirroot.'/'.$CFG->admin.'/settings/plugins.php'); - if (file_exists($CFG->dirroot.'/local/settings.php')) { - require($CFG->dirroot.'/local/settings.php'); - } - $ADMIN->loaded = true; } @@ -5882,9 +5841,9 @@ function print_plugin_tables() { $plugins_installed['filter'] = array(); $plugins_ondisk = array(); - $plugins_ondisk['mod'] = get_list_of_plugins('mod', 'db'); - $plugins_ondisk['blocks'] = get_list_of_plugins('blocks', 'db'); - $plugins_ondisk['filter'] = get_list_of_plugins('filter', 'db'); + $plugins_ondisk['mod'] = array_keys(get_plugin_list('mod')); + $plugins_ondisk['blocks'] = array_keys(get_plugin_list('block')); + $plugins_ondisk['filter'] = array_keys(get_plugin_list('filter')); $strstandard = get_string('standard'); $strnonstandard = get_string('nonstandard'); @@ -6048,8 +6007,8 @@ class admin_setting_managerepository extends admin_setting { } $textlib = textlib_get_instance(); - $repositories= get_list_of_plugins('repository'); - foreach ($repositories as $p) { + $repositories= get_plugin_list('repository'); + foreach ($repositories as $p => $dir) { if (strpos($p, $query) !== false) { return true; } @@ -6080,7 +6039,7 @@ class admin_setting_managerepository extends admin_setting { $updownstr = get_string('updown', 'repository'); $hiddenstr = get_string('hiddenshow', 'repository'); $deletestr = get_string('delete'); - $plugins = get_list_of_plugins('repository'); + $plugins = get_plugin_list('repository'); $instances = repository::get_types(); $instancesnumber = count($instances); $alreadyplugins = array(); @@ -6161,7 +6120,7 @@ class admin_setting_managerepository extends admin_setting { $instancehtml .= get_string('addplugin', 'repository'); $instancehtml .= '