Current Path : C:/xampp/htdocs/moodle/user/amd/src/local/participants/ |
Current File : C:/xampp/htdocs/moodle/user/amd/src/local/participants/bulkactions.js |
// 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/>. /** * Bulk actions for lists of participants. * * @module core_user/local/participants/bulkactions * @package core_user * @copyright 2020 Andrew Nicols <andrew@nicols.co.uk> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import * as Repository from 'core_user/repository'; import * as Str from 'core/str'; import ModalEvents from 'core/modal_events'; import ModalFactory from 'core/modal_factory'; import Templates from 'core/templates'; import {add as notifyUser} from 'core/toast'; /** * Show the add note popup * * @param {Number} courseid * @param {Number[]} users * @param {String[]} noteStateNames * @param {HTMLElement} stateHelpIcon * @return {Promise} */ export const showAddNote = (courseid, users, noteStateNames, stateHelpIcon) => { if (!users.length) { // No users were selected. return Promise.resolve(); } const states = []; for (let key in noteStateNames) { switch (key) { case 'draft': states.push({value: 'personal', label: noteStateNames[key]}); break; case 'public': states.push({value: 'course', label: noteStateNames[key], selected: 1}); break; case 'site': states.push({value: key, label: noteStateNames[key]}); break; } } const context = { stateNames: states, stateHelpIcon: stateHelpIcon.innerHTML, }; let titlePromise = null; if (users.length === 1) { titlePromise = Str.get_string('addbulknotesingle', 'core_notes'); } else { titlePromise = Str.get_string('addbulknote', 'core_notes', users.length); } return ModalFactory.create({ type: ModalFactory.types.SAVE_CANCEL, body: Templates.render('core_user/add_bulk_note', context), title: titlePromise, buttons: { save: titlePromise, }, removeOnClose: true, }) .then(modal => { modal.getRoot().on(ModalEvents.save, () => submitAddNote(courseid, users, modal)); modal.show(); return modal; }); }; /** * Add a note to this list of users. * * @param {Number} courseid * @param {Number[]} users * @param {Modal} modal * @return {Promise} */ const submitAddNote = (courseid, users, modal) => { const text = modal.getRoot().find('form textarea').val(); const publishstate = modal.getRoot().find('form select').val(); const notes = users.map(userid => { return { userid, text, courseid, publishstate, }; }); return Repository.createNotesForUsers(notes) .then(noteIds => { if (noteIds.length === 1) { return Str.get_string('addbulknotedonesingle', 'core_notes'); } else { return Str.get_string('addbulknotedone', 'core_notes', noteIds.length); } }) .then(msg => notifyUser(msg)) .catch(Notification.exception); }; /** * Show the send message popup. * * @param {Number[]} users * @return {Promise} */ export const showSendMessage = users => { if (!users.length) { // Nothing to do. return Promise.resolve(); } let titlePromise; if (users.length === 1) { titlePromise = Str.get_string('sendbulkmessagesingle', 'core_message'); } else { titlePromise = Str.get_string('sendbulkmessage', 'core_message', users.length); } return ModalFactory.create({ type: ModalFactory.types.SAVE_CANCEL, body: Templates.render('core_user/send_bulk_message', {}), title: titlePromise, buttons: { save: titlePromise, }, removeOnClose: true, }) .then(modal => { modal.getRoot().on(ModalEvents.save, () => { submitSendMessage(modal, users); }); modal.show(); return modal; }); }; /** * Send a message to these users. * * @param {Modal} modal * @param {Number[]} users * @return {Promise} */ const submitSendMessage = (modal, users) => { const text = modal.getRoot().find('form textarea').val(); const messages = users.map(touserid => { return { touserid, text, }; }); return Repository.sendMessagesToUsers(messages) .then(messageIds => { if (messageIds.length == 1) { return Str.get_string('sendbulkmessagesentsingle', 'core_message'); } else { return Str.get_string('sendbulkmessagesent', 'core_message', messageIds.length); } }) .then(msg => notifyUser(msg)) .catch(Notification.exception); };