AutorÃa | Ultima modificación | Ver Log |
{"version":3,"file":"status_field.min.js","sources":["../src/status_field.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 <http://www.gnu.org/licenses/>.\n\n/**\n * AMD module for the user enrolment status field in the course participants page.\n *\n * @module core_user/status_field\n * @copyright 2017 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL
v3 or later\n */\n\nimport * as DynamicTable from 'core_table/dynamic';\nimport * as Repository from './repository';\nimport * as Str from 'core/str';\nimport DynamicTableSelectors from 'core_table/local/dynamic/selectors';\nimport Fragment from 'core/fragment';\nimport ModalEvents from 'core/modal_events';\nimport Notification from 'core/notification';\nimport Templates from 'core/templates';\nimport {add as notifyUser} from 'core/toast';\nimport SaveCancelModal from 'core/modal_save_cancel';\nimport CancelModal from 'core/modal_cancel';\n\nconst Selectors = {\n editEnrolment: '[data-action=\"editenrolment\"]',\n showDetails: '[data-action=\"showdetails\"]',\n unenrol: '[data-action=\"unenrol\"]',\n statusElement: '[data-status]',\n};\n\n/**\n * Get the dynamic table from the specified link.\n *\n * @param {HTMLElement} link\n * @returns {HTMLElement}\n */\nconst getDynamicTableFromLink = link => link.closest(DynamicTableSelectors.main.region);\n\n/**\n * Get the status container from the specif
ied link.\n *\n * @param {HTMLElement} link\n * @returns {HTMLElement}\n */\nconst getStatusContainer = link => link.closest(Selectors.statusElement);\n\n/**\n * Get user enrolment id from the specified link\n *\n * @param {HTMLElement} link\n * @returns {Number}\n */\nconst getUserEnrolmentIdFromLink = link => link.getAttribute('rel');\n\n/**\n * Register all event listeners for the status fields.\n *\n * @param {Number} contextId\n * @param {Number} uniqueId\n */\nconst registerEventListeners = (contextId, uniqueId) => {\n const getBodyFunction = (userEnrolmentId, formData) => getBody(contextId, userEnrolmentId, formData);\n\n document.addEventListener('click', e => {\n const tableRoot = e.target.closest(DynamicTableSelectors.main.fromRegionId(uniqueId));\n if (!tableRoot) {\n return;\n }\n\n const editLink = e.target.closest(Selectors.editEnrolment);\n if (editLink) {\n e.preventDefault();\n\n showEditDialogue(editLink, getBodyFunct
ion);\n }\n\n const unenrolLink = e.target.closest(Selectors.unenrol);\n if (unenrolLink) {\n e.preventDefault();\n\n showUnenrolConfirmation(unenrolLink);\n }\n\n const showDetailsLink = e.target.closest(Selectors.showDetails);\n if (showDetailsLink) {\n e.preventDefault();\n\n showStatusDetails(showDetailsLink);\n }\n });\n};\n\n/**\n * Show the edit dialogue.\n *\n * @param {HTMLElement} link\n * @param {Function} getBody Function to get the body for the specified user enrolment\n */\nconst showEditDialogue = (link, getBody) => {\n const container = getStatusContainer(link);\n const userEnrolmentId = getUserEnrolmentIdFromLink(link);\n\n SaveCancelModal.create({\n large: true,\n title: Str.get_string('edituserenrolment', 'enrol', container.dataset.fullname),\n body: getBody(userEnrolmentId)\n })\n .then(modal => {\n // Handle save event.\n modal.getRoot().on(Mod
alEvents.save, e => {\n // Don't close the modal yet.\n e.preventDefault();\n\n // Submit form data.\n submitEditFormAjax(link, getBody, modal, userEnrolmentId, container.dataset);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, () => {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Show the modal.\n modal.show();\n\n return modal;\n })\n .catch(Notification.exception);\n};\n\n/**\n * Show and handle the unenrolment confirmation dialogue.\n *\n * @param {HTMLElement} link\n */\nconst showUnenrolConfirmation = link => {\n const container = getStatusContainer(link);\n const userEnrolmentId = getUserEnrolmentIdFromLink(link);\n\n SaveCancelModal.create()\n .then(modal => {\n // Handle confirm event.\n modal.getRoot().on(ModalEvents.save, e => {\n // Don't close the modal yet.\n e.preventDefault();\n\n
// Submit data.\n submitUnenrolFormAjax(\n link,\n modal,\n {\n ueid: userEnrolmentId,\n },\n container.dataset\n );\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, () => {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Display the delete confirmation modal.\n modal.show();\n\n const stringData = [\n {\n key: 'unenrol',\n component: 'enrol',\n },\n {\n key: 'unenrolconfirm',\n component: 'enrol',\n param: {\n user: container.dataset.fullname,\n course: container.dataset.coursename,\n enrolinstancename: container.dataset.enrolinstancename,\n }\n }\n ];\n\n return Promise.all([Str.ge
t_strings(stringData), modal]);\n })\n .then(([strings, modal]) => {\n modal.setTitle(strings[0]);\n modal.setSaveButtonText(strings[0]);\n modal.setBody(strings[1]);\n\n return modal;\n })\n .catch(Notification.exception);\n};\n\n/**\n * Show the user details dialogue.\n *\n * @param {HTMLElement} link\n */\nconst showStatusDetails = link => {\n const container = getStatusContainer(link);\n\n const context = {\n editenrollink: '',\n statusclass: container.querySelector('span.badge').getAttribute('class'),\n ...container.dataset,\n };\n\n // Find the edit enrolment link.\n const editEnrolLink = container.querySelector(Selectors.editEnrolment);\n if (editEnrolLink) {\n // If there's an edit enrolment link for this user, clone it into the context for the modal.\n context.editenrollink = editEnrolLink.outerHTML;\n }\n\n CancelModal.create({\n large: true,\n title: Str.get_string('enroldetails', 'enro
l'),\n body: Templates.render('core_user/status_details', context),\n })\n .then(modal => {\n if (editEnrolLink) {\n modal.getRoot().on('click', Selectors.editEnrolment, e => {\n e.preventDefault();\n modal.hide();\n\n // Trigger click event for the edit enrolment link to show the edit enrolment modal.\n editEnrolLink.click();\n });\n }\n\n modal.show();\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, () => modal.destroy());\n\n return modal;\n })\n .catch(Notification.exception);\n};\n\n/**\n * Submit the edit dialogue.\n *\n * @param {HTMLElement} clickedLink\n * @param {Function} getBody\n * @param {Object} modal\n * @param {Number} userEnrolmentId\n * @param {Object} userData\n */\nconst submitEditFormAjax = (clickedLink, getBody, modal, userEnrolmentId, userData) => {\n const form = modal.getRoot().find('form');\n\n Repository.submitUse
rEnrolmentForm(form.serialize())\n .then(data => {\n if (!data.result) {\n throw data.result;\n }\n\n // Dismiss the modal.\n modal.hide();\n modal.destroy();\n\n return data;\n })\n .then(() => {\n DynamicTable.refreshTableContent(getDynamicTableFromLink(clickedLink))\n .catch(Notification.exception);\n\n return Str.get_string('enrolmentupdatedforuser', 'core_enrol', userData);\n })\n .then(notificationString => {\n notifyUser(notificationString);\n\n return;\n })\n .catch(() => {\n modal.setBody(getBody(userEnrolmentId, JSON.stringify(form.serialize())));\n\n return modal;\n });\n};\n\n/**\n * Submit the unenrolment form.\n *\n * @param {HTMLElement} clickedLink\n * @param {Object} modal\n * @param {Object} args\n * @param {Object} userData\n */\nconst submitUnenrolFormAjax = (clickedLink, modal, args, userData) => {\n Repository.unenrolUser(args.ueid)\n .then(data => {\n
if (!data.result) {\n // Display an alert containing the error message\n Notification.alert(data.errors[0].key, data.errors[0].message);\n\n return data;\n }\n\n // Dismiss the modal.\n modal.hide();\n modal.destroy();\n\n return data;\n })\n .then(() => {\n DynamicTable.refreshTableContent(getDynamicTableFromLink(clickedLink))\n .catch(Notification.exception);\n\n return Str.get_string('unenrolleduser', 'core_enrol', userData);\n })\n .then(notificationString => {\n notifyUser(notificationString);\n\n return;\n })\n .catch(Notification.exception);\n};\n\n/**\n * Get the body fragment.\n *\n * @param {Number} contextId\n * @param {Number} ueid The user enrolment id\n * @param {Object} formdata\n * @returns {Promise}\n */\nconst getBody = (contextId, ueid, formdata = null) => Fragment.loadFragment(\n 'enrol',\n 'user_enrolment_form',\n contextId,\n {\n ueid,\n f
ormdata,\n }\n);\n\n/**\n * Initialise the statu field handler.\n *\n * @param {object} param\n * @param {Number} param.contextid\n * @param {Number} param.uniqueid\n */\nexport const init = ({contextid, uniqueid}) => {\n registerEventListeners(contextid, uniqueid);\n};\n"],"names":["Selectors","getDynamicTableFromLink","link","closest","DynamicTableSelectors","main","region","getStatusContainer","getUserEnrolmentIdFromLink","getAttribute","showEditDialogue","getBody","container","userEnrolmentId","create","large","title","Str","get_string","dataset","fullname","body","then","modal","getRoot","on","ModalEvents","save","e","preventDefault","submitEditFormAjax","hidden","destroy","show","catch","Notification","exception","showUnenrolConfirmation","submitUnenrolFormAjax","ueid","stringData","key","component","param","user","course","coursename","enrolinstancename","Promise","all","get_strings","_ref","strings","setTitle","setSaveButtonText","setBody","showStatusDetails","context","editenrollink","statuscl
ass","querySelector","editEnrolLink","outerHTML","Templates","render","hide","click","clickedLink","userData","form","find","Repository","submitUserEnrolmentForm","serialize","data","result","DynamicTable","refreshTableContent","notificationString","JSON","stringify","args","unenrolUser","alert","errors","message","contextId","formdata","Fragment","loadFragment","_ref2","contextid","uniqueid","uniqueId","getBodyFunction","formData","document","addEventListener","target","fromRegionId","editLink","unenrolLink","showDetailsLink","registerEventListeners"],"mappings":"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"}