Adding settings interfaces to Moodle is a little cryptic.
From my short foray into doing so I have determined that the settings are defined in the settings.php file in the base directory of your module/plugin.
Admin menu entries
Adding a new entry into the “Site Administration” menu is done by instantiating a new settings page object and attaching it to the tree through the global $ADMIN object.
// Instantiate new settings page with the internal name 'local_examplecom_plugin' // and the menu display name 'Example.com Plugin' $settings = new admin_settingpage('local_examplecom_plugin', 'Example.com Plugin'); // Add the new settings page to the settings tree under the 'localplugins' branch // which is located in 'Site administration->Plugins->Local plugins' $ADMIN->add('localplugins', $settings); // Add controls here
For local plugins the tree location value is ‘localplugins’ but other values can be substituted and they are not consistent as the below snippet shows:
'appearance' -> 'Site administration->Appearance' 'themes' -> 'Site administration->Appearance->Themes' 'modsettings' -> 'Site administration->Plugins->Activity modules' 'authsettings' -> 'Site administration->Plugins->Authentication' 'enrolments' -> 'Site administration->Plugins->Enrolments'
Admin menu categories
You can also define new collapsible menu items by instantiating a new admin_category object and then use its internal name to attach items underneath it.
$ADMIN->add('localplugin', new admin_category('internal_category_name', 'Example.com')); $settings = new admin_settingpage('local_examplecom_plugin_settings1', 'Some settings'); $ADMIN->add('internal_category_name', $settings); // Add controls here $settings = new admin_settingpage('local_examplecom_plugin_settings2', 'Some more settings'); $ADMIN->add('internal_category_name', $settings); // Add controls here
Settings form controls
There are a variety of different controls that can be added but they all follow a fairly common format:
new admin_setting_config*($setting_internal_name, $setting_title, $setting_description, $default_value, $validation_type); *can be any of a variety of control types including but not limited to htmleditor, text, checkbox etc.
$setting_internal_name and $setting_title seem to be the only mandatory ones.
$setting_internal_name should be either ‘plugin_name/setting_name’ for plugin only settings and just ‘setting_name’ for global $CFG related settings.
Adding a control to the form requires that you instantiate the control and add it to the admin_settingpage by calling the add method:
// See previous examples for where this fits in. // Add controls here $settings->add(new admin_setting_confightmleditor('local_examplecom/setting_one', 'Setting title', 'Setting one description', 'this is the default value')); $settings->add(new admin_setting_confightmleditor('local_examplecom/eats_grass', 'Grass preference', 'What type of grass does it prefer')); $settings->add(new admin_setting_confightmleditor('a_global_setting', 'Not plugin specific', 'This is accessed through $CFG->a_global_setting'));