diff --git a/.upgradenotes/MDL-83641-2024112721011477.yml b/.upgradenotes/MDL-83641-2024112721011477.yml new file mode 100644 index 00000000000..fcbc790be58 --- /dev/null +++ b/.upgradenotes/MDL-83641-2024112721011477.yml @@ -0,0 +1,8 @@ +issueNumber: MDL-83641 +notes: + core_form: + - message: >- + The `cohort` form element now accepts new `includes` option, which is + passed to the corresponding external service to determine which cohorts + to return (self, parents, all) + type: changed diff --git a/admin/tool/cohortroles/classes/form/assign_role_cohort.php b/admin/tool/cohortroles/classes/form/assign_role_cohort.php index 5b1c56d8031..81f31177e88 100644 --- a/admin/tool/cohortroles/classes/form/assign_role_cohort.php +++ b/admin/tool/cohortroles/classes/form/assign_role_cohort.php @@ -63,11 +63,9 @@ class assign_role_cohort extends moodleform { $mform->addElement('select', 'roleid', get_string('selectrole', 'tool_cohortroles'), $options); $mform->addRule('roleid', null, 'required'); - $context = context_system::instance(); $options = array( 'multiple' => true, - 'data-contextid' => $context->id, - 'data-includes' => 'all' + 'includes' => 'all', ); $mform->addElement('cohort', 'cohortids', get_string('selectcohorts', 'tool_cohortroles'), $options); $mform->addRule('cohortids', null, 'required'); diff --git a/lib/amd/build/form-cohort-selector.min.js b/lib/amd/build/form-cohort-selector.min.js index cc3a615e6cb..5e74077deb9 100644 --- a/lib/amd/build/form-cohort-selector.min.js +++ b/lib/amd/build/form-cohort-selector.min.js @@ -6,6 +6,6 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 3.1 */ -define("core/form-cohort-selector",["core/ajax","jquery"],(function(ajax,$){return{processResults:function(selector,data){var results=[],i=0,excludelist=String($(selector).data("exclude")).split(",");for(i=0;i.\n\n/**\n * Course selector adaptor for auto-complete form element.\n *\n * @module core/form-cohort-selector\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['core/ajax', 'jquery'], function(ajax, $) {\n\n return {\n // Public variables and functions.\n processResults: function(selector, data) {\n // Mangle the results into an array of objects.\n var results = [];\n var i = 0;\n var excludelist = String($(selector).data('exclude')).split(',');\n\n for (i = 0; i < data.cohorts.length; i++) {\n if (excludelist.indexOf(String(data.cohorts[i].id)) === -1) {\n results.push({value: data.cohorts[i].id, label: data.cohorts[i].name});\n }\n }\n return results;\n },\n\n transport: function(selector, query, success, failure) {\n var el = $(selector);\n\n // Parse some data-attributes from the form element.\n\n // Build the query.\n var promises = null;\n\n if (typeof query === \"undefined\") {\n query = '';\n }\n var contextid = el.data('contextid');\n\n var searchargs = {\n query: query,\n includes: 'parents',\n limitfrom: 0,\n limitnum: 100,\n context: {contextid: contextid}\n };\n\n var calls = [{\n methodname: 'core_cohort_search_cohorts', args: searchargs\n }];\n\n // Go go go!\n promises = ajax.call(calls);\n $.when.apply($.when, promises).done(function(data) {\n success(data);\n }).fail(failure);\n }\n };\n});\n"],"names":["define","ajax","$","processResults","selector","data","results","i","excludelist","String","split","cohorts","length","indexOf","id","push","value","label","name","transport","query","success","failure","promises","calls","methodname","args","includes","limitfrom","limitnum","context","contextid","call","when","apply","done","fail"],"mappings":";;;;;;;;AAuBAA,mCAAO,CAAC,YAAa,WAAW,SAASC,KAAMC,SAEpC,CAEHC,eAAgB,SAASC,SAAUC,UAE3BC,QAAU,GACVC,EAAI,EACJC,YAAcC,OAAOP,EAAEE,UAAUC,KAAK,YAAYK,MAAM,SAEvDH,EAAI,EAAGA,EAAIF,KAAKM,QAAQC,OAAQL,KACwB,IAArDC,YAAYK,QAAQJ,OAAOJ,KAAKM,QAAQJ,GAAGO,MAC3CR,QAAQS,KAAK,CAACC,MAAOX,KAAKM,QAAQJ,GAAGO,GAAIG,MAAOZ,KAAKM,QAAQJ,GAAGW,cAGjEZ,SAGXa,UAAW,SAASf,SAAUgB,MAAOC,QAASC,aAMtCC,cAEiB,IAAVH,QACPA,MAAQ,QAYRI,MAAQ,CAAC,CACTC,WAAY,6BAA8BC,KAT7B,CACbN,MAAOA,MACPO,SAAU,UACVC,UAAW,EACXC,SAAU,IACVC,QAAS,CAACC,UAjBL7B,EAAEE,UAUQC,KAAK,iBAexBkB,SAAWtB,KAAK+B,KAAKR,OACrBtB,EAAE+B,KAAKC,MAAMhC,EAAE+B,KAAMV,UAAUY,MAAK,SAAS9B,MACzCgB,QAAQhB,SACT+B,KAAKd"} \ No newline at end of file +{"version":3,"file":"form-cohort-selector.min.js","sources":["../src/form-cohort-selector.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Course selector adaptor for auto-complete form element.\n *\n * @module core/form-cohort-selector\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['core/ajax', 'jquery'], function(ajax, $) {\n\n return {\n // Public variables and functions.\n processResults: function(selector, data) {\n // Mangle the results into an array of objects.\n var results = [];\n var i = 0;\n var excludelist = String($(selector).data('exclude')).split(',');\n\n for (i = 0; i < data.cohorts.length; i++) {\n if (excludelist.indexOf(String(data.cohorts[i].id)) === -1) {\n results.push({value: data.cohorts[i].id, label: data.cohorts[i].name});\n }\n }\n return results;\n },\n\n transport: function(selector, query, success, failure) {\n var el = $(selector);\n\n // Parse some data-attributes from the form element.\n\n // Build the query.\n var promises = null;\n\n if (typeof query === \"undefined\") {\n query = '';\n }\n\n var includes = el.data('includes');\n var contextid = el.data('contextid');\n\n var searchargs = {\n query: query,\n includes: includes,\n limitfrom: 0,\n limitnum: 100,\n context: {contextid: contextid}\n };\n\n var calls = [{\n methodname: 'core_cohort_search_cohorts', args: searchargs\n }];\n\n // Go go go!\n promises = ajax.call(calls);\n $.when.apply($.when, promises).done(function(data) {\n success(data);\n }).fail(failure);\n }\n };\n});\n"],"names":["define","ajax","$","processResults","selector","data","results","i","excludelist","String","split","cohorts","length","indexOf","id","push","value","label","name","transport","query","success","failure","promises","el","calls","methodname","args","includes","limitfrom","limitnum","context","contextid","call","when","apply","done","fail"],"mappings":";;;;;;;;AAuBAA,mCAAO,CAAC,YAAa,WAAW,SAASC,KAAMC,SAEpC,CAEHC,eAAgB,SAASC,SAAUC,UAE3BC,QAAU,GACVC,EAAI,EACJC,YAAcC,OAAOP,EAAEE,UAAUC,KAAK,YAAYK,MAAM,SAEvDH,EAAI,EAAGA,EAAIF,KAAKM,QAAQC,OAAQL,KACwB,IAArDC,YAAYK,QAAQJ,OAAOJ,KAAKM,QAAQJ,GAAGO,MAC3CR,QAAQS,KAAK,CAACC,MAAOX,KAAKM,QAAQJ,GAAGO,GAAIG,MAAOZ,KAAKM,QAAQJ,GAAGW,cAGjEZ,SAGXa,UAAW,SAASf,SAAUgB,MAAOC,QAASC,aAMtCC,SALAC,GAAKtB,EAAEE,eAOU,IAAVgB,QACPA,MAAQ,QAcRK,MAAQ,CAAC,CACTC,WAAY,6BAA8BC,KAT7B,CACbP,MAAOA,MACPQ,SALWJ,GAAGnB,KAAK,YAMnBwB,UAAW,EACXC,SAAU,IACVC,QAAS,CAACC,UAPER,GAAGnB,KAAK,iBAexBkB,SAAWtB,KAAKgC,KAAKR,OACrBvB,EAAEgC,KAAKC,MAAMjC,EAAEgC,KAAMX,UAAUa,MAAK,SAAS/B,MACzCgB,QAAQhB,SACTgC,KAAKf"} \ No newline at end of file diff --git a/lib/amd/src/form-cohort-selector.js b/lib/amd/src/form-cohort-selector.js index 23d98068be8..0930f392e28 100644 --- a/lib/amd/src/form-cohort-selector.js +++ b/lib/amd/src/form-cohort-selector.js @@ -50,11 +50,13 @@ define(['core/ajax', 'jquery'], function(ajax, $) { if (typeof query === "undefined") { query = ''; } + + var includes = el.data('includes'); var contextid = el.data('contextid'); var searchargs = { query: query, - includes: 'parents', + includes: includes, limitfrom: 0, limitnum: 100, context: {contextid: contextid} diff --git a/lib/form/cohort.php b/lib/form/cohort.php index bbe0c406f29..64bc0723f04 100644 --- a/lib/form/cohort.php +++ b/lib/form/cohort.php @@ -45,6 +45,11 @@ class MoodleQuickForm_cohort extends MoodleQuickForm_autocomplete { */ protected $exclude = array(); + /** + * @var string $includes One of self/parents/all + */ + protected $includes = 'parents'; + /** * @var int $contextid The context id to fetch cohorts in. */ @@ -86,6 +91,9 @@ class MoodleQuickForm_cohort extends MoodleQuickForm_autocomplete { $this->exclude = array($this->exclude); } } + if (isset($options['includes'])) { + $this->includes = $options['includes']; + } if (isset($options['requiredcapabilities'])) { $this->requiredcapabilities = $options['requiredcapabilities']; } @@ -93,6 +101,7 @@ class MoodleQuickForm_cohort extends MoodleQuickForm_autocomplete { $validattributes = array( 'ajax' => 'core/form-cohort-selector', 'data-exclude' => implode(',', $this->exclude), + 'data-includes' => $this->includes, 'data-contextid' => (int)$this->contextid ); if ($this->multiple) {