MDL-30408 Allow modules the choice to not appear on 'Add a...' lists
This is useful for modules which are created by the system and are not supposed to be created by users. There are various reasons for doing this in third-party modules.
This commit is contained in:
@@ -270,7 +270,15 @@ class course_edit_form extends moodleform {
|
||||
}
|
||||
|
||||
$mods = array(0=>get_string('allownone'));
|
||||
$mods += $DB->get_records_menu('modules', array('visible'=>1), 'name', 'id, name');
|
||||
$allmods = $DB->get_records_menu('modules', array('visible' => 1),
|
||||
'name', 'id, name');
|
||||
foreach ($allmods as $key => $value) {
|
||||
// Add module to list unless it cannot be added by users anyway
|
||||
if (plugin_supports('mod', $value, FEATURE_MOD_ARCHETYPE, MOD_ARCHETYPE_OTHER) !==
|
||||
MOD_ARCHETYPE_SYSTEM) {
|
||||
$mods[$key] = get_string('pluginname', $value);
|
||||
}
|
||||
}
|
||||
$mform->addElement('select', 'allowedmods', get_string('to'), $mods, array('multiple'=>'multiple', 'size'=>'10'));
|
||||
$mform->disabledIf('allowedmods', 'restrictmodules', 'eq', 0);
|
||||
// defaults are already in $course
|
||||
|
||||
@@ -1853,6 +1853,8 @@ function print_section_add_menus($course, $section, $modnames, $vertical=false,
|
||||
$archetype = plugin_supports('mod', $modname, FEATURE_MOD_ARCHETYPE, MOD_ARCHETYPE_OTHER);
|
||||
if ($archetype == MOD_ARCHETYPE_RESOURCE) {
|
||||
$resources[$urlbase.$modname] = $modnamestr;
|
||||
} else if ($archetype === MOD_ARCHETYPE_SYSTEM) {
|
||||
// System modules cannot be added by user, do not add to dropdown
|
||||
} else {
|
||||
// all other archetypes are considered activity
|
||||
$activities[$urlbase.$modname] = $modnamestr;
|
||||
|
||||
+13
-2
@@ -7896,6 +7896,8 @@ class admin_setting_devicedetectregex extends admin_setting {
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class admin_setting_configmultiselect_modules extends admin_setting_configmultiselect {
|
||||
private $excludesystem;
|
||||
|
||||
/**
|
||||
* Calls parent::__construct - note array $choices is not required
|
||||
*
|
||||
@@ -7903,9 +7905,12 @@ class admin_setting_configmultiselect_modules extends admin_setting_configmultis
|
||||
* @param string $visiblename localised setting name
|
||||
* @param string $description setting description
|
||||
* @param array $defaultsetting a plain array of default module ids
|
||||
* @param bool $excludesystem If true, excludes modules with 'system' archetype
|
||||
*/
|
||||
public function __construct($name, $visiblename, $description, $defaultsetting = array()) {
|
||||
public function __construct($name, $visiblename, $description, $defaultsetting = array(),
|
||||
$excludesystem = true) {
|
||||
parent::__construct($name, $visiblename, $description, $defaultsetting, null);
|
||||
$this->excludesystem = $excludesystem;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -7922,8 +7927,14 @@ class admin_setting_configmultiselect_modules extends admin_setting_configmultis
|
||||
global $CFG, $DB;
|
||||
$records = $DB->get_records('modules', array('visible'=>1), 'name');
|
||||
foreach ($records as $record) {
|
||||
// Exclude modules if the code doesn't exist
|
||||
if (file_exists("$CFG->dirroot/mod/$record->name/lib.php")) {
|
||||
$this->choices[$record->id] = $record->name;
|
||||
// Also exclude system modules (if specified)
|
||||
if (!($this->excludesystem &&
|
||||
plugin_supports('mod', $record->name, FEATURE_MOD_ARCHETYPE) ===
|
||||
MOD_ARCHETYPE_SYSTEM)) {
|
||||
$this->choices[$record->id] = $record->name;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -417,6 +417,8 @@ define('MOD_ARCHETYPE_OTHER', 0);
|
||||
define('MOD_ARCHETYPE_RESOURCE', 1);
|
||||
/** Assignment module archetype */
|
||||
define('MOD_ARCHETYPE_ASSIGNMENT', 2);
|
||||
/** System (not user-addable) module archetype */
|
||||
define('MOD_ARCHETYPE_SYSTEM', 3);
|
||||
|
||||
/**
|
||||
* Security token used for allowing access
|
||||
|
||||
Reference in New Issue
Block a user