From 8ffe06b9aa164dc8cdde0c6deb20f8a5b14217b4 Mon Sep 17 00:00:00 2001 From: Shamim Rezaie Date: Thu, 26 Sep 2019 12:51:36 +1000 Subject: [PATCH] MDL-66298 javascript: Introduced new core AMD for sending bulk messages Part of MDL-66076. --- message/amd/build/message_send_bulk.min.js | 2 + .../amd/build/message_send_bulk.min.js.map | 1 + message/amd/src/message_send_bulk.js | 114 ++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 message/amd/build/message_send_bulk.min.js create mode 100644 message/amd/build/message_send_bulk.min.js.map create mode 100644 message/amd/src/message_send_bulk.js diff --git a/message/amd/build/message_send_bulk.min.js b/message/amd/build/message_send_bulk.min.js new file mode 100644 index 00000000000..124d648916a --- /dev/null +++ b/message/amd/build/message_send_bulk.min.js @@ -0,0 +1,2 @@ +define ("core_message/message_send_bulk",["exports","core/str","core/modal_factory","core/templates","core/modal_events","core/ajax","core/notification"],function(a,b,c,d,e,f,g){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.sendMessage=a.showModal=void 0;c=h(c);d=h(d);e=h(e);f=h(f);g=h(g);function h(a){return a&&a.__esModule?a:{default:a}}var i=function(a){var f=1.\n\n/**\n * Send bulk message to the given user ids.\n *\n * @module core_message/message_send_bulk\n * @copyright 2019 Shamim Rezaie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport {get_string} from 'core/str';\nimport ModalFactory from 'core/modal_factory';\nimport Templates from 'core/templates';\nimport ModalEvents from 'core/modal_events';\nimport Ajax from 'core/ajax';\nimport Notification from 'core/notification';\n\n/**\n * Show the send message popup.\n *\n * @method showModal\n * @param {int[]} users\n * @param {Function} callback A callback to apply after the form is closed.\n * @returns {Promise}\n */\nexport const showModal = (users, callback = null) => {\n if (!users.length) {\n // Nothing to do.\n return Promise.resolve();\n }\n let titlePromise = null;\n if (users.length == 1) {\n titlePromise = get_string('sendbulkmessagesingle', 'core_message');\n } else {\n titlePromise = get_string('sendbulkmessage', 'core_message', users.length);\n }\n\n return ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n body: Templates.render('core_user/send_bulk_message', {}),\n title: titlePromise,\n })\n .then(function(modal) {\n modal.setSaveButtonText(titlePromise);\n\n // We want to focus on the action select when the dialog is closed.\n modal.getRoot().on(ModalEvents.hidden, function() {\n if (callback) {\n callback();\n }\n modal.getRoot().remove();\n });\n\n modal.getRoot().on(ModalEvents.save, function() {\n let messageText = modal.getRoot().find('form textarea').val();\n sendMessage(messageText, users);\n });\n\n modal.show();\n\n return modal;\n });\n};\n\n/**\n * Send a message to these users.\n *\n * @method sendMessage\n * @param {String} messageText\n * @param {Number[]} users\n * @returns {Promise}\n */\nexport const sendMessage = (messageText, users) => {\n let messages = [];\n\n users.forEach(user => {\n messages.push({\n touserid: user,\n text: messageText\n });\n });\n\n return Ajax.call([{\n methodname: 'core_message_send_instant_messages',\n args: {messages: messages}\n }])[0]\n .then(function(messageIds) {\n if (messageIds.length == 1) {\n return get_string('sendbulkmessagesentsingle', 'core_message');\n } else {\n return get_string('sendbulkmessagesent', 'core_message', messageIds.length);\n }\n })\n .then(function(msg) {\n Notification.addNotification({\n message: msg,\n type: \"success\"\n });\n return true;\n })\n .catch(Notification.exception);\n};\n"],"file":"message_send_bulk.min.js"} \ No newline at end of file diff --git a/message/amd/src/message_send_bulk.js b/message/amd/src/message_send_bulk.js new file mode 100644 index 00000000000..50c56ec3738 --- /dev/null +++ b/message/amd/src/message_send_bulk.js @@ -0,0 +1,114 @@ +// 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 . + +/** + * Send bulk message to the given user ids. + * + * @module core_message/message_send_bulk + * @copyright 2019 Shamim Rezaie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +import {get_string} from 'core/str'; +import ModalFactory from 'core/modal_factory'; +import Templates from 'core/templates'; +import ModalEvents from 'core/modal_events'; +import Ajax from 'core/ajax'; +import Notification from 'core/notification'; + +/** + * Show the send message popup. + * + * @method showModal + * @param {int[]} users + * @param {Function} callback A callback to apply after the form is closed. + * @returns {Promise} + */ +export const showModal = (users, callback = null) => { + if (!users.length) { + // Nothing to do. + return Promise.resolve(); + } + let titlePromise = null; + if (users.length == 1) { + titlePromise = get_string('sendbulkmessagesingle', 'core_message'); + } else { + titlePromise = 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, + }) + .then(function(modal) { + modal.setSaveButtonText(titlePromise); + + // We want to focus on the action select when the dialog is closed. + modal.getRoot().on(ModalEvents.hidden, function() { + if (callback) { + callback(); + } + modal.getRoot().remove(); + }); + + modal.getRoot().on(ModalEvents.save, function() { + let messageText = modal.getRoot().find('form textarea').val(); + sendMessage(messageText, users); + }); + + modal.show(); + + return modal; + }); +}; + +/** + * Send a message to these users. + * + * @method sendMessage + * @param {String} messageText + * @param {Number[]} users + * @returns {Promise} + */ +export const sendMessage = (messageText, users) => { + let messages = []; + + users.forEach(user => { + messages.push({ + touserid: user, + text: messageText + }); + }); + + return Ajax.call([{ + methodname: 'core_message_send_instant_messages', + args: {messages: messages} + }])[0] + .then(function(messageIds) { + if (messageIds.length == 1) { + return get_string('sendbulkmessagesentsingle', 'core_message'); + } else { + return get_string('sendbulkmessagesent', 'core_message', messageIds.length); + } + }) + .then(function(msg) { + Notification.addNotification({ + message: msg, + type: "success" + }); + return true; + }) + .catch(Notification.exception); +};