mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
MDL-49423 admin: Support optgroup in admin_setting_configmultiselect
This commit is contained in:
parent
25905de518
commit
1295885084
4 changed files with 133 additions and 3 deletions
71
admin/templates/setting_configmultiselect_optgroup.mustache
Normal file
71
admin/templates/setting_configmultiselect_optgroup.mustache
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
{{!
|
||||||
|
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/>.
|
||||||
|
}}
|
||||||
|
{{!
|
||||||
|
@template core_admin/setting_configmultiselect_optgroup
|
||||||
|
|
||||||
|
Admin multiselect setting template with optgroup support.
|
||||||
|
|
||||||
|
Context variables required for this template:
|
||||||
|
* name - form element name
|
||||||
|
* id - element id
|
||||||
|
* size - element size
|
||||||
|
* options - list of options not grouped
|
||||||
|
* optgroups - list of options grouped containing the group label and for each option: name, value, selected
|
||||||
|
|
||||||
|
Example context (json):
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"id": "test0",
|
||||||
|
"size": "3",
|
||||||
|
"options": [
|
||||||
|
{ "name": "Option 1", "value": "V", "selected": false },
|
||||||
|
{ "name": "Option 2", "value": "V", "selected": true }
|
||||||
|
],
|
||||||
|
"optgroups": [
|
||||||
|
{
|
||||||
|
"label": "Group 1",
|
||||||
|
"options": [
|
||||||
|
{ "name": "Option 3", "value": "V", "selected": false },
|
||||||
|
{ "name": "Option 4", "value": "V", "selected": true }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Group 2",
|
||||||
|
"options": [
|
||||||
|
{ "name": "Option 5", "value": "V", "selected": false },
|
||||||
|
{ "name": "Option 6", "value": "V", "selected": true }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
<div class="form-select">
|
||||||
|
<input type="hidden" name="{{name}}[xxxxx]" value="1">
|
||||||
|
<select id="{{id}}" name="{{name}}[]" size="{{size}}" multiple>
|
||||||
|
{{#options}}
|
||||||
|
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
|
||||||
|
{{/options}}
|
||||||
|
{{#optgroups}}
|
||||||
|
<optgroup label="{{label}}">
|
||||||
|
{{#options}}
|
||||||
|
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
|
||||||
|
{{/options}}
|
||||||
|
</optgroup>
|
||||||
|
{{/optgroups}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
|
@ -2,8 +2,9 @@ This files describes API changes in /admin/*.
|
||||||
|
|
||||||
=== 3.3 ===
|
=== 3.3 ===
|
||||||
|
|
||||||
* The admin setting admin_setting_configselect now support the optgroup tag. Grouping of options can be created with this new tag.
|
* The admin settings admin_setting_configselect and admin_setting_configmultiselect now support the optgroup tag.
|
||||||
For using this new option, the option parameters needs the Group names as indexes:
|
Grouping of options can be created with this new tag.
|
||||||
|
For using it, the option parameters needs the Group names as indexes:
|
||||||
[
|
[
|
||||||
"Spain" => ["madrid" => "Madrid", "barcelona" => "Barcelona"],
|
"Spain" => ["madrid" => "Madrid", "barcelona" => "Barcelona"],
|
||||||
"France" => ["paris" => "Paris", "marseille" => "Marseille"],
|
"France" => ["paris" => "Paris", "marseille" => "Marseille"],
|
||||||
|
|
|
@ -3255,6 +3255,29 @@ class admin_setting_configmultiselect extends admin_setting_configselect {
|
||||||
|
|
||||||
$defaults = [];
|
$defaults = [];
|
||||||
$options = [];
|
$options = [];
|
||||||
|
$template = 'core_admin/setting_configmultiselect';
|
||||||
|
|
||||||
|
if (!empty($this->optgroups)) {
|
||||||
|
$optgroups = [];
|
||||||
|
foreach ($this->optgroups as $label => $choices) {
|
||||||
|
$optgroup = array('label' => $label, 'options' => []);
|
||||||
|
foreach ($choices as $value => $name) {
|
||||||
|
if (in_array($value, $default)) {
|
||||||
|
$defaults[] = $name;
|
||||||
|
}
|
||||||
|
$optgroup['options'][] = [
|
||||||
|
'value' => $value,
|
||||||
|
'name' => $name,
|
||||||
|
'selected' => in_array($value, $data)
|
||||||
|
];
|
||||||
|
unset($this->choices[$value]);
|
||||||
|
}
|
||||||
|
$optgroups[] = $optgroup;
|
||||||
|
}
|
||||||
|
$context->optgroups = $optgroups;
|
||||||
|
$template = 'core_admin/setting_configmultiselect_optgroup';
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($this->choices as $value => $name) {
|
foreach ($this->choices as $value => $name) {
|
||||||
if (in_array($value, $default)) {
|
if (in_array($value, $default)) {
|
||||||
$defaults[] = $name;
|
$defaults[] = $name;
|
||||||
|
@ -3275,7 +3298,7 @@ class admin_setting_configmultiselect extends admin_setting_configselect {
|
||||||
$defaultinfo = get_string('none');
|
$defaultinfo = get_string('none');
|
||||||
}
|
}
|
||||||
|
|
||||||
$element = $OUTPUT->render_from_template('core_admin/setting_configmultiselect', $context);
|
$element = $OUTPUT->render_from_template($template, $context);
|
||||||
|
|
||||||
return format_admin_setting($this, $this->visiblename, $element, $this->description, true, '', $defaultinfo, $query);
|
return format_admin_setting($this, $this->visiblename, $element, $this->description, true, '', $defaultinfo, $query);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
{{!
|
||||||
|
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/>.
|
||||||
|
}}
|
||||||
|
{{!
|
||||||
|
Setting configmultiselect with optgroup support.
|
||||||
|
}}
|
||||||
|
<div class="form-select">
|
||||||
|
<input type="hidden" name="{{name}}[xxxxx]" value="1">
|
||||||
|
<select id="{{id}}" name="{{name}}[]" size="{{size}}" class="form-control" multiple>
|
||||||
|
{{#options}}
|
||||||
|
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
|
||||||
|
{{/options}}
|
||||||
|
{{#optgroups}}
|
||||||
|
<optgroup label="{{label}}">
|
||||||
|
{{#options}}
|
||||||
|
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
|
||||||
|
{{/options}}
|
||||||
|
</optgroup>
|
||||||
|
{{/optgroups}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue