From 1295885084577832f7b537aebb2b8cb4cb7e3244 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Fri, 30 Dec 2016 14:00:40 +0100 Subject: [PATCH] MDL-49423 admin: Support optgroup in admin_setting_configmultiselect --- ...etting_configmultiselect_optgroup.mustache | 71 +++++++++++++++++++ admin/upgrade.txt | 5 +- lib/adminlib.php | 25 ++++++- ...etting_configmultiselect_optgroup.mustache | 35 +++++++++ 4 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 admin/templates/setting_configmultiselect_optgroup.mustache create mode 100644 theme/boost/templates/core_admin/setting_configmultiselect_optgroup.mustache diff --git a/admin/templates/setting_configmultiselect_optgroup.mustache b/admin/templates/setting_configmultiselect_optgroup.mustache new file mode 100644 index 00000000000..9fa61c54707 --- /dev/null +++ b/admin/templates/setting_configmultiselect_optgroup.mustache @@ -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 . +}} +{{! + @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 } + ] + } + ] + } +}} +
+ + +
+ diff --git a/admin/upgrade.txt b/admin/upgrade.txt index 898e1d95e71..6d83d20bd7a 100644 --- a/admin/upgrade.txt +++ b/admin/upgrade.txt @@ -2,8 +2,9 @@ This files describes API changes in /admin/*. === 3.3 === -* The admin setting admin_setting_configselect now support the optgroup tag. Grouping of options can be created with this new tag. - For using this new option, the option parameters needs the Group names as indexes: +* The admin settings admin_setting_configselect and admin_setting_configmultiselect now support the optgroup tag. + 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"], "France" => ["paris" => "Paris", "marseille" => "Marseille"], diff --git a/lib/adminlib.php b/lib/adminlib.php index 3cd2933d3d2..1915fa0db87 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -3255,6 +3255,29 @@ class admin_setting_configmultiselect extends admin_setting_configselect { $defaults = []; $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) { if (in_array($value, $default)) { $defaults[] = $name; @@ -3275,7 +3298,7 @@ class admin_setting_configmultiselect extends admin_setting_configselect { $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); } diff --git a/theme/boost/templates/core_admin/setting_configmultiselect_optgroup.mustache b/theme/boost/templates/core_admin/setting_configmultiselect_optgroup.mustache new file mode 100644 index 00000000000..6398e7550c1 --- /dev/null +++ b/theme/boost/templates/core_admin/setting_configmultiselect_optgroup.mustache @@ -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 . +}} +{{! + Setting configmultiselect with optgroup support. +}} +
+ + +
+