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

This commit is contained in:
skodak
2009-06-19 14:25:56 +00:00
parent 5085a59ad7
commit 17da2e6f28
60 changed files with 726 additions and 829 deletions
-3
View File
@@ -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();
+22 -19
View File
@@ -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.');
}
+4 -5
View File
@@ -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;
}
+2 -2
View File
@@ -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);
+2 -8
View File
@@ -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();
+2 -2
View File
@@ -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");
+9 -10
View File
@@ -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
?>
+14 -4
View File
@@ -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;
}
}
+4 -4
View File
@@ -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);
+2 -1
View File
@@ -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) {
+4 -4
View File
@@ -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);
}
+2 -2
View File
@@ -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;
+3 -3
View File
@@ -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");
}
+3 -3
View File
@@ -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 '<div class="plugin">';
include_once($CFG->dirroot.'/course/import/'.$directory.'/mod.php');
include($importdir.'/mod.php');
echo '</div>';
}
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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));
+8 -8
View File
@@ -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 ) {
+6 -6
View File
@@ -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);
?>
+15 -85
View File
@@ -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;
$defpath = get_component_directory($component).'/db/access.php';
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];
} 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) {
+27 -68
View File
@@ -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 .= '</h3><ul>';
$addable = 0;
foreach ($plugins as $p) {
foreach ($plugins as $p=>$dir) {
if (!in_array($p, $alreadyplugins)) {
$instancehtml .= '<li><a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/repository.php?sesskey='
.sesskey().'&amp;new='.$p.'">'.get_string('add', 'repository')
+4 -6
View File
@@ -36,11 +36,9 @@ $messageproviders = array (
/// Important errors that an admin ought to know about
'errors' => array (
'capability' => 'moodle/site:config'
)
),
'instantmessage' => array (
),
);
?>
+60
View File
@@ -2191,6 +2191,66 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
upgrade_main_savepoint($result, 2009061600);
}
if ($result && $oldversion < 2009061702) {
// standardizing plugin names
if ($configs = $DB->get_records_select('config_plugins', "plugin LIKE 'quizreport_%'")) {
foreach ($configs as $config) {
$config->plugin = str_replace('quizreport_', 'quiz_', $config->plugin);
$DB->update_record('config_plugins', $config);
}
}
unset($configs);
upgrade_main_savepoint($result, 2009061702);
}
if ($result && $oldversion < 2009061703) {
// standardizing plugin names
if ($configs = $DB->get_records_select('config_plugins', "plugin LIKE 'assignment_type_%'")) {
foreach ($configs as $config) {
$config->plugin = str_replace('assignment_type_', 'assignment_', $config->plugin);
$DB->update_record('config_plugins', $config);
}
}
unset($configs);
upgrade_main_savepoint($result, 2009061703);
}
if ($result && $oldversion < 2009061704) {
// change component string in capability records to new "_" format
if ($caps = $DB->get_records('capabilities')) {
foreach ($caps as $cap) {
$cap->component = str_replace('/', '_', $cap->component);
$DB->update_record('capabilities', $cap);
}
}
unset($caps);
upgrade_main_savepoint($result, 2009061704);
}
if ($result && $oldversion < 2009061705) {
// change component string in events_handlers records to new "_" format
if ($handlers = $DB->get_records('events_handlers')) {
foreach ($handlers as $handler) {
$handler->handlermodule = str_replace('/', '_', $handler->handlermodule);
$DB->update_record('events_handlers', $handler);
}
}
unset($handlers);
upgrade_main_savepoint($result, 2009061705);
}
if ($result && $oldversion < 2009061706) {
// change component string in message_providers records to new "_" format
if ($mps = $DB->get_records('message_providers')) {
foreach ($mps as $mp) {
$mp->component = str_replace('/', '_', $mp->component);
$DB->update_record('message_providers', $cap);
}
}
unset($caps);
upgrade_main_savepoint($result, 2009061706);
}
return $result;
}
+1 -1
View File
@@ -1002,7 +1002,7 @@ class database_manager {
unset($dbtables[$tablename]);
}
// look for unsupported tables - local custom tables should be in /local/db/install.xml ;-)
// look for unsupported tables - local custom tables should be in /local/xxxx/db/install.xml ;-)
// if there is no prefix, we can not say if tale is ours :-(
if ($this->generator->prefix !== '') {
foreach ($dbtables as $tablename=>$unused) {
+1 -1
View File
@@ -105,7 +105,7 @@ function get_texteditor($editorname) {
*/
function get_available_editors() {
$editors = array();
foreach (get_list_of_plugins('lib/editor') as $editorname) {
foreach (get_plugin_list('editor') as $editorname => $dir) {
$editors[$editorname] = get_string('modulename', 'editor_'.$editorname);
}
return $editors;
+2 -39
View File
@@ -36,44 +36,7 @@
* @return array of capabilities or empty array if not exists
*/
function events_load_def($component) {
global $CFG;
if ($component == 'moodle') {
$defpath = $CFG->libdir.'/db/events.php';
} else if ($component == 'unittest') {
$defpath = $CFG->libdir.'/simpletest/fixtures/events.php';
} else {
$compparts = explode('/', $component);
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.'/blocks/'.$compparts[1].'/db/events.php';
} else if ($compparts[0] == 'format') {
// Similar to the above, course formats are 'format' while they
// are stored in 'course/format'.
$defpath = $CFG->dirroot.'/course/format/'.$compparts[1].'/db/events.php';
} else if ($compparts[0] == 'editor') {
$defpath = $CFG->dirroot.'/lib/editor/'.$compparts[1].'/db/events.php';
} else if ($compparts[0] == 'gradeimport') {
$defpath = $CFG->dirroot.'/grade/import/'.$compparts[1].'/db/events.php';
} else if ($compparts[0] == 'gradeexport') {
$defpath = $CFG->dirroot.'/grade/export/'.$compparts[1].'/db/events.php';
} else if ($compparts[0] == 'gradereport') {
$defpath = $CFG->dirroot.'/grade/report/'.$compparts[1].'/db/events.php';
} else if ($compparts[0] == 'portfolio'){
$defpath = $CFG->dirroot.'/portfolio/type/'.$compparts[1].'/db/events.php';
} else {
$defpath = $CFG->dirroot.'/'.$component.'/db/events.php';
}
}
$defpath = get_component_directory($component).'/db/events.php';
$handlers = array();
@@ -121,7 +84,7 @@ function events_get_cached($component) {
* the database.
*
* @global object
* @param string $component examples: 'moodle', 'mod/forum', 'block/quiz_results'
* @param string $component examples: 'moodle', 'mod_forum', 'block_quiz_results'
* @return boolean
*/
function events_update_definition($component='moodle') {
+2 -4
View File
@@ -1044,17 +1044,15 @@ function grade_grab_course_grades($courseid, $modname=null) {
return;
}
if (!$mods = get_list_of_plugins('mod') ) {
if (!$mods = get_plugin_list('mod') ) {
print_error('nomodules', 'debug');
}
foreach ($mods as $mod) {
foreach ($mods as $mod => $fullmod) {
if ($mod == 'NEWMODULE') { // Someone has unzipped the template, ignore it
continue;
}
$fullmod = $CFG->dirroot.'/mod/'.$mod;
// include the module lib once
if (file_exists($fullmod.'/lib.php')) {
// get all instance of the activity
+7 -25
View File
@@ -24,40 +24,24 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/** NO_MOODLE_COOKIES = true */
define('NO_MOODLE_COOKIES', true);
/** NO_UPGRADE_CHECK = true */
define('NO_UPGRADE_CHECK', true);
include('../config.php');
$output = "// Javascript from Moodle modules\n";
if ($mods = get_list_of_plugins('mod')) {
foreach ($mods as $mod) {
if (is_readable($CFG->dirroot.'/mod/'.$mod.'/javascript.php')) {
$output .= file_get_contents($CFG->dirroot.'/mod/'.$mod.'/javascript.php');
$plugintypes = array('mod', 'filter', 'block');
foreach ($plugintypes as $plugintype) {
if ($mods = get_plugin_list($plugintype)) {
foreach ($mods as $mod => $moddir) {
if (is_readable($moddir.'/javascript.php')) {
$output .= file_get_contents($moddir.'/javascript.php');
}
}
}
}
if ($filters = get_list_of_plugins('filter')) {
foreach ($filters as $filter) {
if (is_readable($CFG->dirroot.'/filter/'.$filter.'/javascript.php')) {
$output .= file_get_contents($CFG->dirroot.'/filter/'.$filter.'/javascript.php');
}
}
}
if ($blocks = get_list_of_plugins('blocks')) {
foreach ($blocks as $block) {
if (is_readable($CFG->dirroot.'/blocks/'.$block.'/javascript.php')) {
$output .= file_get_contents($CFG->dirroot.'/blocks/'.$block.'/javascript.php');
}
}
}
$lifetime = '86400';
@header('Content-type: text/javascript');
@@ -68,5 +52,3 @@
@header('Pragma: ');
echo $output;
?>
-175
View File
@@ -1,175 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This file provides hooks from moodle core into custom code.
*
* Important note
* --------------
*
* If at all possible, the facilities provided here should not be used.
* Wherever possible, customisations should be written using one of the
* standard plug-in points like modules, blocks, auth plugins, themes, ...
*
* However, sometimes that is just not possible, because of the nature
* of the change you want to make. In which case the second best plan is
* to implement your feature in a generally useful way, which can
* be contributed back to the moodle project so that everyone benefits.
*
* But supposing you are forced to implement some nasty hack that only
* you will ever want, then the local folder is for you. The idea is that
* instead of scattering your changes throughout the code base, you
* put them all in a folder called 'local'. Then you won't have to
* deal with merging problems when you upgrade the rest of your moodle
* installation.
*
*
* Available hooks
* ===============
*
* These are similar to the module interface, however, not all the the
* facilities that are available to modules are available to local code (yet).
* See also http://docs.moodle.org/en/Development:Local_customisation for more
* information.
*
*
* Local database customisations
* -----------------------------
*
* If your local customisations require changes to the database, use the files:
*
* local/version.php
* local/db/upgrade.php
* local/db/install.php
*
* In the file version.php, set the variable $local_version to a versionstamp
* value like 2006030300 (a concatenation of year, month, day, serial).
*
* In the file upgrade.php, implement the
* function xmldb_local_upgrade($oldversion) to make the database changes.
*
* Note that you don't need to have an install.xml file. Instead,
* when your moodle instance is first installed, xmldb_local_install() will be called.
*
* Please note that modifying of core tables is NOT supported at all!
*
* Local capabilities
* ------------------
*
* If your local customisations require their own capabilities, use
*
* local/db/access.php
*
* You should create an array called $local_capabilities, which looks like:
*
* $local_capabilities = array(
* 'moodle/local:capability' => array(
* 'captype' => 'read',
* 'contextlevel' => CONTEXT_SYSTEM,
* ),
* );
*
* Note that for all local capabilities you add, you'll need to add language strings.
* Moodle will expect to find them in local/lang/en_utf8/local.php (eg for English)
* with a key (following the above example) of local:capability
* See the next section for local language support.
*
*
* Local language support
* ----------------------
*
* Moodle already supports local overriding of any language strings, or the
* creation of new strings. Just create a folder lang/XX_utf8_local where XX is
* a language code. Any language files you put in there will be used before
* the standard files. So, for example, can can create a file
* lang/en_utf8_local/moodle.php containing
* $strings['login'] = 'Sign in';
* and that will change the string 'Login' to 'Sign in'. (See also
* http://docs.moodle.org/en/Language_editing for another way to achieve this.)
*
* This mechanism can also be used to create completely new language files. For
* example, suppose you have created some code in local/myfeature.php that needs
* some language strings. You can put those strings in the file
* lang/en_utf8_local/local_myfeature.php, and then access then using
* get_string('mystring', 'local_myfeature'). (Note that you do not have to call
* the file local_myfeature.php, you can call it anything you like, however,
* the convention of calling lang files for local/ code local_somthing is recommended.)
*
* In addition, there is one other mechanism that is available. Strings from the
* 'local' langauge file (for example get_string('mystring', 'local') will be
* found if the string is found in the file local/lang/en_utf8/local.php. Since
* the lang file 'local' is used for a lot of things like capability names, you
* can use this file for things like that.
*
*
* Local admin menu items
* ----------------------
*
* It is possible to add new items to the admin_tree block.
* To do this, create a file, local/settings.php
* which can access the $ADMIN variable directly and add things to it.
* You might do something like:
* $ADMIN->add('root', new admin_category($name, $title);
* $ADMIN->add('foo', new admin_externalpage($name, $title, $url, $cap);
*
*
* Course deletion
* ---------------
*
* To have your local customisations notified when a course is deleted,
* make a file called
*
* local/lib.php
*
* In there, implement the function local_delete_course($courseid). This
* function will then be called whenever the functions remove_course_contents()
* or delete_course() from moodlelib are called.
*
* @package moodlecore
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Notify local code that a course is being deleted.
* Look for a function local_delete_course() in a file called
* local/lib.php andn call it if it is there.
*
* @global object
* @param int $courseid the course that is being deleted.
* @param bool $showfeedback Whether to display notifications on success.
* @return bool false if local_delete_course failed, or true if
* there was noting to do or local_delete_course succeeded.
*/
function notify_local_delete_course($courseid, $showfeedback) {
global $CFG;
$localfile = $CFG->dirroot .'/local/lib.php';
if (file_exists($localfile)) {
require_once($localfile);
if (function_exists('local_delete_course')) {
if (local_delete_course($courseid)) {
if ($showfeedback) {
notify(get_string('deleted') . ' local data');
}
} else {
return false;
}
}
}
return true;
}
?>
+3 -36
View File
@@ -118,7 +118,7 @@ function message_send_handler($eventdata){
/**
* This code updates the message_providers table with the current set of providers
* @param $component - examples: 'moodle', 'mod/forum', 'block/quiz_results'
* @param $component - examples: 'moodle', 'mod_forum', 'block_quiz_results'
* @return boolean
*/
function message_update_providers($component='moodle') {
@@ -210,46 +210,13 @@ function message_get_providers_from_db($component) {
/**
* Loads the messages definitions for the component (from file). If no
* messages are defined for the component, we simply return an empty array.
* @param $component - examples: 'moodle', 'mod/forum', 'block/quiz_results'
* @param $component - examples: 'moodle', 'mod_forum', 'block_quiz_results'
* @return array of message providerss or empty array if not exists
*
* INTERNAL - to be used from messagelib only
*/
function message_get_providers_from_file($component) {
global $CFG;
if ($component == 'moodle') {
$defpath = $CFG->libdir.'/db/messages.php';
} else if ($component == 'unittest') {
$defpath = $CFG->libdir.'/simpletest/fixtures/messages.php';
} else {
$compparts = explode('/', $component);
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.'/blocks/'.$compparts[1].'/db/messages.php';
} else if ($compparts[0] == 'format') {
// Similar to the above, course formats are 'format' while they
// are stored in 'course/format'.
$defpath = $CFG->dirroot.'/course/format/'.$compparts[1].'/db/messages.php';
} else if ($compparts[0] == 'gradeimport') {
$defpath = $CFG->dirroot.'/grade/import/'.$compparts[1].'/db/messages.php';
} else if ($compparts[0] == 'gradeexport') {
$defpath = $CFG->dirroot.'/grade/export/'.$compparts[1].'/db/messages.php';
} else if ($compparts[0] == 'gradereport') {
$defpath = $CFG->dirroot.'/grade/report/'.$compparts[1].'/db/messages.php';
} else {
$defpath = $CFG->dirroot.'/'.$component.'/db/messages.php';
}
}
$defpath = get_component_directory($component).'/db/messages.php';
$messageproviders = array();
+205 -67
View File
@@ -314,6 +314,8 @@ define('FEATURE_GROUPMEMBERSONLY', 'groupmembersonly');
/** True if module supports intro editor */
define('FEATURE_MOD_INTRO', 'mod_intro');
/** True if module supports subplugins */
define('FEATURE_MOD_SUBPLUGINS', 'mod_subplugins');
/** True if module has default completion */
define('FEATURE_MODEDIT_DEFAULT_COMPLETION', 'modedit_default_completion');
@@ -3882,10 +3884,10 @@ function remove_course_contents($courseid, $showfeedback=true) {
$strdeleted = get_string('deleted');
/// Clean up course formats (iterate through all formats in the even the course format was ever changed)
$formats = get_list_of_plugins('course/format');
foreach ($formats as $format) {
$formats = get_plugin_list('format');
foreach ($formats as $format=>$formatdir) {
$formatdelete = $format.'_course_format_delete_course';
$formatlib = "$CFG->dirroot/course/format/$format/lib.php";
$formatlib = "$formatdir/lib.php";
if (file_exists($formatlib)) {
include_once($formatlib);
if (function_exists($formatdelete)) {
@@ -3946,10 +3948,6 @@ function remove_course_contents($courseid, $showfeedback=true) {
print_error('nomodules', 'debug');
}
/// Give local code a chance to delete its references to this course.
require_once($CFG->libdir.'/locallib.php');
notify_local_delete_course($courseid, $showfeedback);
/// Delete course blocks
blocks_delete_all_for_context($context->id);
@@ -5692,29 +5690,12 @@ class string_manager {
$dirroot . '/lang/' => '',
$dataroot . '/lang/' => '',
);
$this->searchplacesbyplugintype = array(
'assignment_' => array('mod/assignment/type'),
'auth_' => array('auth'),
'block_' => array('blocks'),
'datafield_' => array('mod/data/field'),
'datapreset_' => array('mod/data/preset'),
'enrol_' => array('enrol'),
'filter_' => array('filter'),
'format_' => array('course/format'),
'editor_' => array('lib/editor'),
'quiz_' => array('mod/quiz/report'),
'qtype_' => array('question/type'),
'qformat_' => array('question/format'),
'report_' => array($admin.'/report', 'course/report'),
'repository_'=>array('repository'),
'resource_' => array('mod/resource/type'),
'gradereport_' => array('grade/report'),
'gradeimport_' => array('grade/import'),
'gradeexport_' => array('grade/export'),
'profilefield_' => array('user/profile/field'),
'portfolio_' => array('portfolio/type'),
'' => array('mod')
);
$this->searchplacesbyplugintype = array(''=>array('mod'));
$plugintypes = get_plugin_types(false);
foreach ($plugintypes as $plugintype => $dir) {
$this->searchplacesbyplugintype[$plugintype.'_'] = array($dir);
}
unset($this->searchplacesbyplugintype['mod_']);
$this->restore_extra_locations_from_session();
if ($runninginstaller) {
$stringnames = file($dirroot . '/install/stringnames.txt');
@@ -5822,14 +5803,10 @@ class string_manager {
foreach ($locations as $location => $ignored) {
$locations[$location] = $module . '/';
}
if ($module == 'local') {
$locations[$this->dirroot . '/local/lang/'] = 'local/';
} else {
list($type, $plugin) = $this->parse_module_name($module);
if (isset($this->searchplacesbyplugintype[$type])) {
foreach ($this->searchplacesbyplugintype[$type] as $location) {
$locations[$this->dirroot . "/$location/$plugin/lang/"] = $plugin . '/';
}
list($type, $plugin) = $this->parse_module_name($module);
if (isset($this->searchplacesbyplugintype[$type])) {
foreach ($this->searchplacesbyplugintype[$type] as $location) {
$locations[$this->dirroot . "/$location/$plugin/lang/"] = $plugin . '/';
}
}
}
@@ -6371,7 +6348,7 @@ function get_list_of_themes() {
if (!empty($CFG->themelist)) { // use admin's list of themes
$themelist = explode(',', $CFG->themelist);
} else {
$themelist = get_list_of_plugins("theme");
$themelist = array_keys(get_plugin_list("theme"));
}
foreach ($themelist as $key => $theme) {
@@ -6759,33 +6736,196 @@ function show_event($event) {
/// ENVIRONMENT CHECKING ////////////////////////////////////////////////////////////
/**
* Lists plugin directories within some directory
* Return exact path to plugin directory
* @param string $plugintype type of plugin
* @param string $name name of the plugin
* @param bool $fullpaths false means relative paths from dirroot
* @return directory path, full or relative to dirroot
*/
function get_plugin_directory($plugintype, $name, $fullpaths=true) {
if ($plugintype === '') {
$plugintype = 'mod';
}
$types = get_plugin_types($fullpaths);
if (!array_key_exists($plugintype, $types)) {
return null;
}
$name = clean_param($name, PARAM_SAFEDIR); // just in case ;-)
return $types[$plugintype].'/'.$name;
}
/**
* Return exact path to plugin directory,
* this method support "simpletest_" prefix designed for unit testing.
* @param string $component name such as 'moodle', 'mod_forum' or special simpletest value
* @param bool $fullpaths false means relative paths from dirroot
* @return directory path, full or relative to dirroot
*/
function get_component_directory($component, $fullpaths=true) {
global $CFG;
$simpletest = false;
if (strpos($component, 'simpletest_') === 0) {
$subdir = substr($component, strlen('simpletest_'));
return $subdir;
}
if ($component == 'moodle') {
$path = ($fullpaths ? $CFG->libdir : 'lib');
} else {
list($type, $plugin) = explode('_', $component, 2);
$path = get_plugin_directory($type, $plugin, $fullpaths);
}
return $path;
}
/**
* Lists all plugin types
* @param bool $fullpaths false means relative paths from dirroot
* @return array Array of strings - name=>location
*/
function get_plugin_types($fullpaths=true) {
global $CFG;
static $info = null;
static $fullinfo = null;
if (!$info) {
$info = array('mod' => 'mod',
'auth' => 'auth',
'enrol' => 'enrol',
'message' => 'message/output',
'block' => 'blocks',
'filter' => 'filter',
'editor' => 'lib/editor',
'format' => 'course/format',
'import' => 'course/import',
'profilefield' => 'user/profile/field',
'report' => $CFG->admin.'/report',
'coursereport' => 'course/report', // must be after system reports
'gradeexport' => 'grade/export',
'gradeimport' => 'grade/import',
'gradereport' => 'grade/report',
'repository' => 'repository',
'portfolio' => 'portfolio/type',
'qtype' => 'question/type',
'qformat' => 'question/format');
/*
$mods = get_plugin_list('mod');
foreach ($mods as $mod => $moddir) {
if (!$subplugins = plugin_supports('mod', $mod, FEATURE_MOD_SUBPLUGINS, false)) {
continue;
}
foreach ($subplugins as $subtype=>$dir) {
$info[$subtype] = $dir;
}
}
*/
// do not include themes if in non-standard location
if ($CFG->themedir === $CFG->dirroot.'/theme') {
$info['theme'] = 'theme';
}
// local is always last
$info['local'] = 'local';
$fullinfo = array();
foreach ($info as $type => $dir) {
$fullinfo[$type] = $CFG->dirroot.'/'.$dir;
}
$fullinfo['theme'] = $CFG->themedir;
}
return ($fullpaths ? $fullinfo : $info);
}
/**
* Simplified version of get_list_of_plugins()
* @param string $plugintype type of plugin
* @param bool $fullpaths false means relative paths from dirroot
* @return array name=>fulllocation pairs of plugins of given type
*/
function get_plugin_list($plugintype, $fullpaths=true) {
global $CFG;
$ignored = array('CVS', '_vti_cnf', 'simpletest', 'db');
if ($plugintype === '') {
$plugintype = 'mod';
}
if ($plugintype === 'mod') {
// mod is eán exception because we have to call this function from get_plugin_types()
$fulldir = $CFG->dirroot.'/mod';
$dir = $fullpaths ? $fulldir : 'mod';
} else {
$fulltypes = get_plugin_types(true);
$types = get_plugin_types($fullpaths);
if (!array_key_exists($plugintype, $types)) {
return array();
}
$fulldir = $fulltypes[$plugintype];
$dir = $types[$plugintype];
if (!file_exists($fulldir)) {
return array();
}
}
$result = array();
$items = new DirectoryIterator($fulldir);
foreach ($items as $item) {
if ($item->isDot() or !$item->isDir()) {
continue;
}
$pluginname = $item->getFilename();
if (in_array($pluginname, $ignored)) {
continue;
}
if ($pluginname !== clean_param($pluginname, PARAM_SAFEDIR)) {
// better ignore plugins with problematic names here
continue;
}
$result[$pluginname] = $dir.'/'.$pluginname;
}
ksort($result);
return $result;
}
/**
* Lists plugin-like directories within specified directory
*
* @global object
* @param string $plugin dir under we'll look for plugins (defaults to 'mod')
* This function was originally used for standar Moodle plugins, please use
* new get_plugin_list() now.
*
* This function is used for general directory listing and backwards compability.
*
* @param string $directory relatice directory from root
* @param string $exclude dir name to exclude from the list (defaults to none)
* @param string $basedir full path to the base dir where $plugin resides (defaults to $CFG->dirroot)
* @return array Array of plugins found under the requested parameters
* @return array Sorted array of directory names found under the requested parameters
*/
function get_list_of_plugins($plugin='mod', $exclude='', $basedir='') {
function get_list_of_plugins($directory='mod', $exclude='', $basedir='') {
global $CFG;
$plugins = array();
if (empty($basedir)) {
# This switch allows us to use the appropiate theme directory - and potentialy alternatives for other plugins
switch ($plugin) {
case "theme":
$basedir = $CFG->themedir;
break;
default:
$basedir = $CFG->dirroot .'/'. $plugin;
// This switch allows us to use the appropiate theme directory - and potentialy alternatives for other plugins
switch ($directory) {
case "theme":
$basedir = $CFG->themedir;
break;
default:
$basedir = $CFG->dirroot .'/'. $directory;
}
} else {
$basedir = $basedir .'/'. $plugin;
$basedir = $basedir .'/'. $directory;
}
if (file_exists($basedir) && filetype($basedir) == 'dir') {
@@ -7121,19 +7261,17 @@ function moodle_needs_upgrading() {
if ($version > $CFG->version) {
return true;
}
if ($mods = get_list_of_plugins('mod')) {
foreach ($mods as $mod) {
$fullmod = $CFG->dirroot .'/mod/'. $mod;
$module = new object();
if (!is_readable($fullmod .'/version.php')) {
notify('Module "'. $mod .'" is not readable - check permissions');
continue;
}
include_once($fullmod .'/version.php'); # defines $module with version etc
if ($currmodule = $DB->get_record('modules', array('name'=>$mod))) {
if ($module->version > $currmodule->version) {
return true;
}
$mods = get_plugin_list('mod');
foreach ($mods as $mod => $fullmod) {
$module = new object();
if (!is_readable($fullmod .'/version.php')) {
notify('Module "'. $mod .'" is not readable - check permissions');
continue;
}
include_once($fullmod .'/version.php'); # defines $module with version etc
if ($currmodule = $DB->get_record('modules', array('name'=>$mod))) {
if ($module->version > $currmodule->version) {
return true;
}
}
}
+2 -2
View File
@@ -669,11 +669,11 @@ function portfolio_plugin_sanity_check($plugins=null) {
if (is_string($plugins)) {
$plugins = array($plugins);
} else if (empty($plugins)) {
$plugins = get_list_of_plugins('portfolio/type');
$plugins = get_plugin_list('portfolio');
}
$insane = array();
foreach ($plugins as $plugin) {
foreach ($plugins as $plugin => $dir) {
if ($result = portfolio_static_function($plugin, 'plugin_sanity_check')) {
$insane[$plugin] = $result;
}
+8 -8
View File
@@ -166,10 +166,10 @@ require_once("$CFG->dirroot/question/type/questiontype.php");
// Load the questiontype.php file for each question type
// These files in turn call question_register_questiontype()
// with a new instance of each qtype class.
$qtypenames = get_list_of_plugins('question/type');
foreach($qtypenames as $qtypename) {
$qtypenames = get_plugin_list('qtype');
foreach($qtypenames as $qtypename => $qdir) {
// Instanciates all plug-in question types
$qtypefilepath= "$CFG->dirroot/question/type/$qtypename/questiontype.php";
$qtypefilepath= "$qdir/questiontype.php";
// echo "Loading $qtypename<br/>"; // Uncomment for debugging
if (is_readable($qtypefilepath)) {
@@ -2590,14 +2590,14 @@ function question_categorylist($categoryid) {
function get_import_export_formats( $type ) {
global $CFG;
$fileformats = get_list_of_plugins("question/format");
$fileformats = get_plugin_list("qformat");
$fileformatname=array();
require_once( "{$CFG->dirroot}/question/format.php" );
foreach ($fileformats as $key => $fileformat) {
$format_file = $CFG->dirroot . "/question/format/$fileformat/format.php";
if (file_exists( $format_file ) ) {
require_once( $format_file );
foreach ($fileformats as $fileformat=>$fdir) {
$format_file = "$fdir/format.php";
if (file_exists($format_file) ) {
require_once($format_file);
}
else {
continue;
+5 -4
View File
@@ -187,6 +187,11 @@ global $SCRIPT;
$CFG->libdir = $CFG->dirroot .'/lib';
if (!isset($CFG->themedir)) {
$CFG->themedir = $CFG->dirroot.'/theme';
$CFG->themewww = $CFG->wwwroot.'/theme';
}
require_once($CFG->libdir .'/setuplib.php'); // Functions that MUST be loaded first
/// Time to start counting
@@ -509,10 +514,6 @@ global $SCRIPT;
/// Load up theme variables (colours etc)
if (!isset($CFG->themedir)) {
$CFG->themedir = $CFG->dirroot.'/theme';
$CFG->themewww = $CFG->wwwroot.'/theme';
}
$CFG->httpsthemewww = $CFG->themewww;
if (isset($_GET['theme'])) {
+33 -106
View File
@@ -77,7 +77,7 @@ class upgrade_requires_exception extends moodle_exception {
$a->pluginname = $plugin;
$a->pluginversion = $pluginversion;
$a->currentmoodle = $currentmoodle;
$a->requiremoodle = $currentmoodle;
$a->requiremoodle = $requiremoodle;
parent::__construct('pluginrequirementsnotmet', 'error', "$CFG->wwwroot/$CFG->admin/index.php", $a);
}
}
@@ -256,23 +256,19 @@ function upgrade_block_savepoint($result, $version, $blockname, $allowabort=true
* @param bool $allowabort allow user to abort script execution here
* @return void
*/
function upgrade_plugin_savepoint($result, $version, $type, $dir, $allowabort=true) {
function upgrade_plugin_savepoint($result, $version, $type, $plugin, $allowabort=true) {
$component = $type.'_'.$plugin;
if (!$result) {
throw new upgrade_exception("$type/$dir", $version);
throw new upgrade_exception($component, $version);
}
/// TODO: Check that $type is a correct type - based on get_plugin_types()
/// TODO: Check that $dir (that perhaps should be named $name) is an existing plugin
$fullname = $type.'_'.$dir;
$component = $type.'/'.$dir;
$installedversion = get_config($fullname, 'version');
$installedversion = get_config($component, 'version');
if ($installedversion >= $version) {
// Something really wrong is going on in the upgrade script
throw new downgrade_exception($component, $installedversion, $version);
}
set_config('version', $version, $fullname);
set_config('version', $version, $component);
upgrade_log(UPGRADE_LOG_NORMAL, $component, 'Upgrade savepoint reached');
// Reset upgrade timeout to default
@@ -287,14 +283,10 @@ function upgrade_plugin_savepoint($result, $version, $type, $dir, $allowabort=tr
/**
* Upgrade plugins
*
* @global object
* @global object
* @param string $type The type of plugins that should be updated (e.g. 'enrol', 'qtype')
* @param string $dir The directory where the plugins are located (e.g. 'question/questiontypes')
* @param string $return The url to prompt the user to continue to
* return void
*/
function upgrade_plugins($type, $dir, $startcallback, $endcallback, $verbose) {
function upgrade_plugins($type, $startcallback, $endcallback, $verbose) {
global $CFG, $DB;
/// special cases
@@ -304,12 +296,10 @@ function upgrade_plugins($type, $dir, $startcallback, $endcallback, $verbose) {
return upgrade_plugins_blocks($startcallback, $endcallback, $verbose);
}
$plugs = get_list_of_plugins($dir);
$plugs = get_plugin_list($type);
foreach ($plugs as $plug) {
$fullplug = $CFG->dirroot.'/'.$dir.'/'.$plug;
$component = $type.'/'.$plug; // standardised plugin name
foreach ($plugs as $plug=>$fullplug) {
$component = $type.'_'.$plug; // standardised plugin name
if (!is_readable($fullplug.'/version.php')) {
continue;
@@ -322,8 +312,8 @@ function upgrade_plugins($type, $dir, $startcallback, $endcallback, $verbose) {
throw new plugin_defective_exception($component, 'Missing version value in version.php');
}
$plugin->name = $plug; // The name MUST match the directory
$plugin->fullname = $type.'_'.$plug; // The name MUST match the directory
$plugin->name = $plug;
$plugin->fullname = $component;
if (!empty($plugin->requires)) {
@@ -399,16 +389,15 @@ function upgrade_plugins($type, $dir, $startcallback, $endcallback, $verbose) {
function upgrade_plugins_modules($startcallback, $endcallback, $verbose) {
global $CFG, $DB;
$mods = get_list_of_plugins('mod');
$mods = get_plugin_list('mod');
foreach ($mods as $mod) {
foreach ($mods as $mod=>$fullmod) {
if ($mod == 'NEWMODULE') { // Someone has unzipped the template, ignore it
continue;
}
$fullmod = $CFG->dirroot.'/mod/'.$mod;
$component = 'mod/'.$mod;
$component = 'mod_'.$mod;
if (!is_readable($fullmod.'/version.php')) {
throw new plugin_defective_exception($component, 'Missing version.php');
@@ -510,9 +499,9 @@ function upgrade_plugins_blocks($startcallback, $endcallback, $verbose) {
//Is this a first install
$first_install = null;
$blocks = get_list_of_plugins('blocks');
$blocks = get_plugin_list('block');
foreach ($blocks as $blockname) {
foreach ($blocks as $blockname=>$fullblock) {
if (is_null($first_install)) {
$first_install = ($DB->count_records('block') == 0);
@@ -522,8 +511,7 @@ function upgrade_plugins_blocks($startcallback, $endcallback, $verbose) {
continue;
}
$fullblock = $CFG->dirroot.'/blocks/'.$blockname;
$component = 'block/'.$blockname;
$component = 'block_'.$blockname;
if (!is_readable($fullblock.'/block_'.$blockname.'.php')) {
throw new plugin_defective_exception('block/'.$blockname, 'Missing main block class file.');
@@ -611,8 +599,8 @@ function upgrade_plugins_blocks($startcallback, $endcallback, $verbose) {
}
// Upgrade various componebts
events_update_definition($component);
update_capabilities($component);
events_update_definition($component);
message_update_providers($component);
$endcallback($component, false, $verbose);
@@ -636,71 +624,9 @@ function upgrade_plugins_blocks($startcallback, $endcallback, $verbose) {
}
}
/**
* This function checks to see whether local database customisations are up-to-date
* by comparing $CFG->local_version to the variable $local_version defined in
* local/version.php. If not, it looks for a function called 'xmldb_local_upgrade'
* in a file called 'local/db/upgrade.php', and if it's there calls it with the
* appropiate $oldversion parameter. Then it updates $CFG->local_version.
*
* @global object
* @global object
*/
function upgrade_local_db($startcallback, $endcallback) {
global $CFG, $DB;
// if we don't have code version, just return false
if (!file_exists($CFG->dirroot.'/local/version.php')) {
return;
}
$local_version = null;
require($CFG->dirroot.'/local/version.php'); // Get code versions
if (empty($CFG->local_version)) { // install
$startcallback('local', true);
if (file_exists($CFG->dirroot.'/local/db/install.php')) {
require_once($CFG->dirroot.'/local/db/install.php');
xmldb_local_install();
}
set_config('local_version', $local_version);
/// Install various components
events_update_definition('local');
update_capabilities('local');
message_update_providers('local');
$endcallback('local', true);
} else if ($local_version > $CFG->local_version) { // upgrade!
$startcallback('local', false);
if (file_exists($CFG->dirroot.'/local/db/upgrade.php')) {
require_once($CFG->dirroot.'/local/db/upgrade.php');
xmldb_local_upgrade($CFG->local_version);
}
set_config('local_version', $local_version);
/// Upgrade various components
events_update_definition('local');
update_capabilities('local');
message_update_providers('local');
$endcallback('local', false);
} else if ($local_version < $CFG->local_version) {
throw new downgrade_exception('local', $CFG->local_version, $local_version);
}
}
/**
* upgrade logging functions
*
* @global object
*/
function upgrade_handle_exception($ex, $plugin=null) {
global $CFG;
@@ -1040,7 +966,6 @@ function install_core($version, $verbose) {
// Continue with the instalation
events_update_definition('moodle');
message_update_providers('moodle');
message_update_providers('message');
// Write default settings unconditionlly
admin_apply_default_settings(NULL, true);
@@ -1070,6 +995,17 @@ function upgrade_core($version, $verbose) {
print_upgrade_part_start('moodle', false, $verbose);
// one time special local migration pre 2.0 upgrade script
if ($version < 2007101600) {
$pre20upgradefile = "$CFG->dirrot/local/upgrade_pre20.php";
if (file_exists($pre20upgradefile)) {
set_time_limit(0);
require($pre20upgradefile);
// reset upgrade timeout to default
upgrade_set_timeout();
}
}
$result = xmldb_main_upgrade($CFG->version);
if ($version > $CFG->version) {
// store version if not already there
@@ -1080,7 +1016,6 @@ function upgrade_core($version, $verbose) {
update_capabilities('moodle');
events_update_definition('moodle');
message_update_providers('moodle');
message_update_providers('message');
remove_dir($CFG->dataroot . '/cache', true); // flush cache
@@ -1102,7 +1037,7 @@ function upgrade_noncore($verbose) {
try {
$plugintypes = get_plugin_types();
foreach ($plugintypes as $type=>$location) {
upgrade_plugins($type, $location, 'print_upgrade_part_start', 'print_upgrade_part_end', $verbose);
upgrade_plugins($type, 'print_upgrade_part_start', 'print_upgrade_part_end', $verbose);
}
} catch (Exception $ex) {
upgrade_handle_exception($ex);
@@ -1119,14 +1054,6 @@ function upgrade_noncore($verbose) {
upgrade_handle_exception($ex);
}
}
// Check for local database customisations
try {
require_once("$CFG->dirroot/lib/locallib.php");
upgrade_local_db('print_upgrade_part_start', 'print_upgrade_part_end', $verbose);
} catch (Exception $ex) {
upgrade_handle_exception($ex);
}
}
/**
+16 -20
View File
@@ -3029,41 +3029,37 @@ function style_sheet_setup($lastmodified=0, $lifetime=300, $themename='', $force
if ($themename == 'standard') { // Add any standard styles included in any modules
if (!empty($THEME->modsheets)) { // Search for styles.php within activity modules
if ($mods = get_list_of_plugins('mod')) {
foreach ($mods as $mod) {
if (file_exists($CFG->dirroot.'/mod/'.$mod.'/styles.php')) {
$files[] = array($CFG->dirroot, '/mod/'.$mod.'/styles.php');
}
$mods = get_plugin_list('mod');
foreach ($mods as $mod => $moddir) {
if (file_exists($moddir.'/styles.php')) {
$files[] = array($moddir.'/styles.php');
}
}
}
if (!empty($THEME->blocksheets)) { // Search for styles.php within block modules
if ($mods = get_list_of_plugins('blocks')) {
foreach ($mods as $mod) {
if (file_exists($CFG->dirroot.'/blocks/'.$mod.'/styles.php')) {
$files[] = array($CFG->dirroot, '/blocks/'.$mod.'/styles.php');
}
$mods = get_plugin_list('blocks');
foreach ($mods as $mod => $moddir) {
if (file_exists($moddir.'/styles.php')) {
$files[] = array($moddir.'/styles.php');
}
}
}
if (!isset($THEME->courseformatsheets) || $THEME->courseformatsheets) { // Search for styles.php in course formats
if ($mods = get_list_of_plugins('format','',$CFG->dirroot.'/course')) {
foreach ($mods as $mod) {
if (file_exists($CFG->dirroot.'/course/format/'.$mod.'/styles.php')) {
$files[] = array($CFG->dirroot, '/course/format/'.$mod.'/styles.php');
}
$mods = get_plugin_list('format');
foreach ($mods as $mod => $moddir) {
if (file_exists($moddir.'/styles.php')) {
$files[] = array($moddir.'/styles.php');
}
}
}
if (!isset($THEME->gradereportsheets) || $THEME->gradereportsheets) { // Search for styles.php in grade reports
if ($reports = get_list_of_plugins('grade/report')) {
foreach ($reports as $report) {
if (file_exists($CFG->dirroot.'/grade/report/'.$report.'/styles.php')) {
$files[] = array($CFG->dirroot, '/grade/report/'.$report.'/styles.php');
}
$reports = get_plugin_list('gradereport');
foreach ($reports as $report => $reportdir) {
if (file_exists($reportdir.'/styles.php')) {
$files[] = array($reportdir.'/styles.php');
}
}
}
+174
View File
@@ -0,0 +1,174 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Readme file for local customisations
*
* @package local
* @copyright 2009 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
Local customisations directory
==============================
This directory is the recommended place for local customisations.
Wherever possible, customisations should be written using one of the
standard plug-in points like modules, blocks, auth plugins, themes, etc.
See also http://docs.moodle.org/en/Development:Local_customisation for more
information.
Directory structure
-------------------
This directory has standard plugin structure. All standard plugin features
are supported. There may be some extra files with special meaning in /local/.
Sample /local/ directory listing:
/local/nicehack/ - first customisation plugin
/local/otherhack/ - other customisation plugin
/local/upgrade_pre20.php - one time upgrade and migration script which is
executed before main 2.0 upgrade
/local/defaults.php - custom admin setting defaults
Custom capabilities
-------------------
Each plugin may define own capabilities. It is not recommended to define
capabilities belonging to other plugins here, but it should work too.
/local/nicehack/access.php content
<?php
$local_nicehack_capabilities = array(
'local/nicehack:nicecapability' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_SYSTEM,
),
);
?>
Custom language strings
-----------------------
If customisation needs new strings it is recommended to use normal plugin
strings.
sample language file /local/nicehack/lang/en_utf8.php
<?php
$string['hello'] = 'Hi $a';
$string['nicehack:nicecapability'] = 'Some capability';
?>
use of the new string in code
echo get_string('hello', 'local_nicehack', 'petr');
Custom admin menu items
----------------------
It is possible to add new items and categories to the admin_tree block.
I you need to define new admin setting classes put them into separate
file and require_once() from settings.php
For example if you want to add new external page use following
/local/nicehack/settings.php
<?php
$ADMIN->add('root', new admin_category('tweaks', 'Custom tweaks'));
$ADMIN->add('tweaks', new admin_externalpage('nicehackery', 'Tweak something',
$CFG->wwwroot.'/local/nicehack/setuppage.php'));
?>
Custom event handlers
---------------------
Events intended primarily for communication "core --> plugins". (It should not
be use in opposite direction!) In theory it could be also used for
"plugin --> plugin" communication too. The list of core events is documented
in lib/db/events.php
sample files
/local/nicehack/db/events.php
$handlers = array (
'user_deleted' => array (
'handlerfile' => '/local/nicehack/lib.php',
'handlerfunction' => 'nicehack_userdeleted_handler',
'schedule' => 'instant'
),
);
NOTE: events are not yet fulyl implemented in current Moodle 2.0dev.
Custom db tables
----------------
XMLDB editors is the recommended tool. Please note that modification
of core table structure is highly discouraged.
If you really really really need to modify core tables you might want to do
that in install.php and later upgrade.php
List of upgrade related files:
/local/nicehack/db/install.xml - contains XML definition of new tables
/local/nicehack/db/install.php - executed after db creation, may be also used
for general install code
/local/nicehack/db/upgrade.php - executed when version changes
/local/nicehack/version.php - version specification file
Customised site defaults
------------------------
Different default site settings can be stored in file /local/defaults.php.
These new defaults are used during installation, upgrade and later are
displayed as default values in admin settings.
Sample /local/defaults.php file content:
<?php
$defaults['moodle']['forcelogin'] = 1;
$defaults['scorm']['maxgrade'] = 20;
$defaults['moodlecourse']['numsections'] = 11;
?>
First bracket contains string from column plugin of config_plugins table.
Second bracket is the name of setting. In the admin settings UI the plugin and
name of setting is separated by "|".
Please note that not all settings are converted to admin_tree yet.
1.9.x upgrade notes
-------------------
1.9.x contains basic support for local hacks placed directly into
/local/ directory. This old local API is not supported any more in 2.0.
You an use /local/upgrade_pre20.php script for any code that needs to
be executed before the main upgrade to 2.0.
Other customisation information
===============================
Local language pack modifications
---------------------------------
Moodle supports other type of local customisation of standard language
packs. If you want to create your own language pack based on another
language create new dataroot directory with "_local" suffix, for example
following file with content changes string "Login" to "Sign in":
moodledata/lang/en_utf8_local
<?php
$string['login'] = 'Sign in';
?>
See also http://docs.moodle.org/en/Language_editing
-37
View File
@@ -1,37 +0,0 @@
<?php // $Id$
///////////////////////////////////////////////////////////////////////////
// Defines message providers (types of messages being sent) //
///////////////////////////////////////////////////////////////////////////
// //
// NOTICE OF COPYRIGHT //
// //
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// http://moodle.org //
// //
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details: //
// //
// http://www.gnu.org/copyleft/gpl.html //
// //
///////////////////////////////////////////////////////////////////////////
$messageproviders = array (
'instantmessage' => array (
)
);
?>
+10 -8
View File
@@ -2156,9 +2156,9 @@ function assignment_cron () {
global $CFG, $USER, $DB;
/// first execute all crons in plugins
if ($plugins = get_list_of_plugins('mod/assignment/type')) {
foreach ($plugins as $plugin) {
require_once("$CFG->dirroot/mod/assignment/type/$plugin/assignment.class.php");
if ($plugins = get_plugin_list('assignment')) {
foreach ($plugins as $plugin=>$dir) {
require_once("$dir/assignment.class.php");
$assignmentclass = "assignment_$plugin";
$ass = new $assignmentclass();
$ass->cron();
@@ -2966,8 +2966,8 @@ function assignment_get_coursemodule_info($coursemodule) {
*/
function assignment_types() {
$types = array();
$names = get_list_of_plugins('mod/assignment/type');
foreach ($names as $name) {
$names = get_plugin_list('assignment');
foreach ($names as $name=>$dir) {
$types[$name] = get_string('type'.$name, 'assignment');
}
asort($types);
@@ -3137,7 +3137,8 @@ function assignment_get_types() {
}
/// Drop-in extra assignment types
$assignmenttypes = get_list_of_plugins('mod/assignment/type');
$assignmenttypes = get_plugin_list('assignment');
$assignmenttypes = array_keys($assignmenttypes);
foreach ($assignmenttypes as $assignmenttype) {
if (!empty($CFG->{'assignment_hide_'.$assignmenttype})) { // Not wanted
continue;
@@ -3197,8 +3198,8 @@ function assignment_reset_userdata($data) {
$status = array();
foreach (get_list_of_plugins('mod/assignment/type') as $type) {
require_once("$CFG->dirroot/mod/assignment/type/$type/assignment.class.php");
foreach (get_plugin_list('mod/assignment/type') as $type=>$dir) {
require_once("$dir/assignment.class.php");
$assignmentclass = "assignment_$type";
$ass = new $assignmentclass();
$status = array_merge($status, $ass->reset_userdata($data));
@@ -3342,6 +3343,7 @@ function assignment_supports($feature) {
case FEATURE_COMPLETION_TRACKS_VIEWS: return true;
case FEATURE_GRADE_HAS_GRADE: return true;
case FEATURE_GRADE_OUTCOMES: return true;
case FEATURE_MOD_SUBPLUGINS: return array('assignment'=>'mod/assignment/type'); // to be hopefully removed in 2.0
default: return null;
}
+1 -1
View File
@@ -81,7 +81,7 @@
// skip restore of plugins that are not installed
static $plugins;
if (!isset($plugins)) {
$plugins = get_list_of_plugins('mod/assignment/type');
$plugins = array_keys(get_plugin_list('assignment'));
}
if (!in_array($assignment->assignmenttype, $plugins)) {
+7 -1
View File
@@ -30,9 +30,11 @@ $CFG->chat_ajax_debug = false;
$CFG->chat_use_cache = false;
// The HTML head for the message window to start with (<!-- nix --> is used to get some browsers starting with output
global $CHAT_HTMLHEAD;
$CHAT_HTMLHEAD = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><head></head>\n<body>\n\n".padding(200);
// The HTML head for the message window to start with (with js scrolling)
global $CHAT_HTMLHEAD_JS;
$CHAT_HTMLHEAD_JS = <<<EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><script type="text/javascript">
@@ -49,15 +51,19 @@ move();
</head>
<body onBlur="scroll_active = true" onFocus="scroll_active = false">
EOD;
global $CHAT_HTMLHEAD_JS;
$CHAT_HTMLHEAD_JS .= padding(200);
// The HTML code for standard empty pages (e.g. if a user was kicked out)
global $CHAT_HTMLHEAD_OUT;
$CHAT_HTMLHEAD_OUT = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><head><title>You are out!</title></head><body></body></html>";
// The HTML head for the message input page
global $CHAT_HTMLHEAD_MSGINPUT;
$CHAT_HTMLHEAD_MSGINPUT = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><head><title>Message Input</title></head><body>";
// The HTML code for the message input page, with JavaScript
global $CHAT_HTMLHEAD_MSGINPUT_JS;
$CHAT_HTMLHEAD_MSGINPUT_JS = <<<EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
@@ -78,6 +84,7 @@ $CHAT_HTMLHEAD_MSGINPUT_JS = <<<EOD
EOD;
// Dummy data that gets output to the browser as needed, in order to make it show output
global $CHAT_DUMMY_DATA;
$CHAT_DUMMY_DATA = padding(200);
/**
@@ -1164,4 +1171,3 @@ function chat_supports($feature) {
default: return null;
}
}
+9 -6
View File
@@ -21,8 +21,9 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/** @global int $COLUMN_HEIGHT */
$COLUMN_HEIGHT = 300;
/** @global int $CHOICE_COLUMN_HEIGHT */
global $CHOICE_COLUMN_HEIGHT;
$CHOICE_COLUMN_HEIGHT = 300;
define('CHOICE_PUBLISH_ANONYMOUS', '0');
define('CHOICE_PUBLISH_NAMES', '1');
@@ -36,16 +37,19 @@ define('CHOICE_DISPLAY_HORIZONTAL', '0');
define('CHOICE_DISPLAY_VERTICAL', '1');
/** @global array $CHOICE_PUBLISH */
global $CHOICE_PUBLISH;
$CHOICE_PUBLISH = array (CHOICE_PUBLISH_ANONYMOUS => get_string('publishanonymous', 'choice'),
CHOICE_PUBLISH_NAMES => get_string('publishnames', 'choice'));
/** @global array $CHOICE_SHOWRESULTS */
global $CHOICE_SHOWRESULTS;
$CHOICE_SHOWRESULTS = array (CHOICE_SHOWRESULTS_NOT => get_string('publishnot', 'choice'),
CHOICE_SHOWRESULTS_AFTER_ANSWER => get_string('publishafteranswer', 'choice'),
CHOICE_SHOWRESULTS_AFTER_CLOSE => get_string('publishafterclose', 'choice'),
CHOICE_SHOWRESULTS_ALWAYS => get_string('publishalways', 'choice'));
/** @global array $CHOICE_DISPLAY */
global $CHOICE_DISPLAY;
$CHOICE_DISPLAY = array (CHOICE_DISPLAY_HORIZONTAL => get_string('displayhorizontal', 'choice'),
CHOICE_DISPLAY_VERTICAL => get_string('displayvertical','choice'));
@@ -406,7 +410,7 @@ function choice_show_reportlink($user, $cm) {
* @return void Output is echo'd
*/
function choice_show_results($choice, $course, $cm, $allresponses, $forcepublish='') {
global $CFG, $COLUMN_HEIGHT, $FULLSCRIPT;
global $CFG, $CHOICE_COLUMN_HEIGHT, $FULLSCRIPT;
print_heading(get_string("responses", "choice"));
if (empty($forcepublish)) { //alow the publish setting to be overridden
@@ -593,7 +597,7 @@ function choice_show_results($choice, $course, $cm, $allresponses, $forcepublish
if ($choice->showunanswered) {
if ($maxcolumn) {
$height = $COLUMN_HEIGHT * ((float)$column[0] / (float)$maxcolumn);
$height = $CHOICE_COLUMN_HEIGHT * ((float)$column[0] / (float)$maxcolumn);
}
echo "<td style=\"vertical-align:bottom\" align=\"center\" class=\"col0 data\">";
echo "<img src=\"column.png\" height=\"$height\" width=\"49\" alt=\"\" />";
@@ -602,7 +606,7 @@ function choice_show_results($choice, $course, $cm, $allresponses, $forcepublish
$count = 1;
foreach ($choice->option as $optionid => $optiontext) {
if ($maxcolumn) {
$height = $COLUMN_HEIGHT * ((float)$column[$optionid] / (float)$maxcolumn);
$height = $CHOICE_COLUMN_HEIGHT * ((float)$column[$optionid] / (float)$maxcolumn);
}
echo "<td style=\"vertical-align:bottom\" align=\"center\" class=\"col$count data\">";
echo "<img src=\"column.png\" height=\"$height\" width=\"49\" alt=\"\" />";
@@ -913,4 +917,3 @@ function choice_supports($feature) {
default: return null;
}
}
?>
+1 -1
View File
@@ -86,7 +86,7 @@ class mod_choice_mod_form extends moodleform_mod {
//-------------------------------------------------------------------------------
$this->standard_coursemodule_elements($features);
$this->standard_coursemodule_elements();
//-------------------------------------------------------------------------------
$this->add_action_buttons();
}
+2 -2
View File
@@ -2677,9 +2677,10 @@ function data_supports($feature) {
case FEATURE_COMPLETION_TRACKS_VIEWS: return true;
case FEATURE_GRADE_HAS_GRADE: return true;
case FEATURE_GRADE_OUTCOMES: return true;
case FEATURE_MOD_SUBPLUGINS: return array('datafield'=>'mod/data/field', 'datapreset'=>'mod/data/preset');
default: return null;
}
}
}
/**
* @global object
@@ -3210,4 +3211,3 @@ class data_portfolio_caller extends portfolio_module_caller_base {
return array($formats, $includedfiles);
}
}
?>
+3 -2
View File
@@ -38,9 +38,11 @@ define('FEEDBACK_RESETFORM_RESET', 'feedback_reset_data_');
define('FEEDBACK_RESETFORM_DROP', 'feedback_drop_feedback_');
define('FEEDBACK_MAX_PIX_LENGTH', '400'); //max. Breite des grafischen Balkens in der Auswertung
global $feedback_names; // not nice
$feedback_names = feedback_load_feedback_items('mod/feedback/item');
//initialize the feedback-Session
//initialize the feedback-Session - not nice at all!!
global $SESSION;
if(!isset($SESSION->feedback) OR !is_object($SESSION->feedback)) {
$SESSION->feedback = new object();
}
@@ -2312,4 +2314,3 @@ function feedback_encode_target_url($url) {
return $url;
}
}
?>
-2
View File
@@ -8172,5 +8172,3 @@ class forum_portfolio_caller extends portfolio_module_caller_base {
return get_string('modulename', 'forum');
}
}
?>
+8 -1
View File
@@ -44,6 +44,7 @@ define ("HOTPOT_TEXTSOURCE_SPECIFIC", "3");
define("HOTPOT_LOCATION_COURSEFILES", "0");
define("HOTPOT_LOCATION_SITEFILES", "1");
global $HOTPOT_LOCATION;
$HOTPOT_LOCATION = array (
HOTPOT_LOCATION_COURSEFILES => get_string("coursefiles"),
HOTPOT_LOCATION_SITEFILES => get_string("sitefiles"),
@@ -59,6 +60,7 @@ define("HOTPOT_OUTPUTFORMAT_V6_PLUS", "15");
define("HOTPOT_OUTPUTFORMAT_FLASH", "20");
define("HOTPOT_OUTPUTFORMAT_MOBILE", "30");
global $HOTPOT_OUTPUTFORMAT;
$HOTPOT_OUTPUTFORMAT = array (
HOTPOT_OUTPUTFORMAT_BEST => get_string("outputformat_best", "hotpot"),
HOTPOT_OUTPUTFORMAT_V6_PLUS => get_string("outputformat_v6_plus", "hotpot"),
@@ -70,6 +72,7 @@ $HOTPOT_OUTPUTFORMAT = array (
HOTPOT_OUTPUTFORMAT_FLASH => get_string("outputformat_flash", "hotpot"),
HOTPOT_OUTPUTFORMAT_MOBILE => get_string("outputformat_mobile", "hotpot"),
);
global $HOTPOT_OUTPUTFORMAT_DIR;
$HOTPOT_OUTPUTFORMAT_DIR = array (
HOTPOT_OUTPUTFORMAT_V6_PLUS => 'v6',
HOTPOT_OUTPUTFORMAT_V6 => 'v6',
@@ -96,6 +99,7 @@ define("HOTPOT_NAVIGATION_BUTTONS", "4");
define("HOTPOT_NAVIGATION_GIVEUP", "5");
define("HOTPOT_NAVIGATION_NONE", "6");
global $HOTPOT_NAVIGATION;
$HOTPOT_NAVIGATION = array (
HOTPOT_NAVIGATION_BAR => get_string("navigation_bar", "hotpot"),
HOTPOT_NAVIGATION_FRAME => get_string("navigation_frame", "hotpot"),
@@ -114,6 +118,7 @@ define("HOTPOT_JQUIZ", "6");
define("HOTPOT_TEXTOYS_RHUBARB", "7");
define("HOTPOT_TEXTOYS_SEQUITUR", "8");
global $HOTPOT_QUIZTYPE;
$HOTPOT_QUIZTYPE = array(
HOTPOT_JCB => 'JCB',
HOTPOT_JCLOZE => 'JCloze',
@@ -135,6 +140,7 @@ define("HOTPOT_GRADEMETHOD_AVERAGE", "2");
define("HOTPOT_GRADEMETHOD_FIRST", "3");
define("HOTPOT_GRADEMETHOD_LAST", "4");
global $HOTPOT_GRADEMETHOD;
$HOTPOT_GRADEMETHOD = array (
HOTPOT_GRADEMETHOD_HIGHEST => get_string("gradehighest", "quiz"),
HOTPOT_GRADEMETHOD_AVERAGE => get_string("gradeaverage", "quiz"),
@@ -147,6 +153,7 @@ define("HOTPOT_STATUS_TIMEDOUT", "2");
define("HOTPOT_STATUS_ABANDONED", "3");
define("HOTPOT_STATUS_COMPLETED", "4");
global $HOTPOT_STATUS;
$HOTPOT_STATUS = array (
HOTPOT_STATUS_INPROGRESS => get_string("inprogress", "hotpot"),
HOTPOT_STATUS_TIMEDOUT => get_string("timedout", "hotpot"),
@@ -160,6 +167,7 @@ define("HOTPOT_FEEDBACK_FORMMAIL", "2");
define("HOTPOT_FEEDBACK_MOODLEFORUM", "3");
define("HOTPOT_FEEDBACK_MOODLEMESSAGING", "4");
global $HOTPOT_FEEDBACK;
$HOTPOT_FEEDBACK = array (
HOTPOT_FEEDBACK_NONE => get_string("feedbacknone", "hotpot"),
HOTPOT_FEEDBACK_WEBPAGE => get_string("feedbackwebpage", "hotpot"),
@@ -2974,4 +2982,3 @@ function hotpot_reset_course_form_definition(&$mform) {
function hotpot_reset_course_form_defaults($course) {
return array('reset_hotpot_deleteallattempts' => 1);
}
?>
-1
View File
@@ -224,4 +224,3 @@ function label_supports($feature) {
}
}
?>
-2
View File
@@ -811,5 +811,3 @@ function lesson_supports($feature) {
default: return null;
}
}
?>
+1 -1
View File
@@ -1386,6 +1386,7 @@ function quiz_supports($feature) {
case FEATURE_COMPLETION_TRACKS_VIEWS: return true;
case FEATURE_GRADE_HAS_GRADE: return true;
case FEATURE_GRADE_OUTCOMES: return true;
case FEATURE_MOD_SUBPLUGINS: return array('quiz'=>'mod/quiz/report');
default: return null;
}
@@ -1405,4 +1406,3 @@ function quiz_get_extra_capabilities() {
$caps[] = 'moodle/site:accessallgroups';
return $caps;
}
+2 -2
View File
@@ -355,7 +355,7 @@ function quiz_report_list($context){
}
$reports = $DB->get_records('quiz_report', null, 'displayorder DESC', 'name, capability');
$reportdirs = get_list_of_plugins("mod/quiz/report");
$reportdirs = get_plugin_list("quiz");
//order the reports tab in descending order of displayorder
$reportcaps = array();
if ($reports){
@@ -367,7 +367,7 @@ function quiz_report_list($context){
}
//add any other reports on the end
foreach ($reportdirs as $reportname) {
foreach ($reportdirs as $reportname => $reportdir) {
if (!isset($reportcaps[$reportname])) {
$reportcaps[$reportname]= null;
}
+3 -3
View File
@@ -13,9 +13,9 @@ require_once($CFG->dirroot . '/mod/quiz/settingslib.php');
// First get a list of quiz reports with there own settings pages. If there none,
// we use a simpler overall menu structure.
$reportsbyname = array();
if ($reports = get_list_of_plugins('mod/quiz/report')) {
foreach ($reports as $report) {
if (file_exists($CFG->dirroot . "/mod/quiz/report/$report/settings.php")) {
if ($reports = get_plugin_list('quiz')) {
foreach ($reports as $report => $reportdir) {
if (file_exists("$reportdir/settings.php")) {
$strreportname = get_string($report . 'report', 'quiz_'.$report);
// Deal with reports which are lacking the language string
if ($strreportname[0] == '[') {
+3 -4
View File
@@ -661,8 +661,8 @@ function resource_get_types() {
}
/// Drop-in extra resource types
$resourcetypes = get_list_of_plugins('mod/resource/type');
foreach ($resourcetypes as $resourcetype) {
$resourcetypes = get_plugin_list('resource');
foreach ($resourcetypes as $resourcetype => $dir) {
if (!empty($CFG->{'resource_hide_'.$resourcetype})) { // Not wanted
continue;
}
@@ -986,6 +986,7 @@ function resource_supports($feature) {
case FEATURE_COMPLETION_TRACKS_VIEWS: return true;
case FEATURE_GRADE_HAS_GRADE: return false;
case FEATURE_GRADE_OUTCOMES: return false;
case FEATURE_MOD_SUBPLUGINS: return array('resource'=>'mod/resource/type'); // to be removed in 2.0
default: return null;
}
@@ -1006,5 +1007,3 @@ function resource_get_name($type) {
}
return $name;
}
?>
-1
View File
@@ -916,4 +916,3 @@ function scorm_supports($feature) {
default: return null;
}
}
+4 -1
View File
@@ -25,16 +25,19 @@
* Graph size
* @global int $SURVEY_GHEIGHT
*/
global $SURVEY_GHEIGHT;
$SURVEY_GHEIGHT = 500;
/**
* Graph size
* @global int $SURVEY_GWIDTH
*/
global $SURVEY_GWIDTH;
$SURVEY_GWIDTH = 900;
/**
* Question Type
* @global array $SURVEY_QTYPE
*/
global $SURVEY_QTYPE;
$SURVEY_QTYPE = array (
"-3" => "Virtual Actual and Preferred",
"-2" => "Virtual Preferred",
@@ -787,4 +790,4 @@ function survey_supports($feature) {
default: return null;
}
}
}
+2 -5
View File
@@ -24,11 +24,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/** @global int $wiki_CONSTANT */
$wiki_CONSTANT = 7; /// for example
/** @global object $site */
$site = get_site();
/** @global array $WIKI_TYPES */
global $WIKI_TYPES;
$WIKI_TYPES = array ('teacher' => get_string('defaultcourseteacher'),
'group' => get_string('groups',"wiki"),
'student' => get_string('defaultcoursestudent') );
@@ -2137,4 +2134,4 @@ function wiki_supports($feature) {
default: return null;
}
}
}
+2 -1
View File
@@ -65,7 +65,8 @@
//Check name of module
if (!$isblog) {
$mods = get_list_of_plugins('mod');
$mods = get_plugin_list('mod');
$mods = array_keys($mods);
if (!in_array(strtolower($modulename), $mods)) {
rss_not_found();
}
+4 -4
View File
@@ -56,7 +56,7 @@
print_heading($strthemes);
$themes = get_list_of_plugins("theme");
$themes = get_plugin_list("theme");
$sesskey = sesskey();
echo "<table style=\"margin-left:auto;margin-right:auto;\" cellpadding=\"7\" cellspacing=\"5\">\n";
@@ -68,15 +68,15 @@
$original_theme = fullclone($THEME);
foreach ($themes as $theme) {
foreach ($themes as $theme => $themedir) {
unset($THEME);
if (!file_exists($CFG->themedir.'/'.$theme.'/config.php')) { // bad folder
if (!file_exists($themedir.'/config.php')) { // bad folder
continue;
}
include($CFG->themedir.'/'.$theme.'/config.php');
include($themedir.'/config.php');
$readme = '';
$screenshot = '';
+3 -3
View File
@@ -24,10 +24,10 @@ class user_editadvanced_form extends moodleform {
$mform->addRule('username', $strrequired, 'required', null, 'client');
$mform->setType('username', PARAM_RAW);
$modules = get_list_of_plugins('auth');
$auths = get_plugin_list('auth');
$auth_options = array();
foreach ($modules as $module) {
$auth_options[$module] = auth_get_plugin_title ($module);
foreach ($auths as $auth => $unused) {
$auth_options[$auth] = auth_get_plugin_title($auth);
}
$mform->addElement('select', 'auth', get_string('chooseauthmethod','auth'), $auth_options);
$mform->setHelpButton('auth', array('authchange', get_string('chooseauthmethod','auth')));
+2 -2
View File
@@ -115,9 +115,9 @@ class user_filtering {
case 'lastaccess': return new user_filter_date('lastaccess', get_string('lastaccess'), $advanced, 'lastaccess');
case 'lastlogin': return new user_filter_date('lastlogin', get_string('lastlogin'), $advanced, 'lastlogin');
case 'auth':
$plugins = get_list_of_plugins('auth');
$plugins = get_plugin_list('auth');
$choices = array();
foreach ($plugins as $auth) {
foreach ($plugins as $auth => $unused) {
$choices[$auth] = auth_get_plugin_title ($auth);
}
return new user_filter_simpleselect('auth', get_string('authentication'), $advanced, 'auth', $choices);
+1 -1
View File
@@ -6,7 +6,7 @@
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
$version = 2009061600; // YYYYMMDD = date of the last version bump
$version = 2009061706; // YYYYMMDD = date of the last version bump
// XX = daily increments
$release = '2.0 dev (Build: 20090619)'; // Human-friendly version name