Merge branch 'MDL-68442-master' of git://github.com/andrewnicols/moodle
This commit is contained in:
@@ -64,6 +64,7 @@ $string['enrolmentnewuser'] = '{$a->user} has enrolled in course "{$a->course}"'
|
||||
$string['enrolmentmethod'] = 'Enrolment method';
|
||||
$string['enrolments'] = 'Enrolments';
|
||||
$string['enrolmentoptions'] = 'Enrolment options';
|
||||
$string['enrolmentupdatedforuser'] = 'The enrolment for user "{$a->fullname}" has been updated';
|
||||
$string['enrolnotpermitted'] = 'You do not have permission or are not allowed to enrol someone in this course';
|
||||
$string['enrolperiod'] = 'Enrolment duration';
|
||||
$string['enrolusage'] = 'Instances / enrolments';
|
||||
@@ -136,6 +137,7 @@ $string['totalunenrolledusers'] = '{$a} unenrolled users';
|
||||
$string['totalotherusers'] = '{$a} other users';
|
||||
$string['unassignnotpermitted'] = 'You do not have permission to unassign roles in this course';
|
||||
$string['unenrol'] = 'Unenrol';
|
||||
$string['unenrolleduser'] = 'The user "{$a->fullname}" was unenrolled from the course';
|
||||
$string['unenrolconfirm'] = 'Do you really want to unenrol "{$a->user}" (previously enrolled via "{$a->enrolinstancename}") from "{$a->course}"?';
|
||||
$string['unenrolme'] = 'Unenrol me from {$a}';
|
||||
$string['unenrolnotpermitted'] = 'You do not have permission or can not unenrol this user from this course.';
|
||||
|
||||
Vendored
+1
-1
@@ -1,2 +1,2 @@
|
||||
define ("core_table/dynamic",["exports","core_table/local/dynamic/repository","core_table/local/dynamic/selectors"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=a.showColumn=a.hideColumn=a.setLastInitial=a.setFirstInitial=a.setPageSize=a.setPageNumber=a.setSortOrder=a.setFilters=a.updateTable=a.refreshTableContent=void 0;c=function(a){if(a&&a.__esModule){return a}else{var b={};if(null!=a){for(var c in a){if(Object.prototype.hasOwnProperty.call(a,c)){var d=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(a,c):{};if(d.get||d.set){Object.defineProperty(b,c,d)}else{b[c]=a[c]}}}}b.default=a;return b}}(c);function d(a){return g(a)||f(a)||e()}function e(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function f(a){if(Symbol.iterator in Object(a)||"[object Arguments]"===Object.prototype.toString.call(a))return Array.from(a)}function g(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b<a.length;b++){c[b]=a[b]}return c}}var h=!1,i=function(a){if(!a){throw new Error("The table specified is not a dynamic table and cannot be updated")}if(!a.matches(c.main.region)){throw new Error("The table specified is not a dynamic table and cannot be updated")}return!0},j=function(a){return JSON.parse(a.dataset.tableFilters)},k=function(a){var c=j(a);return(0,b.fetch)(a.dataset.tableComponent,a.dataset.tableHandler,a.dataset.tableUniqueid,{sortBy:a.dataset.tableSortBy,sortOrder:a.dataset.tableSortOrder,joinType:c.jointype,filters:c.filters,firstinitial:a.dataset.tableFirstInitial,lastinitial:a.dataset.tableLastInitial,pageNumber:a.dataset.tablePageNumber,pageSize:a.dataset.tablePageSize,hiddenColumns:JSON.parse(a.dataset.tableHiddenColumns)}).then(function(b){var c=document.createElement("div");c.innerHTML=b.html;a.replaceWith.apply(a,d(c.childNodes));return b})};a.refreshTableContent=k;var l=function(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},c=b.sortBy,d=void 0===c?null:c,e=b.sortOrder,f=void 0===e?null:e,g=b.filters,h=void 0===g?null:g,j=b.firstInitial,l=void 0===j?null:j,m=b.lastInitial,n=void 0===m?null:m,o=b.pageNumber,p=void 0===o?null:o,q=b.pageSize,r=void 0===q?null:q,s=b.hiddenColumns,t=void 0===s?null:s,u=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;i(a);if(d&&f){a.dataset.tableSortBy=d;a.dataset.tableSortOrder=f}if(null!==l){a.dataset.tableFirstInitial=l}if(null!==n){a.dataset.tableLastInitial=n}if(null!==p){a.dataset.tablePageNumber=p}if(null!==r){a.dataset.tablePageSize=r}if(h){a.dataset.tableFilters=JSON.stringify(h)}if(t){a.dataset.tableHiddenColumns=JSON.stringify(t)}if(u){return k(a)}else{return Promise.resolve()}};a.updateTable=l;a.setFilters=function setFilters(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{filters:b},c)};var m=function(a,b,c){var d=3<arguments.length&&arguments[3]!==void 0?arguments[3]:!0;return l(a,{sortBy:b,sortOrder:c},d)};a.setSortOrder=m;var n=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{pageNumber:b},c)};a.setPageNumber=n;a.setPageSize=function setPageSize(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{pageSize:b,pageNumber:0},c)};var o=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{firstInitial:b},c)};a.setFirstInitial=o;var p=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{lastInitial:b},c)};a.setLastInitial=p;var q=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0,d=JSON.parse(a.dataset.tableHiddenColumns);d.push(b);l(a,{hiddenColumns:d},c)};a.hideColumn=q;var r=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0,d=JSON.parse(a.dataset.tableHiddenColumns);d=d.filter(function(a){return a!==b});l(a,{hiddenColumns:d},c)};a.showColumn=r;var s=function(){if(h){return}h=!0;document.addEventListener("click",function(a){var b=a.target.closest(c.main.region);if(!b){return}var d=a.target.closest(c.table.links.sortableColumn);if(d){a.preventDefault();m(b,d.dataset.sortby,d.dataset.sortorder)}var e=a.target.closest(c.initialsBar.links.firstInitial);if(null!==e){a.preventDefault();o(b,e.dataset.initial)}var f=a.target.closest(c.initialsBar.links.lastInitial);if(null!==f){a.preventDefault();p(b,f.dataset.initial)}var g=a.target.closest(c.paginationBar.links.pageItem);if(g){a.preventDefault();n(b,g.dataset.pageNumber)}var h=a.target.closest(c.table.links.hide);if(h){a.preventDefault();q(b,h.dataset.column)}var i=a.target.closest(c.table.links.show);if(i){a.preventDefault();r(b,i.dataset.column)}})};a.init=s});
|
||||
define ("core_table/dynamic",["exports","core_table/local/dynamic/repository","core_table/local/dynamic/selectors"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.getTableFromId=a.init=a.showColumn=a.hideColumn=a.setLastInitial=a.setFirstInitial=a.setPageSize=a.setPageNumber=a.setSortOrder=a.setFilters=a.updateTable=a.refreshTableContent=void 0;c=function(a){if(a&&a.__esModule){return a}else{var b={};if(null!=a){for(var c in a){if(Object.prototype.hasOwnProperty.call(a,c)){var d=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(a,c):{};if(d.get||d.set){Object.defineProperty(b,c,d)}else{b[c]=a[c]}}}}b.default=a;return b}}(c);function d(a){return g(a)||f(a)||e()}function e(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function f(a){if(Symbol.iterator in Object(a)||"[object Arguments]"===Object.prototype.toString.call(a))return Array.from(a)}function g(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b<a.length;b++){c[b]=a[b]}return c}}var h=!1,i=function(a){if(!a){throw new Error("The table specified is not a dynamic table and cannot be updated")}if(!a.matches(c.main.region)){throw new Error("The table specified is not a dynamic table and cannot be updated")}return!0},j=function(a){return JSON.parse(a.dataset.tableFilters)},k=function(a){var c=j(a);return(0,b.fetch)(a.dataset.tableComponent,a.dataset.tableHandler,a.dataset.tableUniqueid,{sortBy:a.dataset.tableSortBy,sortOrder:a.dataset.tableSortOrder,joinType:c.jointype,filters:c.filters,firstinitial:a.dataset.tableFirstInitial,lastinitial:a.dataset.tableLastInitial,pageNumber:a.dataset.tablePageNumber,pageSize:a.dataset.tablePageSize,hiddenColumns:JSON.parse(a.dataset.tableHiddenColumns)}).then(function(b){var c=document.createElement("div");c.innerHTML=b.html;a.replaceWith.apply(a,d(c.childNodes));return b})};a.refreshTableContent=k;var l=function(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},c=b.sortBy,d=void 0===c?null:c,e=b.sortOrder,f=void 0===e?null:e,g=b.filters,h=void 0===g?null:g,j=b.firstInitial,l=void 0===j?null:j,m=b.lastInitial,n=void 0===m?null:m,o=b.pageNumber,p=void 0===o?null:o,q=b.pageSize,r=void 0===q?null:q,s=b.hiddenColumns,t=void 0===s?null:s,u=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;i(a);if(d&&f){a.dataset.tableSortBy=d;a.dataset.tableSortOrder=f}if(null!==l){a.dataset.tableFirstInitial=l}if(null!==n){a.dataset.tableLastInitial=n}if(null!==p){a.dataset.tablePageNumber=p}if(null!==r){a.dataset.tablePageSize=r}if(h){a.dataset.tableFilters=JSON.stringify(h)}if(t){a.dataset.tableHiddenColumns=JSON.stringify(t)}if(u){return k(a)}else{return Promise.resolve()}};a.updateTable=l;a.setFilters=function setFilters(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{filters:b},c)};var m=function(a,b,c){var d=3<arguments.length&&arguments[3]!==void 0?arguments[3]:!0;return l(a,{sortBy:b,sortOrder:c},d)};a.setSortOrder=m;var n=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{pageNumber:b},c)};a.setPageNumber=n;a.setPageSize=function setPageSize(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{pageSize:b,pageNumber:0},c)};var o=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{firstInitial:b},c)};a.setFirstInitial=o;var p=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{lastInitial:b},c)};a.setLastInitial=p;var q=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0,d=JSON.parse(a.dataset.tableHiddenColumns);d.push(b);l(a,{hiddenColumns:d},c)};a.hideColumn=q;var r=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0,d=JSON.parse(a.dataset.tableHiddenColumns);d=d.filter(function(a){return a!==b});l(a,{hiddenColumns:d},c)};a.showColumn=r;var s=function(){if(h){return}h=!0;document.addEventListener("click",function(a){var b=a.target.closest(c.main.region);if(!b){return}var d=a.target.closest(c.table.links.sortableColumn);if(d){a.preventDefault();m(b,d.dataset.sortby,d.dataset.sortorder)}var e=a.target.closest(c.initialsBar.links.firstInitial);if(null!==e){a.preventDefault();o(b,e.dataset.initial)}var f=a.target.closest(c.initialsBar.links.lastInitial);if(null!==f){a.preventDefault();p(b,f.dataset.initial)}var g=a.target.closest(c.paginationBar.links.pageItem);if(g){a.preventDefault();n(b,g.dataset.pageNumber)}var h=a.target.closest(c.table.links.hide);if(h){a.preventDefault();q(b,h.dataset.column)}var i=a.target.closest(c.table.links.show);if(i){a.preventDefault();r(b,i.dataset.column)}})};a.init=s;var t=function(a){var b=document.querySelector(c.main.fromRegionId(a));if(!b){throw new Error("The table specified is not a dynamic table and cannot be updated")}return b};a.getTableFromId=t});
|
||||
//# sourceMappingURL=dynamic.min.js.map
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -1,2 +1,2 @@
|
||||
define ("core_table/local/dynamic/selectors",["exports"],function(a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;a.default={main:{region:"[data-region=\"core_table/dynamic\"]"},table:{links:{sortableColumn:"a[data-sortable=\"1\"]",hide:"a[data-action=\"hide\"]",show:"a[data-action=\"show\"]"}},initialsBar:{links:{firstInitial:".firstinitial [data-initial]",lastInitial:".lastinitial [data-initial]"}},paginationBar:{links:{pageItem:".pagination [data-page-number]"}}};return a.default});
|
||||
define ("core_table/local/dynamic/selectors",["exports"],function(a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;a.default={main:{region:"[data-region=\"core_table/dynamic\"]",fromRegionId:function fromRegionId(a){return"[data-region=\"core_table/dynamic\"][data-table-uniqueid=\"".concat(a,"\"]")}},table:{links:{sortableColumn:"a[data-sortable=\"1\"]",hide:"a[data-action=\"hide\"]",show:"a[data-action=\"show\"]"}},initialsBar:{links:{firstInitial:".firstinitial [data-initial]",lastInitial:".lastinitial [data-initial]"}},paginationBar:{links:{pageItem:".pagination [data-page-number]"}}};return a.default});
|
||||
//# sourceMappingURL=selectors.min.js.map
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../../../src/local/dynamic/selectors.js"],"names":["main","region","table","links","sortableColumn","hide","show","initialsBar","firstInitial","lastInitial","paginationBar","pageItem"],"mappings":"8JAuBe,CACXA,IAAI,CAAE,CACFC,MAAM,CAAE,sCADN,CADK,CAIXC,KAAK,CAAE,CACHC,KAAK,CAAE,CACHC,cAAc,CAAE,wBADb,CAEHC,IAAI,CAAE,yBAFH,CAGHC,IAAI,CAAE,yBAHH,CADJ,CAJI,CAWXC,WAAW,CAAE,CACTJ,KAAK,CAAE,CACHK,YAAY,CAAE,8BADX,CAEHC,WAAW,CAAE,6BAFV,CADE,CAXF,CAiBXC,aAAa,CAAE,CACXP,KAAK,CAAE,CACHQ,QAAQ,CAAE,gCADP,CADI,CAjBJ,C","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 <http://www.gnu.org/licenses/>.\n\n/**\n * Dynamic table selectors.\n *\n * @module core_table/selectors\n * @package core_table\n * @copyright 2020 Simey Lameze <[email protected]>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default {\n main: {\n region: '[data-region=\"core_table/dynamic\"]',\n },\n table: {\n links: {\n sortableColumn: 'a[data-sortable=\"1\"]',\n hide: 'a[data-action=\"hide\"]',\n show: 'a[data-action=\"show\"]',\n },\n },\n initialsBar: {\n links: {\n firstInitial: '.firstinitial [data-initial]',\n lastInitial: '.lastinitial [data-initial]',\n },\n },\n paginationBar: {\n links: {\n pageItem: '.pagination [data-page-number]'\n }\n },\n};\n"],"file":"selectors.min.js"}
|
||||
{"version":3,"sources":["../../../src/local/dynamic/selectors.js"],"names":["main","region","fromRegionId","regionId","table","links","sortableColumn","hide","show","initialsBar","firstInitial","lastInitial","paginationBar","pageItem"],"mappings":"8JAuBe,CACXA,IAAI,CAAE,CACFC,MAAM,CAAE,sCADN,CAEFC,YAAY,CAAE,sBAAAC,CAAQ,6EAA+DA,CAA/D,QAFpB,CADK,CAKXC,KAAK,CAAE,CACHC,KAAK,CAAE,CACHC,cAAc,CAAE,wBADb,CAEHC,IAAI,CAAE,yBAFH,CAGHC,IAAI,CAAE,yBAHH,CADJ,CALI,CAYXC,WAAW,CAAE,CACTJ,KAAK,CAAE,CACHK,YAAY,CAAE,8BADX,CAEHC,WAAW,CAAE,6BAFV,CADE,CAZF,CAkBXC,aAAa,CAAE,CACXP,KAAK,CAAE,CACHQ,QAAQ,CAAE,gCADP,CADI,CAlBJ,C","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 <http://www.gnu.org/licenses/>.\n\n/**\n * Dynamic table selectors.\n *\n * @module core_table/selectors\n * @package core_table\n * @copyright 2020 Simey Lameze <[email protected]>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default {\n main: {\n region: '[data-region=\"core_table/dynamic\"]',\n fromRegionId: regionId => `[data-region=\"core_table/dynamic\"][data-table-uniqueid=\"${regionId}\"]`,\n },\n table: {\n links: {\n sortableColumn: 'a[data-sortable=\"1\"]',\n hide: 'a[data-action=\"hide\"]',\n show: 'a[data-action=\"show\"]',\n },\n },\n initialsBar: {\n links: {\n firstInitial: '.firstinitial [data-initial]',\n lastInitial: '.lastinitial [data-initial]',\n },\n },\n paginationBar: {\n links: {\n pageItem: '.pagination [data-page-number]'\n }\n },\n};\n"],"file":"selectors.min.js"}
|
||||
@@ -299,3 +299,21 @@ export const init = () => {
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Fetch the table via its table region id
|
||||
*
|
||||
* @param {String} tableRegionId
|
||||
* @returns {HTMLElement}
|
||||
*/
|
||||
export const getTableFromId = tableRegionId => {
|
||||
const tableRoot = document.querySelector(Selectors.main.fromRegionId(tableRegionId));
|
||||
|
||||
|
||||
if (!tableRoot) {
|
||||
// The table is not a dynamic table.
|
||||
throw new Error("The table specified is not a dynamic table and cannot be updated");
|
||||
}
|
||||
|
||||
return tableRoot;
|
||||
};
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
export default {
|
||||
main: {
|
||||
region: '[data-region="core_table/dynamic"]',
|
||||
fromRegionId: regionId => `[data-region="core_table/dynamic"][data-table-uniqueid="${regionId}"]`,
|
||||
},
|
||||
table: {
|
||||
links: {
|
||||
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
define ("core_user/repository",["exports","core/ajax"],function(a,b){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.submitUserEnrolmentForm=a.unenrolUser=void 0;a.unenrolUser=function unenrolUser(a){return(0,b.call)([{methodname:"core_enrol_unenrol_user_enrolment",args:{ueid:a}}])[0]};a.submitUserEnrolmentForm=function submitUserEnrolmentForm(a){return(0,b.call)([{methodname:"core_enrol_submit_user_enrolment_form",args:{formdata:a}}])[0]}});
|
||||
//# sourceMappingURL=repository.min.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../src/repository.js"],"names":["unenrolUser","userEnrolmentId","methodname","args","ueid","submitUserEnrolmentForm","formdata"],"mappings":"gMA8B2B,QAAdA,CAAAA,WAAc,CAAAC,CAAe,CAAI,CAC1C,MAAO,WAAU,CAAC,CACdC,UAAU,CAAE,mCADE,CAEdC,IAAI,CAAE,CACFC,IAAI,CAAEH,CADJ,CAFQ,CAAD,CAAV,EAKH,CALG,CAMV,C,2BAQsC,QAA1BI,CAAAA,uBAA0B,CAAAC,CAAQ,CAAI,CAC/C,MAAO,WAAU,CAAC,CACdJ,UAAU,CAAE,uCADE,CAEdC,IAAI,CAAE,CACFG,QAAQ,CAARA,CADE,CAFQ,CAAD,CAAV,EAKH,CALG,CAMV,C","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 <http://www.gnu.org/licenses/>.\n\n/**\n * Module to handle AJAX interactions.\n *\n * @module core_user/repository\n * @copyright 2020 Andrew Nicols <[email protected]>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport {call as fetchMany} from 'core/ajax';\n\n/**\n * Unenrol the user with the specified user enrolmentid ID.\n *\n * @param {Number} userEnrolmentId\n * @return {Promise}\n */\nexport const unenrolUser = userEnrolmentId => {\n return fetchMany([{\n methodname: 'core_enrol_unenrol_user_enrolment',\n args: {\n ueid: userEnrolmentId,\n },\n }])[0];\n};\n\n/**\n * Submit the user enrolment form with the specified form data.\n *\n * @param {String} formdata\n * @return {Promise}\n */\nexport const submitUserEnrolmentForm = formdata => {\n return fetchMany([{\n methodname: 'core_enrol_submit_user_enrolment_form',\n args: {\n formdata,\n },\n }])[0];\n};\n"],"file":"repository.min.js"}
|
||||
Vendored
+1
-1
@@ -1,2 +1,2 @@
|
||||
define ("core_user/status_field",["core/templates","jquery","core/str","core/config","core/notification","core/modal_factory","core/modal_events","core/fragment","core/ajax"],function(a,b,c,d,f,g,h,i,j){var k={EDIT_ENROLMENT:"[data-action=\"editenrolment\"]",SHOW_DETAILS:"[data-action=\"showdetails\"]",UNENROL:"[data-action=\"unenrol\"]"},l=function(a){this.contextid=a.contextid;this.courseid=a.courseid;this.bindEditEnrol();this.bindUnenrol();this.bindStatusDetails()};l.prototype.courseid=0;l.prototype.bindEditEnrol=function(){var a=this;b(k.EDIT_ENROLMENT).click(function(d){d.preventDefault();var e=b(this),i=e.parent(),j=i.data("fullname"),k=e.attr("rel");b.when(c.get_string("edituserenrolment","enrol",j)).then(function(a){return g.create({large:!0,title:a,type:g.types.SAVE_CANCEL})}).done(function(b){b.getRoot().on(h.save,function(c){c.preventDefault();a.submitEditFormAjax(b)});b.getRoot().on(h.hidden,function(){b.destroy()});b.setBody(a.getBody(k));b.show()}).fail(f.exception)})};l.prototype.bindUnenrol=function(){var a=this;b(k.UNENROL).click(function(d){d.preventDefault();var e=b(this),i=e.parent(),j=[{key:"unenrol",component:"enrol"},{key:"unenrolconfirm",component:"enrol",param:{user:i.data("fullname"),course:i.data("coursename"),enrolinstancename:i.data("enrolinstancename")}}],k=g.create({type:g.types.SAVE_CANCEL});b.when(c.get_strings(j),k).done(function(c,f){var g=c[0],i=c[1];f.setTitle(g);f.setBody(i);f.setSaveButtonText(g);f.getRoot().on(h.save,function(){var c={ueid:b(e).attr("rel")};d.preventDefault();a.submitUnenrolFormAjax(f,c)});f.getRoot().on(h.hidden,function(){f.destroy()});f.show()}).fail(f.exception)})};l.prototype.bindStatusDetails=function(){b(k.SHOW_DETAILS).click(function(d){d.preventDefault();var e=b(this),i=e.parent(),j={fullname:i.data("fullname"),coursename:i.data("coursename"),enrolinstancename:i.data("enrolinstancename"),status:i.data("status"),statusclass:i.find("span").attr("class"),timestart:i.data("timestart"),timeend:i.data("timeend"),timeenrolled:i.data("timeenrolled")},l=e.next(k.EDIT_ENROLMENT);if(l.length){j.editenrollink=b("<div>").append(l.clone()).html()}var m=c.get_strings([{key:"enroldetails",component:"enrol"}]),n=g.create({large:!0,type:g.types.CANCEL});b.when(m,n).done(function(c,d){var e=a.render("core_user/status_details",j);d.setTitle(c[0]);d.setBody(e);if(l.length){d.getRoot().on("click",k.EDIT_ENROLMENT,function(a){a.preventDefault();d.hide();b(l).trigger("click")})}d.show();d.getRoot().on(h.hidden,function(){d.destroy()})}).fail(f.exception)})};l.prototype.submitEditFormAjax=function(a){var c=this,d=a.getRoot().find("form"),e=b(d).find("[name=\"ue\"]").val(),g={methodname:"core_enrol_submit_user_enrolment_form",args:{formdata:d.serialize()}};j.call([g])[0].done(function(b){if(b.result){a.hide();if("undefined"!=typeof window.M.core_formchangechecker){window.M.core_formchangechecker.reset_form_dirty_state()}window.location.reload()}else{var f=JSON.stringify(d.serialize());a.setBody(c.getBody(e,f))}}).fail(f.exception)};l.prototype.submitUnenrolFormAjax=function(a,b){j.call([{methodname:"core_enrol_unenrol_user_enrolment",args:b}])[0].done(function(b){if(b.result){a.hide();if("undefined"!=typeof window.M.core_formchangechecker){window.M.core_formchangechecker.reset_form_dirty_state()}window.location.reload()}else{f.alert(b.errors[0].key,b.errors[0].message)}}).fail(f.exception)};l.prototype.getBody=function(a,b){var c={ueid:a};if("undefined"!=typeof b){c.formdata=b}return i.loadFragment("enrol","user_enrolment_form",this.contextid,c).fail(f.exception)};return{init:function init(a){new l(a)}}});
|
||||
define ("core_user/status_field",["exports","core_table/dynamic","./repository","core/str","core_table/local/dynamic/selectors","core/fragment","core/modal_events","core/modal_factory","core/notification","core/templates","core/toast"],function(a,b,c,d,f,g,h,i,j,k,l){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=void 0;b=n(b);c=n(c);d=n(d);f=m(f);g=m(g);h=m(h);i=m(i);j=m(j);k=m(k);function m(a){return a&&a.__esModule?a:{default:a}}function n(a){if(a&&a.__esModule){return a}else{var b={};if(null!=a){for(var c in a){if(Object.prototype.hasOwnProperty.call(a,c)){var d=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(a,c):{};if(d.get||d.set){Object.defineProperty(b,c,d)}else{b[c]=a[c]}}}}b.default=a;return b}}function o(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{},d=Object.keys(c);if("function"==typeof Object.getOwnPropertySymbols){d=d.concat(Object.getOwnPropertySymbols(c).filter(function(a){return Object.getOwnPropertyDescriptor(c,a).enumerable}))}d.forEach(function(b){p(a,b,c[b])})}return a}function p(a,b,c){if(b in a){Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0})}else{a[b]=c}return a}function q(a,b){return t(a)||s(a,b)||r()}function r(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function s(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g=a[Symbol.iterator](),h;!(d=(h=g.next()).done);d=!0){c.push(h.value);if(b&&c.length===b)break}}catch(a){e=!0;f=a}finally{try{if(!d&&null!=g["return"])g["return"]()}finally{if(e)throw f}}return c}function t(a){if(Array.isArray(a))return a}var u={editEnrolment:"[data-action=\"editenrolment\"]",showDetails:"[data-action=\"showdetails\"]",unenrol:"[data-action=\"unenrol\"]",statusElement:"[data-status]"},v=function(a){return a.closest(f.default.main.region)},w=function(a){return a.closest(u.statusElement)},x=function(a){return a.getAttribute("rel")},y=function(a,b){var c=function(b,c){return E(a,b,c)};document.addEventListener("click",function(a){var d=a.target.closest(f.default.main.fromRegionId(b));if(!d){return}var e=a.target.closest(u.editEnrolment);if(e){a.preventDefault();z(e,c)}var g=a.target.closest(u.unenrol);if(g){a.preventDefault();A(g)}var h=a.target.closest(u.showDetails);if(h){a.preventDefault();B(h)}})},z=function(a,b){var c=w(a),f=x(a);i.default.create({large:!0,title:d.get_string("edituserenrolment","enrol",c.dataset.fullname),type:i.default.types.SAVE_CANCEL,body:b(f)}).then(function(d){d.getRoot().on(h.default.save,function(g){g.preventDefault();C(a,b,d,f,c.dataset)});d.getRoot().on(h.default.hidden,function(){d.destroy()});d.show();return d}).catch(j.default.exception)},A=function(a){var b=w(a),c=x(a);i.default.create({type:i.default.types.SAVE_CANCEL}).then(function(f){f.getRoot().on(h.default.save,function(d){d.preventDefault();D(a,f,{ueid:c},b.dataset)});f.getRoot().on(h.default.hidden,function(){f.destroy()});f.show();var g=[{key:"unenrol",component:"enrol"},{key:"unenrolconfirm",component:"enrol",param:{user:b.dataset.fullname,course:b.dataset.coursename,enrolinstancename:b.dataset.enrolinstancename}}];return Promise.all([d.get_strings(g),f])}).then(function(a){var b=q(a,2),c=b[0],d=b[1];d.setTitle(c[0]);d.setSaveButtonText(c[0]);d.setBody(c[1]);return d}).catch(j.default.exception)},B=function(a){var b=w(a),c=o({editenrollink:"",statusclass:b.querySelector("span.badge").getAttribute("class")},b.dataset),f=b.querySelector(u.editEnrolment);if(f){c.editenrollink=f.outerHTML}i.default.create({large:!0,type:i.default.types.CANCEL,title:d.get_string("enroldetails","enrol"),body:k.default.render("core_user/status_details",c)}).then(function(a){if(f){a.getRoot().on("click",u.editEnrolment,function(b){b.preventDefault();a.hide();f.click()})}a.show();a.getRoot().on(h.default.hidden,function(){return a.destroy()});return a}).catch(j.default.exception)},C=function(a,e,f,g,h){var i=f.getRoot().find("form");c.submitUserEnrolmentForm(i.serialize()).then(function(a){if(!a.result){throw a.result}f.hide();f.destroy();return a}).then(function(){b.refreshTableContent(v(a));return d.get_string("enrolmentupdatedforuser","core_enrol",h)}).then(function(a){(0,l.add)(a)}).catch(function(){f.setBody(e(g,JSON.stringify(i.serialize())));return f})},D=function(a,e,f,g){c.unenrolUser(f.ueid).then(function(a){if(!a.result){j.default.alert(a.errors[0].key,a.errors[0].message);return a}e.hide();e.destroy();return a}).then(function(){b.refreshTableContent(v(a));return d.get_string("unenrolleduser","core_enrol",g)}).then(function(a){(0,l.add)(a)}).catch(j.default.exception)},E=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;return g.default.loadFragment("enrol","user_enrolment_form",a,{ueid:b,formdata:c})};a.init=function init(a){var b=a.contextid,c=a.uniqueid;y(b,c)}});
|
||||
//# sourceMappingURL=status_field.min.js.map
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,53 @@
|
||||
// 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/>.
|
||||
|
||||
/**
|
||||
* Module to handle AJAX interactions.
|
||||
*
|
||||
* @module core_user/repository
|
||||
* @copyright 2020 Andrew Nicols <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
import {call as fetchMany} from 'core/ajax';
|
||||
|
||||
/**
|
||||
* Unenrol the user with the specified user enrolmentid ID.
|
||||
*
|
||||
* @param {Number} userEnrolmentId
|
||||
* @return {Promise}
|
||||
*/
|
||||
export const unenrolUser = userEnrolmentId => {
|
||||
return fetchMany([{
|
||||
methodname: 'core_enrol_unenrol_user_enrolment',
|
||||
args: {
|
||||
ueid: userEnrolmentId,
|
||||
},
|
||||
}])[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* Submit the user enrolment form with the specified form data.
|
||||
*
|
||||
* @param {String} formdata
|
||||
* @return {Promise}
|
||||
*/
|
||||
export const submitUserEnrolmentForm = formdata => {
|
||||
return fetchMany([{
|
||||
methodname: 'core_enrol_submit_user_enrolment_form',
|
||||
args: {
|
||||
formdata,
|
||||
},
|
||||
}])[0];
|
||||
};
|
||||
+326
-317
@@ -20,334 +20,343 @@
|
||||
* @copyright 2017 Jun Pataleta
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
define(['core/templates',
|
||||
'jquery',
|
||||
'core/str',
|
||||
'core/config',
|
||||
'core/notification',
|
||||
'core/modal_factory',
|
||||
'core/modal_events',
|
||||
'core/fragment',
|
||||
'core/ajax'
|
||||
],
|
||||
function(Template, $, Str, Config, Notification, ModalFactory, ModalEvents, Fragment, Ajax) {
|
||||
|
||||
/**
|
||||
* Action selectors.
|
||||
*
|
||||
* @access private
|
||||
* @type {{EDIT_ENROLMENT: string, SHOW_DETAILS: string, UNENROL: string}}
|
||||
*/
|
||||
var SELECTORS = {
|
||||
EDIT_ENROLMENT: '[data-action="editenrolment"]',
|
||||
SHOW_DETAILS: '[data-action="showdetails"]',
|
||||
UNENROL: '[data-action="unenrol"]'
|
||||
};
|
||||
import * as DynamicTable from 'core_table/dynamic';
|
||||
import * as Repository from './repository';
|
||||
import * as Str from 'core/str';
|
||||
import DynamicTableSelectors from 'core_table/local/dynamic/selectors';
|
||||
import Fragment from 'core/fragment';
|
||||
import ModalEvents from 'core/modal_events';
|
||||
import ModalFactory from 'core/modal_factory';
|
||||
import Notification from 'core/notification';
|
||||
import Templates from 'core/templates';
|
||||
import {add as notifyUser} from 'core/toast';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param {Object} options Object containing options. The only valid option at this time is contextid.
|
||||
* Each call to templates.render gets it's own instance of this class.
|
||||
*/
|
||||
var StatusFieldActions = function(options) {
|
||||
this.contextid = options.contextid;
|
||||
this.courseid = options.courseid;
|
||||
const Selectors = {
|
||||
editEnrolment: '[data-action="editenrolment"]',
|
||||
showDetails: '[data-action="showdetails"]',
|
||||
unenrol: '[data-action="unenrol"]',
|
||||
statusElement: '[data-status]',
|
||||
};
|
||||
|
||||
// Bind click event to editenrol buttons.
|
||||
this.bindEditEnrol();
|
||||
/**
|
||||
* Get the dynamic table from the specified link.
|
||||
*
|
||||
* @param {HTMLElement} link
|
||||
* @returns {HTMLElement}
|
||||
*/
|
||||
const getDynamicTableFromLink = link => link.closest(DynamicTableSelectors.main.region);
|
||||
|
||||
// Bind click event to unenrol buttons.
|
||||
this.bindUnenrol();
|
||||
/**
|
||||
* Get the status container from the specified link.
|
||||
*
|
||||
* @param {HTMLElement} link
|
||||
* @returns {HTMLElement}
|
||||
*/
|
||||
const getStatusContainer = link => link.closest(Selectors.statusElement);
|
||||
|
||||
// Bind click event to status details buttons.
|
||||
this.bindStatusDetails();
|
||||
};
|
||||
// Class variables and functions.
|
||||
/**
|
||||
* Get user enrolment id from the specified link
|
||||
*
|
||||
* @param {HTMLElement} link
|
||||
* @returns {Number}
|
||||
*/
|
||||
const getUserEnrolmentIdFromLink = link => link.getAttribute('rel');
|
||||
|
||||
/** @var {number} courseid The course ID. */
|
||||
StatusFieldActions.prototype.courseid = 0;
|
||||
/**
|
||||
* Register all event listeners for the status fields.
|
||||
*
|
||||
* @param {Number} contextId
|
||||
* @param {Number} uniqueId
|
||||
*/
|
||||
const registerEventListeners = (contextId, uniqueId) => {
|
||||
const getBodyFunction = (userEnrolmentId, formData) => getBody(contextId, userEnrolmentId, formData);
|
||||
|
||||
/**
|
||||
* Private method
|
||||
*
|
||||
* @method initModal
|
||||
* @private
|
||||
*/
|
||||
StatusFieldActions.prototype.bindEditEnrol = function() {
|
||||
var statusFieldInstsance = this;
|
||||
document.addEventListener('click', e => {
|
||||
const tableRoot = e.target.closest(DynamicTableSelectors.main.fromRegionId(uniqueId));
|
||||
if (!tableRoot) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(SELECTORS.EDIT_ENROLMENT).click(function(e) {
|
||||
e.preventDefault();
|
||||
const editLink = e.target.closest(Selectors.editEnrolment);
|
||||
if (editLink) {
|
||||
e.preventDefault();
|
||||
|
||||
// The particular edit button that was clicked.
|
||||
var clickedEditTrigger = $(this);
|
||||
// Get the parent container (it contains the data attributes associated with the status field).
|
||||
var parentContainer = clickedEditTrigger.parent();
|
||||
// Get the name of the user whose enrolment status is being edited.
|
||||
var fullname = parentContainer.data('fullname');
|
||||
// Get the user enrolment ID.
|
||||
var ueid = clickedEditTrigger.attr('rel');
|
||||
showEditDialogue(editLink, getBodyFunction);
|
||||
}
|
||||
|
||||
$.when(Str.get_string('edituserenrolment', 'enrol', fullname)).then(function(modalTitle) {
|
||||
return ModalFactory.create({
|
||||
large: true,
|
||||
title: modalTitle,
|
||||
type: ModalFactory.types.SAVE_CANCEL
|
||||
});
|
||||
}).done(function(modal) {
|
||||
// Handle save event.
|
||||
modal.getRoot().on(ModalEvents.save, function(e) {
|
||||
// Don't close the modal yet.
|
||||
e.preventDefault();
|
||||
// Submit form data.
|
||||
statusFieldInstsance.submitEditFormAjax(modal);
|
||||
});
|
||||
const unenrolLink = e.target.closest(Selectors.unenrol);
|
||||
if (unenrolLink) {
|
||||
e.preventDefault();
|
||||
|
||||
// Handle hidden event.
|
||||
modal.getRoot().on(ModalEvents.hidden, function() {
|
||||
// Destroy when hidden.
|
||||
modal.destroy();
|
||||
});
|
||||
showUnenrolConfirmation(unenrolLink);
|
||||
}
|
||||
|
||||
// Set the modal body.
|
||||
modal.setBody(statusFieldInstsance.getBody(ueid));
|
||||
const showDetailsLink = e.target.closest(Selectors.showDetails);
|
||||
if (showDetailsLink) {
|
||||
e.preventDefault();
|
||||
|
||||
// Show the modal!
|
||||
modal.show();
|
||||
}).fail(Notification.exception);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Private method
|
||||
*
|
||||
* @method bindUnenrol
|
||||
* @private
|
||||
*/
|
||||
StatusFieldActions.prototype.bindUnenrol = function() {
|
||||
var statusFieldInstsance = this;
|
||||
|
||||
$(SELECTORS.UNENROL).click(function(e) {
|
||||
e.preventDefault();
|
||||
var unenrolLink = $(this);
|
||||
var parentContainer = unenrolLink.parent();
|
||||
var strings = [
|
||||
{
|
||||
key: 'unenrol',
|
||||
component: 'enrol'
|
||||
},
|
||||
{
|
||||
key: 'unenrolconfirm',
|
||||
component: 'enrol',
|
||||
param: {
|
||||
user: parentContainer.data('fullname'),
|
||||
course: parentContainer.data('coursename'),
|
||||
enrolinstancename: parentContainer.data('enrolinstancename')
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
var deleteModalPromise = ModalFactory.create({
|
||||
type: ModalFactory.types.SAVE_CANCEL
|
||||
});
|
||||
|
||||
$.when(Str.get_strings(strings), deleteModalPromise).done(function(results, modal) {
|
||||
var title = results[0];
|
||||
var confirmMessage = results[1];
|
||||
modal.setTitle(title);
|
||||
modal.setBody(confirmMessage);
|
||||
modal.setSaveButtonText(title);
|
||||
|
||||
// Handle confirm event.
|
||||
modal.getRoot().on(ModalEvents.save, function() {
|
||||
// Build params.
|
||||
var unenrolParams = {
|
||||
'ueid': $(unenrolLink).attr('rel')
|
||||
};
|
||||
// Don't close the modal yet.
|
||||
e.preventDefault();
|
||||
// Submit data.
|
||||
statusFieldInstsance.submitUnenrolFormAjax(modal, unenrolParams);
|
||||
});
|
||||
|
||||
// Handle hidden event.
|
||||
modal.getRoot().on(ModalEvents.hidden, function() {
|
||||
// Destroy when hidden.
|
||||
modal.destroy();
|
||||
});
|
||||
|
||||
// Display the delete confirmation modal.
|
||||
modal.show();
|
||||
}).fail(Notification.exception);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Private method
|
||||
*
|
||||
* @method bindStatusDetails
|
||||
* @private
|
||||
*/
|
||||
StatusFieldActions.prototype.bindStatusDetails = function() {
|
||||
$(SELECTORS.SHOW_DETAILS).click(function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var detailsButton = $(this);
|
||||
var parentContainer = detailsButton.parent();
|
||||
var context = {
|
||||
"fullname": parentContainer.data('fullname'),
|
||||
"coursename": parentContainer.data('coursename'),
|
||||
"enrolinstancename": parentContainer.data('enrolinstancename'),
|
||||
"status": parentContainer.data('status'),
|
||||
"statusclass": parentContainer.find('span').attr('class'),
|
||||
"timestart": parentContainer.data('timestart'),
|
||||
"timeend": parentContainer.data('timeend'),
|
||||
"timeenrolled": parentContainer.data('timeenrolled')
|
||||
};
|
||||
|
||||
// Get default string for the modal and modal type.
|
||||
var strings = [
|
||||
{
|
||||
key: 'enroldetails',
|
||||
component: 'enrol'
|
||||
}
|
||||
];
|
||||
|
||||
// Find the edit enrolment link.
|
||||
var editEnrolLink = detailsButton.next(SELECTORS.EDIT_ENROLMENT);
|
||||
if (editEnrolLink.length) {
|
||||
// If there's an edit enrolment link for this user, clone it into the context for the modal.
|
||||
context.editenrollink = $('<div>').append(editEnrolLink.clone()).html();
|
||||
}
|
||||
|
||||
var modalStringsPromise = Str.get_strings(strings);
|
||||
var modalPromise = ModalFactory.create({large: true, type: ModalFactory.types.CANCEL});
|
||||
$.when(modalStringsPromise, modalPromise).done(function(strings, modal) {
|
||||
var modalBodyPromise = Template.render('core_user/status_details', context);
|
||||
modal.setTitle(strings[0]);
|
||||
modal.setBody(modalBodyPromise);
|
||||
|
||||
if (editEnrolLink.length) {
|
||||
modal.getRoot().on('click', SELECTORS.EDIT_ENROLMENT, function(e) {
|
||||
e.preventDefault();
|
||||
modal.hide();
|
||||
// Trigger click event for the edit enrolment link to show the edit enrolment modal.
|
||||
$(editEnrolLink).trigger('click');
|
||||
});
|
||||
}
|
||||
|
||||
modal.show();
|
||||
|
||||
// Handle hidden event.
|
||||
modal.getRoot().on(ModalEvents.hidden, function() {
|
||||
// Destroy when hidden.
|
||||
modal.destroy();
|
||||
});
|
||||
}).fail(Notification.exception);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Private method
|
||||
*
|
||||
* @method submitEditFormAjax
|
||||
* @param {Object} modal The the AMD modal object containing the form.
|
||||
* @private
|
||||
*/
|
||||
StatusFieldActions.prototype.submitEditFormAjax = function(modal) {
|
||||
var statusFieldInstsance = this;
|
||||
var form = modal.getRoot().find('form');
|
||||
|
||||
// User enrolment ID.
|
||||
var ueid = $(form).find('[name="ue"]').val();
|
||||
|
||||
var request = {
|
||||
methodname: 'core_enrol_submit_user_enrolment_form',
|
||||
args: {
|
||||
formdata: form.serialize()
|
||||
}
|
||||
};
|
||||
|
||||
Ajax.call([request])[0].done(function(data) {
|
||||
if (data.result) {
|
||||
// Dismiss the modal.
|
||||
modal.hide();
|
||||
|
||||
// Reload the page, don't show changed data warnings.
|
||||
if (typeof window.M.core_formchangechecker !== "undefined") {
|
||||
window.M.core_formchangechecker.reset_form_dirty_state();
|
||||
}
|
||||
window.location.reload();
|
||||
} else {
|
||||
// Serialise the form data and reload the form fragment to show validation errors.
|
||||
var formData = JSON.stringify(form.serialize());
|
||||
modal.setBody(statusFieldInstsance.getBody(ueid, formData));
|
||||
}
|
||||
}).fail(Notification.exception);
|
||||
};
|
||||
|
||||
/**
|
||||
* Private method
|
||||
*
|
||||
* @method submitUnenrolFormAjax
|
||||
* @param {Object} modal The the AMD modal object containing the form.
|
||||
* @param {Object} unenrolParams The unenrol parameters.
|
||||
* @private
|
||||
*/
|
||||
StatusFieldActions.prototype.submitUnenrolFormAjax = function(modal, unenrolParams) {
|
||||
var request = {
|
||||
methodname: 'core_enrol_unenrol_user_enrolment',
|
||||
args: unenrolParams
|
||||
};
|
||||
|
||||
Ajax.call([request])[0].done(function(data) {
|
||||
if (data.result) {
|
||||
// Dismiss the modal.
|
||||
modal.hide();
|
||||
|
||||
// Reload the page, don't show changed data warnings.
|
||||
if (typeof window.M.core_formchangechecker !== "undefined") {
|
||||
window.M.core_formchangechecker.reset_form_dirty_state();
|
||||
}
|
||||
window.location.reload();
|
||||
} else {
|
||||
// Display an alert containing the error message
|
||||
Notification.alert(data.errors[0].key, data.errors[0].message);
|
||||
}
|
||||
}).fail(Notification.exception);
|
||||
};
|
||||
|
||||
/**
|
||||
* Private method
|
||||
*
|
||||
* @method getBody
|
||||
* @private
|
||||
* @param {Number} ueid The user enrolment ID associated with the user.
|
||||
* @param {string} formData Serialized string of the edit enrolment form data.
|
||||
* @return {Promise}
|
||||
*/
|
||||
StatusFieldActions.prototype.getBody = function(ueid, formData) {
|
||||
var params = {
|
||||
'ueid': ueid
|
||||
};
|
||||
if (typeof formData !== 'undefined') {
|
||||
params.formdata = formData;
|
||||
}
|
||||
return Fragment.loadFragment('enrol', 'user_enrolment_form', this.contextid, params).fail(Notification.exception);
|
||||
};
|
||||
|
||||
return /** @alias module:core_user/editenrolment */ {
|
||||
// Public variables and functions.
|
||||
/**
|
||||
* Every call to init creates a new instance of the class with it's own event listeners etc.
|
||||
*
|
||||
* @method init
|
||||
* @public
|
||||
* @param {object} config - config variables for the module.
|
||||
*/
|
||||
init: function(config) {
|
||||
(new StatusFieldActions(config));
|
||||
}
|
||||
};
|
||||
showStatusDetails(showDetailsLink);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Show the edit dialogue.
|
||||
*
|
||||
* @param {HTMLElement} link
|
||||
* @param {Function} getBody Function to get the body for the specified user enrolment
|
||||
*/
|
||||
const showEditDialogue = (link, getBody) => {
|
||||
const container = getStatusContainer(link);
|
||||
const userEnrolmentId = getUserEnrolmentIdFromLink(link);
|
||||
|
||||
ModalFactory.create({
|
||||
large: true,
|
||||
title: Str.get_string('edituserenrolment', 'enrol', container.dataset.fullname),
|
||||
type: ModalFactory.types.SAVE_CANCEL,
|
||||
body: getBody(userEnrolmentId)
|
||||
})
|
||||
.then(modal => {
|
||||
// Handle save event.
|
||||
modal.getRoot().on(ModalEvents.save, e => {
|
||||
// Don't close the modal yet.
|
||||
e.preventDefault();
|
||||
|
||||
// Submit form data.
|
||||
submitEditFormAjax(link, getBody, modal, userEnrolmentId, container.dataset);
|
||||
});
|
||||
|
||||
// Handle hidden event.
|
||||
modal.getRoot().on(ModalEvents.hidden, () => {
|
||||
// Destroy when hidden.
|
||||
modal.destroy();
|
||||
});
|
||||
|
||||
// Show the modal.
|
||||
modal.show();
|
||||
|
||||
return modal;
|
||||
})
|
||||
.catch(Notification.exception);
|
||||
};
|
||||
|
||||
/**
|
||||
* Show and handle the unenrolment confirmation dialogue.
|
||||
*
|
||||
* @param {HTMLElement} link
|
||||
*/
|
||||
const showUnenrolConfirmation = link => {
|
||||
const container = getStatusContainer(link);
|
||||
const userEnrolmentId = getUserEnrolmentIdFromLink(link);
|
||||
|
||||
ModalFactory.create({
|
||||
type: ModalFactory.types.SAVE_CANCEL,
|
||||
})
|
||||
.then(modal => {
|
||||
// Handle confirm event.
|
||||
modal.getRoot().on(ModalEvents.save, e => {
|
||||
// Don't close the modal yet.
|
||||
e.preventDefault();
|
||||
|
||||
// Submit data.
|
||||
submitUnenrolFormAjax(
|
||||
link,
|
||||
modal,
|
||||
{
|
||||
ueid: userEnrolmentId,
|
||||
},
|
||||
container.dataset
|
||||
);
|
||||
});
|
||||
|
||||
// Handle hidden event.
|
||||
modal.getRoot().on(ModalEvents.hidden, () => {
|
||||
// Destroy when hidden.
|
||||
modal.destroy();
|
||||
});
|
||||
|
||||
// Display the delete confirmation modal.
|
||||
modal.show();
|
||||
|
||||
const stringData = [
|
||||
{
|
||||
key: 'unenrol',
|
||||
component: 'enrol',
|
||||
},
|
||||
{
|
||||
key: 'unenrolconfirm',
|
||||
component: 'enrol',
|
||||
param: {
|
||||
user: container.dataset.fullname,
|
||||
course: container.dataset.coursename,
|
||||
enrolinstancename: container.dataset.enrolinstancename,
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
return Promise.all([Str.get_strings(stringData), modal]);
|
||||
})
|
||||
.then(([strings, modal]) => {
|
||||
modal.setTitle(strings[0]);
|
||||
modal.setSaveButtonText(strings[0]);
|
||||
modal.setBody(strings[1]);
|
||||
|
||||
return modal;
|
||||
})
|
||||
.catch(Notification.exception);
|
||||
};
|
||||
|
||||
/**
|
||||
* Show the user details dialogue.
|
||||
*
|
||||
* @param {HTMLElement} link
|
||||
*/
|
||||
const showStatusDetails = link => {
|
||||
const container = getStatusContainer(link);
|
||||
|
||||
const context = {
|
||||
editenrollink: '',
|
||||
statusclass: container.querySelector('span.badge').getAttribute('class'),
|
||||
...container.dataset,
|
||||
};
|
||||
|
||||
// Find the edit enrolment link.
|
||||
const editEnrolLink = container.querySelector(Selectors.editEnrolment);
|
||||
if (editEnrolLink) {
|
||||
// If there's an edit enrolment link for this user, clone it into the context for the modal.
|
||||
context.editenrollink = editEnrolLink.outerHTML;
|
||||
}
|
||||
|
||||
ModalFactory.create({
|
||||
large: true,
|
||||
type: ModalFactory.types.CANCEL,
|
||||
title: Str.get_string('enroldetails', 'enrol'),
|
||||
body: Templates.render('core_user/status_details', context),
|
||||
})
|
||||
.then(modal => {
|
||||
if (editEnrolLink) {
|
||||
modal.getRoot().on('click', Selectors.editEnrolment, e => {
|
||||
e.preventDefault();
|
||||
modal.hide();
|
||||
|
||||
// Trigger click event for the edit enrolment link to show the edit enrolment modal.
|
||||
editEnrolLink.click();
|
||||
});
|
||||
}
|
||||
|
||||
modal.show();
|
||||
|
||||
// Handle hidden event.
|
||||
modal.getRoot().on(ModalEvents.hidden, () => modal.destroy());
|
||||
|
||||
return modal;
|
||||
})
|
||||
.catch(Notification.exception);
|
||||
};
|
||||
|
||||
/**
|
||||
* Submit the edit dialogue.
|
||||
*
|
||||
* @param {HTMLElement} clickedLink
|
||||
* @param {Function} getBody
|
||||
* @param {Object} modal
|
||||
* @param {Number} userEnrolmentId
|
||||
* @param {Object} userData
|
||||
*/
|
||||
const submitEditFormAjax = (clickedLink, getBody, modal, userEnrolmentId, userData) => {
|
||||
const form = modal.getRoot().find('form');
|
||||
|
||||
Repository.submitUserEnrolmentForm(form.serialize())
|
||||
.then(data => {
|
||||
if (!data.result) {
|
||||
throw data.result;
|
||||
}
|
||||
|
||||
// Dismiss the modal.
|
||||
modal.hide();
|
||||
modal.destroy();
|
||||
|
||||
return data;
|
||||
})
|
||||
.then(() => {
|
||||
DynamicTable.refreshTableContent(getDynamicTableFromLink(clickedLink));
|
||||
|
||||
return Str.get_string('enrolmentupdatedforuser', 'core_enrol', userData);
|
||||
})
|
||||
.then(notificationString => {
|
||||
notifyUser(notificationString);
|
||||
|
||||
return;
|
||||
})
|
||||
.catch(() => {
|
||||
modal.setBody(getBody(userEnrolmentId, JSON.stringify(form.serialize())));
|
||||
|
||||
return modal;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Submit the unenrolment form.
|
||||
*
|
||||
* @param {HTMLElement} clickedLink
|
||||
* @param {Object} modal
|
||||
* @param {Object} args
|
||||
* @param {Object} userData
|
||||
*/
|
||||
const submitUnenrolFormAjax = (clickedLink, modal, args, userData) => {
|
||||
Repository.unenrolUser(args.ueid)
|
||||
.then(data => {
|
||||
if (!data.result) {
|
||||
// Display an alert containing the error message
|
||||
Notification.alert(data.errors[0].key, data.errors[0].message);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
// Dismiss the modal.
|
||||
modal.hide();
|
||||
modal.destroy();
|
||||
|
||||
return data;
|
||||
})
|
||||
.then(() => {
|
||||
DynamicTable.refreshTableContent(getDynamicTableFromLink(clickedLink));
|
||||
|
||||
return Str.get_string('unenrolleduser', 'core_enrol', userData);
|
||||
})
|
||||
.then(notificationString => {
|
||||
notifyUser(notificationString);
|
||||
|
||||
return;
|
||||
})
|
||||
.catch(Notification.exception);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the body fragment.
|
||||
*
|
||||
* @param {Number} contextId
|
||||
* @param {Number} ueid The user enrolment id
|
||||
* @param {Object} formdata
|
||||
* @returns {Promise}
|
||||
*/
|
||||
const getBody = (contextId, ueid, formdata = null) => Fragment.loadFragment(
|
||||
'enrol',
|
||||
'user_enrolment_form',
|
||||
contextId,
|
||||
{
|
||||
ueid,
|
||||
formdata,
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* Initialise the statu field handler.
|
||||
*
|
||||
* @param {Number} contextid
|
||||
* @param {Number} uniqueid
|
||||
*/
|
||||
export const init = ({contextid, uniqueid}) => {
|
||||
registerEventListeners(contextid, uniqueid);
|
||||
};
|
||||
|
||||
@@ -239,7 +239,10 @@ class participants extends \table_sql implements dynamic_table {
|
||||
parent::out($pagesize, $useinitialsbar, $downloadhelpbutton);
|
||||
|
||||
if (has_capability('moodle/course:enrolreview', $this->context)) {
|
||||
$params = ['contextid' => $this->context->id, 'courseid' => $this->course->id];
|
||||
$params = [
|
||||
'contextid' => $this->context->id,
|
||||
'uniqueid' => $this->uniqueid,
|
||||
];
|
||||
$PAGE->requires->js_call_amd('core_user/status_field', 'init', [$params]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user