From 11603b82e5c2e5b41295a9bec80e0fdb6799e087 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Tue, 21 Nov 2023 09:42:48 +0000 Subject: [PATCH 01/26] Initial implementation of tiny_teamsmeeting plugin for Moodle 4.1+ --- .../tiny/plugins/teamsmeeting/README.MD | 49 ++++ .../teamsmeeting/amd/build/commands.min.js | 11 + .../amd/build/commands.min.js.map | 1 + .../teamsmeeting/amd/build/common.min.js | 12 + .../teamsmeeting/amd/build/common.min.js.map | 1 + .../amd/build/configuration.min.js | 12 + .../amd/build/configuration.min.js.map | 1 + .../teamsmeeting/amd/build/options.min.js | 12 + .../teamsmeeting/amd/build/options.min.js.map | 1 + .../teamsmeeting/amd/build/plugin.min.js | 11 + .../teamsmeeting/amd/build/plugin.min.js.map | 1 + .../plugins/teamsmeeting/amd/src/commands.js | 230 ++++++++++++++++++ .../plugins/teamsmeeting/amd/src/common.js | 32 +++ .../teamsmeeting/amd/src/configuration.js | 42 ++++ .../plugins/teamsmeeting/amd/src/options.js | 59 +++++ .../plugins/teamsmeeting/amd/src/plugin.js | 60 +++++ .../teamsmeeting/classes/edit_meeting_api.php | 52 ++++ .../teamsmeeting/classes/plugininfo.php | 73 ++++++ .../teamsmeeting/classes/privacy/provider.php | 101 ++++++++ .../tiny/plugins/teamsmeeting/db/install.xml | 20 ++ .../tiny/plugins/teamsmeeting/db/services.php | 20 ++ .../teamsmeeting/docs/createmeeting.png | Bin 0 -> 211420 bytes .../teamsmeeting/docs/meetingcreated.png | Bin 0 -> 112474 bytes .../plugins/teamsmeeting/docs/meetingdata.png | Bin 0 -> 116102 bytes .../plugins/teamsmeeting/docs/selected.png | Bin 0 -> 57202 bytes .../tiny/plugins/teamsmeeting/docs/signin.png | Bin 0 -> 181608 bytes .../plugins/teamsmeeting/docs/toolbar.png | Bin 0 -> 25052 bytes .../lang/en/tiny_teamsmeeting.php | 50 ++++ .../lang/pl/tiny_teamsmeeting.php | 51 ++++ .../tiny/plugins/teamsmeeting/pix/icon.png | Bin 0 -> 587 bytes .../tiny/plugins/teamsmeeting/pix/icon.svg | 121 +++++++++ .../tiny/plugins/teamsmeeting/result.php | 101 ++++++++ .../tiny/plugins/teamsmeeting/settings.php | 38 +++ .../tiny/plugins/teamsmeeting/version.php | 33 +++ 34 files changed, 1195 insertions(+) create mode 100644 lib/editor/tiny/plugins/teamsmeeting/README.MD create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js.map create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/amd/src/plugin.js create mode 100644 lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/db/install.xml create mode 100644 lib/editor/tiny/plugins/teamsmeeting/db/services.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/docs/createmeeting.png create mode 100644 lib/editor/tiny/plugins/teamsmeeting/docs/meetingcreated.png create mode 100644 lib/editor/tiny/plugins/teamsmeeting/docs/meetingdata.png create mode 100644 lib/editor/tiny/plugins/teamsmeeting/docs/selected.png create mode 100644 lib/editor/tiny/plugins/teamsmeeting/docs/signin.png create mode 100644 lib/editor/tiny/plugins/teamsmeeting/docs/toolbar.png create mode 100644 lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/pix/icon.png create mode 100644 lib/editor/tiny/plugins/teamsmeeting/pix/icon.svg create mode 100644 lib/editor/tiny/plugins/teamsmeeting/result.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/settings.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/version.php diff --git a/lib/editor/tiny/plugins/teamsmeeting/README.MD b/lib/editor/tiny/plugins/teamsmeeting/README.MD new file mode 100644 index 000000000..bd578eb05 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/README.MD @@ -0,0 +1,49 @@ +# A Tiny editor plugin to create Microsoft Teams meeting and imports meeting link + +## Description +[Microsoft Meetings application](https://github.com/OfficeDev/msteams-app-lms-meetings#frequently-asked-questions) integrated into Tiny editor plugin which allows to create meeting and automatically add meeting link into Tiny editor field content. + +## Installation +* Download the plugin and extract into lib/editor/tiny/plugins/teamsmeeting. +* Install like any other Moodle plugin (ie via visiting as admin /admin/index.php?cache=1). + +## Usage Guide +1. When editing HTML content using the Tiny editor, type the text which you want to make as meeting link, select it and click on the Microsoft Teams icon. + +![Screenshot of the toolbar](docs/toolbar.png) + +2. Then select Create meeting link (you will need to sign in to your Microsoft Teams account the first time you use it). + +![Screenshot of the sign in page](docs/signin.png) + +![Screenshot of the create meeting page](docs/createmeeting.png) + +3. Enter a meeting title, date, and time, then click Create. + +![Screenshot of the enter meeting data page](docs/meetingdata.png) + +4. The link will show in the field “Your meeting URL”. Mark “Open in a new window” if you want the meeting to open in a new tab and click “Add link” to finish. + +![Screenshot of the meeting created page](docs/meetingcreated.png) + +5. To reach meeting options select the text with the meeting link that you have created before and click on the Microsoft Teams icon in the Tiny editor toolbar. + +![Screenshot of the selected link page](docs/selected.png) + +6. You will get to the same screen with two buttons - "Go to Meeting" and "Meeting Options". Click on the "Meeting Options" button and a new browser window will open with your meeting options. + +## Localization +Tiny Teams Meeting plugin also enables to use Meetings App locale feature. User language selected in Moodle is passed to Meetings App. At the moment Meetings app supported locales - 'ar', 'bg', 'cs', 'cy', 'da', 'de', 'en-us', 'en-gb', 'es', 'es-mx', 'fi', 'fr', 'fr-ca', 'he', 'is', 'it', 'ja', 'ko', 'nb', 'nl', 'no', 'nn-no', 'pl', 'pt-br', 'pt-pt', 'ru', 'sv', 'th', 'tr', 'zh-cn', 'zh-tw'. + +Tiny Teams Meeting plugin itself by default supports only 'en' locale. However, Moodle community is adding more translations for the plugin. [Full list can be found here](https://moodle.org/plugins/translations.php?plugin=tiny_teamsmeeting). + +You can always add translations yourself. [More details here](https://docs.moodle.org/dev/Translating_plugins). + +## Hosting Meetings App (optional) +By default, the plugin uses Microsoft Meetings application hosted by Enovation at https://enomsteams.z16.web.core.windows.net. However, you can host Microsoft Meetings application yourself. To do this: +* Download Meetings App code prepared to work with Tiny plugin from https://github.com/enovation/msteams-app-lms-meetings +* Follow instructions in README file to set up and deploy application. +* Change Meetings application url in Tiny plugin settings to your new URL (/admin/settings.php?section=tiny_teamsmeeting_settings). + + + diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js new file mode 100644 index 000000000..298605c3e --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js @@ -0,0 +1,11 @@ +define("tiny_teamsmeeting/commands",["exports","editor_tiny/utils","core/str","./common","./options","core/ajax"],(function(_exports,_utils,_str,_common,_options,_ajax){var obj; +/** + * Commands helper for the Moodle tiny_teamsmeeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null};_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},handleSubmitAction=editor=>api=>{var _selectedNode$parentN,_selectedNode$parentN2;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&"tiny_meeting_link"===selectedNode.id?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&"tiny_meeting_link"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.id)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType);else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data){return{url:await _ajax.default.call([{methodname:"tiny_teamsmeeting_edit_meeting",args:{url:data.link}}])[0],meetingUrl:data.link,newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny"),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN3,_linkNode;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode2,_linkNode3;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN3=selectedNode.parentNode)||void 0===_selectedNode$parentN3?void 0:_selectedNode$parentN3.nodeName)&&(linkNode=selectedNode.parentNode),"tiny_meeting_link"===(null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.id)?{link:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("href"),target:null===(_linkNode3=linkNode)||void 0===_linkNode3?void 0:_linkNode3.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{var _selectedNode$parentN4;const selectedNode=editor.selection.getNode(),isActive="tiny_meeting_link"===selectedNode.id||"tiny_meeting_link"===(null===(_selectedNode$parentN4=selectedNode.parentNode)||void 0===_selectedNode$parentN4?void 0:_selectedNode$parentN4.id);buttonApi.setActive(isActive)}})); + +//# sourceMappingURL=commands.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map new file mode 100644 index 000000000..fb7d5b6fb --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_edit_meeting', args: { url: data['link'] } }])[0];\n return {\n url: result,\n meetingUrl: data['link'],\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode?.id === 'tiny_meeting_link') {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link';\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","api","getData","targetType","selectedNode","selection","getNode","linkNode","nodeName","id","parentNode","dom","setAttrib","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","Ajax","call","methodname","args","link","_linkNode2","getAttribute","target","_linkNode3","buttonApi","on","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js new file mode 100644 index 000000000..e303aac13 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js @@ -0,0 +1,12 @@ +define("tiny_teamsmeeting/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0; +/** + * Common values helper for the Moodle tiny_teamsmeeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +const component="tiny_teamsmeeting";var _default={component:component,pluginName:"".concat(component,"/plugin"),icon:component,createMeetingButtonName:"".concat(component,"_createMeeting")};return _exports.default=_default,_exports.default})); + +//# sourceMappingURL=common.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map new file mode 100644 index 000000000..736b37533 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"common.min.js","sources":["../src/common.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Common values helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nconst component = 'tiny_teamsmeeting';\n\nexport default {\n component,\n pluginName: `${component}/plugin`,\n icon: component,\n createMeetingButtonName: `${component}_createMeeting`,\n};\n"],"names":["component","pluginName","icon","createMeetingButtonName"],"mappings":";;;;;;;;;MAwBMA,UAAY,iCAEH,CACXA,UAAAA,UACAC,qBAAeD,qBACfE,KAAMF,UACNG,kCAA4BH"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js new file mode 100644 index 000000000..d6d0754a0 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js @@ -0,0 +1,12 @@ +define("tiny_teamsmeeting/configuration",["exports","./common","editor_tiny/utils"],(function(_exports,_common,_utils){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.configure=void 0; +/** + * Configuration for the Moodle tiny_teamsmeeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +const getToolbarConfiguration=instanceConfig=>{let toolbar=instanceConfig.toolbar;return toolbar=(0,_utils.addToolbarButtons)(toolbar,"content",[_common.createMeetingButtonName]),toolbar};_exports.configure=instanceConfig=>({toolbar:getToolbarConfiguration(instanceConfig)})})); + +//# sourceMappingURL=configuration.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map new file mode 100644 index 000000000..50bfa44c8 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"configuration.min.js","sources":["../src/configuration.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Configuration for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport { createMeetingButtonName } from './common';\n\nimport { addToolbarButtons } from 'editor_tiny/utils';\n\nconst getToolbarConfiguration = (instanceConfig) => {\n let toolbar = instanceConfig.toolbar;\n toolbar = addToolbarButtons(toolbar, 'content', [\n createMeetingButtonName,\n ]);\n\n return toolbar;\n};\n\nexport const configure = (instanceConfig) => {\n return {\n toolbar: getToolbarConfiguration(instanceConfig),\n };\n};\n"],"names":["getToolbarConfiguration","instanceConfig","toolbar","createMeetingButtonName"],"mappings":";;;;;;;;;MA4BMA,wBAA2BC,qBACzBC,QAAUD,eAAeC,eAC7BA,SAAU,4BAAkBA,QAAS,UAAW,CAC5CC,kCAGGD,4BAGeD,iBACf,CACHC,QAASF,wBAAwBC"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js new file mode 100644 index 000000000..214438b16 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js @@ -0,0 +1,12 @@ +define("tiny_teamsmeeting/options",["exports","editor_tiny/options","./common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.getMsession=_exports.getLocaleValue=_exports.getClientdomain=_exports.getAppurl=void 0; +/** + * Options for the Moodle tiny_teamsmeeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +const appurl=(0,_options.getPluginOptionName)(_common.pluginName,"appurl"),clientdomain=(0,_options.getPluginOptionName)(_common.pluginName,"clientdomain"),localevalue=(0,_options.getPluginOptionName)(_common.pluginName,"localevalue"),msession=(0,_options.getPluginOptionName)(_common.pluginName,"msession");_exports.register=editor=>{const registerOption=editor.options.register;registerOption(appurl,{processor:"string"}),registerOption(clientdomain,{processor:"string"}),registerOption(localevalue,{processor:"string"}),registerOption(msession,{processor:"string"})};_exports.getAppurl=editor=>editor.options.get(appurl);_exports.getClientdomain=editor=>editor.options.get(clientdomain);_exports.getLocaleValue=editor=>editor.options.get(localevalue);_exports.getMsession=editor=>editor.options.get(msession)})); + +//# sourceMappingURL=options.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map new file mode 100644 index 000000000..4a190f7a9 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"options.min.js","sources":["../src/options.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Options for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getPluginOptionName} from 'editor_tiny/options';\nimport {pluginName} from './common';\n\nconst appurl = getPluginOptionName(pluginName, 'appurl');\nconst clientdomain = getPluginOptionName(pluginName, 'clientdomain');\nconst localevalue = getPluginOptionName(pluginName, 'localevalue');\nconst msession = getPluginOptionName(pluginName, 'msession');\n\nexport const register = (editor) => {\n const registerOption = editor.options.register;\n\n registerOption(appurl, {\n processor: 'string',\n });\n registerOption(clientdomain, {\n processor: 'string',\n });\n registerOption(localevalue, {\n processor: 'string',\n });\n registerOption(msession, {\n processor: 'string',\n });\n};\n\n/**\n * Fetch the myFirstProperty value for this editor instance.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for\n * @returns {object} The value of the myFirstProperty option\n */\nexport const getAppurl = (editor) => editor.options.get(appurl);\nexport const getClientdomain = (editor) => editor.options.get(clientdomain);\nexport const getLocaleValue = (editor) => editor.options.get(localevalue);\nexport const getMsession = (editor) => editor.options.get(msession);\n"],"names":["appurl","pluginName","clientdomain","localevalue","msession","editor","registerOption","options","register","processor","get"],"mappings":";;;;;;;;;MA2BMA,QAAS,gCAAoBC,mBAAY,UACzCC,cAAe,gCAAoBD,mBAAY,gBAC/CE,aAAc,gCAAoBF,mBAAY,eAC9CG,UAAW,gCAAoBH,mBAAY,8BAExBI,eACfC,eAAiBD,OAAOE,QAAQC,SAEtCF,eAAeN,OAAQ,CACnBS,UAAW,WAEfH,eAAeJ,aAAc,CACzBO,UAAW,WAEfH,eAAeH,YAAa,CACxBM,UAAW,WAEfH,eAAeF,SAAU,CACrBK,UAAW,+BAUOJ,QAAWA,OAAOE,QAAQG,IAAIV,iCACxBK,QAAWA,OAAOE,QAAQG,IAAIR,sCAC/BG,QAAWA,OAAOE,QAAQG,IAAIP,kCACjCE,QAAWA,OAAOE,QAAQG,IAAIN"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js new file mode 100644 index 000000000..e90e84da9 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js @@ -0,0 +1,11 @@ +define("tiny_teamsmeeting/plugin",["exports","editor_tiny/loader","editor_tiny/utils","./common","./options","./commands","./configuration"],(function(_exports,_loader,_utils,_common,_options,_commands,Configuration){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Configuration=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj} +/** + * Tiny Teams Meeting plugin for Moodle. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */(Configuration);var _default=new Promise((async resolve=>{const[tinyMCE,pluginMetadata,setupCommands]=await Promise.all([(0,_loader.getTinyMCE)(),(0,_utils.getPluginMetadata)(_common.component,_common.pluginName),(0,_commands.getSetup)()]);tinyMCE.PluginManager.add(_common.pluginName,(editor=>((0,_options.register)(editor),setupCommands(editor),pluginMetadata))),resolve([_common.pluginName,Configuration])}));return _exports.default=_default,_exports.default})); + +//# sourceMappingURL=plugin.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js.map new file mode 100644 index 000000000..51fb81211 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"plugin.min.js","sources":["../src/plugin.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Tiny Teams Meeting plugin for Moodle.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getTinyMCE} from 'editor_tiny/loader';\nimport {getPluginMetadata} from 'editor_tiny/utils';\n\nimport {component, pluginName} from './common';\nimport {register as registerOptions} from './options';\nimport {getSetup as getCommandSetup} from './commands';\nimport * as Configuration from './configuration';\n\n// Set up the tiny_teamsmeeting Plugin.\nexport default new Promise(async(resolve) => {\n // Note: The PluginManager.add function does not support asynchronous configuration.\n // Perform any asynchronous configuration here, and then call the PluginManager.add function.\n const [\n tinyMCE,\n pluginMetadata,\n setupCommands,\n ] = await Promise.all([\n getTinyMCE(),\n getPluginMetadata(component, pluginName),\n getCommandSetup(),\n ]);\n\n // Reminder: Any asynchronous code must be run before this point.\n tinyMCE.PluginManager.add(pluginName, (editor) => {\n // Register any options that your plugin has\n registerOptions(editor);\n\n // Setup any commands such as buttons, menu items, and so on.\n setupCommands(editor);\n\n // Return the pluginMetadata object. This is used by TinyMCE to display a help link for your plugin.\n return pluginMetadata;\n });\n\n resolve([pluginName, Configuration]);\n});\n"],"names":["Promise","async","tinyMCE","pluginMetadata","setupCommands","all","component","pluginName","PluginManager","add","editor","resolve","Configuration"],"mappings":";;;;;;;;kCAiCe,IAAIA,SAAQC,MAAAA,gBAInBC,QACAC,eACAC,qBACMJ,QAAQK,IAAI,EAClB,yBACA,4BAAkBC,kBAAWC,qBAC7B,0BAIJL,QAAQM,cAAcC,IAAIF,oBAAaG,+BAEnBA,QAGhBN,cAAcM,QAGPP,kBAGXQ,QAAQ,CAACJ,mBAAYK"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js new file mode 100644 index 000000000..93ea8f0d5 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js @@ -0,0 +1,230 @@ +/* eslint-disable max-len */ +// This file is part of Moodle - https://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 . + +/** + * Commands helper for the Moodle tiny_teamsmeeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +import {getButtonImage} from 'editor_tiny/utils'; +import {get_string as getString} from 'core/str'; +import {component, createMeetingButtonName, icon} from './common'; +import {getAppurl, getClientdomain, getLocaleValue, getMsession} from "./options"; +import Ajax from 'core/ajax'; + +const dialogApiReference = { current: null }; + + +/** + * Get the setup function for the buttons. + * + * This is performed in an async function which ultimately returns the registration function as the + * Tiny.AddOnManager.Add() function does not support async functions. + * + * @returns {function} The registration function to call within the Plugin.add function. + */ +export const getSetup = async() => { + const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]); + + return editor => { + editor.ui.registry.addIcon(icon, buttonImage.html); + editor.ui.registry.addToggleButton(createMeetingButtonName, { + icon, + tooltip: createMeetingButtonNameTitle, + onAction: openDialog(editor), + onSetup: toggleActiveState(editor) + }); + + window.addEventListener('message', event => { + if (event.data && event.data.action === 'meetingUrl') { + updateMeetingUrlInput(event.data.url); + } + }); + }; +}; + +/** + * Opens a dialog for the editor to display a modal + * + * @param {Editor} editor - The editor object. + * @returns {function} - The async function that opens the dialog. + */ +const openDialog = editor => async () => { + const [ + modalTitle, + buttonPrimaryLabel, + buttonSecondaryLabel, + inputUrlLabel, + inputUrlPlaceholder, + checkboxNewWindowLabel, + ] = await Promise.all([ + getString('tiny_modal_title', component), + getString('tiny_button_primary_label', component), + getString('tiny_button_secondary_label', component), + getString('tiny_input_url_label', component), + getString('tiny_input_url_placeholder', component), + getString('tiny_checkbox_new_window_label', component), + ]); + + let iframeData = await getIframeData(editor); + + dialogApiReference.current = editor.windowManager.open({ + title: modalTitle, + body: { + type: 'panel', + items: [ + { type: 'htmlpanel', html: `` }, + { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder }, + { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel } + ] + }, + buttons: [ + { type: 'cancel', text: buttonSecondaryLabel }, + { type: 'submit', text: buttonPrimaryLabel, primary: true } + ], + onSubmit: handleSubmitAction(editor) + }); + + dialogApiReference.current.setData({ + meetingUrl: iframeData.meetingUrl, + newWindowCheckbox: iframeData.newWindow + }); +}; + +/** + * Handle the action of submitting the dialog. + * + * @param {Editor} editor The tinyMCE editor instance. + */ +const handleSubmitAction = (editor) => (api) => { + const data = api.getData(); + const meetingUrl = data.meetingUrl; + const newWindow = data.newWindowCheckbox; + const targetType = newWindow ? '_blank' : ''; + + let selectedNode = editor.selection.getNode(); + let linkNode = null; + + if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') { + linkNode = selectedNode; + } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') { + linkNode = selectedNode.parentNode; + } + + if (linkNode) { + editor.dom.setAttrib(linkNode, 'href', meetingUrl); + editor.dom.setAttrib(linkNode, 'target', targetType); + } else { + let selectedContent = editor.selection.getContent({ format: 'text' }); + let contentToInsert = (selectedContent) ? selectedContent : meetingUrl; + editor.insertContent(`${contentToInsert}`); + } + api.close(); +}; + +/** + * Updates the meeting URL in the dialog API. + * + * @param {string} url - The new meeting URL. + */ +const updateMeetingUrlInput = url => { + if (dialogApiReference.current) { + dialogApiReference.current.setData({ meetingUrl: url }); + } +}; + +/** + * Retrieves data for an iframe. + * + * @param {Editor} editor - The editor object. + * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe. + */ +const getIframeData = async (editor) => { + let data = getMeetingUrlFormSelectedNode(editor); + if (data) { + const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_edit_meeting', args: { url: data['link'] } }])[0]; + return { + url: result, + meetingUrl: data['link'], + newWindow: data['target'] === '_blank' + }; + } + return { + url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny`, + meetingUrl: '', + newWindow: false + }; +}; + +/** + * Retrieves the meeting URL and target from the selected node in the editor. + * + * @param {Editor} editor - The editor instance. + * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found. + */ +const getMeetingUrlFormSelectedNode = editor => { + let selectedNode = editor.selection.getNode(); + let linkNode = null; + + if (selectedNode.nodeName === 'A') { + linkNode = selectedNode; + } else if (selectedNode.parentNode?.nodeName === 'A') { + linkNode = selectedNode.parentNode; + } + + if (linkNode?.id === 'tiny_meeting_link') { + return { + link: linkNode?.getAttribute('href'), + target: linkNode?.getAttribute('target') + }; + } + + return null; +}; + +/** + * Toggles the active state of an editor. + * + * @param {Editor} editor - The editor instance. + * @returns {Function} - A cleanup function to remove the event listener. + * @throws {TypeError} - If editor parameter is not an instance of Editor. + */ +const toggleActiveState = editor => (buttonApi) => { + editor.on('NodeChange', () => handleNodeChange(editor, buttonApi)); + + return function cleanup () { + editor.on('NodeChange', () => handleNodeChange(editor, buttonApi)); + }; +}; + +/** + * Handles the change in the selected node in the editor. + * + * @param {Object} editor - The editor object. + * @param {Object} buttonApi - The button API object. + * + * @returns {void} + */ +const handleNodeChange = (editor, buttonApi) => { + const selectedNode = editor.selection.getNode(); + const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link'; + + buttonApi.setActive(isActive); +}; \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js new file mode 100644 index 000000000..0970f3acb --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js @@ -0,0 +1,32 @@ +// This file is part of Moodle - https://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 . + +/** + * Common values helper for the Moodle tiny_teamsmeeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +const component = 'tiny_teamsmeeting'; + +export default { + component, + pluginName: `${component}/plugin`, + icon: component, + createMeetingButtonName: `${component}_createMeeting`, +}; diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js new file mode 100644 index 000000000..64d52db7d --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js @@ -0,0 +1,42 @@ +// This file is part of Moodle - https://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 . + +/** + * Configuration for the Moodle tiny_teamsmeeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +import { createMeetingButtonName } from './common'; + +import { addToolbarButtons } from 'editor_tiny/utils'; + +const getToolbarConfiguration = (instanceConfig) => { + let toolbar = instanceConfig.toolbar; + toolbar = addToolbarButtons(toolbar, 'content', [ + createMeetingButtonName, + ]); + + return toolbar; +}; + +export const configure = (instanceConfig) => { + return { + toolbar: getToolbarConfiguration(instanceConfig), + }; +}; diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js new file mode 100644 index 000000000..2c49d5d03 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js @@ -0,0 +1,59 @@ +// This file is part of Moodle - https://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 . + +/** + * Options for the Moodle tiny_teamsmeeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +import {getPluginOptionName} from 'editor_tiny/options'; +import {pluginName} from './common'; + +const appurl = getPluginOptionName(pluginName, 'appurl'); +const clientdomain = getPluginOptionName(pluginName, 'clientdomain'); +const localevalue = getPluginOptionName(pluginName, 'localevalue'); +const msession = getPluginOptionName(pluginName, 'msession'); + +export const register = (editor) => { + const registerOption = editor.options.register; + + registerOption(appurl, { + processor: 'string', + }); + registerOption(clientdomain, { + processor: 'string', + }); + registerOption(localevalue, { + processor: 'string', + }); + registerOption(msession, { + processor: 'string', + }); +}; + +/** + * Fetch the myFirstProperty value for this editor instance. + * + * @param {tinyMCE} editor The editor instance to fetch the value for + * @returns {object} The value of the myFirstProperty option + */ +export const getAppurl = (editor) => editor.options.get(appurl); +export const getClientdomain = (editor) => editor.options.get(clientdomain); +export const getLocaleValue = (editor) => editor.options.get(localevalue); +export const getMsession = (editor) => editor.options.get(msession); diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/plugin.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/plugin.js new file mode 100644 index 000000000..602088471 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/plugin.js @@ -0,0 +1,60 @@ +// This file is part of Moodle - https://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 . + +/** + * Tiny Teams Meeting plugin for Moodle. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +import {getTinyMCE} from 'editor_tiny/loader'; +import {getPluginMetadata} from 'editor_tiny/utils'; + +import {component, pluginName} from './common'; +import {register as registerOptions} from './options'; +import {getSetup as getCommandSetup} from './commands'; +import * as Configuration from './configuration'; + +// Set up the tiny_teamsmeeting Plugin. +export default new Promise(async(resolve) => { + // Note: The PluginManager.add function does not support asynchronous configuration. + // Perform any asynchronous configuration here, and then call the PluginManager.add function. + const [ + tinyMCE, + pluginMetadata, + setupCommands, + ] = await Promise.all([ + getTinyMCE(), + getPluginMetadata(component, pluginName), + getCommandSetup(), + ]); + + // Reminder: Any asynchronous code must be run before this point. + tinyMCE.PluginManager.add(pluginName, (editor) => { + // Register any options that your plugin has + registerOptions(editor); + + // Setup any commands such as buttons, menu items, and so on. + setupCommands(editor); + + // Return the pluginMetadata object. This is used by TinyMCE to display a help link for your plugin. + return pluginMetadata; + }); + + resolve([pluginName, Configuration]); +}); diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php new file mode 100644 index 000000000..c07f3e6ec --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php @@ -0,0 +1,52 @@ +. +namespace tiny_teamsmeeting; + +defined('MOODLE_INTERNAL') || die(); + +use external_api; +use external_function_parameters; +use external_value; + +/** + * Get existing meeting from database. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class edit_meeting_api extends external_api { + + public static function edit_meeting_parameters() { + return new external_function_parameters([ + 'url' => new external_value(PARAM_URL, 'URL link', true), + ]); + } + + public static function edit_meeting($url) { + global $DB, $CFG; + + $record = $DB->get_record_sql('SELECT * FROM {tiny_teamsmeeting} WHERE ' . $DB->sql_compare_text('link') . ' = ' . $DB->sql_compare_text(':url'), array('url' => $url), IGNORE_MISSING); + $result = $CFG->wwwroot.'/lib/editor/tiny/plugins/teamsmeeting/result.php?title=' . urlencode($record->title) . '&link=' . urlencode($record->link) . '&options=' . urlencode($record->options); + + return $result; + } + + public static function edit_meeting_returns() { + return new external_value(PARAM_URL, 'Returns url whether the operation was successful'); + } +} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php new file mode 100644 index 000000000..952b3e09e --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php @@ -0,0 +1,73 @@ +. + +/** + * Tiny Teams Meeting plugin info. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace tiny_teamsmeeting; + +use context; +use editor_tiny\editor; +use editor_tiny\plugin; +use editor_tiny\plugin_with_buttons; +use editor_tiny\plugin_with_configuration; + +/** + * Tiny Teams Meeting plugin info. + * + * @package tiny_teamsmeeting + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class plugininfo extends plugin implements plugin_with_buttons, plugin_with_configuration { + + /** + * Return the buttons for the editor plugin. + * + * @return string[] List of buttons this plugin provides. + */ + public static function get_available_buttons() : array { + return [ + 'tiny_teamsmeeting/plugin', + ]; + } + + /** + * Return plugin configuration for the given context. + * + * @param context $context + * @param array $options + * @param array $fpoptions + * @param editor|null $editor + * @return array + */ + public static function get_plugin_configuration_for_context(context $context, array $options, array $fpoptions, + ?editor $editor = null) : array { + global $CFG, $SESSION, $USER; + + return [ + 'appurl' => get_config('tiny_teamsmeeting', 'meetingapplink'), + 'clientdomain' => encode_url($CFG->wwwroot), + 'localevalue' => (empty($SESSION->lang) ? $USER->lang : $SESSION->lang), + 'msession' => sesskey(), + ]; + } +} diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php b/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php new file mode 100644 index 000000000..ee5c6e08d --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php @@ -0,0 +1,101 @@ +. + +/** + * Privacy API implementation for TinyMCE Teams Meeting plugin for Moodle. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace tiny_teamsmeeting\privacy; + +use core_privacy\local\metadata\collection; +use core_privacy\local\request\approved_contextlist; +use core_privacy\local\request\approved_userlist; +use core_privacy\local\request\contextlist; +use core_privacy\local\request\userlist; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Privacy API implementation for the Teams Meeting plugin. + * + * @package tiny_teamsmeeting + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class provider implements \core_privacy\local\metadata\provider, + \core_privacy\local\request\plugin\provider, \core_privacy\local\request\core_userlist_provider { + + public static function get_metadata(collection $collection) : collection { + $collection->add_external_location_link('msteamsapp', ['userlang' => 'privacy:metadata:msteamsapp:userlang'], + 'privacy:metadata:msteamsapp'); + + return $collection; + } + + /** + * Get the list of contexts that contain user information for the specified user. + * + * @param int $userid The user to search. + * @return contextlist $contextlist The contextlist containing the list of contexts used in this plugin. + */ + public static function get_contexts_for_userid(int $userid) : contextlist { + return new contextlist(); + } + + /** + * Get the list of users who have data within a context. + * + * @param userlist $userlist The userlist containing the list of users who have data in this context/plugin combination. + */ + public static function get_users_in_context(userlist $userlist) { + } + + /** + * Export all user data for the specified user, in the specified contexts. + * + * @param approved_contextlist $contextlist The approved contexts to export information for. + */ + public static function export_user_data(approved_contextlist $contextlist) { + } + + /** + * Delete all use data which matches the specified deletion_criteria. + * + * @param \context $context A user context. + */ + public static function delete_data_for_all_users_in_context(\context $context) { + } + + /** + * Delete all user data for the specified user, in the specified contexts. + * + * @param approved_contextlist $contextlist The approved contexts and user information to delete information for. + */ + public static function delete_data_for_user(approved_contextlist $contextlist) { + } + + /** + * Delete multiple users within a single context. + * + * @param approved_userlist $userlist The approved context and user information to delete information for. + */ + public static function delete_data_for_users(approved_userlist $userlist) { + } +} diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/install.xml b/lib/editor/tiny/plugins/teamsmeeting/db/install.xml new file mode 100644 index 000000000..78effaadc --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/db/install.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/services.php b/lib/editor/tiny/plugins/teamsmeeting/db/services.php new file mode 100644 index 000000000..8c2508134 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/db/services.php @@ -0,0 +1,20 @@ + [ + 'classname' => '\tiny_teamsmeeting\edit_meeting_api', + 'methodname' => 'edit_meeting', + 'classpath' => 'lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php', + 'description' => 'Edit existing meeting', + 'type' => 'write', + 'ajax' => true + ] +]; + +$services = [ + 'tiny_teamsmeeting_service' => [ + 'functions' => ['tiny_teamsmeeting_edit_meeting'], + 'restrictedusers' => 0, + 'enabled' => 1 + ] +]; diff --git a/lib/editor/tiny/plugins/teamsmeeting/docs/createmeeting.png b/lib/editor/tiny/plugins/teamsmeeting/docs/createmeeting.png new file mode 100644 index 0000000000000000000000000000000000000000..c185a44e554ffe01b67a1d7e12def4f1bc799e61 GIT binary patch literal 211420 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

C<>~W!;B^az!4IGl{Gp>U(fyaV=ASVx@t&z5__{ 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 z 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%0Diu9vDoIYZG_+RXV4ZCgH+-Z8BMY)1hVBHa~31 zwFcov+S(0#uzknt`Fmw){JN}8)Z+5N-w8q}ka1o*@l5Aohv}7{HtfckPPafySC6)J z3&S1ou+iXxE(vvif~dRm$u)Pwr}OCM@XKE;(Iz17+aH=fiZs{H0n6Jb_W@^4JDGOW zb1?5A912cY-sv!B>dY+cih|BMo@$!!*AgPf7p(vV2SHW<*}j|PC~JO2km)oR^c>B=wA5=JFh1y3Xb_HI;#S;__T@xg|_p) z@!tiI7%%R2I1+6od*`!yVVgmDPjJSu8HlZzM{yAXEJC~ZWllYh{g>qD<{u(tkX{$n zeyYS~Va9W9UkG^}X6Fui2@V^Q{*N+1S%?S2N7Rz z&mi!c}!t>*NfQljw?yX9OUv18Q%Q@=-lkB4jKNNkd z{k+&RzoG8=%sL zTs@u_tYYx+06-?9C_^kQ6C%SPM@OwI0Q(=Je#wKBpa+E%gWpSRYK=eId(}er%rMjq zQ&r1)Uy&+^W8L;CkMW2r2l6~nu!&kvAvjQY1k`jDwC&chJnO*wg~;D#lS|c-)W_Ia ziYFYY9DK1XRWZZ*{I>@!>Vkf<%b}No_;2t5svXT&n_=r_VmnIw7#6=xPLt1Wxnj!s z#;eg(m~kFgd?XXReM!QCkQ=`J)Tw)bF^cRtG(M)Wf=yt|al|2DIeRwVjz9bnHPi5+$d3_SEr9wM*5d(R zEsuDk0(E*(=9l&8aKIHmWm%QHBj@ktwf5Sx%c~|QOMp_9b2qcu;;Sdd>^a1g@5pSx zwhRi9s{-6f(r(`93Kh$=1Yvw|!El=v??lgp2ss{7tBrl#d;a?#LmWCk+C-iedgGkt zye20&;CF{K&6fa#U!X^NKz$>SaRk2QeDeW_%Y1f_o9?4==iyZW9B{qYXF#$pLFh5) zP)=nvZ5b$bHo#*Q@LF828V8vt`!8z5cd8s@Z= zJ!KRvAbF&+a*vVuD*Ave?}B4XJP0`HdO#&~YZWofr8_?P#8zNBQKM3uDF;w) zj~Pvho-%70l|XRfFv0)dV=8bDX6S5rIw*0Yf+C9iF!1EHb%2W1Ecmpnxl7}meE_{^ zy`7Hqa(r5iKkNI^HpI5e+46OK3d8Pa^xNw`Q0>5m~j8?TlR`+Z@Gun##o&>4aQmW3U*eyp=TN&tej|1Gq2dL~1;OzV4z6W$RwQmZfDwOhROAMR5q#>Kg*M61%54g8LOW zxe;4m>DPqZm7!7vIH>4LU7C(t+d9Qtp5&*5-a-Dy{p6s5Mu#8aHYJ9r`G_<7Y)iim zzABLbHmrTU#mff09pu^c9UI!|tox03&QUwPt5hZM*GnCun4UDoQIJ8e&vwQfj zJj&cq;%7+jQEk7dB^L`5j)tA>$+cMiWtsMv(N4?AU%$q55x3fa2 z^DE(R1x_vzK7Ie?e@P-&XJZ6fQNFxetX3vha{~nU{kGT@?U~;OyIc3-5Nv(GTi~la zwnHW5)+_qYmh#nr?Hd*^in%0jGg#?4!YLYz0g;2HYDen;ai zD{UaKswkq30_UR1sY?&{oEiD8!VHJgC(4Fn_Qxk/l;p9x96j{CW)PVtM@O{s(U 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 z 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 C=D>mg literal 0 HcmV?d00001 diff --git a/lib/editor/tiny/plugins/teamsmeeting/docs/signin.png b/lib/editor/tiny/plugins/teamsmeeting/docs/signin.png new file mode 100644 index 0000000000000000000000000000000000000000..37383e2d2600118e473755178b6cd20bb1a63fed GIT binary patch literal 181608 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 literal 0 HcmV?d00001 diff --git a/lib/editor/tiny/plugins/teamsmeeting/docs/toolbar.png b/lib/editor/tiny/plugins/teamsmeeting/docs/toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..064d9e3ee727c97d464dcd2faf1510c4dba106e3 GIT binary patch literal 25052 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 Qdjj}C^kI4g9mlBu10joSSO5S3 literal 0 HcmV?d00001 diff --git a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php new file mode 100644 index 000000000..f801017de --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php @@ -0,0 +1,50 @@ +. + +/** + * Strings for component 'tiny_teamsmeeting', language 'en'. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['pluginname'] = 'Teams Meeting'; + +// Settings. +$string['settings_meetings_app_link'] = 'Meetings App URL'; +$string['settings_meetings_app_link_desc'] = 'This is URL of meeting app location'; + +// iFrame. +$string['iframe_meeting_options'] = 'Meeting Options'; +$string['iframe_meeting_created'] = 'Meeting "{$a}" was created successfully!'; +$string['iframe_go_to_meeting'] = 'Go to meeting'; + +// TinyMCE strings. +$string['tiny_modal_title'] = 'Create Teams meeting'; +$string['tiny_button_primary_label'] = 'Add link'; +$string['tiny_button_secondary_label'] = 'Cancel'; +$string['tiny_input_url_label'] = 'Your meeting URL:'; +$string['tiny_input_url_placeholder'] = 'Link will be generated after you create the meeting.'; +$string['tiny_checkbox_new_window_label'] = 'Open meeting in new window'; + +// Privacy subsystem. +$string['privacy:metadata'] = 'Tiny Teams Meeting plugin does not store any personal data'; +$string['privacy:metadata:msteamsapp'] = 'The Tiny Teams Meeting plugin does not store any data. However, it sends user language code to Microsoft Teams application to provide user interface based on user language.'; +$string['privacy:metadata:msteamsapp:userlang'] = 'User language code sent to Microsoft Teams application.'; diff --git a/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php b/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php new file mode 100644 index 000000000..726ab6a44 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php @@ -0,0 +1,51 @@ +. + +/** + * Strings for component 'tiny_teamsmeeting', language 'pl'. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$string['pluginname'] = 'Teams Meeting'; +$string['settings'] = 'Ustawienia Teams Meeting'; + +// Settings. +$string['settings_meetings_app_link'] = 'Link do Teams Meeting'; +$string['settings_meetings_app_link_desc'] = 'Link do aplikacji Teams Meeting'; + +// iFrame. +$string['iframe_meeting_options'] = 'Opcje spotkania'; +$string['iframe_meeting_created'] = 'Spotkanie online "{$a}" utworzone!'; +$string['iframe_go_to_meeting'] = 'Go to meeting'; + +// TinyMCE strings. +$string['tiny_modal_title'] = 'Utwórz Teams Meeting'; +$string['tiny_button_primary_label'] = 'Dodaj link'; +$string['tiny_button_secondary_label'] = 'Anuluj'; +$string['tiny_input_url_label'] = 'Link Twojego spotkania:'; +$string['tiny_input_url_placeholder'] = 'Link zostanie wygenerowany po utworzeniu spotkania.'; +$string['tiny_checkbox_new_window_label'] = 'Otwórz w nowym oknie'; + +// Privacy subsystem. +$string['privacy:metadata'] = 'Wtyczka Tiny Teams Meeting nie przechowuje żadnych danych osobowych.'; +$string['privacy:metadata:msteamsapp'] = 'Wtyczka Tiny Teams Meeting nie przechowuje żadnych danych. Jednak wysyła kod języka użytkownika do aplikacji Microsoft Teams, aby zapewnić interfejs użytkownika oparty na języku użytkownika.'; +$string['privacy:metadata:msteamsapp:userlang'] = 'Kod języka użytkownika jest wysyłany do aplikacji Microsoft Teams.'; diff --git a/lib/editor/tiny/plugins/teamsmeeting/pix/icon.png b/lib/editor/tiny/plugins/teamsmeeting/pix/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..26907c3361348c015e4edc51cb2c026e71834d24 GIT binary patch literal 587 zcmV-R0<`^!P)OQ`>?XXt(I1gAQ4A7fV3} zZQTSxM>qQ%9+nn#anaR9C<+SJ!KoA+1f2?!1fkLvM6``oiKW)}+It*c64NG63jWi* z_niMf|2^jj|3DC|^oPRn4rML~dcU;GF-hcGyRh@y2-Rg5^eDGwBlmE{i54HR@!FS}>X%`5-|I|WLm zc~nC^kX1R9JGq81Q45uULhRBhxpnfz^8=V#N34a%PZtsCkgd(1BWmpIq~Es;ASs3j zWz-rePfwkgX?#IdIhx-G2=9uk4JY27?kTYbf4l;!eEd|Q8m%F!3}1R%ZU{ViwuFda zOnhz&5xmY6)xR%C634h({I|fiF&4|;0ogTKVZ#L$fWcVc$98+hwwSE1197R@mU5$4 zo?o|7_@I98+S^ZWU%nCly!>@;^;1=cP_qiUg z@bG?qqsc`p#wJ#d87tEYxn{CD&V@;Tf3Z0?v1387=tXYktg0Clu}kae-!JanIQ(m8 Z-XBtZoDJX#;t2o%002ovPDHLkV1lu#`_%vd literal 0 HcmV?d00001 diff --git a/lib/editor/tiny/plugins/teamsmeeting/pix/icon.svg b/lib/editor/tiny/plugins/teamsmeeting/pix/icon.svg new file mode 100644 index 000000000..aa1552653 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/pix/icon.svg @@ -0,0 +1,121 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/editor/tiny/plugins/teamsmeeting/result.php b/lib/editor/tiny/plugins/teamsmeeting/result.php new file mode 100644 index 000000000..a7cf9e873 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/result.php @@ -0,0 +1,101 @@ +. + +/** + * A script that handles the result of the meeting creation. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(__DIR__ . '/../../../../../config.php'); + +require_login(); + +$meetinglink = optional_param('link', null, PARAM_URL); +$title = optional_param('title', null, PARAM_TEXT); +$preview = optional_param('preview', null, PARAM_RAW); +$optionslink = optional_param('options', null, PARAM_RAW); + +$meetingoptions = null; + +if (!empty($preview)) { + $htmlDom = new DOMDocument; + @$htmlDom->loadHTML($preview); + $links = $htmlDom->getElementsByTagName('a'); + foreach ($links as $link) { + $href = $link->getAttribute('href'); + if ($href && strpos($href, 'meetingOptions') !== false) { + $meetingoptions = $href; + break; + } + } + + $meetingdata = new stdClass(); + $meetingdata->title = $title; + $meetingdata->link = $meetinglink; + $meetingdata->options = $meetingoptions; + $meetingdata->timecreated = time(); + $DB->insert_record('tiny_teamsmeeting', $meetingdata); +} else if (!empty($optionslink)) { + $meetingoptions = $optionslink; +} + +$context = context_system::instance(); +$PAGE->set_context($context); +$PAGE->set_pagelayout('standard'); +$PAGE->set_url(new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', ['link' => $meetinglink, 'title' => $title, + 'preview' => $preview, 'options' => $optionslink])); +echo '

'; + +echo ""; + +exit; diff --git a/lib/editor/tiny/plugins/teamsmeeting/settings.php b/lib/editor/tiny/plugins/teamsmeeting/settings.php new file mode 100644 index 000000000..1dfc4f328 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/settings.php @@ -0,0 +1,38 @@ +. + +/** + * Plugin settings. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$ADMIN->add('editortiny', new admin_category('tiny_teamsmeeting', new lang_string('pluginname', 'tiny_teamsmeeting'))); + +$settings = new admin_settingpage('tiny_teamsmeeting_settings', new lang_string('pluginname', 'tiny_teamsmeeting')); + +if ($ADMIN->fulltree) { + $name = new lang_string('settings_meetings_app_link', 'tiny_teamsmeeting'); + $desc = new lang_string('settings_meetings_app_link_desc', 'tiny_teamsmeeting'); + $default = 'https://enomsteams.z16.web.core.windows.net'; + $setting = new admin_setting_configtext('tiny_teamsmeeting/meetingapplink', $name, $desc, $default); + $settings->add($setting); +} diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php new file mode 100644 index 000000000..e0199e3e4 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -0,0 +1,33 @@ +. + +/** + * Plugin version information. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$plugin->component = 'tiny_teamsmeeting'; +$plugin->release = '1.0'; +$plugin->version = 2023112100; +$plugin->requires = 2022112800; +$plugin->maturity = MATURITY_STABLE; +$plugin->dependencies = []; From 8ac86aeb114a4538972ae7dd9de7de8fabf57807 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Tue, 21 Nov 2023 16:00:25 +0000 Subject: [PATCH 02/26] Update README screenshots --- .../teamsmeeting/docs/createmeeting.png | Bin 211420 -> 202513 bytes .../plugins/teamsmeeting/docs/selected.png | Bin 57202 -> 51089 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/docs/createmeeting.png b/lib/editor/tiny/plugins/teamsmeeting/docs/createmeeting.png index c185a44e554ffe01b67a1d7e12def4f1bc799e61..dda37823fd36bac2492deeaa796b9e42bfe29137 100644 GIT binary patch literal 202513 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

Yj317<9ijI7%nK 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�a6$i-NL|p}?G?fPLZ1%J!Ax1v{)`#B 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 literal 211420 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

C<>~W!;B^az!4IGl{Gp>U(fyaV=ASVx@t&z5__{ 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 z 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%0Diu9vDoIYZG_+RXV4ZCgH+-Z8BMY)1hVBHa~31 zwFcov+S(0#uzknt`Fmw){JN}8)Z+5N-w8q}ka1o*@l5Aohv}7{HtfckPPafySC6)J z3&S1ou+iXxE(vvif~dRm$u)Pwr}OCM@XKE;(Iz17+aH=fiZs{H0n6Jb_W@^4JDGOW zb1?5A912cY-sv!B>dY+cih|BMo@$!!*AgPf7p(vV2SHW<*}j|PC~JO2km)oR^c>B=wA5=JFh1y3Xb_HI;#S;__T@xg|_p) z@!tiI7%%R2I1+6od*`!yVVgmDPjJSu8HlZzM{yAXEJC~ZWllYh{g>qD<{u(tkX{$n zeyYS~Va9W9UkG^}X6Fui2@V^Q{*N+1S%?S2N7Rz z&mi!c}!t>*NfQljw?yX9OUv18Q%Q@=-lkB4jKNNkd z{k+&RzoG8=%sL zTs@u_tYYx+06-?9C_^kQ6C%SPM@OwI0Q(=Je#wKBpa+E%gWpSRYK=eId(}er%rMjq zQ&r1)Uy&+^W8L;CkMW2r2l6~nu!&kvAvjQY1k`jDwC&chJnO*wg~;D#lS|c-)W_Ia ziYFYY9DK1XRWZZ*{I>@!>Vkf<%b}No_;2t5svXT&n_=r_VmnIw7#6=xPLt1Wxnj!s z#;eg(m~kFgd?XXReM!QCkQ=`J)Tw)bF^cRtG(M)Wf=yt|al|2DIeRwVjz9bnHPi5+$d3_SEr9wM*5d(R zEsuDk0(E*(=9l&8aKIHmWm%QHBj@ktwf5Sx%c~|QOMp_9b2qcu;;Sdd>^a1g@5pSx zwhRi9s{-6f(r(`93Kh$=1Yvw|!El=v??lgp2ss{7tBrl#d;a?#LmWCk+C-iedgGkt zye20&;CF{K&6fa#U!X^NKz$>SaRk2QeDeW_%Y1f_o9?4==iyZW9B{qYXF#$pLFh5) zP)=nvZ5b$bHo#*Q@LF828V8vt`!8z5cd8s@Z= zJ!KRvAbF&+a*vVuD*Ave?}B4XJP0`HdO#&~YZWofr8_?P#8zNBQKM3uDF;w) zj~Pvho-%70l|XRfFv0)dV=8bDX6S5rIw*0Yf+C9iF!1EHb%2W1Ecmpnxl7}meE_{^ zy`7Hqa(r5iKkNI^HpI5e+46OK3d8Pa^xNw`Q0>5m~j8?TlR`+Z@Gun##o&>4aQmW3U*eyp=TN&tej|1Gq2dL~1;OzV4z6W$RwQmZfDwOhROAMR5q#>Kg*M61%54g8LOW zxe;4m>DPqZm7!7vIH>4LU7C(t+d9Qtp5&*5-a-Dy{p6s5Mu#8aHYJ9r`G_<7Y)iim zzABLbHmrTU#mff09pu^c9UI!|tox03&QUwPt5hZM*GnCun4UDoQIJ8e&vwQfj zJj&cq;%7+jQEk7dB^L`5j)tA>$+cMiWtsMv(N4?AU%$q55x3fa2 z^DE(R1x_vzK7Ie?e@P-&XJZ6fQNFxetX3vha{~nU{kGT@?U~;OyIc3-5Nv(GTi~la zwnHW5)+_qYmh#nr?Hd*^in%0jGg#?4!YLYz0g;2HYDen;ai zD{UaKswkq30_UR1sY?&{oEiD8!VHJgC(4Fn_Qxk/l;p9x96j{CW)PVtM@O{s(U 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 z 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 C=D>mg From 5d43736d6a6706f0cf2851856e707e123d0f6163 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Tue, 21 Nov 2023 16:01:07 +0000 Subject: [PATCH 03/26] bug fix in relation to web service function definitions --- .../teamsmeeting/classes/edit_meeting_api.php | 42 +++++++++++++-- .../teamsmeeting/classes/plugininfo.php | 2 + .../tiny/plugins/teamsmeeting/db/services.php | 51 ++++++++++++++----- 3 files changed, 78 insertions(+), 17 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php index c07f3e6ec..ce6d39e25 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php @@ -13,13 +13,26 @@ // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . + +/** + * Tiny Teams Meeting edit meeting web service function. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + namespace tiny_teamsmeeting; defined('MOODLE_INTERNAL') || die(); +require_once($CFG->libdir . '/externallib.php'); + use external_api; use external_function_parameters; use external_value; +use moodle_url; /** * Get existing meeting from database. @@ -31,22 +44,43 @@ */ class edit_meeting_api extends external_api { + /** + * Returns description of method parameters. + * + * @return external_function_parameters + */ public static function edit_meeting_parameters() { return new external_function_parameters([ 'url' => new external_value(PARAM_URL, 'URL link', true), ]); } + /** + * Returns url whether the operation was successful. + * + * @param string $url + * @return string + */ public static function edit_meeting($url) { - global $DB, $CFG; + global $DB; - $record = $DB->get_record_sql('SELECT * FROM {tiny_teamsmeeting} WHERE ' . $DB->sql_compare_text('link') . ' = ' . $DB->sql_compare_text(':url'), array('url' => $url), IGNORE_MISSING); - $result = $CFG->wwwroot.'/lib/editor/tiny/plugins/teamsmeeting/result.php?title=' . urlencode($record->title) . '&link=' . urlencode($record->link) . '&options=' . urlencode($record->options); + $sql = 'SELECT * + FROM {tiny_teamsmeeting} + WHERE ' . $DB->sql_compare_text('link') . ' = ' . $DB->sql_compare_text(':url'); + $record = $DB->get_record_sql($sql, ['url' => $url]); + $url = new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', [ + 'title' => $record->title, 'link' => $record->link, 'options' => $record->options]); + $result = $url->out(); return $result; } + /** + * Returns description of method result value. + * + * @return external_value + */ public static function edit_meeting_returns() { return new external_value(PARAM_URL, 'Returns url whether the operation was successful'); } -} \ No newline at end of file +} diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php index 952b3e09e..781cf3fdd 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php @@ -25,6 +25,8 @@ namespace tiny_teamsmeeting; +defined('MOODLE_INTERNAL') || die(); + use context; use editor_tiny\editor; use editor_tiny\plugin; diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/services.php b/lib/editor/tiny/plugins/teamsmeeting/db/services.php index 8c2508134..86c1af07f 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/db/services.php +++ b/lib/editor/tiny/plugins/teamsmeeting/db/services.php @@ -1,20 +1,45 @@ . + +/** + * Web service definition for Tiny Teams Meeting plugin. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); $functions = [ - 'tiny_teamsmeeting_edit_meeting' => [ - 'classname' => '\tiny_teamsmeeting\edit_meeting_api', - 'methodname' => 'edit_meeting', - 'classpath' => 'lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php', - 'description' => 'Edit existing meeting', - 'type' => 'write', - 'ajax' => true - ] + 'tiny_teamsmeeting_edit_meeting' => [ + 'classname' => '\tiny_teamsmeeting\edit_meeting_api', + 'methodname' => 'edit_meeting', + 'classpath' => 'lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php', + 'description' => 'Edit existing meeting', + 'type' => 'write', + 'ajax' => true, + ], ]; $services = [ - 'tiny_teamsmeeting_service' => [ - 'functions' => ['tiny_teamsmeeting_edit_meeting'], - 'restrictedusers' => 0, - 'enabled' => 1 - ] + 'tiny_teamsmeeting_service' => [ + 'functions' => ['tiny_teamsmeeting_edit_meeting'], + 'restrictedusers' => 0, + 'enabled' => 1, + ], ]; From 3af0e2c1c576dc188294a9240add508a2f032c18 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Thu, 7 Dec 2023 11:46:47 +0000 Subject: [PATCH 04/26] Error handling in edit_meeting web service function --- .../teamsmeeting/amd/build/commands.min.js | 2 +- .../amd/build/commands.min.js.map | 2 +- .../plugins/teamsmeeting/amd/src/commands.js | 4 +- .../teamsmeeting/classes/edit_meeting_api.php | 75 ++++++++++++++++--- .../tiny/plugins/teamsmeeting/error.php | 43 +++++++++++ .../lang/en/tiny_teamsmeeting.php | 1 + .../lang/pl/tiny_teamsmeeting.php | 1 + .../tiny/plugins/teamsmeeting/version.php | 2 +- 8 files changed, 115 insertions(+), 15 deletions(-) create mode 100644 lib/editor/tiny/plugins/teamsmeeting/error.php diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js index 298605c3e..0570dbddb 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js @@ -6,6 +6,6 @@ define("tiny_teamsmeeting/commands",["exports","editor_tiny/utils","core/str",". * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null};_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},handleSubmitAction=editor=>api=>{var _selectedNode$parentN,_selectedNode$parentN2;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&"tiny_meeting_link"===selectedNode.id?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&"tiny_meeting_link"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.id)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType);else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data){return{url:await _ajax.default.call([{methodname:"tiny_teamsmeeting_edit_meeting",args:{url:data.link}}])[0],meetingUrl:data.link,newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny"),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN3,_linkNode;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode2,_linkNode3;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN3=selectedNode.parentNode)||void 0===_selectedNode$parentN3?void 0:_selectedNode$parentN3.nodeName)&&(linkNode=selectedNode.parentNode),"tiny_meeting_link"===(null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.id)?{link:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("href"),target:null===(_linkNode3=linkNode)||void 0===_linkNode3?void 0:_linkNode3.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{var _selectedNode$parentN4;const selectedNode=editor.selection.getNode(),isActive="tiny_meeting_link"===selectedNode.id||"tiny_meeting_link"===(null===(_selectedNode$parentN4=selectedNode.parentNode)||void 0===_selectedNode$parentN4?void 0:_selectedNode$parentN4.id);buttonApi.setActive(isActive)}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null};_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},handleSubmitAction=editor=>api=>{var _selectedNode$parentN,_selectedNode$parentN2;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&"tiny_meeting_link"===selectedNode.id?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&"tiny_meeting_link"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.id)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType);else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_edit_meeting",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny"),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN3,_linkNode;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode2,_linkNode3;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN3=selectedNode.parentNode)||void 0===_selectedNode$parentN3?void 0:_selectedNode$parentN3.nodeName)&&(linkNode=selectedNode.parentNode),"tiny_meeting_link"===(null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.id)?{link:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("href"),target:null===(_linkNode3=linkNode)||void 0===_linkNode3?void 0:_linkNode3.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{var _selectedNode$parentN4;const selectedNode=editor.selection.getNode(),isActive="tiny_meeting_link"===selectedNode.id||"tiny_meeting_link"===(null===(_selectedNode$parentN4=selectedNode.parentNode)||void 0===_selectedNode$parentN4?void 0:_selectedNode$parentN4.id);buttonApi.setActive(isActive)}})); //# sourceMappingURL=commands.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map index fb7d5b6fb..3dcfc1444 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map @@ -1 +1 @@ -{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_edit_meeting', args: { url: data['link'] } }])[0];\n return {\n url: result,\n meetingUrl: data['link'],\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode?.id === 'tiny_meeting_link') {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link';\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","api","getData","targetType","selectedNode","selection","getNode","linkNode","nodeName","id","parentNode","dom","setAttrib","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","Ajax","call","methodname","args","link","_linkNode2","getAttribute","target","_linkNode3","buttonApi","on","handleNodeChange","isActive","setActive"],"mappings":";;;;;;;;gJA+BMA,mBAAqB,CAAEC,QAAS,wBAWdC,gBACbC,6BAA8BC,mBAAqBC,QAAQC,IAAI,EAAC,mBAAU,aAAcC,oBAAY,yBAAe,OAAQA,4BAE3HC,SACHA,OAAOC,GAAGC,SAASC,QAAQC,aAAMR,YAAYS,MAC7CL,OAAOC,GAAGC,SAASI,gBAAgBC,gCAAyB,CACxDH,KAAAA,aACAI,QAASb,6BACTc,SAAUC,WAAWV,QACrBW,QAASC,kBAAkBZ,UAG/Ba,OAAOC,iBAAiB,WAAWC,QAC3BA,MAAMC,MAA8B,eAAtBD,MAAMC,KAAKC,QACzBC,sBAAsBH,MAAMC,KAAKG,gBAY3CT,WAAaV,QAAUN,gBAErB0B,WACAC,mBACAC,qBACAC,cACAC,oBACAC,8BACM5B,QAAQC,IAAI,EAClB,mBAAU,mBAAoBC,oBAC9B,mBAAU,4BAA6BA,oBACvC,mBAAU,8BAA+BA,oBACzC,mBAAU,uBAAwBA,oBAClC,mBAAU,6BAA8BA,oBACxC,mBAAU,iCAAkCA,yBAG5C2B,iBAAmBC,cAAc3B,QAErCR,mBAAmBC,QAAUO,OAAO4B,cAAcC,KAAK,CACnDC,MAAOV,WACPW,KAAM,CACFC,KAAM,QACNC,MAAO,CACH,CAAED,KAAM,YAAa3B,+CAAyCqB,WAAWP,uDACzE,CAAEa,KAAM,QAASE,KAAM,aAAcC,MAAOZ,cAAea,SAAS,EAAOC,YAAab,qBACxF,CAAEQ,KAAM,WAAYE,KAAM,oBAAqBC,MAAOV,0BAG9Da,QAAS,CACL,CAAEN,KAAM,SAAUO,KAAMjB,sBACxB,CAAEU,KAAM,SAAUO,KAAMlB,mBAAoBmB,SAAS,IAEzDC,SAAUC,mBAAmB1C,UAGjCR,mBAAmBC,QAAQkD,QAAQ,CAC/BC,WAAYlB,WAAWkB,WACvBC,kBAAmBnB,WAAWoB,aAShCJ,mBAAsB1C,QAAY+C,6DAC9B/B,KAAO+B,IAAIC,UACXJ,WAAa5B,KAAK4B,WAElBK,WADYjC,KAAK6B,kBACQ,SAAW,OAEtCK,aAAelD,OAAOmD,UAAUC,UAChCC,SAAW,QAEe,MAA1BH,aAAaI,UAAwC,sBAApBJ,aAAaK,GAC9CF,SAAWH,aACkC,qCAAtCA,aAAaM,yEAAYF,WAAoD,sDAAhCJ,aAAaM,2EAAYD,MAC7EF,SAAWH,aAAaM,YAGxBH,SACArD,OAAOyD,IAAIC,UAAUL,SAAU,OAAQT,YACvC5C,OAAOyD,IAAIC,UAAUL,SAAU,SAAUJ,gBACtC,KACCU,gBAAkB3D,OAAOmD,UAAUS,WAAW,CAAEC,OAAQ,SACxDC,gBAAmBH,iBAAqCf,WAC5D5C,OAAO+D,wDAAiDnB,gCAAuBK,wBAAea,yBAElGf,IAAIiB,SAQF9C,sBAAwBC,MACtB3B,mBAAmBC,SACnBD,mBAAmBC,QAAQkD,QAAQ,CAAEC,WAAYzB,OAUnDQ,cAAgBjC,MAAAA,aACdsB,KAAOiD,8BAA8BjE,WACrCgB,KAAM,OAEC,CACHG,UAFiB+C,cAAKC,KAAK,CAAC,CAAEC,WAAY,iCAAkCC,KAAM,CAAElD,IAAKH,KAAI,SAAe,GAG5G4B,WAAY5B,KAAI,KAChB8B,UAA8B,WAAnB9B,KAAI,cAGhB,CACHG,eAAQ,sBAAUnB,yBAAe,4BAAgBA,4BAAkB,2BAAeA,8BAAoB,wBAAYA,wBAClH4C,WAAY,GACZE,WAAW,IAUbmB,8BAAgCjE,kDAC9BkD,aAAelD,OAAOmD,UAAUC,UAChCC,SAAW,qCAEe,MAA1BH,aAAaI,SACbD,SAAWH,aACkC,sCAAtCA,aAAaM,2EAAYF,YAChCD,SAAWH,aAAaM,YAGP,yCAAjBH,+CAAUE,IACH,CACHe,wBAAMjB,sCAAAkB,WAAUC,aAAa,QAC7BC,0BAAQpB,sCAAAqB,WAAUF,aAAa,WAIhC,MAUL5D,kBAAoBZ,QAAW2E,YACjC3E,OAAO4E,GAAG,cAAc,IAAMC,iBAAiB7E,OAAQ2E,aAEhD,WACH3E,OAAO4E,GAAG,cAAc,IAAMC,iBAAiB7E,OAAQ2E,eAYzDE,iBAAmB,CAAC7E,OAAQ2E,8CACxBzB,aAAelD,OAAOmD,UAAUC,UAChC0B,SAA+B,sBAApB5B,aAAaK,IAA8D,sDAAhCL,aAAaM,2EAAYD,IAErFoB,UAAUI,UAAUD"} \ No newline at end of file +{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_edit_meeting', args: { url: data['link'] } }])[0];\n return {\n url: result['url'],\n meetingUrl: result['status'] ? data['link'] : '',\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode?.id === 'tiny_meeting_link') {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link';\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","api","getData","targetType","selectedNode","selection","getNode","linkNode","nodeName","id","parentNode","dom","setAttrib","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","link","_linkNode2","getAttribute","target","_linkNode3","buttonApi","on","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js index 93ea8f0d5..cbfabef3c 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js @@ -161,8 +161,8 @@ const getIframeData = async (editor) => { if (data) { const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_edit_meeting', args: { url: data['link'] } }])[0]; return { - url: result, - meetingUrl: data['link'], + url: result['url'], + meetingUrl: result['status'] ? data['link'] : '', newWindow: data['target'] === '_blank' }; } diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php index ce6d39e25..0d236fbf8 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php @@ -31,6 +31,7 @@ use external_api; use external_function_parameters; +use external_single_structure; use external_value; use moodle_url; @@ -51,7 +52,7 @@ class edit_meeting_api extends external_api { */ public static function edit_meeting_parameters() { return new external_function_parameters([ - 'url' => new external_value(PARAM_URL, 'URL link', true), + 'url' => new external_value(PARAM_URL, 'URL link', true), ]); } @@ -59,28 +60,82 @@ public static function edit_meeting_parameters() { * Returns url whether the operation was successful. * * @param string $url - * @return string + * @return array */ public static function edit_meeting($url) { - global $DB; + $record = self::get_meeting($url); + $url = self::get_meeting_url($record); + + if ($record == null) { + return [ + 'status' => false, + 'url' => $url + ]; + } + + return [ + 'status' => true, + 'url' => $url + ]; + } + /** + * Retrieve a meeting record from the database based on the URL. + * + * @param string $url The URL of the meeting. + * @return mixed|null The meeting record if found, or null if not found. + */ + private static function get_meeting($url) { + global $DB; $sql = 'SELECT * FROM {tiny_teamsmeeting} - WHERE ' . $DB->sql_compare_text('link') . ' = ' . $DB->sql_compare_text(':url'); - $record = $DB->get_record_sql($sql, ['url' => $url]); - $url = new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', [ - 'title' => $record->title, 'link' => $record->link, 'options' => $record->options]); - $result = $url->out(); + WHERE ' . $DB->sql_compare_text('link') . ' = ' . $DB->sql_compare_text(':url') . ' ORDER BY id ASC'; + $records = $DB->get_records_sql($sql, ['url' => $url]); + + $count = count($records); + if ($count == 0) { + return null; + } + + $result = reset($records); + if ($count > 1) { + array_shift($records); + $ids = []; + foreach ($records as $record) { + $ids[] = $record->id; + } + $DB->delete_records_list('tiny_teamsmeeting', 'id', $ids); + } return $result; } + /** + * Returns the URL for a meeting record. + * + * @param object $record The meeting record object. + * @return string The URL link for the meeting. + */ + private static function get_meeting_url($record) { + if ($record == null) { + return (new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/error.php'))->out(); + } + + return (new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', [ + 'title' => $record->title, 'link' => $record->link, 'options' => $record->options]))->out(); + } + /** * Returns description of method result value. * - * @return external_value + * @return external_single_structure */ public static function edit_meeting_returns() { - return new external_value(PARAM_URL, 'Returns url whether the operation was successful'); + return new external_single_structure( + [ + 'status' => new external_value(PARAM_BOOL, 'Status of the operation'), + 'url' => new external_value(PARAM_URL, 'URL link') + ] + ); } } diff --git a/lib/editor/tiny/plugins/teamsmeeting/error.php b/lib/editor/tiny/plugins/teamsmeeting/error.php new file mode 100644 index 000000000..902a46f18 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/error.php @@ -0,0 +1,43 @@ +. + +/** + * A script that displays an error message in iframe when meeting is not found. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(__DIR__ . '/../../../../../config.php'); + +require_login(); + +echo '

+ + + + + + + + ' . + get_string('iframe_not_found', 'tiny_teamsmeeting') . + ''; + +exit; diff --git a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php index f801017de..92c6815ea 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php +++ b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php @@ -35,6 +35,7 @@ $string['iframe_meeting_options'] = 'Meeting Options'; $string['iframe_meeting_created'] = 'Meeting "{$a}" was created successfully!'; $string['iframe_go_to_meeting'] = 'Go to meeting'; +$string['iframe_not_found'] = 'Meeting not found'; // TinyMCE strings. $string['tiny_modal_title'] = 'Create Teams meeting'; diff --git a/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php b/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php index 726ab6a44..708bf89e6 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php +++ b/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php @@ -36,6 +36,7 @@ $string['iframe_meeting_options'] = 'Opcje spotkania'; $string['iframe_meeting_created'] = 'Spotkanie online "{$a}" utworzone!'; $string['iframe_go_to_meeting'] = 'Go to meeting'; +$string['iframe_not_found'] = 'Nie znaleziono spotkania'; // TinyMCE strings. $string['tiny_modal_title'] = 'Utwórz Teams Meeting'; diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index e0199e3e4..3df71359b 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -27,7 +27,7 @@ $plugin->component = 'tiny_teamsmeeting'; $plugin->release = '1.0'; -$plugin->version = 2023112100; +$plugin->version = 2023120600; $plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = []; From 30fb7e98daca7d747e1fe044332947cccc6426ed Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Thu, 7 Dec 2023 12:03:10 +0000 Subject: [PATCH 05/26] Update plugin release --- lib/editor/tiny/plugins/teamsmeeting/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index 3df71359b..c087b93c7 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'tiny_teamsmeeting'; -$plugin->release = '1.0'; +$plugin->release = '1.1'; $plugin->version = 2023120600; $plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; From f0ce31362d445561e691f150243919054b6038b6 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Thu, 7 Dec 2023 17:14:51 +0000 Subject: [PATCH 06/26] Add missing file requires used to encode URL --- lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php | 2 ++ lib/editor/tiny/plugins/teamsmeeting/version.php | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php index 781cf3fdd..941ae67df 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php @@ -33,6 +33,8 @@ use editor_tiny\plugin_with_buttons; use editor_tiny\plugin_with_configuration; +require_once($CFG->dirroot . '/repository/url/lib.php'); + /** * Tiny Teams Meeting plugin info. * diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index c087b93c7..d0bf7edf0 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -26,8 +26,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'tiny_teamsmeeting'; -$plugin->release = '1.1'; -$plugin->version = 2023120600; +$plugin->release = '1.2'; +$plugin->version = 2023120601; $plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = []; From 51131f1989c6e24d612620d706ba066b2e2f1fa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20B=C3=B6sch?= Date: Wed, 31 Jan 2024 21:21:52 +0100 Subject: [PATCH 07/26] Setting correct WS parameter, resolves #2 --- .../tiny/plugins/teamsmeeting/classes/edit_meeting_api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php index 0d236fbf8..ecfef00c2 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php @@ -52,7 +52,7 @@ class edit_meeting_api extends external_api { */ public static function edit_meeting_parameters() { return new external_function_parameters([ - 'url' => new external_value(PARAM_URL, 'URL link', true), + 'url' => new external_value(PARAM_URL, 'URL link', VALUE_REQUIRED), ]); } From ed06411b3c0a115146d5ca1d2500180c2f09d681 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Thu, 6 Jun 2024 11:45:30 +0100 Subject: [PATCH 08/26] Capability tiny/teamsmeeting:add added resolves #4. --- .../teamsmeeting/classes/plugininfo.php | 18 +++++++++ .../tiny/plugins/teamsmeeting/db/access.php | 37 +++++++++++++++++++ .../tests/behat/teamsmeeting.feature | 30 +++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 lib/editor/tiny/plugins/teamsmeeting/db/access.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/tests/behat/teamsmeeting.feature diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php index 941ae67df..b7155d4ea 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php @@ -54,6 +54,24 @@ public static function get_available_buttons() : array { ]; } + /** + * Is the plugin enabled? This is the case when the capabilities are met. + * + * @param context $context The context that the editor is used within + * @param array $options The options passed in when requesting the editor + * @param array $fpoptions The filepicker options passed in when requesting the editor + * @param editor|null $editor The editor instance in which the plugin is initialised + * @return boolean + */ + public static function is_enabled( + context $context, + array $options, + array $fpoptions, + ?editor $editor = null + ): bool { + return has_capability('tiny/teamsmeeting:add', $context); + } + /** * Return plugin configuration for the given context. * diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/access.php b/lib/editor/tiny/plugins/teamsmeeting/db/access.php new file mode 100644 index 000000000..1b7faf620 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/db/access.php @@ -0,0 +1,37 @@ +. + +/** + * Plugin for Teams Meeting drop down menu in TinyMCE 6. + * + * @package tiny_teamsmeeting + * @copyright 2024 Luca Bösch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$capabilities = [ + 'tiny/teamsmeeting:add' => [ + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => [ + 'editingteacher' => CAP_ALLOW, + ], + ], +]; + + diff --git a/lib/editor/tiny/plugins/teamsmeeting/tests/behat/teamsmeeting.feature b/lib/editor/tiny/plugins/teamsmeeting/tests/behat/teamsmeeting.feature new file mode 100644 index 000000000..ed4846455 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/tests/behat/teamsmeeting.feature @@ -0,0 +1,30 @@ +@editor @editor_tiny @tiny @tiny_teamsmeeting @javascript +Feature: Tiny editor admin settings for teamsmeeting plugin + To be able to actually add a Microsoft Teams meeting in the editor, the capability must be given. + + Background: + Given the following "courses" exist: + | shortname | fullname | + | C1 | Course 1 | + And the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + And the following "activities" exist: + | activity | name | intro | introformat | course | content | contentformat | idnumber | + | page | PageName1 | PageDesc1 | 1 | C1 | Test | 1 | 1 | + + @javascript + Scenario: When a user does not have the teamsmeeting capability, they cannot create a Microsoft Teams meeting in TinyMCE + Given the following "permission overrides" exist: + | capability | permission | role | contextlevel | reference | + | tiny/teamsmeeting:add | Prohibit | editingteacher | Course | C1 | + When I am on the PageName1 "page activity editing" page logged in as teacher1 + Then "Teams Meeting" "button" should not exist + + @javascript + Scenario: When a user does have the teamsmeeting capability, they can create a Microsoft Teams meeting in TinyMCE + Given I am on the PageName1 "page activity editing" page logged in as teacher1 + Then "Teams Meeting" "button" should exist From fb1c73f19b569550d73007b435f0577d16e02474 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Thu, 6 Jun 2024 11:45:52 +0100 Subject: [PATCH 09/26] Add Moodle plugin CI --- .../.github/workflows/moodle-plugin-ci.yml | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml diff --git a/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml b/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml new file mode 100644 index 000000000..56236f8d6 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml @@ -0,0 +1,162 @@ +name: Moodle Plugin CI + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:13 + env: + POSTGRES_USER: 'postgres' + POSTGRES_HOST_AUTH_METHOD: 'trust' + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 + mariadb: + image: mariadb:10.6 + env: + MYSQL_USER: 'root' + MYSQL_ALLOW_EMPTY_PASSWORD: "true" + MYSQL_CHARACTER_SET_SERVER: "utf8mb4" + MYSQL_COLLATION_SERVER: "utf8mb4_unicode_ci" + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 3 + + strategy: + fail-fast: false + matrix: + include: + - php: '8.1' + moodle-branch: 'MOODLE_404_STABLE' + database: pgsql + - php: '8.2' + moodle-branch: 'MOODLE_404_STABLE' + database: pgsql + - php: '8.3' + moodle-branch: 'MOODLE_404_STABLE' + database: pgsql + - php: '8.1' + moodle-branch: 'MOODLE_404_STABLE' + database: mariadb + - php: '8.2' + moodle-branch: 'MOODLE_404_STABLE' + database: mariadb + - php: '8.3' + moodle-branch: 'MOODLE_404_STABLE' + database: mariadb + - php: '8.0' + moodle-branch: 'MOODLE_403_STABLE' + database: pgsql + - php: '8.1' + moodle-branch: 'MOODLE_403_STABLE' + database: pgsql + - php: '8.2' + moodle-branch: 'MOODLE_403_STABLE' + database: pgsql + - php: '8.0' + moodle-branch: 'MOODLE_403_STABLE' + database: mariadb + - php: '8.1' + moodle-branch: 'MOODLE_403_STABLE' + database: mariadb + - php: '8.2' + moodle-branch: 'MOODLE_403_STABLE' + database: mariadb + - php: '8.0' + moodle-branch: 'MOODLE_402_STABLE' + database: pgsql + - php: '8.1' + moodle-branch: 'MOODLE_402_STABLE' + database: pgsql + - php: '8.0' + moodle-branch: 'MOODLE_402_STABLE' + database: mariadb + - php: '8.1' + moodle-branch: 'MOODLE_402_STABLE' + database: mariadb + - php: '8.0' + moodle-branch: 'MOODLE_401_STABLE' + database: pgsql + - php: '7.4' + moodle-branch: 'MOODLE_401_STABLE' + database: pgsql + - php: '8.0' + moodle-branch: 'MOODLE_401_STABLE' + database: mariadb + - php: '7.4' + moodle-branch: 'MOODLE_401_STABLE' + database: mariadb + + steps: + - name: Check out repository code + uses: actions/checkout@v4 + with: + path: plugin + + - name: Setup PHP ${{ matrix.php }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: ${{ matrix.extensions }} + ini-values: max_input_vars=5000 + coverage: none + + - name: Initialise moodle-plugin-ci + run: | + composer create-project -n --no-dev --prefer-dist moodlehq/moodle-plugin-ci ci ^4 + echo $(cd ci/bin; pwd) >> $GITHUB_PATH + echo $(cd ci/vendor/bin; pwd) >> $GITHUB_PATH + sudo locale-gen en_AU.UTF-8 + echo "NVM_DIR=$HOME/.nvm" >> $GITHUB_ENV + + - name: Install moodle-plugin-ci + run: | + moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1 + env: + DB: ${{ matrix.database }} + MOODLE_BRANCH: ${{ matrix.moodle-branch }} + + - name: PHP Lint + if: ${{ always() }} + run: moodle-plugin-ci phplint + + - name: PHP Mess Detector + continue-on-error: true # This step will show errors but will not fail + if: ${{ always() }} + run: moodle-plugin-ci phpmd + + - name: Moodle Code Checker + if: ${{ always() }} + run: moodle-plugin-ci codechecker --max-warnings 0 || true + + - name: Moodle PHPDoc Checker + if: ${{ always() }} + run: moodle-plugin-ci phpdoc + + - name: Validating + if: ${{ always() }} + run: moodle-plugin-ci validate + + - name: Check upgrade savepoints + if: ${{ always() }} + run: moodle-plugin-ci savepoints + + - name: Mustache Lint + if: ${{ always() }} + run: moodle-plugin-ci mustache + + - name: Grunt + if: ${{ always() }} + run: moodle-plugin-ci grunt --max-lint-warnings 0 || true + + - name: PHPUnit tests + if: ${{ always() }} + run: moodle-plugin-ci phpunit --fail-on-warning + + - name: Behat features + if: ${{ always() }} + run: moodle-plugin-ci behat --profile chrome --auto-rerun 0 From c4008d9641603921d6a49668b623f71d24c502c4 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Tue, 11 Jun 2024 11:10:06 +0100 Subject: [PATCH 10/26] Update version for v1.3 release --- lib/editor/tiny/plugins/teamsmeeting/version.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index d0bf7edf0..0c5ee4ac1 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -26,8 +26,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'tiny_teamsmeeting'; -$plugin->release = '1.2'; -$plugin->version = 2023120601; +$plugin->release = '1.3'; +$plugin->version = 2023120602; $plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = []; From a817a178af1dcb78f605427880e8e439a36aa697 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Tue, 11 Jun 2024 16:44:26 +0100 Subject: [PATCH 11/26] Add language string for the new capability --- .../tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php index 92c6815ea..e064533d0 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php +++ b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php @@ -31,6 +31,9 @@ $string['settings_meetings_app_link'] = 'Meetings App URL'; $string['settings_meetings_app_link_desc'] = 'This is URL of meeting app location'; +// Capability. +$string['teamsmeeting:add'] = 'Add Teams Meeting'; + // iFrame. $string['iframe_meeting_options'] = 'Meeting Options'; $string['iframe_meeting_created'] = 'Meeting "{$a}" was created successfully!'; From 3c34c4fa6664d362ffc985389032431d27b31493 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Fri, 15 Aug 2025 16:05:21 +0100 Subject: [PATCH 12/26] Update Moodle plugin CI configuration for Moodle 5.0 upgrade --- .../.github/workflows/moodle-plugin-ci.yml | 66 +++++-------------- 1 file changed, 16 insertions(+), 50 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml b/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml index 56236f8d6..97db478a1 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml +++ b/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml @@ -8,88 +8,54 @@ jobs: services: postgres: - image: postgres:13 + image: postgres:14 env: POSTGRES_USER: 'postgres' POSTGRES_HOST_AUTH_METHOD: 'trust' ports: - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 - mariadb: - image: mariadb:10.6 - env: - MYSQL_USER: 'root' - MYSQL_ALLOW_EMPTY_PASSWORD: "true" - MYSQL_CHARACTER_SET_SERVER: "utf8mb4" - MYSQL_COLLATION_SERVER: "utf8mb4_unicode_ci" - ports: - - 3306:3306 - options: --health-cmd="mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 3 strategy: fail-fast: false matrix: include: - - php: '8.1' - moodle-branch: 'MOODLE_404_STABLE' + - php: '8.4' + moodle-branch: 'MOODLE_500_STABLE' + database: pgsql + - php: '8.3' + moodle-branch: 'MOODLE_500_STABLE' database: pgsql - php: '8.2' - moodle-branch: 'MOODLE_404_STABLE' + moodle-branch: 'MOODLE_500_STABLE' database: pgsql - php: '8.3' - moodle-branch: 'MOODLE_404_STABLE' + moodle-branch: 'MOODLE_405_STABLE' database: pgsql - - php: '8.1' - moodle-branch: 'MOODLE_404_STABLE' - database: mariadb - php: '8.2' - moodle-branch: 'MOODLE_404_STABLE' - database: mariadb - - php: '8.3' - moodle-branch: 'MOODLE_404_STABLE' - database: mariadb - - php: '8.0' - moodle-branch: 'MOODLE_403_STABLE' + moodle-branch: 'MOODLE_405_STABLE' database: pgsql - php: '8.1' - moodle-branch: 'MOODLE_403_STABLE' + moodle-branch: 'MOODLE_405_STABLE' database: pgsql - - php: '8.2' - moodle-branch: 'MOODLE_403_STABLE' + - php: '8.3' + moodle-branch: 'MOODLE_404_STABLE' database: pgsql - - php: '8.0' - moodle-branch: 'MOODLE_403_STABLE' - database: mariadb - - php: '8.1' - moodle-branch: 'MOODLE_403_STABLE' - database: mariadb - php: '8.2' - moodle-branch: 'MOODLE_403_STABLE' - database: mariadb - - php: '8.0' - moodle-branch: 'MOODLE_402_STABLE' + moodle-branch: 'MOODLE_404_STABLE' database: pgsql - php: '8.1' - moodle-branch: 'MOODLE_402_STABLE' + moodle-branch: 'MOODLE_404_STABLE' database: pgsql - - php: '8.0' - moodle-branch: 'MOODLE_402_STABLE' - database: mariadb - php: '8.1' - moodle-branch: 'MOODLE_402_STABLE' - database: mariadb - - php: '8.0' - moodle-branch: 'MOODLE_401_STABLE' - database: pgsql - - php: '7.4' moodle-branch: 'MOODLE_401_STABLE' database: pgsql - php: '8.0' moodle-branch: 'MOODLE_401_STABLE' - database: mariadb + database: pgsql - php: '7.4' moodle-branch: 'MOODLE_401_STABLE' - database: mariadb + database: pgsql steps: - name: Check out repository code From 6692b2aafa425a45b3effdd7305598e0ef091faf Mon Sep 17 00:00:00 2001 From: kkrzyzaniak Date: Fri, 26 Sep 2025 15:24:32 +0200 Subject: [PATCH 13/26] Enhance security and context handling --- .../teamsmeeting/classes/edit_meeting_api.php | 14 ++ .../tiny/plugins/teamsmeeting/result.php | 29 ++- .../teamsmeeting/tests/webservice_test.php | 165 ++++++++++++++++++ 3 files changed, 200 insertions(+), 8 deletions(-) create mode 100644 lib/editor/tiny/plugins/teamsmeeting/tests/webservice_test.php diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php index ecfef00c2..1638e94be 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php @@ -63,7 +63,21 @@ public static function edit_meeting_parameters() { * @return array */ public static function edit_meeting($url) { + global $DB; $record = self::get_meeting($url); + + if ($record === null) { + $context = \context_system::instance(); + } else { + if (!empty($record->contextid)) { + $context = \context::instance_by_id($record->contextid); + } else { + $context = \context_system::instance(); + } + } + + require_capability('tiny/teamsmeeting:add', $context); + $url = self::get_meeting_url($record); if ($record == null) { diff --git a/lib/editor/tiny/plugins/teamsmeeting/result.php b/lib/editor/tiny/plugins/teamsmeeting/result.php index a7cf9e873..8d575865d 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/result.php +++ b/lib/editor/tiny/plugins/teamsmeeting/result.php @@ -27,10 +27,20 @@ require_login(); +$courseid = optional_param('courseid', 0, PARAM_INT); +if ($courseid) { + $course = $DB->get_record('course', ['id' => $courseid], '*', MUST_EXIST); + $context = \context_course::instance($course->id); +} else { + $context = \context_system::instance(); +} + +require_capability('tiny/teamsmeeting:add', $context); + $meetinglink = optional_param('link', null, PARAM_URL); $title = optional_param('title', null, PARAM_TEXT); -$preview = optional_param('preview', null, PARAM_RAW); -$optionslink = optional_param('options', null, PARAM_RAW); +$preview = optional_param('preview', null, PARAM_TEXT); +$optionslink = optional_param('options', null, PARAM_URL); $meetingoptions = null; @@ -51,16 +61,19 @@ $meetingdata->link = $meetinglink; $meetingdata->options = $meetingoptions; $meetingdata->timecreated = time(); + $meetingdata->userid = $USER->id; + $meetingdata->contextid = $context->id; $DB->insert_record('tiny_teamsmeeting', $meetingdata); } else if (!empty($optionslink)) { - $meetingoptions = $optionslink; + if (filter_var($optionslink, FILTER_VALIDATE_URL)) { + $meetingoptions = $optionslink; + } } -$context = context_system::instance(); $PAGE->set_context($context); $PAGE->set_pagelayout('standard'); $PAGE->set_url(new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', ['link' => $meetinglink, 'title' => $title, - 'preview' => $preview, 'options' => $optionslink])); + 'preview' => $preview, 'options' => $optionslink, 'courseid' => $courseid])); echo '
@@ -77,14 +90,14 @@ ''; if (!empty($meetinglink)) { echo '' . get_string('iframe_go_to_meeting', 'tiny_teamsmeeting') . ''; } if (!empty($meetingoptions)) { echo '' . get_string('iframe_meeting_options', 'tiny_teamsmeeting') . ''; @@ -94,7 +107,7 @@ echo ""; diff --git a/lib/editor/tiny/plugins/teamsmeeting/tests/webservice_test.php b/lib/editor/tiny/plugins/teamsmeeting/tests/webservice_test.php new file mode 100644 index 000000000..c6723ccee --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/tests/webservice_test.php @@ -0,0 +1,165 @@ +. + +/** + * REST tests for tiny_teamsmeeting webservice. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace tiny_teamsmeeting; + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot . '/webservice/tests/helpers.php'); + +use externallib_advanced_testcase; +use \context_course; +use \context_system; + +/** + * REST test case for tiny_teamsmeeting webservice. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @author Oliwer Banach + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class webservice_test extends externallib_advanced_testcase { + + /** + * Set up test data. + */ + protected function setUp(): void { + $this->resetAfterTest(); + } + + /** + * Test that users with capability can access Teams Meeting functionality. + */ + public function test_teamsmeeting_capability_with_access() { + $course = $this->getDataGenerator()->create_course(); + $user = $this->getDataGenerator()->create_user(); + $this->getDataGenerator()->enrol_user($user->id, $course->id, 'editingteacher'); + + $this->setUser($user); + $context = \context_course::instance($course->id); + $this->assertTrue(has_capability('tiny/teamsmeeting:add', $context)); + } + + /** + * Test that users without capability cannot access Teams Meeting functionality. + */ + public function test_teamsmeeting_capability_without_access() { + $course = $this->getDataGenerator()->create_course(); + $user = $this->getDataGenerator()->create_user(); + $this->getDataGenerator()->enrol_user($user->id, $course->id, 'student'); + + $this->setUser($user); + $context = \context_course::instance($course->id); + $this->assertFalse(has_capability('tiny/teamsmeeting:add', $context)); + } + + /** + * Test capability in system context. + */ + public function test_teamsmeeting_system_context_capability() { + $user = $this->getDataGenerator()->create_user(); + + $this->setUser($user); + $context = \context_system::instance(); + + $this->assignUserCapability('tiny/teamsmeeting:add', $context->id, null); + $this->assertTrue(has_capability('tiny/teamsmeeting:add', $context)); + } + + /** + * Test capability in course context. + */ + public function test_teamsmeeting_course_context_capability() { + $course = $this->getDataGenerator()->create_course(); + $user = $this->getDataGenerator()->create_user(); + $this->getDataGenerator()->enrol_user($user->id, $course->id, 'editingteacher'); + + $this->setUser($user); + $context = \context_course::instance($course->id); + $this->assertTrue(has_capability('tiny/teamsmeeting:add', $context)); + } + + /** + * Test capability enforcement across different roles. + */ + public function test_teamsmeeting_capability_enforcement() { + $course = $this->getDataGenerator()->create_course(); + + $roles = ['student', 'editingteacher', 'teacher']; + + foreach ($roles as $role) { + $user = $this->getDataGenerator()->create_user(); + $this->getDataGenerator()->enrol_user($user->id, $course->id, $role); + + $this->setUser($user); + $context = \context_course::instance($course->id); + + if ($role === 'editingteacher') { + $this->assertTrue(has_capability('tiny/teamsmeeting:add', $context), "User with role $role should have capability"); + } else { + $this->assertFalse(has_capability('tiny/teamsmeeting:add', $context), "User with role $role should not have capability"); + } + } + } + + /** + * Test capability in different contexts. + */ + public function test_teamsmeeting_context_variations() { + $course = $this->getDataGenerator()->create_course(); + $user = $this->getDataGenerator()->create_user(); + $this->getDataGenerator()->enrol_user($user->id, $course->id, 'editingteacher'); + + $this->setUser($user); + + $coursecontext = \context_course::instance($course->id); + $this->assertTrue(has_capability('tiny/teamsmeeting:add', $coursecontext)); + + $systemcontext = \context_system::instance(); + $this->assertFalse(has_capability('tiny/teamsmeeting:add', $systemcontext)); + } + + /** + * Test capability inheritance from parent contexts. + */ + public function test_teamsmeeting_capability_inheritance() { + $user = $this->getDataGenerator()->create_user(); + + $this->setUser($user); + + $systemcontext = \context_system::instance(); + $this->assignUserCapability('tiny/teamsmeeting:add', $systemcontext->id, null); + + $this->assertTrue(has_capability('tiny/teamsmeeting:add', $systemcontext)); + + $course = $this->getDataGenerator()->create_course(); + $coursecontext = \context_course::instance($course->id); + + $this->assertTrue(has_capability('tiny/teamsmeeting:add', $coursecontext)); + } +} From 531e387d04ec622f140fdf2a6bfc835a88f4c222 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Thu, 2 Oct 2025 12:33:41 +0100 Subject: [PATCH 14/26] Change preview param type to allow options URL to be parsed --- lib/editor/tiny/plugins/teamsmeeting/result.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/result.php b/lib/editor/tiny/plugins/teamsmeeting/result.php index 8d575865d..c74aab84e 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/result.php +++ b/lib/editor/tiny/plugins/teamsmeeting/result.php @@ -39,7 +39,7 @@ $meetinglink = optional_param('link', null, PARAM_URL); $title = optional_param('title', null, PARAM_TEXT); -$preview = optional_param('preview', null, PARAM_TEXT); +$preview = optional_param('preview', null, PARAM_CLEANHTML); $optionslink = optional_param('options', null, PARAM_URL); $meetingoptions = null; From 59267dab368f42c40d5aec276d5adf41d7fb5855 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Thu, 2 Oct 2025 12:34:01 +0100 Subject: [PATCH 15/26] Update plugin version for 1.4 release --- lib/editor/tiny/plugins/teamsmeeting/version.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index 0c5ee4ac1..78401af39 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -26,8 +26,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'tiny_teamsmeeting'; -$plugin->release = '1.3'; -$plugin->version = 2023120602; +$plugin->release = '1.4'; +$plugin->version = 2025100200; $plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = []; + From f97325efab2042f0a1b60c8133d1d1ff7faf1ba1 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Thu, 2 Oct 2025 12:50:09 +0100 Subject: [PATCH 16/26] add additional validation on options link URL --- lib/editor/tiny/plugins/teamsmeeting/result.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/result.php b/lib/editor/tiny/plugins/teamsmeeting/result.php index c74aab84e..61f287e5c 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/result.php +++ b/lib/editor/tiny/plugins/teamsmeeting/result.php @@ -50,7 +50,7 @@ $links = $htmlDom->getElementsByTagName('a'); foreach ($links as $link) { $href = $link->getAttribute('href'); - if ($href && strpos($href, 'meetingOptions') !== false) { + if ($href && strpos($href, 'meetingOptions') !== false && filter_var($href, FILTER_VALIDATE_URL)) { $meetingoptions = $href; break; } From 75c32de931f01638b076b04de525720491d30104 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Mon, 6 Oct 2025 10:40:16 +0100 Subject: [PATCH 17/26] Enhance security, upgrade web service function to avoid confusion --- .../teamsmeeting/amd/build/commands.min.js | 3 +- .../amd/build/commands.min.js.map | 2 +- .../teamsmeeting/amd/build/common.min.js | 1 - .../teamsmeeting/amd/build/common.min.js.map | 2 +- .../amd/build/configuration.min.js | 1 - .../amd/build/configuration.min.js.map | 2 +- .../teamsmeeting/amd/build/options.min.js | 5 +- .../teamsmeeting/amd/build/options.min.js.map | 2 +- .../teamsmeeting/amd/build/plugin.min.js | 1 - .../teamsmeeting/amd/build/plugin.min.js.map | 2 +- .../plugins/teamsmeeting/amd/src/commands.js | 8 +- .../plugins/teamsmeeting/amd/src/common.js | 2 - .../teamsmeeting/amd/src/configuration.js | 1 - .../plugins/teamsmeeting/amd/src/options.js | 6 +- .../plugins/teamsmeeting/amd/src/plugin.js | 2 +- .../teamsmeeting/classes/edit_meeting_api.php | 155 ------------------ .../classes/external/get_meeting_details.php | 128 +++++++++++++++ .../teamsmeeting/classes/plugininfo.php | 9 + .../teamsmeeting/classes/privacy/provider.php | 65 +------- .../tiny/plugins/teamsmeeting/db/access.php | 4 +- .../tiny/plugins/teamsmeeting/db/services.php | 14 +- .../tiny/plugins/teamsmeeting/error.php | 62 +++++-- .../tiny/plugins/teamsmeeting/result.php | 121 ++++++++++---- .../tiny/plugins/teamsmeeting/version.php | 3 +- 24 files changed, 309 insertions(+), 292 deletions(-) delete mode 100644 lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php create mode 100644 lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js index 0570dbddb..6b08965c5 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js @@ -2,10 +2,9 @@ define("tiny_teamsmeeting/commands",["exports","editor_tiny/utils","core/str",". /** * Commands helper for the Moodle tiny_teamsmeeting plugin. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null};_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},handleSubmitAction=editor=>api=>{var _selectedNode$parentN,_selectedNode$parentN2;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&"tiny_meeting_link"===selectedNode.id?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&"tiny_meeting_link"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.id)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType);else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_edit_meeting",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny"),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN3,_linkNode;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode2,_linkNode3;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN3=selectedNode.parentNode)||void 0===_selectedNode$parentN3?void 0:_selectedNode$parentN3.nodeName)&&(linkNode=selectedNode.parentNode),"tiny_meeting_link"===(null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.id)?{link:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("href"),target:null===(_linkNode3=linkNode)||void 0===_linkNode3?void 0:_linkNode3.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{var _selectedNode$parentN4;const selectedNode=editor.selection.getNode(),isActive="tiny_meeting_link"===selectedNode.id||"tiny_meeting_link"===(null===(_selectedNode$parentN4=selectedNode.parentNode)||void 0===_selectedNode$parentN4?void 0:_selectedNode$parentN4.id);buttonApi.setActive(isActive)}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null};_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},handleSubmitAction=editor=>api=>{var _selectedNode$parentN,_selectedNode$parentN2;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&"tiny_meeting_link"===selectedNode.id?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&"tiny_meeting_link"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.id)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType);else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_get_meeting_details",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny&courseid=").concat((0,_options.getCourseId)(editor)),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN3,_linkNode;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode2,_linkNode3;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN3=selectedNode.parentNode)||void 0===_selectedNode$parentN3?void 0:_selectedNode$parentN3.nodeName)&&(linkNode=selectedNode.parentNode),"tiny_meeting_link"===(null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.id)?{link:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("href"),target:null===(_linkNode3=linkNode)||void 0===_linkNode3?void 0:_linkNode3.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{var _selectedNode$parentN4;const selectedNode=editor.selection.getNode(),isActive="tiny_meeting_link"===selectedNode.id||"tiny_meeting_link"===(null===(_selectedNode$parentN4=selectedNode.parentNode)||void 0===_selectedNode$parentN4?void 0:_selectedNode$parentN4.id);buttonApi.setActive(isActive)}})); //# sourceMappingURL=commands.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map index 3dcfc1444..d6a74bc66 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map @@ -1 +1 @@ -{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_edit_meeting', args: { url: data['link'] } }])[0];\n return {\n url: result['url'],\n meetingUrl: result['status'] ? data['link'] : '',\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode?.id === 'tiny_meeting_link') {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link';\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","api","getData","targetType","selectedNode","selection","getNode","linkNode","nodeName","id","parentNode","dom","setAttrib","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","link","_linkNode2","getAttribute","target","_linkNode3","buttonApi","on","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0];\n return {\n url: result['url'],\n meetingUrl: result['status'] ? data['link'] : '',\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode?.id === 'tiny_meeting_link') {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link';\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","api","getData","targetType","selectedNode","selection","getNode","linkNode","nodeName","id","parentNode","dom","setAttrib","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","link","_linkNode2","getAttribute","target","_linkNode3","buttonApi","on","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js index e303aac13..af10903f8 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js @@ -2,7 +2,6 @@ define("tiny_teamsmeeting/common",["exports"],(function(_exports){Object.defineP /** * Common values helper for the Moodle tiny_teamsmeeting plugin. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map index 736b37533..2f8d498ed 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map @@ -1 +1 @@ -{"version":3,"file":"common.min.js","sources":["../src/common.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Common values helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nconst component = 'tiny_teamsmeeting';\n\nexport default {\n component,\n pluginName: `${component}/plugin`,\n icon: component,\n createMeetingButtonName: `${component}_createMeeting`,\n};\n"],"names":["component","pluginName","icon","createMeetingButtonName"],"mappings":";;;;;;;;;MAwBMA,UAAY,iCAEH,CACXA,UAAAA,UACAC,qBAAeD,qBACfE,KAAMF,UACNG,kCAA4BH"} \ No newline at end of file +{"version":3,"file":"common.min.js","sources":["../src/common.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Common values helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nconst component = 'tiny_teamsmeeting';\nexport default {\n component,\n pluginName: `${component}/plugin`,\n icon: component,\n createMeetingButtonName: `${component}_createMeeting`,\n};\n"],"names":["component","pluginName","icon","createMeetingButtonName"],"mappings":";;;;;;;;MAuBMA,UAAY,iCACH,CACXA,UAAAA,UACAC,qBAAeD,qBACfE,KAAMF,UACNG,kCAA4BH"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js index d6d0754a0..fcb7bae59 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js @@ -2,7 +2,6 @@ define("tiny_teamsmeeting/configuration",["exports","./common","editor_tiny/util /** * Configuration for the Moodle tiny_teamsmeeting plugin. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map index 50bfa44c8..5b34277d9 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map @@ -1 +1 @@ -{"version":3,"file":"configuration.min.js","sources":["../src/configuration.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Configuration for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport { createMeetingButtonName } from './common';\n\nimport { addToolbarButtons } from 'editor_tiny/utils';\n\nconst getToolbarConfiguration = (instanceConfig) => {\n let toolbar = instanceConfig.toolbar;\n toolbar = addToolbarButtons(toolbar, 'content', [\n createMeetingButtonName,\n ]);\n\n return toolbar;\n};\n\nexport const configure = (instanceConfig) => {\n return {\n toolbar: getToolbarConfiguration(instanceConfig),\n };\n};\n"],"names":["getToolbarConfiguration","instanceConfig","toolbar","createMeetingButtonName"],"mappings":";;;;;;;;;MA4BMA,wBAA2BC,qBACzBC,QAAUD,eAAeC,eAC7BA,SAAU,4BAAkBA,QAAS,UAAW,CAC5CC,kCAGGD,4BAGeD,iBACf,CACHC,QAASF,wBAAwBC"} \ No newline at end of file +{"version":3,"file":"configuration.min.js","sources":["../src/configuration.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Configuration for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport { createMeetingButtonName } from './common';\n\nimport { addToolbarButtons } from 'editor_tiny/utils';\n\nconst getToolbarConfiguration = (instanceConfig) => {\n let toolbar = instanceConfig.toolbar;\n toolbar = addToolbarButtons(toolbar, 'content', [\n createMeetingButtonName,\n ]);\n\n return toolbar;\n};\n\nexport const configure = (instanceConfig) => {\n return {\n toolbar: getToolbarConfiguration(instanceConfig),\n };\n};\n"],"names":["getToolbarConfiguration","instanceConfig","toolbar","createMeetingButtonName"],"mappings":";;;;;;;;MA2BMA,wBAA2BC,qBACzBC,QAAUD,eAAeC,eAC7BA,SAAU,4BAAkBA,QAAS,UAAW,CAC5CC,kCAGGD,4BAGeD,iBACf,CACHC,QAASF,wBAAwBC"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js index 214438b16..1da02cc76 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js @@ -1,12 +1,11 @@ -define("tiny_teamsmeeting/options",["exports","editor_tiny/options","./common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.getMsession=_exports.getLocaleValue=_exports.getClientdomain=_exports.getAppurl=void 0; +define("tiny_teamsmeeting/options",["exports","editor_tiny/options","./common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.getMsession=_exports.getLocaleValue=_exports.getCourseId=_exports.getClientdomain=_exports.getAppurl=void 0; /** * Options for the Moodle tiny_teamsmeeting plugin. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -const appurl=(0,_options.getPluginOptionName)(_common.pluginName,"appurl"),clientdomain=(0,_options.getPluginOptionName)(_common.pluginName,"clientdomain"),localevalue=(0,_options.getPluginOptionName)(_common.pluginName,"localevalue"),msession=(0,_options.getPluginOptionName)(_common.pluginName,"msession");_exports.register=editor=>{const registerOption=editor.options.register;registerOption(appurl,{processor:"string"}),registerOption(clientdomain,{processor:"string"}),registerOption(localevalue,{processor:"string"}),registerOption(msession,{processor:"string"})};_exports.getAppurl=editor=>editor.options.get(appurl);_exports.getClientdomain=editor=>editor.options.get(clientdomain);_exports.getLocaleValue=editor=>editor.options.get(localevalue);_exports.getMsession=editor=>editor.options.get(msession)})); +const appurl=(0,_options.getPluginOptionName)(_common.pluginName,"appurl"),clientdomain=(0,_options.getPluginOptionName)(_common.pluginName,"clientdomain"),localevalue=(0,_options.getPluginOptionName)(_common.pluginName,"localevalue"),msession=(0,_options.getPluginOptionName)(_common.pluginName,"msession"),courseid=(0,_options.getPluginOptionName)(_common.pluginName,"courseid");_exports.register=editor=>{const registerOption=editor.options.register;registerOption(appurl,{processor:"string"}),registerOption(clientdomain,{processor:"string"}),registerOption(localevalue,{processor:"string"}),registerOption(msession,{processor:"string"}),registerOption(courseid,{processor:"int"})};_exports.getAppurl=editor=>editor.options.get(appurl);_exports.getClientdomain=editor=>editor.options.get(clientdomain);_exports.getLocaleValue=editor=>editor.options.get(localevalue);_exports.getMsession=editor=>editor.options.get(msession);_exports.getCourseId=editor=>editor.options.get(courseid)})); //# sourceMappingURL=options.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map index 4a190f7a9..a4bfdaf48 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map @@ -1 +1 @@ -{"version":3,"file":"options.min.js","sources":["../src/options.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Options for the Moodle tiny_teamsmeeting plugin.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getPluginOptionName} from 'editor_tiny/options';\nimport {pluginName} from './common';\n\nconst appurl = getPluginOptionName(pluginName, 'appurl');\nconst clientdomain = getPluginOptionName(pluginName, 'clientdomain');\nconst localevalue = getPluginOptionName(pluginName, 'localevalue');\nconst msession = getPluginOptionName(pluginName, 'msession');\n\nexport const register = (editor) => {\n const registerOption = editor.options.register;\n\n registerOption(appurl, {\n processor: 'string',\n });\n registerOption(clientdomain, {\n processor: 'string',\n });\n registerOption(localevalue, {\n processor: 'string',\n });\n registerOption(msession, {\n processor: 'string',\n });\n};\n\n/**\n * Fetch the myFirstProperty value for this editor instance.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for\n * @returns {object} The value of the myFirstProperty option\n */\nexport const getAppurl = (editor) => editor.options.get(appurl);\nexport const getClientdomain = (editor) => editor.options.get(clientdomain);\nexport const getLocaleValue = (editor) => editor.options.get(localevalue);\nexport const getMsession = (editor) => editor.options.get(msession);\n"],"names":["appurl","pluginName","clientdomain","localevalue","msession","editor","registerOption","options","register","processor","get"],"mappings":";;;;;;;;;MA2BMA,QAAS,gCAAoBC,mBAAY,UACzCC,cAAe,gCAAoBD,mBAAY,gBAC/CE,aAAc,gCAAoBF,mBAAY,eAC9CG,UAAW,gCAAoBH,mBAAY,8BAExBI,eACfC,eAAiBD,OAAOE,QAAQC,SAEtCF,eAAeN,OAAQ,CACnBS,UAAW,WAEfH,eAAeJ,aAAc,CACzBO,UAAW,WAEfH,eAAeH,YAAa,CACxBM,UAAW,WAEfH,eAAeF,SAAU,CACrBK,UAAW,+BAUOJ,QAAWA,OAAOE,QAAQG,IAAIV,iCACxBK,QAAWA,OAAOE,QAAQG,IAAIR,sCAC/BG,QAAWA,OAAOE,QAAQG,IAAIP,kCACjCE,QAAWA,OAAOE,QAAQG,IAAIN"} \ No newline at end of file +{"version":3,"file":"options.min.js","sources":["../src/options.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Options for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getPluginOptionName} from 'editor_tiny/options';\nimport {pluginName} from './common';\n\nconst appurl = getPluginOptionName(pluginName, 'appurl');\nconst clientdomain = getPluginOptionName(pluginName, 'clientdomain');\nconst localevalue = getPluginOptionName(pluginName, 'localevalue');\nconst msession = getPluginOptionName(pluginName, 'msession');\nconst courseid = getPluginOptionName(pluginName, 'courseid');\n\nexport const register = (editor) => {\n const registerOption = editor.options.register;\n\n registerOption(appurl, {\n processor: 'string',\n });\n registerOption(clientdomain, {\n processor: 'string',\n });\n registerOption(localevalue, {\n processor: 'string',\n });\n registerOption(msession, {\n processor: 'string',\n });\n registerOption(courseid, {\n processor: 'int',\n });\n};\n\n/**\n * Fetch the myFirstProperty value for this editor instance.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for\n * @returns {object} The value of the myFirstProperty option\n */\nexport const getAppurl = (editor) => editor.options.get(appurl);\nexport const getClientdomain = (editor) => editor.options.get(clientdomain);\nexport const getLocaleValue = (editor) => editor.options.get(localevalue);\nexport const getMsession = (editor) => editor.options.get(msession);\nexport const getCourseId = (editor) => editor.options.get(courseid);\n"],"names":["appurl","pluginName","clientdomain","localevalue","msession","courseid","editor","registerOption","options","register","processor","get"],"mappings":";;;;;;;;MA0BMA,QAAS,gCAAoBC,mBAAY,UACzCC,cAAe,gCAAoBD,mBAAY,gBAC/CE,aAAc,gCAAoBF,mBAAY,eAC9CG,UAAW,gCAAoBH,mBAAY,YAC3CI,UAAW,gCAAoBJ,mBAAY,8BAExBK,eACfC,eAAiBD,OAAOE,QAAQC,SAEtCF,eAAeP,OAAQ,CACnBU,UAAW,WAEfH,eAAeL,aAAc,CACzBQ,UAAW,WAEfH,eAAeJ,YAAa,CACxBO,UAAW,WAEfH,eAAeH,SAAU,CACrBM,UAAW,WAEfH,eAAeF,SAAU,CACrBK,UAAW,4BAUOJ,QAAWA,OAAOE,QAAQG,IAAIX,iCACxBM,QAAWA,OAAOE,QAAQG,IAAIT,sCAC/BI,QAAWA,OAAOE,QAAQG,IAAIR,kCACjCG,QAAWA,OAAOE,QAAQG,IAAIP,+BAC9BE,QAAWA,OAAOE,QAAQG,IAAIN"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js index e90e84da9..fe19a4c87 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js @@ -2,7 +2,6 @@ define("tiny_teamsmeeting/plugin",["exports","editor_tiny/loader","editor_tiny/u /** * Tiny Teams Meeting plugin for Moodle. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js.map index 51fb81211..d269cb7e1 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/plugin.min.js.map @@ -1 +1 @@ -{"version":3,"file":"plugin.min.js","sources":["../src/plugin.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Tiny Teams Meeting plugin for Moodle.\n *\n * @package tiny_teamsmeeting\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getTinyMCE} from 'editor_tiny/loader';\nimport {getPluginMetadata} from 'editor_tiny/utils';\n\nimport {component, pluginName} from './common';\nimport {register as registerOptions} from './options';\nimport {getSetup as getCommandSetup} from './commands';\nimport * as Configuration from './configuration';\n\n// Set up the tiny_teamsmeeting Plugin.\nexport default new Promise(async(resolve) => {\n // Note: The PluginManager.add function does not support asynchronous configuration.\n // Perform any asynchronous configuration here, and then call the PluginManager.add function.\n const [\n tinyMCE,\n pluginMetadata,\n setupCommands,\n ] = await Promise.all([\n getTinyMCE(),\n getPluginMetadata(component, pluginName),\n getCommandSetup(),\n ]);\n\n // Reminder: Any asynchronous code must be run before this point.\n tinyMCE.PluginManager.add(pluginName, (editor) => {\n // Register any options that your plugin has\n registerOptions(editor);\n\n // Setup any commands such as buttons, menu items, and so on.\n setupCommands(editor);\n\n // Return the pluginMetadata object. This is used by TinyMCE to display a help link for your plugin.\n return pluginMetadata;\n });\n\n resolve([pluginName, Configuration]);\n});\n"],"names":["Promise","async","tinyMCE","pluginMetadata","setupCommands","all","component","pluginName","PluginManager","add","editor","resolve","Configuration"],"mappings":";;;;;;;;kCAiCe,IAAIA,SAAQC,MAAAA,gBAInBC,QACAC,eACAC,qBACMJ,QAAQK,IAAI,EAClB,yBACA,4BAAkBC,kBAAWC,qBAC7B,0BAIJL,QAAQM,cAAcC,IAAIF,oBAAaG,+BAEnBA,QAGhBN,cAAcM,QAGPP,kBAGXQ,QAAQ,CAACJ,mBAAYK"} \ No newline at end of file +{"version":3,"file":"plugin.min.js","sources":["../src/plugin.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Tiny Teams Meeting plugin for Moodle.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getTinyMCE} from 'editor_tiny/loader';\nimport {getPluginMetadata} from 'editor_tiny/utils';\n\nimport {component, pluginName} from './common';\nimport {register as registerOptions} from './options';\nimport {getSetup as getCommandSetup} from './commands';\nimport * as Configuration from './configuration';\n\n// Set up the tiny_teamsmeeting Plugin.\n// eslint-disable-next-line no-async-promise-executor\nexport default new Promise(async(resolve) => {\n // Note: The PluginManager.add function does not support asynchronous configuration.\n // Perform any asynchronous configuration here, and then call the PluginManager.add function.\n const [\n tinyMCE,\n pluginMetadata,\n setupCommands,\n ] = await Promise.all([\n getTinyMCE(),\n getPluginMetadata(component, pluginName),\n getCommandSetup(),\n ]);\n\n // Reminder: Any asynchronous code must be run before this point.\n tinyMCE.PluginManager.add(pluginName, (editor) => {\n // Register any options that your plugin has\n registerOptions(editor);\n\n // Setup any commands such as buttons, menu items, and so on.\n setupCommands(editor);\n\n // Return the pluginMetadata object. This is used by TinyMCE to display a help link for your plugin.\n return pluginMetadata;\n });\n\n resolve([pluginName, Configuration]);\n});\n"],"names":["Promise","async","tinyMCE","pluginMetadata","setupCommands","all","component","pluginName","PluginManager","add","editor","resolve","Configuration"],"mappings":";;;;;;;kCAiCe,IAAIA,SAAQC,MAAAA,gBAInBC,QACAC,eACAC,qBACMJ,QAAQK,IAAI,EAClB,yBACA,4BAAkBC,kBAAWC,qBAC7B,0BAIJL,QAAQM,cAAcC,IAAIF,oBAAaG,+BAEnBA,QAGhBN,cAAcM,QAGPP,kBAGXQ,QAAQ,CAACJ,mBAAYK"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js index cbfabef3c..522bf6f17 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js @@ -17,7 +17,6 @@ /** * Commands helper for the Moodle tiny_teamsmeeting plugin. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later @@ -26,12 +25,11 @@ import {getButtonImage} from 'editor_tiny/utils'; import {get_string as getString} from 'core/str'; import {component, createMeetingButtonName, icon} from './common'; -import {getAppurl, getClientdomain, getLocaleValue, getMsession} from "./options"; +import {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from "./options"; import Ajax from 'core/ajax'; const dialogApiReference = { current: null }; - /** * Get the setup function for the buttons. * @@ -159,7 +157,7 @@ const updateMeetingUrlInput = url => { const getIframeData = async (editor) => { let data = getMeetingUrlFormSelectedNode(editor); if (data) { - const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_edit_meeting', args: { url: data['link'] } }])[0]; + const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0]; return { url: result['url'], meetingUrl: result['status'] ? data['link'] : '', @@ -167,7 +165,7 @@ const getIframeData = async (editor) => { }; } return { - url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny`, + url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`, meetingUrl: '', newWindow: false }; diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js index 0970f3acb..138c73288 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js @@ -16,14 +16,12 @@ /** * Common values helper for the Moodle tiny_teamsmeeting plugin. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ const component = 'tiny_teamsmeeting'; - export default { component, pluginName: `${component}/plugin`, diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js index 64d52db7d..0b177167b 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js @@ -16,7 +16,6 @@ /** * Configuration for the Moodle tiny_teamsmeeting plugin. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js index 2c49d5d03..aac1a276f 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js @@ -16,7 +16,6 @@ /** * Options for the Moodle tiny_teamsmeeting plugin. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later @@ -29,6 +28,7 @@ const appurl = getPluginOptionName(pluginName, 'appurl'); const clientdomain = getPluginOptionName(pluginName, 'clientdomain'); const localevalue = getPluginOptionName(pluginName, 'localevalue'); const msession = getPluginOptionName(pluginName, 'msession'); +const courseid = getPluginOptionName(pluginName, 'courseid'); export const register = (editor) => { const registerOption = editor.options.register; @@ -45,6 +45,9 @@ export const register = (editor) => { registerOption(msession, { processor: 'string', }); + registerOption(courseid, { + processor: 'int', + }); }; /** @@ -57,3 +60,4 @@ export const getAppurl = (editor) => editor.options.get(appurl); export const getClientdomain = (editor) => editor.options.get(clientdomain); export const getLocaleValue = (editor) => editor.options.get(localevalue); export const getMsession = (editor) => editor.options.get(msession); +export const getCourseId = (editor) => editor.options.get(courseid); diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/plugin.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/plugin.js index 602088471..ca39623be 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/plugin.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/plugin.js @@ -16,7 +16,6 @@ /** * Tiny Teams Meeting plugin for Moodle. * - * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later @@ -31,6 +30,7 @@ import {getSetup as getCommandSetup} from './commands'; import * as Configuration from './configuration'; // Set up the tiny_teamsmeeting Plugin. +// eslint-disable-next-line no-async-promise-executor export default new Promise(async(resolve) => { // Note: The PluginManager.add function does not support asynchronous configuration. // Perform any asynchronous configuration here, and then call the PluginManager.add function. diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php b/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php deleted file mode 100644 index 1638e94be..000000000 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php +++ /dev/null @@ -1,155 +0,0 @@ -. - -/** - * Tiny Teams Meeting edit meeting web service function. - * - * @package tiny_teamsmeeting - * @copyright 2023 Enovation Solutions - * @author Oliwer Banach - * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -namespace tiny_teamsmeeting; - -defined('MOODLE_INTERNAL') || die(); - -require_once($CFG->libdir . '/externallib.php'); - -use external_api; -use external_function_parameters; -use external_single_structure; -use external_value; -use moodle_url; - -/** - * Get existing meeting from database. - * - * @package tiny_teamsmeeting - * @copyright 2023 Enovation Solutions - * @author Oliwer Banach - * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class edit_meeting_api extends external_api { - - /** - * Returns description of method parameters. - * - * @return external_function_parameters - */ - public static function edit_meeting_parameters() { - return new external_function_parameters([ - 'url' => new external_value(PARAM_URL, 'URL link', VALUE_REQUIRED), - ]); - } - - /** - * Returns url whether the operation was successful. - * - * @param string $url - * @return array - */ - public static function edit_meeting($url) { - global $DB; - $record = self::get_meeting($url); - - if ($record === null) { - $context = \context_system::instance(); - } else { - if (!empty($record->contextid)) { - $context = \context::instance_by_id($record->contextid); - } else { - $context = \context_system::instance(); - } - } - - require_capability('tiny/teamsmeeting:add', $context); - - $url = self::get_meeting_url($record); - - if ($record == null) { - return [ - 'status' => false, - 'url' => $url - ]; - } - - return [ - 'status' => true, - 'url' => $url - ]; - } - - /** - * Retrieve a meeting record from the database based on the URL. - * - * @param string $url The URL of the meeting. - * @return mixed|null The meeting record if found, or null if not found. - */ - private static function get_meeting($url) { - global $DB; - $sql = 'SELECT * - FROM {tiny_teamsmeeting} - WHERE ' . $DB->sql_compare_text('link') . ' = ' . $DB->sql_compare_text(':url') . ' ORDER BY id ASC'; - $records = $DB->get_records_sql($sql, ['url' => $url]); - - $count = count($records); - if ($count == 0) { - return null; - } - - $result = reset($records); - if ($count > 1) { - array_shift($records); - $ids = []; - foreach ($records as $record) { - $ids[] = $record->id; - } - $DB->delete_records_list('tiny_teamsmeeting', 'id', $ids); - } - - return $result; - } - - /** - * Returns the URL for a meeting record. - * - * @param object $record The meeting record object. - * @return string The URL link for the meeting. - */ - private static function get_meeting_url($record) { - if ($record == null) { - return (new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/error.php'))->out(); - } - - return (new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', [ - 'title' => $record->title, 'link' => $record->link, 'options' => $record->options]))->out(); - } - - /** - * Returns description of method result value. - * - * @return external_single_structure - */ - public static function edit_meeting_returns() { - return new external_single_structure( - [ - 'status' => new external_value(PARAM_BOOL, 'Status of the operation'), - 'url' => new external_value(PARAM_URL, 'URL link') - ] - ); - } -} diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php b/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php new file mode 100644 index 000000000..1ae2b26cb --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php @@ -0,0 +1,128 @@ +. + +/** + * tiny_teamsmeeting get meeting details web service function. + * + * @package tiny_teamsmeeting + * @copyright 2025 Enovation Solutions + * @author Lai Wei + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace tiny_teamsmeeting\external; + +use core_external\external_api; +use core_external\external_function_parameters; +use core_external\external_single_structure; +use core_external\external_value; +use moodle_url; +use stdClass; + +/** + * Get existing meeting details from database. + * + * @package tiny_teamsmeeting + */ +class get_meeting_details extends external_api { + /** + * Web service function parameter definition for get_meeting_details function. + * + * @return external_function_parameters + */ + public static function execute_parameters(): external_function_parameters { + return new external_function_parameters([ + 'url' => new external_value(PARAM_URL, 'Link to the Teams meeting', VALUE_REQUIRED), + ]); + } + + /** + * Get meeting details from database by url. + * + * @param string $url + * @return array + */ + public static function execute(string $url): array { + $params = self::validate_parameters(self::execute_parameters(), ['url' => $url]); + + $record = self::get_meeting($params['url']); + var_dump($record);die; + if (!$record) { + return [ + 'status' => false, + 'url' => (new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/error.php'))->out(), + ]; + } + + $resulturl = new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', [ + 'title' => $record->title, + 'link' => $record->link, + 'options' => $record->options, + 'edit' => 1, + 'sesskey' => sesskey(), + ]); + return [ + 'status' => true, + 'url' => $resulturl->out(), + ]; + } + + /** + * Find existing meeting in database by url. + * + * @param string $url + * @return stdClass|null + */ + private static function get_meeting(string $url): ?stdClass { + global $DB; + + $sql = 'SELECT * + FROM {tiny_teamsmeeting} + WHERE ' . $DB->sql_compare_text('link') . ' = ' . $DB->sql_compare_text(':url') . ' ORDER BY id ASC'; + $records = $DB->get_records_sql($sql, ['url' => $url]); + + $count = count($records); + if ($count == 0) { + return null; + } + + $result = reset($records); + if ($count > 1) { + array_shift($records); + $ids = []; + foreach ($records as $record) { + $ids[] = $record->id; + } + $DB->delete_records_list('tiny_teamsmeeting', 'id', $ids); + } + + return $result; + } + + /** + * Return value definition of get_meeting_details function. + * + * @return external_single_structure + */ + public static function execute_returns(): external_single_structure { + return new external_single_structure( + [ + 'status' => new external_value(PARAM_BOOL, 'Status of the operation'), + 'url' => new external_value(PARAM_URL, 'URL link'), + ] + ); + } +} diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php index b7155d4ea..1cd993344 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php @@ -85,11 +85,20 @@ public static function get_plugin_configuration_for_context(context $context, ar ?editor $editor = null) : array { global $CFG, $SESSION, $USER; + // Add courseid parameter if we're in a course context or below. + $coursecontext = $context->get_course_context(false); + if ($coursecontext) { + $courseid = $coursecontext->instanceid; + } else { + $courseid = SITEID; + } + return [ 'appurl' => get_config('tiny_teamsmeeting', 'meetingapplink'), 'clientdomain' => encode_url($CFG->wwwroot), 'localevalue' => (empty($SESSION->lang) ? $USER->lang : $SESSION->lang), 'msession' => sesskey(), + 'courseid' => $courseid, ]; } } diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php b/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php index ee5c6e08d..7a9720425 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php @@ -26,10 +26,6 @@ namespace tiny_teamsmeeting\privacy; use core_privacy\local\metadata\collection; -use core_privacy\local\request\approved_contextlist; -use core_privacy\local\request\approved_userlist; -use core_privacy\local\request\contextlist; -use core_privacy\local\request\userlist; defined('MOODLE_INTERNAL') || die(); @@ -39,63 +35,18 @@ * @package tiny_teamsmeeting * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class provider implements \core_privacy\local\metadata\provider, - \core_privacy\local\request\plugin\provider, \core_privacy\local\request\core_userlist_provider { - - public static function get_metadata(collection $collection) : collection { - $collection->add_external_location_link('msteamsapp', ['userlang' => 'privacy:metadata:msteamsapp:userlang'], - 'privacy:metadata:msteamsapp'); - - return $collection; - } +class provider implements \core_privacy\local\metadata\provider { /** - * Get the list of contexts that contain user information for the specified user. + * Get the metadata about this system. * - * @param int $userid The user to search. - * @return contextlist $contextlist The contextlist containing the list of contexts used in this plugin. + * @param collection $collection The initialised collection to add items to. + * @return collection The collection with information about the system. */ - public static function get_contexts_for_userid(int $userid) : contextlist { - return new contextlist(); - } - - /** - * Get the list of users who have data within a context. - * - * @param userlist $userlist The userlist containing the list of users who have data in this context/plugin combination. - */ - public static function get_users_in_context(userlist $userlist) { - } - - /** - * Export all user data for the specified user, in the specified contexts. - * - * @param approved_contextlist $contextlist The approved contexts to export information for. - */ - public static function export_user_data(approved_contextlist $contextlist) { - } - - /** - * Delete all use data which matches the specified deletion_criteria. - * - * @param \context $context A user context. - */ - public static function delete_data_for_all_users_in_context(\context $context) { - } - - /** - * Delete all user data for the specified user, in the specified contexts. - * - * @param approved_contextlist $contextlist The approved contexts and user information to delete information for. - */ - public static function delete_data_for_user(approved_contextlist $contextlist) { - } + public static function get_metadata(collection $collection): collection { + $collection->add_external_location_link('msteamsapp', ['userlang' => 'privacy:metadata:msteamsapp:userlang'], + 'privacy:metadata:msteamsapp'); - /** - * Delete multiple users within a single context. - * - * @param approved_userlist $userlist The approved context and user information to delete information for. - */ - public static function delete_data_for_users(approved_userlist $userlist) { + return $collection; } } diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/access.php b/lib/editor/tiny/plugins/teamsmeeting/db/access.php index 1b7faf620..291828304 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/db/access.php +++ b/lib/editor/tiny/plugins/teamsmeeting/db/access.php @@ -26,12 +26,10 @@ $capabilities = [ 'tiny/teamsmeeting:add' => [ - 'captype' => 'write', + 'captype' => 'write', 'contextlevel' => CONTEXT_COURSE, 'archetypes' => [ 'editingteacher' => CAP_ALLOW, ], ], ]; - - diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/services.php b/lib/editor/tiny/plugins/teamsmeeting/db/services.php index 86c1af07f..4f817a03c 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/db/services.php +++ b/lib/editor/tiny/plugins/teamsmeeting/db/services.php @@ -20,25 +20,25 @@ * @package tiny_teamsmeeting * @copyright 2023 Enovation Solutions * @author Oliwer Banach + * @author Lai Wei * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); $functions = [ - 'tiny_teamsmeeting_edit_meeting' => [ - 'classname' => '\tiny_teamsmeeting\edit_meeting_api', - 'methodname' => 'edit_meeting', - 'classpath' => 'lib/editor/tiny/plugins/teamsmeeting/classes/edit_meeting_api.php', - 'description' => 'Edit existing meeting', - 'type' => 'write', + 'tiny_teamsmeeting_get_meeting_details' => [ + 'classname' => '\tiny_teamsmeeting\external\get_meeting_details', + 'description' => 'Get existing meeting details', + 'type' => 'read', 'ajax' => true, + 'services' => ['tiny_teamsmeeting_service'], ], ]; $services = [ 'tiny_teamsmeeting_service' => [ - 'functions' => ['tiny_teamsmeeting_edit_meeting'], + 'functions' => ['tiny_teamsmeeting_get_meeting_details'], 'restrictedusers' => 0, 'enabled' => 1, ], diff --git a/lib/editor/tiny/plugins/teamsmeeting/error.php b/lib/editor/tiny/plugins/teamsmeeting/error.php index 902a46f18..0e8d9db66 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/error.php +++ b/lib/editor/tiny/plugins/teamsmeeting/error.php @@ -27,17 +27,55 @@ require_login(); -echo '
- - - - - - - - ' . - get_string('iframe_not_found', 'tiny_teamsmeeting') . - ''; +// Error message text. +$errormessage = get_string('iframe_error', 'tiny_teamsmeeting'); + +// SVG error icon. +$svgattributes = [ + 'xmlns' => 'http://www.w3.org/2000/svg', + 'viewBox' => '0 0 32 32', + 'width' => '32', + 'xml:space' => 'preserve', + 'xmlns:xlink' => 'http://www.w3.org/1999/xlink', + 'style' => 'width:100px; align-self: center; display: flex; margin-bottom: 1.5rem;', +]; + +$circleattributes = [ + 'cx' => '16', + 'cy' => '16', + 'id' => 'BG', + 'r' => '16', + 'style' => 'fill:#D72828;', +]; + +$pathattributes = [ + 'd' => 'M14.5,25h3v-3h-3V25z M14.5,6v13h3V6H14.5z', + 'id' => 'Exclamatory_x5F_Sign', + 'style' => 'fill:#E6E6E6;', +]; + +$svg = html_writer::start_tag('svg', $svgattributes); +$svg .= html_writer::start_tag('g'); +$svg .= html_writer::start_tag('g', ['id' => 'Error_1_']); +$svg .= html_writer::start_tag('g', ['id' => 'Error']); +$svg .= html_writer::empty_tag('circle', $circleattributes); +$svg .= html_writer::empty_tag('path', $pathattributes); +$svg .= html_writer::end_tag('g'); +$svg .= html_writer::end_tag('g'); +$svg .= html_writer::end_tag('g'); +$svg .= html_writer::end_tag('svg'); + +// Error message span. +$spanattributes = [ + 'class' => 'meetingcreatedheader', + 'style' => 'font-size: 20px; font-weight: 600; display: block; text-align: center;', +]; +$messagespan = html_writer::tag('span', $errormessage, $spanattributes); + +// Container div. +$divattributes = [ + 'style' => 'display: flex; flex-direction: column; margin-top: 2rem; padding: 2rem; font-family: sans-serif;', +]; +echo html_writer::div($svg . $messagespan, '', $divattributes); exit; diff --git a/lib/editor/tiny/plugins/teamsmeeting/result.php b/lib/editor/tiny/plugins/teamsmeeting/result.php index 61f287e5c..0ae2920dc 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/result.php +++ b/lib/editor/tiny/plugins/teamsmeeting/result.php @@ -28,14 +28,20 @@ require_login(); $courseid = optional_param('courseid', 0, PARAM_INT); -if ($courseid) { - $course = $DB->get_record('course', ['id' => $courseid], '*', MUST_EXIST); - $context = \context_course::instance($course->id); +$edit = optional_param('edit', 0, PARAM_INT); +if ($edit) { + require_sesskey(); + $context = context_system::instance(); } else { - $context = \context_system::instance(); -} + if ($courseid) { + $course = $DB->get_record('course', ['id' => $courseid], '*', MUST_EXIST); + $context = context_course::instance($course->id); + } else { + $context = context_system::instance(); + } -require_capability('tiny/teamsmeeting:add', $context); + require_capability('tiny/teamsmeeting:add', $context); +} $meetinglink = optional_param('link', null, PARAM_URL); $title = optional_param('title', null, PARAM_TEXT); @@ -74,41 +80,90 @@ $PAGE->set_pagelayout('standard'); $PAGE->set_url(new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', ['link' => $meetinglink, 'title' => $title, 'preview' => $preview, 'options' => $optionslink, 'courseid' => $courseid])); -echo '
- - - ' . - get_string('iframe_meeting_created', 'tiny_teamsmeeting', $title) . - ''; + +// Build success SVG icon. +$svgattributes = [ + 'class' => 'meetingsuccess', + 'xmlns' => 'http://www.w3.org/2000/svg', + 'viewBox' => '0 0 48 48', + 'style' => 'width:100px; align-self: center; display: flex; margin-bottom: 1.5rem;', +]; + +$pathattributes = [ + 'd' => 'M24 0c2.2 0 4.3.3 6.4.9 2 .6 3.9 1.4 5.7 2.4 1.8 1 3.4 2.3 4.9 3.8 1.5 1.5 2.7 3.1 3.8 4.9 ' . + '1 1.8 1.8 3.7 2.4 5.7.6 2 .9 4.2.9 6.4s-.3 4.3-.9 6.3c-.6 2-1.4 3.9-2.4 5.7-1 ' . + '1.8-2.3 3.4-3.8 4.9-1.5 1.5-3.1 2.7-4.9 3.8-1.8 1-3.7 1.9-5.7 2.4-2 .6-4.1.9-6.4.9-2.2 ' . + '0-4.3-.3-6.3-.9-2-.6-3.9-1.4-5.7-2.4-1.8-1-3.4-2.3-4.9-3.8-1.5-1.5-2.7-3.1-3.8-4.9-1-' . + '1.8-1.9-3.7-2.4-5.7C.3 28.3 0 26.2 0 24s.3-4.3.9-6.4c.6-2 1.4-3.9 2.4-5.7 1-1.8 2.3-' . + '3.4 3.8-4.9 1.5-1.5 3.1-2.7 4.9-3.8 1.8-1 3.7-1.9 5.7-2.4S21.8 0 24 0zm7.9 17.1c-.6 ' . + '0-1.2.2-1.6.7l-8.5 8.5-3-3c-.4-.4-1-.7-1.6-.7-.3 0-.6.1-.8.2-.3.1-.5.3-.7.5s-.4.4-.5.7c-' . + '.2.3-.2.5-.2.8 0 .6.2 1.2.7 1.6l4.6 4.6c.4.4 1 .7 1.6.7.6 0 1.2-.2 1.6-.7l10.1-10.1c.4-' . + '.5.7-1 .7-1.6 0-.3-.1-.6-.2-.8-.1-.3-.3-.5-.5-.7s-.4-.4-.7-.5c-.4-.2-.7-.2-1-.2z', + 'fill' => '#599c00', +]; + +$svg = html_writer::start_tag('svg', $svgattributes); +$svg .= html_writer::empty_tag('path', $pathattributes); +$svg .= html_writer::end_tag('svg'); + +// Build header message. +$headerattributes = [ + 'class' => 'meetingcreatedheader', + 'style' => 'font-size: 20px; font-weight: 600; display: block; text-align: center;', +]; +$headermessage = html_writer::tag('span', get_string('iframe_meeting_created', 'tiny_teamsmeeting', $title), $headerattributes); + +$content = $svg . $headermessage; + +// Build meeting link button if available. if (!empty($meetinglink)) { - echo '' . - get_string('iframe_go_to_meeting', 'tiny_teamsmeeting') . ''; + $buttonattributes = [ + 'class' => 'btn btn-primary', + 'href' => $meetinglink, + 'style' => 'display: inline-block; font-weight: 600; text-align: center; vertical-align: middle; ' . + 'border: 1px solid hsla(0,0%,100%,.04); user-select: none; font-size: .875rem; line-height: 1.5; border-radius: 3px; ' . + 'color: #fff; background-color: #6264a7; margin-top: 1rem; padding: .375rem .75rem; text-decoration: none;', + 'target' => '_blank', + ]; + $button = html_writer::link($meetinglink, get_string('iframe_go_to_meeting', 'tiny_teamsmeeting'), $buttonattributes); + $spanattributes = [ + 'class' => 'meetinglink', + 'style' => 'display: block; text-align: center;', + ]; + $content .= html_writer::tag('span', $button, $spanattributes); } + +// Build meeting options button if available. if (!empty($meetingoptions)) { - echo '' . - get_string('iframe_meeting_options', 'tiny_teamsmeeting') . ''; + $buttonattributes = [ + 'class' => 'btn btn-primary', + 'href' => $meetingoptions, + 'style' => 'display: inline-block; font-weight: 600; text-align: center; vertical-align: middle; ' . + 'border: 1px solid hsla(0,0%,100%,.04); user-select: none; font-size: .875rem; line-height: 1.5; border-radius: 3px; ' . + 'color: #fff; background-color: #6264a7; margin-top: 1rem; padding: .375rem .75rem; text-decoration: none;', + 'target' => '_blank', + ]; + $button = html_writer::link($meetingoptions, get_string('iframe_meeting_options', 'tiny_teamsmeeting'), $buttonattributes); + $spanattributes = [ + 'class' => 'meetingoptions', + 'style' => 'display: block; text-align: center;', + ]; + $content .= html_writer::tag('span', $button, $spanattributes); } -echo '
'; -echo ""; +"; +echo html_writer::script($scriptcontent); exit; diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index 78401af39..de484c0af 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -27,7 +27,6 @@ $plugin->component = 'tiny_teamsmeeting'; $plugin->release = '1.4'; -$plugin->version = 2025100200; +$plugin->version = 2025100203; $plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; - From 6841a574f3c2547bd9f0c8b375c69dc1fcf76ada Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Mon, 6 Oct 2025 11:04:48 +0100 Subject: [PATCH 18/26] bug fix in error display and situation where an event cannot be found --- lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js | 2 +- .../tiny/plugins/teamsmeeting/amd/build/commands.min.js.map | 2 +- lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js | 2 +- .../teamsmeeting/classes/external/get_meeting_details.php | 1 - lib/editor/tiny/plugins/teamsmeeting/error.php | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js index 6b08965c5..04492d6ba 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js @@ -5,6 +5,6 @@ define("tiny_teamsmeeting/commands",["exports","editor_tiny/utils","core/str",". * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null};_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},handleSubmitAction=editor=>api=>{var _selectedNode$parentN,_selectedNode$parentN2;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&"tiny_meeting_link"===selectedNode.id?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&"tiny_meeting_link"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.id)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType);else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_get_meeting_details",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny&courseid=").concat((0,_options.getCourseId)(editor)),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN3,_linkNode;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode2,_linkNode3;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN3=selectedNode.parentNode)||void 0===_selectedNode$parentN3?void 0:_selectedNode$parentN3.nodeName)&&(linkNode=selectedNode.parentNode),"tiny_meeting_link"===(null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.id)?{link:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("href"),target:null===(_linkNode3=linkNode)||void 0===_linkNode3?void 0:_linkNode3.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{var _selectedNode$parentN4;const selectedNode=editor.selection.getNode(),isActive="tiny_meeting_link"===selectedNode.id||"tiny_meeting_link"===(null===(_selectedNode$parentN4=selectedNode.parentNode)||void 0===_selectedNode$parentN4?void 0:_selectedNode$parentN4.id);buttonApi.setActive(isActive)}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null};_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},handleSubmitAction=editor=>api=>{var _selectedNode$parentN,_selectedNode$parentN2;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&"tiny_meeting_link"===selectedNode.id?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&"tiny_meeting_link"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.id)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType);else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data&&data.link){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_get_meeting_details",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny&courseid=").concat((0,_options.getCourseId)(editor)),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN3,_linkNode;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode2,_linkNode3;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN3=selectedNode.parentNode)||void 0===_selectedNode$parentN3?void 0:_selectedNode$parentN3.nodeName)&&(linkNode=selectedNode.parentNode),"tiny_meeting_link"===(null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.id)?{link:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("href"),target:null===(_linkNode3=linkNode)||void 0===_linkNode3?void 0:_linkNode3.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{var _selectedNode$parentN4;const selectedNode=editor.selection.getNode(),isActive="tiny_meeting_link"===selectedNode.id||"tiny_meeting_link"===(null===(_selectedNode$parentN4=selectedNode.parentNode)||void 0===_selectedNode$parentN4?void 0:_selectedNode$parentN4.id);buttonApi.setActive(isActive)}})); //# sourceMappingURL=commands.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map index d6a74bc66..eb6ebaec1 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map @@ -1 +1 @@ -{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0];\n return {\n url: result['url'],\n meetingUrl: result['status'] ? data['link'] : '',\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode?.id === 'tiny_meeting_link') {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link';\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","api","getData","targetType","selectedNode","selection","getNode","linkNode","nodeName","id","parentNode","dom","setAttrib","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","link","_linkNode2","getAttribute","target","_linkNode3","buttonApi","on","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data && data['link']) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0];\n return {\n url: result['url'],\n meetingUrl: result['status'] ? data['link'] : '',\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode?.id === 'tiny_meeting_link') {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link';\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","api","getData","targetType","selectedNode","selection","getNode","linkNode","nodeName","id","parentNode","dom","setAttrib","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","link","_linkNode2","getAttribute","target","_linkNode3","buttonApi","on","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js index 522bf6f17..55c771e0e 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js @@ -156,7 +156,7 @@ const updateMeetingUrlInput = url => { */ const getIframeData = async (editor) => { let data = getMeetingUrlFormSelectedNode(editor); - if (data) { + if (data && data['link']) { const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0]; return { url: result['url'], diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php b/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php index 1ae2b26cb..1fd6922af 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php @@ -59,7 +59,6 @@ public static function execute(string $url): array { $params = self::validate_parameters(self::execute_parameters(), ['url' => $url]); $record = self::get_meeting($params['url']); - var_dump($record);die; if (!$record) { return [ 'status' => false, diff --git a/lib/editor/tiny/plugins/teamsmeeting/error.php b/lib/editor/tiny/plugins/teamsmeeting/error.php index 0e8d9db66..55f4e70d8 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/error.php +++ b/lib/editor/tiny/plugins/teamsmeeting/error.php @@ -28,7 +28,7 @@ require_login(); // Error message text. -$errormessage = get_string('iframe_error', 'tiny_teamsmeeting'); +$errormessage = get_string('iframe_not_found', 'tiny_teamsmeeting'); // SVG error icon. $svgattributes = [ From b57572231955ccb3639b58d02fbce3855f8e7ba2 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Mon, 6 Oct 2025 11:13:53 +0100 Subject: [PATCH 19/26] update action name to avoid confusion --- .../teamsmeeting/classes/external/get_meeting_details.php | 2 +- lib/editor/tiny/plugins/teamsmeeting/result.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php b/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php index 1fd6922af..7453712c1 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php @@ -70,7 +70,7 @@ public static function execute(string $url): array { 'title' => $record->title, 'link' => $record->link, 'options' => $record->options, - 'edit' => 1, + 'viewexisting' => 1, 'sesskey' => sesskey(), ]); return [ diff --git a/lib/editor/tiny/plugins/teamsmeeting/result.php b/lib/editor/tiny/plugins/teamsmeeting/result.php index 0ae2920dc..42ade40a3 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/result.php +++ b/lib/editor/tiny/plugins/teamsmeeting/result.php @@ -28,8 +28,8 @@ require_login(); $courseid = optional_param('courseid', 0, PARAM_INT); -$edit = optional_param('edit', 0, PARAM_INT); -if ($edit) { +$viewexisting = optional_param('viewexisting', 0, PARAM_INT); +if ($viewexisting) { require_sesskey(); $context = context_system::instance(); } else { From 8f3d9e3b242524e6e379e13f3c65c4220ffab4c8 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Mon, 30 Mar 2026 13:05:06 +0100 Subject: [PATCH 20/26] Update how teams meeting links are toggled in inserted content to prevent it from being cleared by Tiny editor --- .../teamsmeeting/amd/build/commands.min.js | 2 +- .../amd/build/commands.min.js.map | 2 +- .../plugins/teamsmeeting/amd/src/commands.js | 107 +++++++++++++++++- .../tiny/plugins/teamsmeeting/version.php | 4 +- 4 files changed, 106 insertions(+), 9 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js index 04492d6ba..6fd3a7b22 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js @@ -5,6 +5,6 @@ define("tiny_teamsmeeting/commands",["exports","editor_tiny/utils","core/str",". * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null};_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},handleSubmitAction=editor=>api=>{var _selectedNode$parentN,_selectedNode$parentN2;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&"tiny_meeting_link"===selectedNode.id?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&"tiny_meeting_link"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.id)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType);else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data&&data.link){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_get_meeting_details",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny&courseid=").concat((0,_options.getCourseId)(editor)),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN3,_linkNode;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode2,_linkNode3;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN3=selectedNode.parentNode)||void 0===_selectedNode$parentN3?void 0:_selectedNode$parentN3.nodeName)&&(linkNode=selectedNode.parentNode),"tiny_meeting_link"===(null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.id)?{link:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("href"),target:null===(_linkNode3=linkNode)||void 0===_linkNode3?void 0:_linkNode3.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{var _selectedNode$parentN4;const selectedNode=editor.selection.getNode(),isActive="tiny_meeting_link"===selectedNode.id||"tiny_meeting_link"===(null===(_selectedNode$parentN4=selectedNode.parentNode)||void 0===_selectedNode$parentN4?void 0:_selectedNode$parentN4.id);buttonApi.setActive(isActive)}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null},TEAMS_MEETING_URL_PATTERN=/^https:\/\/teams\.microsoft\.com\/l\/meetup-join\//i;_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),editor.on("PreInit",(()=>{const rule=editor.schema.getElementRule("a");rule&&(rule.attributes["data-teams-meeting"]={},rule.attributesOrder&&!rule.attributesOrder.includes("data-teams-meeting")&&rule.attributesOrder.push("data-teams-meeting"))})),editor.on("init",(()=>migrateLegacyLinks(editor))),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},isTeamsMeetingUrl=url=>!!url&&TEAMS_MEETING_URL_PATTERN.test(url),isTeamsMeetingLink=node=>{var _node$dataset;return!(!node||"A"!==node.nodeName)&&(!(null===(_node$dataset=node.dataset)||void 0===_node$dataset||!_node$dataset.teamsMeeting)||"tiny_meeting_link"===node.id||isTeamsMeetingUrl(node.getAttribute("href")))},migrateLegacyLinks=editor=>{editor.dom.select("a").forEach((link=>{var _link$dataset;null!==(_link$dataset=link.dataset)&&void 0!==_link$dataset&&_link$dataset.teamsMeeting||("tiny_meeting_link"===link.id||isTeamsMeetingUrl(link.getAttribute("href")))&&("tiny_meeting_link"===link.id&&editor.dom.setAttrib(link,"id",null),editor.dom.setAttrib(link,"data-teams-meeting","1"))}))},handleSubmitAction=editor=>api=>{var _selectedNode$parentN;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&isTeamsMeetingLink(selectedNode)?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&isTeamsMeetingLink(selectedNode.parentNode)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType),"tiny_meeting_link"===linkNode.id&&(editor.dom.setAttrib(linkNode,"id",null),editor.dom.setAttrib(linkNode,"data-teams-meeting","1"));else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data&&data.link){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_get_meeting_details",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny&courseid=").concat((0,_options.getCourseId)(editor)),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN2;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode,_linkNode2;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.nodeName)&&(linkNode=selectedNode.parentNode),linkNode&&isTeamsMeetingLink(linkNode)?{link:null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.getAttribute("href"),target:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{const selectedNode=editor.selection.getNode(),isActive=isTeamsMeetingLink(selectedNode)||isTeamsMeetingLink(selectedNode.parentNode);buttonApi.setActive(isActive)}})); //# sourceMappingURL=commands.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map index eb6ebaec1..f9e0a9cfa 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map @@ -1 +1 @@ -{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data && data['link']) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0];\n return {\n url: result['url'],\n meetingUrl: result['status'] ? data['link'] : '',\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode?.id === 'tiny_meeting_link') {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link';\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","api","getData","targetType","selectedNode","selection","getNode","linkNode","nodeName","id","parentNode","dom","setAttrib","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","link","_linkNode2","getAttribute","target","_linkNode3","buttonApi","on","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n/**\n * Regex matching the Teams meeting join URL format.\n * Used as a fallback to re-identify links whose marker attribute was stripped\n * by Moodle's server-side HTML filtering.\n *\n * @type {RegExp}\n */\nconst TEAMS_MEETING_URL_PATTERN = /^https:\\/\\/teams\\.microsoft\\.com\\/l\\/meetup-join\\//i;\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n // PreInit fires before content is loaded, making it the correct place to\n // extend the schema. Directly mutating the existing element rule adds\n // data-teams-meeting without touching href, target, or any other valid\n // attribute. Using addValidElements('a[...]') replaces the entire rule,\n // which strips href and target from anchor elements.\n editor.on('PreInit', () => {\n const rule = editor.schema.getElementRule('a');\n if (rule) {\n rule.attributes['data-teams-meeting'] = {};\n if (rule.attributesOrder && !rule.attributesOrder.includes('data-teams-meeting')) {\n rule.attributesOrder.push('data-teams-meeting');\n }\n }\n });\n\n // After content is loaded, mark any links that have lost their attribute\n // due to server-side HTML filtering.\n editor.on('init', () => migrateLegacyLinks(editor));\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Returns true if the URL looks like a Teams meeting join link.\n *\n * Used as a last-resort fallback for links whose marker attributes were stripped\n * by Moodle's server-side HTML filtering (HTML Purifier removes id and data-*\n * attributes from stored content). Such links survive in the database as plain\n * anchors with no identifying attribute, so the URL pattern is the only reliable\n * signal remaining.\n *\n * @param {string|null} url - The URL to test.\n * @returns {boolean}\n */\nconst isTeamsMeetingUrl = (url) => !!url && TEAMS_MEETING_URL_PATTERN.test(url);\n\n/**\n * Determines whether a DOM node is a Teams meeting link.\n *\n * Checks in order of specificity:\n * 1. data-teams-meeting attribute (current marker)\n * 2. id=\"tiny_meeting_link\" (legacy marker, may still be present in editor DOM\n * if TinyMCE has not yet serialised the content)\n * 3. Teams meeting URL pattern (fallback for links that have lost all markers)\n *\n * @param {Element|null} node - The DOM node to test.\n * @returns {boolean} True if the node is a Teams meeting link.\n */\nconst isTeamsMeetingLink = (node) => {\n if (!node || node.nodeName !== 'A') {\n return false;\n }\n return !!node.dataset?.teamsMeeting ||\n node.id === 'tiny_meeting_link' ||\n isTeamsMeetingUrl(node.getAttribute('href'));\n};\n\n/**\n * Migrates legacy Teams meeting links in the editor content to use the current\n * data-teams-meeting attribute.\n *\n * Handles two cases:\n * - Links with the old id=\"tiny_meeting_link\" attribute still intact in the DOM\n * (content saved before the attribute was stripped by server-side filtering).\n * - Plain anchor links whose href matches the Teams meeting URL pattern\n * (content where all markers have been stripped by server-side filtering).\n *\n * Running this on editor init ensures all recognised links are consistently\n * marked before any user interaction occurs.\n *\n * @param {Editor} editor - The TinyMCE editor instance.\n */\nconst migrateLegacyLinks = (editor) => {\n editor.dom.select('a').forEach(link => {\n if (link.dataset?.teamsMeeting) {\n return; // Already marked, nothing to do.\n }\n if (link.id === 'tiny_meeting_link' || isTeamsMeetingUrl(link.getAttribute('href'))) {\n if (link.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(link, 'id', null);\n }\n editor.dom.setAttrib(link, 'data-teams-meeting', '1');\n }\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && isTeamsMeetingLink(selectedNode)) {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && isTeamsMeetingLink(selectedNode.parentNode)) {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n // Migrate legacy id-based links to the data attribute on save.\n if (linkNode.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(linkNode, 'id', null);\n editor.dom.setAttrib(linkNode, 'data-teams-meeting', '1');\n }\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data && data['link']) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0];\n return {\n url: result['url'],\n meetingUrl: result['status'] ? data['link'] : '',\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode && isTeamsMeetingLink(linkNode)) {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = isTeamsMeetingLink(selectedNode) || isTeamsMeetingLink(selectedNode.parentNode);\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","TEAMS_MEETING_URL_PATTERN","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","on","rule","schema","getElementRule","attributes","attributesOrder","includes","push","migrateLegacyLinks","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","isTeamsMeetingUrl","test","isTeamsMeetingLink","node","nodeName","dataset","_node$dataset","teamsMeeting","id","getAttribute","dom","select","forEach","link","_link$dataset","setAttrib","api","getData","targetType","selectedNode","selection","getNode","linkNode","parentNode","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","_linkNode","target","_linkNode2","buttonApi","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js index 55c771e0e..8e369b930 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js @@ -30,6 +30,15 @@ import Ajax from 'core/ajax'; const dialogApiReference = { current: null }; +/** + * Regex matching the Teams meeting join URL format. + * Used as a fallback to re-identify links whose marker attribute was stripped + * by Moodle's server-side HTML filtering. + * + * @type {RegExp} + */ +const TEAMS_MEETING_URL_PATTERN = /^https:\/\/teams\.microsoft\.com\/l\/meetup-join\//i; + /** * Get the setup function for the buttons. * @@ -50,6 +59,25 @@ export const getSetup = async() => { onSetup: toggleActiveState(editor) }); + // PreInit fires before content is loaded, making it the correct place to + // extend the schema. Directly mutating the existing element rule adds + // data-teams-meeting without touching href, target, or any other valid + // attribute. Using addValidElements('a[...]') replaces the entire rule, + // which strips href and target from anchor elements. + editor.on('PreInit', () => { + const rule = editor.schema.getElementRule('a'); + if (rule) { + rule.attributes['data-teams-meeting'] = {}; + if (rule.attributesOrder && !rule.attributesOrder.includes('data-teams-meeting')) { + rule.attributesOrder.push('data-teams-meeting'); + } + } + }); + + // After content is loaded, mark any links that have lost their attribute + // due to server-side HTML filtering. + editor.on('init', () => migrateLegacyLinks(editor)); + window.addEventListener('message', event => { if (event.data && event.data.action === 'meetingUrl') { updateMeetingUrlInput(event.data.url); @@ -106,6 +134,70 @@ const openDialog = editor => async () => { }); }; +/** + * Returns true if the URL looks like a Teams meeting join link. + * + * Used as a last-resort fallback for links whose marker attributes were stripped + * by Moodle's server-side HTML filtering (HTML Purifier removes id and data-* + * attributes from stored content). Such links survive in the database as plain + * anchors with no identifying attribute, so the URL pattern is the only reliable + * signal remaining. + * + * @param {string|null} url - The URL to test. + * @returns {boolean} + */ +const isTeamsMeetingUrl = (url) => !!url && TEAMS_MEETING_URL_PATTERN.test(url); + +/** + * Determines whether a DOM node is a Teams meeting link. + * + * Checks in order of specificity: + * 1. data-teams-meeting attribute (current marker) + * 2. id="tiny_meeting_link" (legacy marker, may still be present in editor DOM + * if TinyMCE has not yet serialised the content) + * 3. Teams meeting URL pattern (fallback for links that have lost all markers) + * + * @param {Element|null} node - The DOM node to test. + * @returns {boolean} True if the node is a Teams meeting link. + */ +const isTeamsMeetingLink = (node) => { + if (!node || node.nodeName !== 'A') { + return false; + } + return !!node.dataset?.teamsMeeting || + node.id === 'tiny_meeting_link' || + isTeamsMeetingUrl(node.getAttribute('href')); +}; + +/** + * Migrates legacy Teams meeting links in the editor content to use the current + * data-teams-meeting attribute. + * + * Handles two cases: + * - Links with the old id="tiny_meeting_link" attribute still intact in the DOM + * (content saved before the attribute was stripped by server-side filtering). + * - Plain anchor links whose href matches the Teams meeting URL pattern + * (content where all markers have been stripped by server-side filtering). + * + * Running this on editor init ensures all recognised links are consistently + * marked before any user interaction occurs. + * + * @param {Editor} editor - The TinyMCE editor instance. + */ +const migrateLegacyLinks = (editor) => { + editor.dom.select('a').forEach(link => { + if (link.dataset?.teamsMeeting) { + return; // Already marked, nothing to do. + } + if (link.id === 'tiny_meeting_link' || isTeamsMeetingUrl(link.getAttribute('href'))) { + if (link.id === 'tiny_meeting_link') { + editor.dom.setAttrib(link, 'id', null); + } + editor.dom.setAttrib(link, 'data-teams-meeting', '1'); + } + }); +}; + /** * Handle the action of submitting the dialog. * @@ -120,19 +212,24 @@ const handleSubmitAction = (editor) => (api) => { let selectedNode = editor.selection.getNode(); let linkNode = null; - if (selectedNode.nodeName === 'A' && selectedNode.id === 'tiny_meeting_link') { + if (selectedNode.nodeName === 'A' && isTeamsMeetingLink(selectedNode)) { linkNode = selectedNode; - } else if (selectedNode.parentNode?.nodeName === 'A' && selectedNode.parentNode?.id === 'tiny_meeting_link') { + } else if (selectedNode.parentNode?.nodeName === 'A' && isTeamsMeetingLink(selectedNode.parentNode)) { linkNode = selectedNode.parentNode; } if (linkNode) { editor.dom.setAttrib(linkNode, 'href', meetingUrl); editor.dom.setAttrib(linkNode, 'target', targetType); + // Migrate legacy id-based links to the data attribute on save. + if (linkNode.id === 'tiny_meeting_link') { + editor.dom.setAttrib(linkNode, 'id', null); + editor.dom.setAttrib(linkNode, 'data-teams-meeting', '1'); + } } else { let selectedContent = editor.selection.getContent({ format: 'text' }); let contentToInsert = (selectedContent) ? selectedContent : meetingUrl; - editor.insertContent(`${contentToInsert}`); + editor.insertContent(`${contentToInsert}`); } api.close(); }; @@ -187,7 +284,7 @@ const getMeetingUrlFormSelectedNode = editor => { linkNode = selectedNode.parentNode; } - if (linkNode?.id === 'tiny_meeting_link') { + if (linkNode && isTeamsMeetingLink(linkNode)) { return { link: linkNode?.getAttribute('href'), target: linkNode?.getAttribute('target') @@ -222,7 +319,7 @@ const toggleActiveState = editor => (buttonApi) => { */ const handleNodeChange = (editor, buttonApi) => { const selectedNode = editor.selection.getNode(); - const isActive = selectedNode.id === 'tiny_meeting_link' || selectedNode.parentNode?.id === 'tiny_meeting_link'; + const isActive = isTeamsMeetingLink(selectedNode) || isTeamsMeetingLink(selectedNode.parentNode); buttonApi.setActive(isActive); }; \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index de484c0af..159eab7f6 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'tiny_teamsmeeting'; -$plugin->release = '1.4'; -$plugin->version = 2025100203; +$plugin->release = '1.5'; +$plugin->version = 2025100204; $plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; From b00e52bde527606c3d69d6575ac0048ac0fc5915 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Tue, 26 May 2026 15:37:26 +0100 Subject: [PATCH 21/26] Update Moodle plugin CI config files for tiny_teamsmeeting plugin --- .github/workflows/ci.yml | 3 +- .../teamsmeeting/.github/workflows/ci.yml | 126 +++++++++++++++++ .../.github/workflows/moodle-plugin-ci.yml | 128 ------------------ .../tiny/plugins/teamsmeeting/.gitlab-ci.yml | 85 ++++++++++++ 4 files changed, 213 insertions(+), 129 deletions(-) create mode 100644 lib/editor/tiny/plugins/teamsmeeting/.github/workflows/ci.yml delete mode 100644 lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml create mode 100644 lib/editor/tiny/plugins/teamsmeeting/.gitlab-ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b0b21392c..c2bc75c92 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,7 @@ jobs: strategy: fail-fast: false matrix: - folder: [auth/oidc, blocks/microsoft, local/o365, local/office365, local/onenote, repository/office365, theme/boost_o365teams, mod/assign/feedback/onenote, mod/assign/submission/onenote] + folder: [auth/oidc, blocks/microsoft, local/o365, local/office365, local/onenote, repository/office365, theme/boost_o365teams, mod/assign/feedback/onenote, mod/assign/submission/onenote, lib/editor/tiny/plugins/teamsmeeting] moodle-branch: ['MOODLE_501_STABLE'] php: [8.2, 8.3, 8.4] database: [pgsql, mariadb] @@ -59,6 +59,7 @@ jobs: internal-deps: "local/onenote" - folder: mod/assign/submission/onenote internal-deps: "local/onenote" + - folder: lib/editor/tiny/plugins/teamsmeeting steps: - name: Check out sub repository code diff --git a/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/ci.yml b/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/ci.yml new file mode 100644 index 000000000..94380f3b5 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/ci.yml @@ -0,0 +1,126 @@ +name: Moodle Plugin CI for tiny_teamsmeeting + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - 'MOODLE_*_STABLE' + pull_request: + +jobs: + check: + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:15 + env: + POSTGRES_USER: 'postgres' + POSTGRES_HOST_AUTH_METHOD: 'trust' + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 + + mariadb: + image: mariadb:10.11 + env: + MYSQL_USER: 'root' + MYSQL_ALLOW_EMPTY_PASSWORD: "true" + MYSQL_CHARACTER_SET_SERVER: "utf8mb4" + MYSQL_COLLATION_SERVER: "utf8mb4_unicode_ci" + MYSQL_INNODB_FILE_PER_TABLE: "1" + MYSQL_INNODB_FILE_FORMAT: "Barracuda" + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 3 + + strategy: + fail-fast: false + matrix: + moodle-branch: ['MOODLE_501_STABLE'] + php: [8.2, 8.3, 8.4] + database: [pgsql, mariadb] + + steps: + - name: Check out repository code + uses: actions/checkout@v4 + with: + path: plugin + + - name: Setup PHP ${{ matrix.php }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + ini-values: max_input_vars=5000 + coverage: none + + - name: Initialise moodle-plugin-ci + run: | + composer create-project -n --no-dev --prefer-dist moodlehq/moodle-plugin-ci ci ^4 + echo $(cd ci/bin; pwd) >> $GITHUB_PATH + echo $(cd ci/vendor/bin; pwd) >> $GITHUB_PATH + sudo locale-gen en_AU.UTF-8 + echo "NVM_DIR=$HOME/.nvm" >> $GITHUB_ENV + + - name: Install moodle-plugin-ci + run: | + moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1 + env: + DB: ${{ matrix.database }} + MOODLE_BRANCH: ${{ matrix.moodle-branch }} + SHELLOPTS: errexit:nounset:xtrace + + - name: PHP Lint + if: ${{ !cancelled() }} + run: moodle-plugin-ci phplint + + - name: PHP Mess Detector + continue-on-error: true + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpmd + + - name: Moodle Code Checker + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpcs --max-warnings 0 + + - name: Moodle PHPDoc Checker + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpdoc --max-warnings 0 + + - name: Validating + if: ${{ !cancelled() }} + run: moodle-plugin-ci validate + + - name: Check upgrade savepoints + if: ${{ !cancelled() }} + run: moodle-plugin-ci savepoints + + - name: Mustache Lint + if: ${{ !cancelled() }} + run: moodle-plugin-ci mustache + + - name: Grunt + if: ${{ !cancelled() }} + run: moodle-plugin-ci grunt --max-lint-warnings 0 + + - name: PHPUnit tests + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpunit + + - name: Behat features + id: behat + if: ${{ !cancelled() }} + run: moodle-plugin-ci behat --profile chrome + + - name: Cleanup after behat + if: ${{ always() }} + run: | + sudo pkill -f chrome + sudo pkill -f chromedriver + + - name: Mark cancelled jobs as failed. + if: ${{ cancelled() }} + run: exit 1 \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml b/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml deleted file mode 100644 index 97db478a1..000000000 --- a/lib/editor/tiny/plugins/teamsmeeting/.github/workflows/moodle-plugin-ci.yml +++ /dev/null @@ -1,128 +0,0 @@ -name: Moodle Plugin CI - -on: [push, pull_request] - -jobs: - test: - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:14 - env: - POSTGRES_USER: 'postgres' - POSTGRES_HOST_AUTH_METHOD: 'trust' - ports: - - 5432:5432 - options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 - - strategy: - fail-fast: false - matrix: - include: - - php: '8.4' - moodle-branch: 'MOODLE_500_STABLE' - database: pgsql - - php: '8.3' - moodle-branch: 'MOODLE_500_STABLE' - database: pgsql - - php: '8.2' - moodle-branch: 'MOODLE_500_STABLE' - database: pgsql - - php: '8.3' - moodle-branch: 'MOODLE_405_STABLE' - database: pgsql - - php: '8.2' - moodle-branch: 'MOODLE_405_STABLE' - database: pgsql - - php: '8.1' - moodle-branch: 'MOODLE_405_STABLE' - database: pgsql - - php: '8.3' - moodle-branch: 'MOODLE_404_STABLE' - database: pgsql - - php: '8.2' - moodle-branch: 'MOODLE_404_STABLE' - database: pgsql - - php: '8.1' - moodle-branch: 'MOODLE_404_STABLE' - database: pgsql - - php: '8.1' - moodle-branch: 'MOODLE_401_STABLE' - database: pgsql - - php: '8.0' - moodle-branch: 'MOODLE_401_STABLE' - database: pgsql - - php: '7.4' - moodle-branch: 'MOODLE_401_STABLE' - database: pgsql - - steps: - - name: Check out repository code - uses: actions/checkout@v4 - with: - path: plugin - - - name: Setup PHP ${{ matrix.php }} - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php }} - extensions: ${{ matrix.extensions }} - ini-values: max_input_vars=5000 - coverage: none - - - name: Initialise moodle-plugin-ci - run: | - composer create-project -n --no-dev --prefer-dist moodlehq/moodle-plugin-ci ci ^4 - echo $(cd ci/bin; pwd) >> $GITHUB_PATH - echo $(cd ci/vendor/bin; pwd) >> $GITHUB_PATH - sudo locale-gen en_AU.UTF-8 - echo "NVM_DIR=$HOME/.nvm" >> $GITHUB_ENV - - - name: Install moodle-plugin-ci - run: | - moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1 - env: - DB: ${{ matrix.database }} - MOODLE_BRANCH: ${{ matrix.moodle-branch }} - - - name: PHP Lint - if: ${{ always() }} - run: moodle-plugin-ci phplint - - - name: PHP Mess Detector - continue-on-error: true # This step will show errors but will not fail - if: ${{ always() }} - run: moodle-plugin-ci phpmd - - - name: Moodle Code Checker - if: ${{ always() }} - run: moodle-plugin-ci codechecker --max-warnings 0 || true - - - name: Moodle PHPDoc Checker - if: ${{ always() }} - run: moodle-plugin-ci phpdoc - - - name: Validating - if: ${{ always() }} - run: moodle-plugin-ci validate - - - name: Check upgrade savepoints - if: ${{ always() }} - run: moodle-plugin-ci savepoints - - - name: Mustache Lint - if: ${{ always() }} - run: moodle-plugin-ci mustache - - - name: Grunt - if: ${{ always() }} - run: moodle-plugin-ci grunt --max-lint-warnings 0 || true - - - name: PHPUnit tests - if: ${{ always() }} - run: moodle-plugin-ci phpunit --fail-on-warning - - - name: Behat features - if: ${{ always() }} - run: moodle-plugin-ci behat --profile chrome --auto-rerun 0 diff --git a/lib/editor/tiny/plugins/teamsmeeting/.gitlab-ci.yml b/lib/editor/tiny/plugins/teamsmeeting/.gitlab-ci.yml new file mode 100644 index 000000000..4f63b9940 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/.gitlab-ci.yml @@ -0,0 +1,85 @@ +services: + - name: selenium/standalone-chrome:3 + alias: behat + - name: mysql:8.4 + alias: db + command: + - '--character-set-server=utf8mb4' + - '--collation-server=utf8mb4_unicode_ci' + - '--innodb_file_per_table=On' + - '--wait-timeout=28800' + - '--skip-log-bin' + +cache: + paths: + - .cache + +variables: + DEBIAN_FRONTEND: 'noninteractive' + COMPOSER_ALLOW_SUPERUSER: 1 + COMPOSER_CACHE_DIR: "$CI_PROJECT_DIR/.cache/composer" + NPM_CONFIG_CACHE: "$CI_PROJECT_DIR/.cache/npm" + CI_BUILD_DIR: '/tmp/plugin' + MOODLE_BRANCH: 'MOODLE_501_STABLE' + MOODLE_BEHAT_WWWROOT: 'http://localhost:8000' + MOODLE_BEHAT_WDHOST: 'http://behat:4444/wd/hub' + MOODLE_START_BEHAT_SERVERS: 'no' + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + DB: 'mysqli' + +stages: + - moodle-plugin-ci + +.setupandruncheck: &setupandruncheck + stage: moodle-plugin-ci + before_script: + - mkdir -pv "$CI_BUILD_DIR" + - cp -ru "$CI_PROJECT_DIR/"* "$CI_BUILD_DIR" + - mkdir -p /usr/share/man/man1 /usr/share/man/man3 /usr/share/man/man7 + - apt-get -qq update + - apt-get -yqq install --no-install-suggests default-jre-headless default-mysql-client + - 'curl -sS https://raw.githubusercontent.com/creationix/nvm/v0.39.3/install.sh | bash' + - . ~/.bashrc + - nvm install --default --latest-npm lts/gallium + - 'curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer' + - composer create-project -n --no-dev --no-progress --no-ansi moodlehq/moodle-plugin-ci /opt/mci ^4 + - export PATH="/opt/mci/bin:/opt/mci/vendor/bin:$PATH" + - moodle-plugin-ci install --db-host db --db-name moodle + - '{ php -S 0.0.0.0:8000 -t "$CI_PROJECT_DIR/moodle" >/dev/null 2>&1 & }' + - TXT_RED="\e[31m" + + script: + - errors=() + - moodle-plugin-ci phplint || errors+=("phplint") + - moodle-plugin-ci phpmd || errors+=("phpmd") + - moodle-plugin-ci codechecker --max-warnings 0 || errors+=("codechecker") + - moodle-plugin-ci phpdoc --max-warnings 0 || errors+=("phpdoc") + - moodle-plugin-ci validate || errors+=("validate") + - moodle-plugin-ci savepoints || errors+=("savepoints") + - moodle-plugin-ci mustache || errors+=("mustache") + - moodle-plugin-ci grunt --max-lint-warnings 0 || errors+=("grunt") + - moodle-plugin-ci phpunit || errors+=("phpunit") + - moodle-plugin-ci behat --auto-rerun 0 --profile chrome || errors+=("behat") + - |- + if [ ${#errors[@]} -ne 0 ]; then + echo -e "${TXT_RED}Check errors: ${errors[@]}"; + exit 1; + fi + +php82: + tags: + - docker + image: moodlehq/moodle-php-apache:8.2 + <<: *setupandruncheck + +php83: + tags: + - docker + image: moodlehq/moodle-php-apache:8.3 + <<: *setupandruncheck + +php84: + tags: + - docker + image: moodlehq/moodle-php-apache:8.4 + <<: *setupandruncheck From f1ad1fddff9fc96bd8223b5b40c7eeeeda624a16 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Tue, 26 May 2026 16:23:25 +0100 Subject: [PATCH 22/26] Fix Moodle plugin CI errors --- .../amd/build/commands.min.js.map | 2 +- .../amd/build/configuration.min.js.map | 2 +- .../plugins/teamsmeeting/amd/src/commands.js | 32 +++++----- .../teamsmeeting/amd/src/configuration.js | 4 +- .../teamsmeeting/classes/plugininfo.php | 11 ++-- .../teamsmeeting/classes/privacy/provider.php | 10 +-- .../lang/en/tiny_teamsmeeting.php | 8 ++- .../lang/pl/tiny_teamsmeeting.php | 8 ++- .../tiny/plugins/teamsmeeting/result.php | 6 +- .../teamsmeeting/tests/webservice_test.php | 63 +++++++++---------- 10 files changed, 78 insertions(+), 68 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map index f9e0a9cfa..df57773d2 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map @@ -1 +1 @@ -{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = { current: null };\n\n/**\n * Regex matching the Teams meeting join URL format.\n * Used as a fallback to re-identify links whose marker attribute was stripped\n * by Moodle's server-side HTML filtering.\n *\n * @type {RegExp}\n */\nconst TEAMS_MEETING_URL_PATTERN = /^https:\\/\\/teams\\.microsoft\\.com\\/l\\/meetup-join\\//i;\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n // PreInit fires before content is loaded, making it the correct place to\n // extend the schema. Directly mutating the existing element rule adds\n // data-teams-meeting without touching href, target, or any other valid\n // attribute. Using addValidElements('a[...]') replaces the entire rule,\n // which strips href and target from anchor elements.\n editor.on('PreInit', () => {\n const rule = editor.schema.getElementRule('a');\n if (rule) {\n rule.attributes['data-teams-meeting'] = {};\n if (rule.attributesOrder && !rule.attributesOrder.includes('data-teams-meeting')) {\n rule.attributesOrder.push('data-teams-meeting');\n }\n }\n });\n\n // After content is loaded, mark any links that have lost their attribute\n // due to server-side HTML filtering.\n editor.on('init', () => migrateLegacyLinks(editor));\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async () => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n { type: 'htmlpanel', html: `` },\n { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder },\n { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel }\n ]\n },\n buttons: [\n { type: 'cancel', text: buttonSecondaryLabel },\n { type: 'submit', text: buttonPrimaryLabel, primary: true }\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Returns true if the URL looks like a Teams meeting join link.\n *\n * Used as a last-resort fallback for links whose marker attributes were stripped\n * by Moodle's server-side HTML filtering (HTML Purifier removes id and data-*\n * attributes from stored content). Such links survive in the database as plain\n * anchors with no identifying attribute, so the URL pattern is the only reliable\n * signal remaining.\n *\n * @param {string|null} url - The URL to test.\n * @returns {boolean}\n */\nconst isTeamsMeetingUrl = (url) => !!url && TEAMS_MEETING_URL_PATTERN.test(url);\n\n/**\n * Determines whether a DOM node is a Teams meeting link.\n *\n * Checks in order of specificity:\n * 1. data-teams-meeting attribute (current marker)\n * 2. id=\"tiny_meeting_link\" (legacy marker, may still be present in editor DOM\n * if TinyMCE has not yet serialised the content)\n * 3. Teams meeting URL pattern (fallback for links that have lost all markers)\n *\n * @param {Element|null} node - The DOM node to test.\n * @returns {boolean} True if the node is a Teams meeting link.\n */\nconst isTeamsMeetingLink = (node) => {\n if (!node || node.nodeName !== 'A') {\n return false;\n }\n return !!node.dataset?.teamsMeeting ||\n node.id === 'tiny_meeting_link' ||\n isTeamsMeetingUrl(node.getAttribute('href'));\n};\n\n/**\n * Migrates legacy Teams meeting links in the editor content to use the current\n * data-teams-meeting attribute.\n *\n * Handles two cases:\n * - Links with the old id=\"tiny_meeting_link\" attribute still intact in the DOM\n * (content saved before the attribute was stripped by server-side filtering).\n * - Plain anchor links whose href matches the Teams meeting URL pattern\n * (content where all markers have been stripped by server-side filtering).\n *\n * Running this on editor init ensures all recognised links are consistently\n * marked before any user interaction occurs.\n *\n * @param {Editor} editor - The TinyMCE editor instance.\n */\nconst migrateLegacyLinks = (editor) => {\n editor.dom.select('a').forEach(link => {\n if (link.dataset?.teamsMeeting) {\n return; // Already marked, nothing to do.\n }\n if (link.id === 'tiny_meeting_link' || isTeamsMeetingUrl(link.getAttribute('href'))) {\n if (link.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(link, 'id', null);\n }\n editor.dom.setAttrib(link, 'data-teams-meeting', '1');\n }\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && isTeamsMeetingLink(selectedNode)) {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && isTeamsMeetingLink(selectedNode.parentNode)) {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n // Migrate legacy id-based links to the data attribute on save.\n if (linkNode.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(linkNode, 'id', null);\n editor.dom.setAttrib(linkNode, 'data-teams-meeting', '1');\n }\n } else {\n let selectedContent = editor.selection.getContent({ format: 'text' });\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({ meetingUrl: url });\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async (editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data && data['link']) {\n const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0];\n return {\n url: result['url'],\n meetingUrl: result['status'] ? data['link'] : '',\n newWindow: data['target'] === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode && isTeamsMeetingLink(linkNode)) {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup () {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = isTeamsMeetingLink(selectedNode) || isTeamsMeetingLink(selectedNode.parentNode);\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","TEAMS_MEETING_URL_PATTERN","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","on","rule","schema","getElementRule","attributes","attributesOrder","includes","push","migrateLegacyLinks","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","isTeamsMeetingUrl","test","isTeamsMeetingLink","node","nodeName","dataset","_node$dataset","teamsMeeting","id","getAttribute","dom","select","forEach","link","_link$dataset","setAttrib","api","getData","targetType","selectedNode","selection","getNode","linkNode","parentNode","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","_linkNode","target","_linkNode2","buttonApi","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = {current: null};\n\n/**\n * Regex matching the Teams meeting join URL format.\n * Used as a fallback to re-identify links whose marker attribute was stripped\n * by Moodle's server-side HTML filtering.\n *\n * @type {RegExp}\n */\nconst TEAMS_MEETING_URL_PATTERN = /^https:\\/\\/teams\\.microsoft\\.com\\/l\\/meetup-join\\//i;\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n // PreInit fires before content is loaded, making it the correct place to\n // extend the schema. Directly mutating the existing element rule adds\n // data-teams-meeting without touching href, target, or any other valid\n // attribute. Using addValidElements('a[...]') replaces the entire rule,\n // which strips href and target from anchor elements.\n editor.on('PreInit', () => {\n const rule = editor.schema.getElementRule('a');\n if (rule) {\n rule.attributes['data-teams-meeting'] = {};\n if (rule.attributesOrder && !rule.attributesOrder.includes('data-teams-meeting')) {\n rule.attributesOrder.push('data-teams-meeting');\n }\n }\n });\n\n // After content is loaded, mark any links that have lost their attribute\n // due to server-side HTML filtering.\n editor.on('init', () => migrateLegacyLinks(editor));\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async() => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n {type: 'htmlpanel', html: ``},\n {type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder},\n {type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel}\n ]\n },\n buttons: [\n {type: 'cancel', text: buttonSecondaryLabel},\n {type: 'submit', text: buttonPrimaryLabel, primary: true}\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Returns true if the URL looks like a Teams meeting join link.\n *\n * Used as a last-resort fallback for links whose marker attributes were stripped\n * by Moodle's server-side HTML filtering (HTML Purifier removes id and data-*\n * attributes from stored content). Such links survive in the database as plain\n * anchors with no identifying attribute, so the URL pattern is the only reliable\n * signal remaining.\n *\n * @param {string|null} url - The URL to test.\n * @returns {boolean}\n */\nconst isTeamsMeetingUrl = (url) => !!url && TEAMS_MEETING_URL_PATTERN.test(url);\n\n/**\n * Determines whether a DOM node is a Teams meeting link.\n *\n * Checks in order of specificity:\n * 1. data-teams-meeting attribute (current marker)\n * 2. id=\"tiny_meeting_link\" (legacy marker, may still be present in editor DOM\n * if TinyMCE has not yet serialised the content)\n * 3. Teams meeting URL pattern (fallback for links that have lost all markers)\n *\n * @param {Element|null} node - The DOM node to test.\n * @returns {boolean} True if the node is a Teams meeting link.\n */\nconst isTeamsMeetingLink = (node) => {\n if (!node || node.nodeName !== 'A') {\n return false;\n }\n return !!node.dataset?.teamsMeeting ||\n node.id === 'tiny_meeting_link' ||\n isTeamsMeetingUrl(node.getAttribute('href'));\n};\n\n/**\n * Migrates legacy Teams meeting links in the editor content to use the current\n * data-teams-meeting attribute.\n *\n * Handles two cases:\n * - Links with the old id=\"tiny_meeting_link\" attribute still intact in the DOM\n * (content saved before the attribute was stripped by server-side filtering).\n * - Plain anchor links whose href matches the Teams meeting URL pattern\n * (content where all markers have been stripped by server-side filtering).\n *\n * Running this on editor init ensures all recognised links are consistently\n * marked before any user interaction occurs.\n *\n * @param {Editor} editor - The TinyMCE editor instance.\n */\nconst migrateLegacyLinks = (editor) => {\n editor.dom.select('a').forEach(link => {\n if (link.dataset?.teamsMeeting) {\n return; // Already marked, nothing to do.\n }\n if (link.id === 'tiny_meeting_link' || isTeamsMeetingUrl(link.getAttribute('href'))) {\n if (link.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(link, 'id', null);\n }\n editor.dom.setAttrib(link, 'data-teams-meeting', '1');\n }\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && isTeamsMeetingLink(selectedNode)) {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && isTeamsMeetingLink(selectedNode.parentNode)) {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n // Migrate legacy id-based links to the data attribute on save.\n if (linkNode.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(linkNode, 'id', null);\n editor.dom.setAttrib(linkNode, 'data-teams-meeting', '1');\n }\n } else {\n let selectedContent = editor.selection.getContent({format: 'text'});\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({meetingUrl: url});\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async(editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data && data.link) {\n const result = await Ajax.call([{methodname: 'tiny_teamsmeeting_get_meeting_details', args: {url: data.link}}])[0];\n return {\n url: result.url,\n meetingUrl: result.status ? data.link : '',\n newWindow: data.target === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode && isTeamsMeetingLink(linkNode)) {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup() {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = isTeamsMeetingLink(selectedNode) || isTeamsMeetingLink(selectedNode.parentNode);\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","TEAMS_MEETING_URL_PATTERN","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","on","rule","schema","getElementRule","attributes","attributesOrder","includes","push","migrateLegacyLinks","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","isTeamsMeetingUrl","test","isTeamsMeetingLink","node","nodeName","dataset","_node$dataset","teamsMeeting","id","getAttribute","dom","select","forEach","link","_link$dataset","setAttrib","api","getData","targetType","selectedNode","selection","getNode","linkNode","parentNode","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","status","target","_linkNode","_linkNode2","buttonApi","handleNodeChange","isActive","setActive"],"mappings":"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"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map index 5b34277d9..fd2a692a7 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/configuration.min.js.map @@ -1 +1 @@ -{"version":3,"file":"configuration.min.js","sources":["../src/configuration.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Configuration for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport { createMeetingButtonName } from './common';\n\nimport { addToolbarButtons } from 'editor_tiny/utils';\n\nconst getToolbarConfiguration = (instanceConfig) => {\n let toolbar = instanceConfig.toolbar;\n toolbar = addToolbarButtons(toolbar, 'content', [\n createMeetingButtonName,\n ]);\n\n return toolbar;\n};\n\nexport const configure = (instanceConfig) => {\n return {\n toolbar: getToolbarConfiguration(instanceConfig),\n };\n};\n"],"names":["getToolbarConfiguration","instanceConfig","toolbar","createMeetingButtonName"],"mappings":";;;;;;;;MA2BMA,wBAA2BC,qBACzBC,QAAUD,eAAeC,eAC7BA,SAAU,4BAAkBA,QAAS,UAAW,CAC5CC,kCAGGD,4BAGeD,iBACf,CACHC,QAASF,wBAAwBC"} \ No newline at end of file +{"version":3,"file":"configuration.min.js","sources":["../src/configuration.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Configuration for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {createMeetingButtonName} from './common';\n\nimport {addToolbarButtons} from 'editor_tiny/utils';\n\nconst getToolbarConfiguration = (instanceConfig) => {\n let toolbar = instanceConfig.toolbar;\n toolbar = addToolbarButtons(toolbar, 'content', [\n createMeetingButtonName,\n ]);\n\n return toolbar;\n};\n\nexport const configure = (instanceConfig) => {\n return {\n toolbar: getToolbarConfiguration(instanceConfig),\n };\n};\n"],"names":["getToolbarConfiguration","instanceConfig","toolbar","createMeetingButtonName"],"mappings":";;;;;;;;MA2BMA,wBAA2BC,qBACzBC,QAAUD,eAAeC,eAC7BA,SAAU,4BAAkBA,QAAS,UAAW,CAC5CC,kCAGGD,4BAGeD,iBACf,CACHC,QAASF,wBAAwBC"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js index 8e369b930..09238dda9 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js @@ -28,7 +28,7 @@ import {component, createMeetingButtonName, icon} from './common'; import {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from "./options"; import Ajax from 'core/ajax'; -const dialogApiReference = { current: null }; +const dialogApiReference = {current: null}; /** * Regex matching the Teams meeting join URL format. @@ -92,7 +92,7 @@ export const getSetup = async() => { * @param {Editor} editor - The editor object. * @returns {function} - The async function that opens the dialog. */ -const openDialog = editor => async () => { +const openDialog = editor => async() => { const [ modalTitle, buttonPrimaryLabel, @@ -116,14 +116,14 @@ const openDialog = editor => async () => { body: { type: 'panel', items: [ - { type: 'htmlpanel', html: `` }, - { type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder }, - { type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel } + {type: 'htmlpanel', html: ``}, + {type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder}, + {type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel} ] }, buttons: [ - { type: 'cancel', text: buttonSecondaryLabel }, - { type: 'submit', text: buttonPrimaryLabel, primary: true } + {type: 'cancel', text: buttonSecondaryLabel}, + {type: 'submit', text: buttonPrimaryLabel, primary: true} ], onSubmit: handleSubmitAction(editor) }); @@ -227,7 +227,7 @@ const handleSubmitAction = (editor) => (api) => { editor.dom.setAttrib(linkNode, 'data-teams-meeting', '1'); } } else { - let selectedContent = editor.selection.getContent({ format: 'text' }); + let selectedContent = editor.selection.getContent({format: 'text'}); let contentToInsert = (selectedContent) ? selectedContent : meetingUrl; editor.insertContent(`${contentToInsert}`); } @@ -241,7 +241,7 @@ const handleSubmitAction = (editor) => (api) => { */ const updateMeetingUrlInput = url => { if (dialogApiReference.current) { - dialogApiReference.current.setData({ meetingUrl: url }); + dialogApiReference.current.setData({meetingUrl: url}); } }; @@ -251,14 +251,14 @@ const updateMeetingUrlInput = url => { * @param {Editor} editor - The editor object. * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe. */ -const getIframeData = async (editor) => { +const getIframeData = async(editor) => { let data = getMeetingUrlFormSelectedNode(editor); - if (data && data['link']) { - const result = await Ajax.call([{ methodname: 'tiny_teamsmeeting_get_meeting_details', args: { url: data['link'] } }])[0]; + if (data && data.link) { + const result = await Ajax.call([{methodname: 'tiny_teamsmeeting_get_meeting_details', args: {url: data.link}}])[0]; return { - url: result['url'], - meetingUrl: result['status'] ? data['link'] : '', - newWindow: data['target'] === '_blank' + url: result.url, + meetingUrl: result.status ? data.link : '', + newWindow: data.target === '_blank' }; } return { @@ -304,7 +304,7 @@ const getMeetingUrlFormSelectedNode = editor => { const toggleActiveState = editor => (buttonApi) => { editor.on('NodeChange', () => handleNodeChange(editor, buttonApi)); - return function cleanup () { + return function cleanup() { editor.on('NodeChange', () => handleNodeChange(editor, buttonApi)); }; }; diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js index 0b177167b..529bada54 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/configuration.js @@ -21,9 +21,9 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -import { createMeetingButtonName } from './common'; +import {createMeetingButtonName} from './common'; -import { addToolbarButtons } from 'editor_tiny/utils'; +import {addToolbarButtons} from 'editor_tiny/utils'; const getToolbarConfiguration = (instanceConfig) => { let toolbar = instanceConfig.toolbar; diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php index 1cd993344..b400cec05 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php @@ -42,13 +42,12 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class plugininfo extends plugin implements plugin_with_buttons, plugin_with_configuration { - /** * Return the buttons for the editor plugin. * * @return string[] List of buttons this plugin provides. */ - public static function get_available_buttons() : array { + public static function get_available_buttons(): array { return [ 'tiny_teamsmeeting/plugin', ]; @@ -81,8 +80,12 @@ public static function is_enabled( * @param editor|null $editor * @return array */ - public static function get_plugin_configuration_for_context(context $context, array $options, array $fpoptions, - ?editor $editor = null) : array { + public static function get_plugin_configuration_for_context( + context $context, + array $options, + array $fpoptions, + ?editor $editor = null + ): array { global $CFG, $SESSION, $USER; // Add courseid parameter if we're in a course context or below. diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php b/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php index 7a9720425..4d55c2249 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php @@ -27,8 +27,6 @@ use core_privacy\local\metadata\collection; -defined('MOODLE_INTERNAL') || die(); - /** * Privacy API implementation for the Teams Meeting plugin. * @@ -36,7 +34,6 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class provider implements \core_privacy\local\metadata\provider { - /** * Get the metadata about this system. * @@ -44,8 +41,11 @@ class provider implements \core_privacy\local\metadata\provider { * @return collection The collection with information about the system. */ public static function get_metadata(collection $collection): collection { - $collection->add_external_location_link('msteamsapp', ['userlang' => 'privacy:metadata:msteamsapp:userlang'], - 'privacy:metadata:msteamsapp'); + $collection->add_external_location_link( + 'msteamsapp', + ['userlang' => 'privacy:metadata:msteamsapp:userlang'], + 'privacy:metadata:msteamsapp' + ); return $collection; } diff --git a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php index e064533d0..9af0930e2 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php +++ b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php @@ -25,6 +25,9 @@ defined('MOODLE_INTERNAL') || die(); +// phpcs:disable moodle.Files.LangFilesOrdering.IncorrectOrder -- The strings are organised by features. +// phpcs:disable moodle.Files.LangFilesOrdering.UnexpectedComment -- The strings are organised by features. + $string['pluginname'] = 'Teams Meeting'; // Settings. @@ -34,7 +37,7 @@ // Capability. $string['teamsmeeting:add'] = 'Add Teams Meeting'; -// iFrame. +// IFrame. $string['iframe_meeting_options'] = 'Meeting Options'; $string['iframe_meeting_created'] = 'Meeting "{$a}" was created successfully!'; $string['iframe_go_to_meeting'] = 'Go to meeting'; @@ -52,3 +55,6 @@ $string['privacy:metadata'] = 'Tiny Teams Meeting plugin does not store any personal data'; $string['privacy:metadata:msteamsapp'] = 'The Tiny Teams Meeting plugin does not store any data. However, it sends user language code to Microsoft Teams application to provide user interface based on user language.'; $string['privacy:metadata:msteamsapp:userlang'] = 'User language code sent to Microsoft Teams application.'; + +// phpcs:enable moodle.Files.LangFilesOrdering.IncorrectOrder +// phpcs:enable moodle.Files.LangFilesOrdering.UnexpectedComment diff --git a/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php b/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php index 708bf89e6..8f51b22ba 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php +++ b/lib/editor/tiny/plugins/teamsmeeting/lang/pl/tiny_teamsmeeting.php @@ -25,6 +25,9 @@ defined('MOODLE_INTERNAL') || die(); +// phpcs:disable moodle.Files.LangFilesOrdering.IncorrectOrder -- The strings are organised by features. +// phpcs:disable moodle.Files.LangFilesOrdering.UnexpectedComment -- The strings are organised by features. + $string['pluginname'] = 'Teams Meeting'; $string['settings'] = 'Ustawienia Teams Meeting'; @@ -32,7 +35,7 @@ $string['settings_meetings_app_link'] = 'Link do Teams Meeting'; $string['settings_meetings_app_link_desc'] = 'Link do aplikacji Teams Meeting'; -// iFrame. +// IFrame. $string['iframe_meeting_options'] = 'Opcje spotkania'; $string['iframe_meeting_created'] = 'Spotkanie online "{$a}" utworzone!'; $string['iframe_go_to_meeting'] = 'Go to meeting'; @@ -50,3 +53,6 @@ $string['privacy:metadata'] = 'Wtyczka Tiny Teams Meeting nie przechowuje żadnych danych osobowych.'; $string['privacy:metadata:msteamsapp'] = 'Wtyczka Tiny Teams Meeting nie przechowuje żadnych danych. Jednak wysyła kod języka użytkownika do aplikacji Microsoft Teams, aby zapewnić interfejs użytkownika oparty na języku użytkownika.'; $string['privacy:metadata:msteamsapp:userlang'] = 'Kod języka użytkownika jest wysyłany do aplikacji Microsoft Teams.'; + +// phpcs:enable moodle.Files.LangFilesOrdering.IncorrectOrder +// phpcs:enable moodle.Files.LangFilesOrdering.UnexpectedComment diff --git a/lib/editor/tiny/plugins/teamsmeeting/result.php b/lib/editor/tiny/plugins/teamsmeeting/result.php index 42ade40a3..0a055544a 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/result.php +++ b/lib/editor/tiny/plugins/teamsmeeting/result.php @@ -51,9 +51,9 @@ $meetingoptions = null; if (!empty($preview)) { - $htmlDom = new DOMDocument; - @$htmlDom->loadHTML($preview); - $links = $htmlDom->getElementsByTagName('a'); + $htmldom = new DOMDocument(); + @$htmldom->loadHTML($preview); + $links = $htmldom->getElementsByTagName('a'); foreach ($links as $link) { $href = $link->getAttribute('href'); if ($href && strpos($href, 'meetingOptions') !== false && filter_var($href, FILTER_VALIDATE_URL)) { diff --git a/lib/editor/tiny/plugins/teamsmeeting/tests/webservice_test.php b/lib/editor/tiny/plugins/teamsmeeting/tests/webservice_test.php index c6723ccee..661c18734 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/tests/webservice_test.php +++ b/lib/editor/tiny/plugins/teamsmeeting/tests/webservice_test.php @@ -32,8 +32,8 @@ require_once($CFG->dirroot . '/webservice/tests/helpers.php'); use externallib_advanced_testcase; -use \context_course; -use \context_system; +use context_course; +use context_system; /** * REST test case for tiny_teamsmeeting webservice. @@ -42,51 +42,51 @@ * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers \tiny_teamsmeeting\external\get_meeting_details */ -class webservice_test extends externallib_advanced_testcase { - +final class webservice_test extends externallib_advanced_testcase { /** * Set up test data. */ protected function setUp(): void { + parent::setUp(); $this->resetAfterTest(); } /** * Test that users with capability can access Teams Meeting functionality. */ - public function test_teamsmeeting_capability_with_access() { + public function test_teamsmeeting_capability_with_access(): void { $course = $this->getDataGenerator()->create_course(); $user = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($user->id, $course->id, 'editingteacher'); $this->setUser($user); - $context = \context_course::instance($course->id); + $context = context_course::instance($course->id); $this->assertTrue(has_capability('tiny/teamsmeeting:add', $context)); } /** * Test that users without capability cannot access Teams Meeting functionality. */ - public function test_teamsmeeting_capability_without_access() { + public function test_teamsmeeting_capability_without_access(): void { $course = $this->getDataGenerator()->create_course(); $user = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($user->id, $course->id, 'student'); $this->setUser($user); - $context = \context_course::instance($course->id); + $context = context_course::instance($course->id); $this->assertFalse(has_capability('tiny/teamsmeeting:add', $context)); } /** * Test capability in system context. */ - public function test_teamsmeeting_system_context_capability() { + public function test_teamsmeeting_system_context_capability(): void { $user = $this->getDataGenerator()->create_user(); $this->setUser($user); - $context = \context_system::instance(); - + $context = context_system::instance(); $this->assignUserCapability('tiny/teamsmeeting:add', $context->id, null); $this->assertTrue(has_capability('tiny/teamsmeeting:add', $context)); } @@ -94,35 +94,37 @@ public function test_teamsmeeting_system_context_capability() { /** * Test capability in course context. */ - public function test_teamsmeeting_course_context_capability() { + public function test_teamsmeeting_course_context_capability(): void { $course = $this->getDataGenerator()->create_course(); $user = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($user->id, $course->id, 'editingteacher'); $this->setUser($user); - $context = \context_course::instance($course->id); + $context = context_course::instance($course->id); $this->assertTrue(has_capability('tiny/teamsmeeting:add', $context)); } /** * Test capability enforcement across different roles. */ - public function test_teamsmeeting_capability_enforcement() { + public function test_teamsmeeting_capability_enforcement(): void { $course = $this->getDataGenerator()->create_course(); - $roles = ['student', 'editingteacher', 'teacher']; - foreach ($roles as $role) { $user = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($user->id, $course->id, $role); - $this->setUser($user); - $context = \context_course::instance($course->id); - + $context = context_course::instance($course->id); if ($role === 'editingteacher') { - $this->assertTrue(has_capability('tiny/teamsmeeting:add', $context), "User with role $role should have capability"); + $this->assertTrue( + has_capability('tiny/teamsmeeting:add', $context), + "User with role $role should have capability" + ); } else { - $this->assertFalse(has_capability('tiny/teamsmeeting:add', $context), "User with role $role should not have capability"); + $this->assertFalse( + has_capability('tiny/teamsmeeting:add', $context), + "User with role $role should not have capability" + ); } } } @@ -130,36 +132,29 @@ public function test_teamsmeeting_capability_enforcement() { /** * Test capability in different contexts. */ - public function test_teamsmeeting_context_variations() { + public function test_teamsmeeting_context_variations(): void { $course = $this->getDataGenerator()->create_course(); $user = $this->getDataGenerator()->create_user(); $this->getDataGenerator()->enrol_user($user->id, $course->id, 'editingteacher'); $this->setUser($user); - - $coursecontext = \context_course::instance($course->id); + $coursecontext = context_course::instance($course->id); $this->assertTrue(has_capability('tiny/teamsmeeting:add', $coursecontext)); - - $systemcontext = \context_system::instance(); + $systemcontext = context_system::instance(); $this->assertFalse(has_capability('tiny/teamsmeeting:add', $systemcontext)); } /** * Test capability inheritance from parent contexts. */ - public function test_teamsmeeting_capability_inheritance() { + public function test_teamsmeeting_capability_inheritance(): void { $user = $this->getDataGenerator()->create_user(); - $this->setUser($user); - - $systemcontext = \context_system::instance(); + $systemcontext = context_system::instance(); $this->assignUserCapability('tiny/teamsmeeting:add', $systemcontext->id, null); - $this->assertTrue(has_capability('tiny/teamsmeeting:add', $systemcontext)); - $course = $this->getDataGenerator()->create_course(); - $coursecontext = \context_course::instance($course->id); - + $coursecontext = context_course::instance($course->id); $this->assertTrue(has_capability('tiny/teamsmeeting:add', $coursecontext)); } } From a3b5da2d01008339b1a8e78e048171538c525a74 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Wed, 27 May 2026 12:21:20 +0100 Subject: [PATCH 23/26] various bug fixes and improvements --- .../teamsmeeting/amd/build/commands.min.js | 2 +- .../amd/build/commands.min.js.map | 2 +- .../teamsmeeting/amd/build/common.min.js | 4 +- .../teamsmeeting/amd/build/common.min.js.map | 2 +- .../teamsmeeting/amd/build/options.min.js.map | 2 +- .../plugins/teamsmeeting/amd/src/commands.js | 77 ++++++++-- .../plugins/teamsmeeting/amd/src/common.js | 11 +- .../plugins/teamsmeeting/amd/src/options.js | 34 ++++- .../classes/external/get_meeting_details.php | 48 +++--- .../teamsmeeting/classes/plugininfo.php | 2 +- .../teamsmeeting/classes/privacy/provider.php | 141 +++++++++++++++++- .../tiny/plugins/teamsmeeting/db/install.xml | 10 ++ .../tiny/plugins/teamsmeeting/db/services.php | 1 + .../tiny/plugins/teamsmeeting/db/upgrade.php | 125 ++++++++++++++++ .../lang/en/tiny_teamsmeeting.php | 11 +- .../tiny/plugins/teamsmeeting/result.php | 83 +++++++---- .../teamsmeeting/tests/webservice_test.php | 119 +++++++++++++++ .../tiny/plugins/teamsmeeting/version.php | 2 +- 18 files changed, 594 insertions(+), 82 deletions(-) create mode 100644 lib/editor/tiny/plugins/teamsmeeting/db/upgrade.php diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js index 6fd3a7b22..80e200452 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js @@ -5,6 +5,6 @@ define("tiny_teamsmeeting/commands",["exports","editor_tiny/utils","core/str",". * @copyright 2023 Enovation Solutions * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null},TEAMS_MEETING_URL_PATTERN=/^https:\/\/teams\.microsoft\.com\/l\/meetup-join\//i;_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),editor.on("PreInit",(()=>{const rule=editor.schema.getElementRule("a");rule&&(rule.attributes["data-teams-meeting"]={},rule.attributesOrder&&!rule.attributesOrder.includes("data-teams-meeting")&&rule.attributesOrder.push("data-teams-meeting"))})),editor.on("init",(()=>migrateLegacyLinks(editor))),window.addEventListener("message",(event=>{event.data&&"meetingUrl"===event.data.action&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},isTeamsMeetingUrl=url=>!!url&&TEAMS_MEETING_URL_PATTERN.test(url),isTeamsMeetingLink=node=>{var _node$dataset;return!(!node||"A"!==node.nodeName)&&(!(null===(_node$dataset=node.dataset)||void 0===_node$dataset||!_node$dataset.teamsMeeting)||"tiny_meeting_link"===node.id||isTeamsMeetingUrl(node.getAttribute("href")))},migrateLegacyLinks=editor=>{editor.dom.select("a").forEach((link=>{var _link$dataset;null!==(_link$dataset=link.dataset)&&void 0!==_link$dataset&&_link$dataset.teamsMeeting||("tiny_meeting_link"===link.id||isTeamsMeetingUrl(link.getAttribute("href")))&&("tiny_meeting_link"===link.id&&editor.dom.setAttrib(link,"id",null),editor.dom.setAttrib(link,"data-teams-meeting","1"))}))},handleSubmitAction=editor=>api=>{var _selectedNode$parentN;const data=api.getData(),meetingUrl=data.meetingUrl,targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&isTeamsMeetingLink(selectedNode)?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&isTeamsMeetingLink(selectedNode.parentNode)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType),"tiny_meeting_link"===linkNode.id&&(editor.dom.setAttrib(linkNode,"id",null),editor.dom.setAttrib(linkNode,"data-teams-meeting","1"));else{let selectedContent=editor.selection.getContent({format:"text"}),contentToInsert=selectedContent||meetingUrl;editor.insertContent('').concat(contentToInsert,""))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFormSelectedNode(editor);if(data&&data.link){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_get_meeting_details",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}return{url:"".concat((0,_options.getAppurl)(editor),"?url=").concat((0,_options.getClientdomain)(editor),"&locale=").concat((0,_options.getLocaleValue)(editor),"&msession=").concat((0,_options.getMsession)(editor),"&editor=tiny&courseid=").concat((0,_options.getCourseId)(editor)),meetingUrl:"",newWindow:!1}},getMeetingUrlFormSelectedNode=editor=>{var _selectedNode$parentN2;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode,_linkNode2;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.nodeName)&&(linkNode=selectedNode.parentNode),linkNode&&isTeamsMeetingLink(linkNode)?{link:null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.getAttribute("href"),target:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>(editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi))),function(){editor.on("NodeChange",(()=>handleNodeChange(editor,buttonApi)))}),handleNodeChange=(editor,buttonApi)=>{const selectedNode=editor.selection.getNode(),isActive=isTeamsMeetingLink(selectedNode)||isTeamsMeetingLink(selectedNode.parentNode);buttonApi.setActive(isActive)}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0,_ajax=(obj=_ajax)&&obj.__esModule?obj:{default:obj};const dialogApiReference={current:null},TEAMS_MEETING_URL_PATTERN=/^https:\/\/teams\.microsoft\.com\/l\/meetup-join\//i;_exports.getSetup=async()=>{const[createMeetingButtonNameTitle,buttonImage]=await Promise.all([(0,_str.get_string)("pluginname",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.createMeetingButtonName,{icon:_common.icon,tooltip:createMeetingButtonNameTitle,onAction:openDialog(editor),onSetup:toggleActiveState(editor)}),editor.on("PreInit",(()=>{const rule=editor.schema.getElementRule("a");rule&&(rule.attributes["data-teams-meeting"]={},rule.attributesOrder&&!rule.attributesOrder.includes("data-teams-meeting")&&rule.attributesOrder.push("data-teams-meeting"))})),editor.on("init",(()=>migrateLegacyLinks(editor))),window.addEventListener("message",(event=>{if(!event.data||"meetingUrl"!==event.data.action)return;if(event.origin!==window.location.origin)return;const iframe=document.getElementById("msteams-frame");iframe&&event.source===iframe.contentWindow&&updateMeetingUrlInput(event.data.url)}))}};const openDialog=editor=>async()=>{const[modalTitle,buttonPrimaryLabel,buttonSecondaryLabel,inputUrlLabel,inputUrlPlaceholder,checkboxNewWindowLabel]=await Promise.all([(0,_str.get_string)("tiny_modal_title",_common.component),(0,_str.get_string)("tiny_button_primary_label",_common.component),(0,_str.get_string)("tiny_button_secondary_label",_common.component),(0,_str.get_string)("tiny_input_url_label",_common.component),(0,_str.get_string)("tiny_input_url_placeholder",_common.component),(0,_str.get_string)("tiny_checkbox_new_window_label",_common.component)]);let iframeData=await getIframeData(editor);dialogApiReference.current=editor.windowManager.open({title:modalTitle,body:{type:"panel",items:[{type:"htmlpanel",html:'')},{type:"input",name:"meetingUrl",label:inputUrlLabel,enabled:!1,placeholder:inputUrlPlaceholder},{type:"checkbox",name:"newWindowCheckbox",label:checkboxNewWindowLabel}]},buttons:[{type:"cancel",text:buttonSecondaryLabel},{type:"submit",text:buttonPrimaryLabel,primary:!0}],onSubmit:handleSubmitAction(editor)}),dialogApiReference.current.setData({meetingUrl:iframeData.meetingUrl,newWindowCheckbox:iframeData.newWindow})},isTeamsMeetingUrl=url=>!!url&&TEAMS_MEETING_URL_PATTERN.test(url),isTeamsMeetingLink=node=>{var _node$dataset;return!(!node||"A"!==node.nodeName)&&(!(null===(_node$dataset=node.dataset)||void 0===_node$dataset||!_node$dataset.teamsMeeting)||"tiny_meeting_link"===node.id||isTeamsMeetingUrl(node.getAttribute("href")))},migrateLegacyLinks=editor=>{editor.dom.select("a").forEach((link=>{var _link$dataset;null!==(_link$dataset=link.dataset)&&void 0!==_link$dataset&&_link$dataset.teamsMeeting||("tiny_meeting_link"===link.id||isTeamsMeetingUrl(link.getAttribute("href")))&&("tiny_meeting_link"===link.id&&editor.dom.setAttrib(link,"id",null),editor.dom.setAttrib(link,"data-teams-meeting","1"))}))},handleSubmitAction=editor=>api=>{var _selectedNode$parentN;const data=api.getData(),meetingUrl=(url=>{try{return"https:"===new URL(url).protocol?url:""}catch{return""}})(data.meetingUrl),targetType=data.newWindowCheckbox?"_blank":"";let selectedNode=editor.selection.getNode(),linkNode=null;if("A"===selectedNode.nodeName&&isTeamsMeetingLink(selectedNode)?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN=selectedNode.parentNode)||void 0===_selectedNode$parentN?void 0:_selectedNode$parentN.nodeName)&&isTeamsMeetingLink(selectedNode.parentNode)&&(linkNode=selectedNode.parentNode),linkNode)editor.dom.setAttrib(linkNode,"href",meetingUrl),editor.dom.setAttrib(linkNode,"target",targetType),"tiny_meeting_link"===linkNode.id&&(editor.dom.setAttrib(linkNode,"id",null),editor.dom.setAttrib(linkNode,"data-teams-meeting","1"));else{const contentToInsert=editor.selection.getContent({format:"text"})||meetingUrl;editor.insertContent(editor.dom.createHTML("a",{"data-teams-meeting":"1",href:meetingUrl,target:targetType},editor.dom.encode(contentToInsert)))}api.close()},updateMeetingUrlInput=url=>{dialogApiReference.current&&dialogApiReference.current.setData({meetingUrl:url})},getIframeData=async editor=>{let data=getMeetingUrlFromSelectedNode(editor);if(data&&data.link){const result=await _ajax.default.call([{methodname:"tiny_teamsmeeting_get_meeting_details",args:{url:data.link}}])[0];return{url:result.url,meetingUrl:result.status?data.link:"",newWindow:"_blank"===data.target}}const params=new URLSearchParams({url:(0,_options.getClientdomain)(editor),locale:(0,_options.getLocaleValue)(editor),msession:(0,_options.getMsession)(editor),editor:"tiny",courseid:(0,_options.getCourseId)(editor)});return{url:"".concat((0,_options.getAppurl)(editor),"?").concat(params.toString()),meetingUrl:"",newWindow:!1}},getMeetingUrlFromSelectedNode=editor=>{var _selectedNode$parentN2;let selectedNode=editor.selection.getNode(),linkNode=null;var _linkNode,_linkNode2;return"A"===selectedNode.nodeName?linkNode=selectedNode:"A"===(null===(_selectedNode$parentN2=selectedNode.parentNode)||void 0===_selectedNode$parentN2?void 0:_selectedNode$parentN2.nodeName)&&(linkNode=selectedNode.parentNode),linkNode&&isTeamsMeetingLink(linkNode)?{link:null===(_linkNode=linkNode)||void 0===_linkNode?void 0:_linkNode.getAttribute("href"),target:null===(_linkNode2=linkNode)||void 0===_linkNode2?void 0:_linkNode2.getAttribute("target")}:null},toggleActiveState=editor=>buttonApi=>{const handler=()=>handleNodeChange(editor,buttonApi);return editor.on("NodeChange",handler),function(){editor.off("NodeChange",handler)}},handleNodeChange=(editor,buttonApi)=>{const selectedNode=editor.selection.getNode(),isActive=isTeamsMeetingLink(selectedNode)||isTeamsMeetingLink(selectedNode.parentNode);buttonApi.setActive(isActive)}})); //# sourceMappingURL=commands.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map index df57773d2..ff711536a 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/commands.min.js.map @@ -1 +1 @@ -{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = {current: null};\n\n/**\n * Regex matching the Teams meeting join URL format.\n * Used as a fallback to re-identify links whose marker attribute was stripped\n * by Moodle's server-side HTML filtering.\n *\n * @type {RegExp}\n */\nconst TEAMS_MEETING_URL_PATTERN = /^https:\\/\\/teams\\.microsoft\\.com\\/l\\/meetup-join\\//i;\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n // PreInit fires before content is loaded, making it the correct place to\n // extend the schema. Directly mutating the existing element rule adds\n // data-teams-meeting without touching href, target, or any other valid\n // attribute. Using addValidElements('a[...]') replaces the entire rule,\n // which strips href and target from anchor elements.\n editor.on('PreInit', () => {\n const rule = editor.schema.getElementRule('a');\n if (rule) {\n rule.attributes['data-teams-meeting'] = {};\n if (rule.attributesOrder && !rule.attributesOrder.includes('data-teams-meeting')) {\n rule.attributesOrder.push('data-teams-meeting');\n }\n }\n });\n\n // After content is loaded, mark any links that have lost their attribute\n // due to server-side HTML filtering.\n editor.on('init', () => migrateLegacyLinks(editor));\n\n window.addEventListener('message', event => {\n if (event.data && event.data.action === 'meetingUrl') {\n updateMeetingUrlInput(event.data.url);\n }\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async() => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n {type: 'htmlpanel', html: ``},\n {type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder},\n {type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel}\n ]\n },\n buttons: [\n {type: 'cancel', text: buttonSecondaryLabel},\n {type: 'submit', text: buttonPrimaryLabel, primary: true}\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Returns true if the URL looks like a Teams meeting join link.\n *\n * Used as a last-resort fallback for links whose marker attributes were stripped\n * by Moodle's server-side HTML filtering (HTML Purifier removes id and data-*\n * attributes from stored content). Such links survive in the database as plain\n * anchors with no identifying attribute, so the URL pattern is the only reliable\n * signal remaining.\n *\n * @param {string|null} url - The URL to test.\n * @returns {boolean}\n */\nconst isTeamsMeetingUrl = (url) => !!url && TEAMS_MEETING_URL_PATTERN.test(url);\n\n/**\n * Determines whether a DOM node is a Teams meeting link.\n *\n * Checks in order of specificity:\n * 1. data-teams-meeting attribute (current marker)\n * 2. id=\"tiny_meeting_link\" (legacy marker, may still be present in editor DOM\n * if TinyMCE has not yet serialised the content)\n * 3. Teams meeting URL pattern (fallback for links that have lost all markers)\n *\n * @param {Element|null} node - The DOM node to test.\n * @returns {boolean} True if the node is a Teams meeting link.\n */\nconst isTeamsMeetingLink = (node) => {\n if (!node || node.nodeName !== 'A') {\n return false;\n }\n return !!node.dataset?.teamsMeeting ||\n node.id === 'tiny_meeting_link' ||\n isTeamsMeetingUrl(node.getAttribute('href'));\n};\n\n/**\n * Migrates legacy Teams meeting links in the editor content to use the current\n * data-teams-meeting attribute.\n *\n * Handles two cases:\n * - Links with the old id=\"tiny_meeting_link\" attribute still intact in the DOM\n * (content saved before the attribute was stripped by server-side filtering).\n * - Plain anchor links whose href matches the Teams meeting URL pattern\n * (content where all markers have been stripped by server-side filtering).\n *\n * Running this on editor init ensures all recognised links are consistently\n * marked before any user interaction occurs.\n *\n * @param {Editor} editor - The TinyMCE editor instance.\n */\nconst migrateLegacyLinks = (editor) => {\n editor.dom.select('a').forEach(link => {\n if (link.dataset?.teamsMeeting) {\n return; // Already marked, nothing to do.\n }\n if (link.id === 'tiny_meeting_link' || isTeamsMeetingUrl(link.getAttribute('href'))) {\n if (link.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(link, 'id', null);\n }\n editor.dom.setAttrib(link, 'data-teams-meeting', '1');\n }\n });\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n const meetingUrl = data.meetingUrl;\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && isTeamsMeetingLink(selectedNode)) {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && isTeamsMeetingLink(selectedNode.parentNode)) {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n // Migrate legacy id-based links to the data attribute on save.\n if (linkNode.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(linkNode, 'id', null);\n editor.dom.setAttrib(linkNode, 'data-teams-meeting', '1');\n }\n } else {\n let selectedContent = editor.selection.getContent({format: 'text'});\n let contentToInsert = (selectedContent) ? selectedContent : meetingUrl;\n editor.insertContent(`${contentToInsert}`);\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({meetingUrl: url});\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async(editor) => {\n let data = getMeetingUrlFormSelectedNode(editor);\n if (data && data.link) {\n const result = await Ajax.call([{methodname: 'tiny_teamsmeeting_get_meeting_details', args: {url: data.link}}])[0];\n return {\n url: result.url,\n meetingUrl: result.status ? data.link : '',\n newWindow: data.target === '_blank'\n };\n }\n return {\n url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFormSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode && isTeamsMeetingLink(linkNode)) {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n\n return function cleanup() {\n editor.on('NodeChange', () => handleNodeChange(editor, buttonApi));\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = isTeamsMeetingLink(selectedNode) || isTeamsMeetingLink(selectedNode.parentNode);\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","TEAMS_MEETING_URL_PATTERN","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","on","rule","schema","getElementRule","attributes","attributesOrder","includes","push","migrateLegacyLinks","window","addEventListener","event","data","action","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","isTeamsMeetingUrl","test","isTeamsMeetingLink","node","nodeName","dataset","_node$dataset","teamsMeeting","id","getAttribute","dom","select","forEach","link","_link$dataset","setAttrib","api","getData","targetType","selectedNode","selection","getNode","linkNode","parentNode","selectedContent","getContent","format","contentToInsert","insertContent","close","getMeetingUrlFormSelectedNode","result","Ajax","call","methodname","args","status","target","_linkNode","_linkNode2","buttonApi","handleNodeChange","isActive","setActive"],"mappings":";;;;;;;gJA8BMA,mBAAqB,CAACC,QAAS,MAS/BC,0BAA4B,wEAUVC,gBACbC,6BAA8BC,mBAAqBC,QAAQC,IAAI,EAAC,mBAAU,aAAcC,oBAAY,yBAAe,OAAQA,4BAE3HC,SACHA,OAAOC,GAAGC,SAASC,QAAQC,aAAMR,YAAYS,MAC7CL,OAAOC,GAAGC,SAASI,gBAAgBC,gCAAyB,CACxDH,KAAAA,aACAI,QAASb,6BACTc,SAAUC,WAAWV,QACrBW,QAASC,kBAAkBZ,UAQ/BA,OAAOa,GAAG,WAAW,WACXC,KAAOd,OAAOe,OAAOC,eAAe,KACtCF,OACAA,KAAKG,WAAW,sBAAwB,GACpCH,KAAKI,kBAAoBJ,KAAKI,gBAAgBC,SAAS,uBACvDL,KAAKI,gBAAgBE,KAAK,0BAOtCpB,OAAOa,GAAG,QAAQ,IAAMQ,mBAAmBrB,UAE3CsB,OAAOC,iBAAiB,WAAWC,QAC3BA,MAAMC,MAA8B,eAAtBD,MAAMC,KAAKC,QACzBC,sBAAsBH,MAAMC,KAAKG,gBAY3ClB,WAAaV,QAAUN,gBAErBmC,WACAC,mBACAC,qBACAC,cACAC,oBACAC,8BACMrC,QAAQC,IAAI,EAClB,mBAAU,mBAAoBC,oBAC9B,mBAAU,4BAA6BA,oBACvC,mBAAU,8BAA+BA,oBACzC,mBAAU,uBAAwBA,oBAClC,mBAAU,6BAA8BA,oBACxC,mBAAU,iCAAkCA,yBAG5CoC,iBAAmBC,cAAcpC,QAErCT,mBAAmBC,QAAUQ,OAAOqC,cAAcC,KAAK,CACnDC,MAAOV,WACPW,KAAM,CACFC,KAAM,QACNC,MAAO,CACH,CAACD,KAAM,YAAapC,+CAAyC8B,WAAWP,uDACxE,CAACa,KAAM,QAASE,KAAM,aAAcC,MAAOZ,cAAea,SAAS,EAAOC,YAAab,qBACvF,CAACQ,KAAM,WAAYE,KAAM,oBAAqBC,MAAOV,0BAG7Da,QAAS,CACL,CAACN,KAAM,SAAUO,KAAMjB,sBACvB,CAACU,KAAM,SAAUO,KAAMlB,mBAAoBmB,SAAS,IAExDC,SAAUC,mBAAmBnD,UAGjCT,mBAAmBC,QAAQ4D,QAAQ,CAC/BC,WAAYlB,WAAWkB,WACvBC,kBAAmBnB,WAAWoB,aAgBhCC,kBAAqB5B,OAAUA,KAAOnC,0BAA0BgE,KAAK7B,KAcrE8B,mBAAsBC,kCACnBA,MAA0B,MAAlBA,KAAKC,oCAGTD,KAAKE,mCAALC,cAAcC,eACP,sBAAZJ,KAAKK,IACLR,kBAAkBG,KAAKM,aAAa,WAkBtC5C,mBAAsBrB,SACxBA,OAAOkE,IAAIC,OAAO,KAAKC,SAAQC,+CACvBA,KAAKR,kCAALS,cAAcP,eAGF,sBAAZM,KAAKL,IAA8BR,kBAAkBa,KAAKJ,aAAa,YACvD,sBAAZI,KAAKL,IACLhE,OAAOkE,IAAIK,UAAUF,KAAM,KAAM,MAErCrE,OAAOkE,IAAIK,UAAUF,KAAM,qBAAsB,UAUvDlB,mBAAsBnD,QAAYwE,sCAC9B/C,KAAO+C,IAAIC,UACXpB,WAAa5B,KAAK4B,WAElBqB,WADYjD,KAAK6B,kBACQ,SAAW,OAEtCqB,aAAe3E,OAAO4E,UAAUC,UAChCC,SAAW,QAEe,MAA1BH,aAAaf,UAAoBF,mBAAmBiB,cACpDG,SAAWH,aACkC,qCAAtCA,aAAaI,yEAAYnB,WAAoBF,mBAAmBiB,aAAaI,cACpFD,SAAWH,aAAaI,YAGxBD,SACA9E,OAAOkE,IAAIK,UAAUO,SAAU,OAAQzB,YACvCrD,OAAOkE,IAAIK,UAAUO,SAAU,SAAUJ,YAErB,sBAAhBI,SAASd,KACThE,OAAOkE,IAAIK,UAAUO,SAAU,KAAM,MACrC9E,OAAOkE,IAAIK,UAAUO,SAAU,qBAAsB,UAEtD,KACCE,gBAAkBhF,OAAO4E,UAAUK,WAAW,CAACC,OAAQ,SACvDC,gBAAmBH,iBAAqC3B,WAC5DrD,OAAOoF,wDAAiD/B,gCAAuBqB,wBAAeS,yBAElGX,IAAIa,SAQF1D,sBAAwBC,MACtBrC,mBAAmBC,SACnBD,mBAAmBC,QAAQ4D,QAAQ,CAACC,WAAYzB,OAUlDQ,cAAgB1C,MAAAA,aACd+B,KAAO6D,8BAA8BtF,WACrCyB,MAAQA,KAAK4C,KAAM,OACbkB,aAAeC,cAAKC,KAAK,CAAC,CAACC,WAAY,wCAAyCC,KAAM,CAAC/D,IAAKH,KAAK4C,SAAS,SACzG,CACHzC,IAAK2D,OAAO3D,IACZyB,WAAYkC,OAAOK,OAASnE,KAAK4C,KAAO,GACxCd,UAA2B,WAAhB9B,KAAKoE,cAGjB,CACHjE,eAAQ,sBAAU5B,yBAAe,4BAAgBA,4BAAkB,2BAAeA,8BAAoB,wBAAYA,0CAAgC,wBAAYA,SAC9JqD,WAAY,GACZE,WAAW,IAUb+B,8BAAgCtF,wCAC9B2E,aAAe3E,OAAO4E,UAAUC,UAChCC,SAAW,oCAEe,MAA1BH,aAAaf,SACbkB,SAAWH,aACkC,sCAAtCA,aAAaI,2EAAYnB,YAChCkB,SAAWH,aAAaI,YAGxBD,UAAYpB,mBAAmBoB,UACxB,CACHT,uBAAMS,qCAAAgB,UAAU7B,aAAa,QAC7B4B,0BAAQf,sCAAAiB,WAAU9B,aAAa,WAIhC,MAULrD,kBAAoBZ,QAAWgG,YACjChG,OAAOa,GAAG,cAAc,IAAMoF,iBAAiBjG,OAAQgG,aAEhD,WACHhG,OAAOa,GAAG,cAAc,IAAMoF,iBAAiBjG,OAAQgG,eAYzDC,iBAAmB,CAACjG,OAAQgG,mBACxBrB,aAAe3E,OAAO4E,UAAUC,UAChCqB,SAAWxC,mBAAmBiB,eAAiBjB,mBAAmBiB,aAAaI,YAErFiB,UAAUG,UAAUD"} \ No newline at end of file +{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["/* eslint-disable max-len */\n// This file is part of Moodle - https://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 * Commands helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {get_string as getString} from 'core/str';\nimport {component, createMeetingButtonName, icon} from './common';\nimport {getAppurl, getClientdomain, getLocaleValue, getMsession, getCourseId} from \"./options\";\nimport Ajax from 'core/ajax';\n\nconst dialogApiReference = {current: null};\n\n/**\n * Regex matching the Teams meeting join URL format.\n * Used as a fallback to re-identify links whose marker attribute was stripped\n * by Moodle's server-side HTML filtering.\n *\n * @type {RegExp}\n */\nconst TEAMS_MEETING_URL_PATTERN = /^https:\\/\\/teams\\.microsoft\\.com\\/l\\/meetup-join\\//i;\n\n/**\n * Get the setup function for the buttons.\n *\n * This is performed in an async function which ultimately returns the registration function as the\n * Tiny.AddOnManager.Add() function does not support async functions.\n *\n * @returns {function} The registration function to call within the Plugin.add function.\n */\nexport const getSetup = async() => {\n const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]);\n\n return editor => {\n\n editor.ui.registry.addIcon(icon, buttonImage.html);\n editor.ui.registry.addToggleButton(createMeetingButtonName, {\n icon,\n tooltip: createMeetingButtonNameTitle,\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n\n // PreInit fires before content is loaded, making it the correct place to\n // extend the schema. Directly mutating the existing element rule adds\n // data-teams-meeting without touching href, target, or any other valid\n // attribute. Using addValidElements('a[...]') replaces the entire rule,\n // which strips href and target from anchor elements.\n editor.on('PreInit', () => {\n const rule = editor.schema.getElementRule('a');\n if (rule) {\n rule.attributes['data-teams-meeting'] = {};\n if (rule.attributesOrder && !rule.attributesOrder.includes('data-teams-meeting')) {\n rule.attributesOrder.push('data-teams-meeting');\n }\n }\n });\n\n // After content is loaded, mark any links that have lost their attribute\n // due to server-side HTML filtering.\n editor.on('init', () => migrateLegacyLinks(editor));\n\n // Listen for the postMessage that result.php sends after it loads.\n // The Service Worker intercepts the Teams app's iframe navigation to\n // result.php and re-issues it from the private-network SW context, so\n // result.php loads successfully even when Chrome's PNA would have\n // blocked the original public→private redirect. Result.php then sends\n // a same-origin postMessage that arrives here.\n window.addEventListener('message', event => {\n if (!event.data || event.data.action !== 'meetingUrl') {\n return;\n }\n // Only accept messages from the same Moodle origin (result.php).\n // Cross-origin messages are not expected: the Teams app redirects\n // the iframe rather than postMessaging, and the SW makes result.php\n // load in the iframe so result.php's own same-origin postMessage\n // is the only signal we need.\n if (event.origin !== window.location.origin) {\n return;\n }\n const iframe = document.getElementById('msteams-frame');\n if (!iframe || event.source !== iframe.contentWindow) {\n return;\n }\n updateMeetingUrlInput(event.data.url);\n });\n };\n};\n\n/**\n * Opens a dialog for the editor to display a modal\n *\n * @param {Editor} editor - The editor object.\n * @returns {function} - The async function that opens the dialog.\n */\nconst openDialog = editor => async() => {\n const [\n modalTitle,\n buttonPrimaryLabel,\n buttonSecondaryLabel,\n inputUrlLabel,\n inputUrlPlaceholder,\n checkboxNewWindowLabel,\n ] = await Promise.all([\n getString('tiny_modal_title', component),\n getString('tiny_button_primary_label', component),\n getString('tiny_button_secondary_label', component),\n getString('tiny_input_url_label', component),\n getString('tiny_input_url_placeholder', component),\n getString('tiny_checkbox_new_window_label', component),\n ]);\n\n let iframeData = await getIframeData(editor);\n\n dialogApiReference.current = editor.windowManager.open({\n title: modalTitle,\n body: {\n type: 'panel',\n items: [\n {type: 'htmlpanel', html: ``},\n {type: 'input', name: 'meetingUrl', label: inputUrlLabel, enabled: false, placeholder: inputUrlPlaceholder},\n {type: 'checkbox', name: 'newWindowCheckbox', label: checkboxNewWindowLabel}\n ]\n },\n buttons: [\n {type: 'cancel', text: buttonSecondaryLabel},\n {type: 'submit', text: buttonPrimaryLabel, primary: true}\n ],\n onSubmit: handleSubmitAction(editor)\n });\n\n dialogApiReference.current.setData({\n meetingUrl: iframeData.meetingUrl,\n newWindowCheckbox: iframeData.newWindow\n });\n};\n\n/**\n * Returns true if the URL looks like a Teams meeting join link.\n *\n * Used as a last-resort fallback for links whose marker attributes were stripped\n * by Moodle's server-side HTML filtering (HTML Purifier removes id and data-*\n * attributes from stored content). Such links survive in the database as plain\n * anchors with no identifying attribute, so the URL pattern is the only reliable\n * signal remaining.\n *\n * @param {string|null} url - The URL to test.\n * @returns {boolean}\n */\nconst isTeamsMeetingUrl = (url) => !!url && TEAMS_MEETING_URL_PATTERN.test(url);\n\n/**\n * Determines whether a DOM node is a Teams meeting link.\n *\n * Checks in order of specificity:\n * 1. data-teams-meeting attribute (current marker)\n * 2. id=\"tiny_meeting_link\" (legacy marker, may still be present in editor DOM\n * if TinyMCE has not yet serialised the content)\n * 3. Teams meeting URL pattern (fallback for links that have lost all markers)\n *\n * @param {Element|null} node - The DOM node to test.\n * @returns {boolean} True if the node is a Teams meeting link.\n */\nconst isTeamsMeetingLink = (node) => {\n if (!node || node.nodeName !== 'A') {\n return false;\n }\n return !!node.dataset?.teamsMeeting ||\n node.id === 'tiny_meeting_link' ||\n isTeamsMeetingUrl(node.getAttribute('href'));\n};\n\n/**\n * Migrates legacy Teams meeting links in the editor content to use the current\n * data-teams-meeting attribute.\n *\n * Handles two cases:\n * - Links with the old id=\"tiny_meeting_link\" attribute still intact in the DOM\n * (content saved before the attribute was stripped by server-side filtering).\n * - Plain anchor links whose href matches the Teams meeting URL pattern\n * (content where all markers have been stripped by server-side filtering).\n *\n * Running this on editor init ensures all recognised links are consistently\n * marked before any user interaction occurs.\n *\n * @param {Editor} editor - The TinyMCE editor instance.\n */\nconst migrateLegacyLinks = (editor) => {\n editor.dom.select('a').forEach(link => {\n if (link.dataset?.teamsMeeting) {\n return; // Already marked, nothing to do.\n }\n if (link.id === 'tiny_meeting_link' || isTeamsMeetingUrl(link.getAttribute('href'))) {\n if (link.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(link, 'id', null);\n }\n editor.dom.setAttrib(link, 'data-teams-meeting', '1');\n }\n });\n};\n\n/**\n * Return url if it uses the https protocol, otherwise return an empty string.\n * Prevents javascript: and other dangerous protocol injections into href attributes.\n *\n * @param {string} url - The URL to validate.\n * @returns {string} The original URL when safe, or an empty string.\n */\nconst toSafeHttpsUrl = (url) => {\n try {\n return new URL(url).protocol === 'https:' ? url : '';\n } catch {\n return '';\n }\n};\n\n/**\n * Handle the action of submitting the dialog.\n *\n * @param {Editor} editor The tinyMCE editor instance.\n */\nconst handleSubmitAction = (editor) => (api) => {\n const data = api.getData();\n // Validate the protocol before using the URL anywhere in the DOM so that\n // a malicious value received via postMessage cannot inject javascript: hrefs.\n const meetingUrl = toSafeHttpsUrl(data.meetingUrl);\n const newWindow = data.newWindowCheckbox;\n const targetType = newWindow ? '_blank' : '';\n\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A' && isTeamsMeetingLink(selectedNode)) {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A' && isTeamsMeetingLink(selectedNode.parentNode)) {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode) {\n // Editor.dom.setAttrib encodes attribute values — safe as-is.\n editor.dom.setAttrib(linkNode, 'href', meetingUrl);\n editor.dom.setAttrib(linkNode, 'target', targetType);\n // Migrate legacy id-based links to the data attribute on save.\n if (linkNode.id === 'tiny_meeting_link') {\n editor.dom.setAttrib(linkNode, 'id', null);\n editor.dom.setAttrib(linkNode, 'data-teams-meeting', '1');\n }\n } else {\n const selectedContent = editor.selection.getContent({format: 'text'});\n const contentToInsert = selectedContent || meetingUrl;\n // Use TinyMCE's DOM API to build the anchor element so that attribute\n // values and inner text are properly escaped — never interpolate\n // user-controlled data into a raw HTML string.\n editor.insertContent(\n editor.dom.createHTML(\n 'a',\n {'data-teams-meeting': '1', href: meetingUrl, target: targetType},\n editor.dom.encode(contentToInsert)\n )\n );\n }\n api.close();\n};\n\n/**\n * Updates the meeting URL in the dialog API.\n *\n * @param {string} url - The new meeting URL.\n */\nconst updateMeetingUrlInput = url => {\n if (dialogApiReference.current) {\n dialogApiReference.current.setData({meetingUrl: url});\n }\n};\n\n/**\n * Retrieves data for an iframe.\n *\n * @param {Editor} editor - The editor object.\n * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe.\n */\nconst getIframeData = async(editor) => {\n let data = getMeetingUrlFromSelectedNode(editor);\n if (data && data.link) {\n const result = await Ajax.call([{methodname: 'tiny_teamsmeeting_get_meeting_details', args: {url: data.link}}])[0];\n return {\n url: result.url,\n meetingUrl: result.status ? data.link : '',\n newWindow: data.target === '_blank'\n };\n }\n const params = new URLSearchParams({\n url: getClientdomain(editor),\n locale: getLocaleValue(editor),\n msession: getMsession(editor),\n editor: 'tiny',\n courseid: getCourseId(editor),\n });\n return {\n url: `${getAppurl(editor)}?${params.toString()}`,\n meetingUrl: '',\n newWindow: false\n };\n};\n\n/**\n * Retrieves the meeting URL and target from the selected node in the editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found.\n */\nconst getMeetingUrlFromSelectedNode = editor => {\n let selectedNode = editor.selection.getNode();\n let linkNode = null;\n\n if (selectedNode.nodeName === 'A') {\n linkNode = selectedNode;\n } else if (selectedNode.parentNode?.nodeName === 'A') {\n linkNode = selectedNode.parentNode;\n }\n\n if (linkNode && isTeamsMeetingLink(linkNode)) {\n return {\n link: linkNode?.getAttribute('href'),\n target: linkNode?.getAttribute('target')\n };\n }\n\n return null;\n};\n\n/**\n * Toggles the active state of an editor.\n *\n * @param {Editor} editor - The editor instance.\n * @returns {Function} - A cleanup function to remove the event listener.\n * @throws {TypeError} - If editor parameter is not an instance of Editor.\n */\nconst toggleActiveState = editor => (buttonApi) => {\n const handler = () => handleNodeChange(editor, buttonApi);\n editor.on('NodeChange', handler);\n\n return function cleanup() {\n editor.off('NodeChange', handler);\n };\n};\n\n/**\n * Handles the change in the selected node in the editor.\n *\n * @param {Object} editor - The editor object.\n * @param {Object} buttonApi - The button API object.\n *\n * @returns {void}\n */\nconst handleNodeChange = (editor, buttonApi) => {\n const selectedNode = editor.selection.getNode();\n const isActive = isTeamsMeetingLink(selectedNode) || isTeamsMeetingLink(selectedNode.parentNode);\n\n buttonApi.setActive(isActive);\n};"],"names":["dialogApiReference","current","TEAMS_MEETING_URL_PATTERN","async","createMeetingButtonNameTitle","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","createMeetingButtonName","tooltip","onAction","openDialog","onSetup","toggleActiveState","on","rule","schema","getElementRule","attributes","attributesOrder","includes","push","migrateLegacyLinks","window","addEventListener","event","data","action","origin","location","iframe","document","getElementById","source","contentWindow","updateMeetingUrlInput","url","modalTitle","buttonPrimaryLabel","buttonSecondaryLabel","inputUrlLabel","inputUrlPlaceholder","checkboxNewWindowLabel","iframeData","getIframeData","windowManager","open","title","body","type","items","name","label","enabled","placeholder","buttons","text","primary","onSubmit","handleSubmitAction","setData","meetingUrl","newWindowCheckbox","newWindow","isTeamsMeetingUrl","test","isTeamsMeetingLink","node","nodeName","dataset","_node$dataset","teamsMeeting","id","getAttribute","dom","select","forEach","link","_link$dataset","setAttrib","api","getData","URL","protocol","toSafeHttpsUrl","targetType","selectedNode","selection","getNode","linkNode","parentNode","contentToInsert","getContent","format","insertContent","createHTML","href","target","encode","close","getMeetingUrlFromSelectedNode","result","Ajax","call","methodname","args","status","params","URLSearchParams","locale","msession","courseid","toString","_linkNode","_linkNode2","buttonApi","handler","handleNodeChange","off","isActive","setActive"],"mappings":"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"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js index af10903f8..85f73efd4 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js @@ -1,4 +1,4 @@ -define("tiny_teamsmeeting/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0; +define("tiny_teamsmeeting/common",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.pluginName=_exports.icon=_exports.createMeetingButtonName=_exports.component=void 0; /** * Common values helper for the Moodle tiny_teamsmeeting plugin. * @@ -6,6 +6,6 @@ define("tiny_teamsmeeting/common",["exports"],(function(_exports){Object.defineP * @author Oliwer Banach * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -const component="tiny_teamsmeeting";var _default={component:component,pluginName:"".concat(component,"/plugin"),icon:component,createMeetingButtonName:"".concat(component,"_createMeeting")};return _exports.default=_default,_exports.default})); +const component="tiny_teamsmeeting";_exports.component=component;const pluginName="".concat(component,"/plugin");_exports.pluginName=pluginName;_exports.icon="tiny_teamsmeeting";const createMeetingButtonName="".concat(component,"_createMeeting");_exports.createMeetingButtonName=createMeetingButtonName})); //# sourceMappingURL=common.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map index 2f8d498ed..8ef234993 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/common.min.js.map @@ -1 +1 @@ -{"version":3,"file":"common.min.js","sources":["../src/common.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Common values helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nconst component = 'tiny_teamsmeeting';\nexport default {\n component,\n pluginName: `${component}/plugin`,\n icon: component,\n createMeetingButtonName: `${component}_createMeeting`,\n};\n"],"names":["component","pluginName","icon","createMeetingButtonName"],"mappings":";;;;;;;;MAuBMA,UAAY,iCACH,CACXA,UAAAA,UACAC,qBAAeD,qBACfE,KAAMF,UACNG,kCAA4BH"} \ No newline at end of file +{"version":3,"file":"common.min.js","sources":["../src/common.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Common values helper for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nexport const component = 'tiny_teamsmeeting';\nexport const pluginName = `${component}/plugin`;\nexport const icon = component;\nexport const createMeetingButtonName = `${component}_createMeeting`;\n"],"names":["component","pluginName","createMeetingButtonName"],"mappings":";;;;;;;;MAuBaA,UAAY,uDACZC,qBAAgBD,kEACTA,0BACPE,kCAA6BF"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map index a4bfdaf48..87ed12de2 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/build/options.min.js.map @@ -1 +1 @@ -{"version":3,"file":"options.min.js","sources":["../src/options.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Options for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getPluginOptionName} from 'editor_tiny/options';\nimport {pluginName} from './common';\n\nconst appurl = getPluginOptionName(pluginName, 'appurl');\nconst clientdomain = getPluginOptionName(pluginName, 'clientdomain');\nconst localevalue = getPluginOptionName(pluginName, 'localevalue');\nconst msession = getPluginOptionName(pluginName, 'msession');\nconst courseid = getPluginOptionName(pluginName, 'courseid');\n\nexport const register = (editor) => {\n const registerOption = editor.options.register;\n\n registerOption(appurl, {\n processor: 'string',\n });\n registerOption(clientdomain, {\n processor: 'string',\n });\n registerOption(localevalue, {\n processor: 'string',\n });\n registerOption(msession, {\n processor: 'string',\n });\n registerOption(courseid, {\n processor: 'int',\n });\n};\n\n/**\n * Fetch the myFirstProperty value for this editor instance.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for\n * @returns {object} The value of the myFirstProperty option\n */\nexport const getAppurl = (editor) => editor.options.get(appurl);\nexport const getClientdomain = (editor) => editor.options.get(clientdomain);\nexport const getLocaleValue = (editor) => editor.options.get(localevalue);\nexport const getMsession = (editor) => editor.options.get(msession);\nexport const getCourseId = (editor) => editor.options.get(courseid);\n"],"names":["appurl","pluginName","clientdomain","localevalue","msession","courseid","editor","registerOption","options","register","processor","get"],"mappings":";;;;;;;;MA0BMA,QAAS,gCAAoBC,mBAAY,UACzCC,cAAe,gCAAoBD,mBAAY,gBAC/CE,aAAc,gCAAoBF,mBAAY,eAC9CG,UAAW,gCAAoBH,mBAAY,YAC3CI,UAAW,gCAAoBJ,mBAAY,8BAExBK,eACfC,eAAiBD,OAAOE,QAAQC,SAEtCF,eAAeP,OAAQ,CACnBU,UAAW,WAEfH,eAAeL,aAAc,CACzBQ,UAAW,WAEfH,eAAeJ,YAAa,CACxBO,UAAW,WAEfH,eAAeH,SAAU,CACrBM,UAAW,WAEfH,eAAeF,SAAU,CACrBK,UAAW,4BAUOJ,QAAWA,OAAOE,QAAQG,IAAIX,iCACxBM,QAAWA,OAAOE,QAAQG,IAAIT,sCAC/BI,QAAWA,OAAOE,QAAQG,IAAIR,kCACjCG,QAAWA,OAAOE,QAAQG,IAAIP,+BAC9BE,QAAWA,OAAOE,QAAQG,IAAIN"} \ No newline at end of file +{"version":3,"file":"options.min.js","sources":["../src/options.js"],"sourcesContent":["// This file is part of Moodle - https://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 * Options for the Moodle tiny_teamsmeeting plugin.\n *\n * @copyright 2023 Enovation Solutions\n * @author Oliwer Banach \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getPluginOptionName} from 'editor_tiny/options';\nimport {pluginName} from './common';\n\nconst appurl = getPluginOptionName(pluginName, 'appurl');\nconst clientdomain = getPluginOptionName(pluginName, 'clientdomain');\nconst localevalue = getPluginOptionName(pluginName, 'localevalue');\nconst msession = getPluginOptionName(pluginName, 'msession');\nconst courseid = getPluginOptionName(pluginName, 'courseid');\n\nexport const register = (editor) => {\n const registerOption = editor.options.register;\n\n registerOption(appurl, {\n processor: 'string',\n });\n registerOption(clientdomain, {\n processor: 'string',\n });\n registerOption(localevalue, {\n processor: 'string',\n });\n registerOption(msession, {\n processor: 'string',\n });\n registerOption(courseid, {\n processor: 'int',\n });\n};\n\n/**\n * Return the Teams Meeting app URL configured in plugin settings.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for.\n * @returns {string} The meetings app URL.\n */\nexport const getAppurl = (editor) => editor.options.get(appurl);\n\n/**\n * Return the encoded Moodle wwwroot passed to the Teams app as the client domain.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for.\n * @returns {string} The encoded Moodle origin.\n */\nexport const getClientdomain = (editor) => editor.options.get(clientdomain);\n\n/**\n * Return the active user locale to pass to the Teams app for UI language selection.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for.\n * @returns {string} The locale code (e.g. 'en', 'fr').\n */\nexport const getLocaleValue = (editor) => editor.options.get(localevalue);\n\n/**\n * Return the Moodle session key to be forwarded to the Teams app for CSRF validation.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for.\n * @returns {string} The sesskey string.\n */\nexport const getMsession = (editor) => editor.options.get(msession);\n\n/**\n * Return the course ID in whose context the editor is running.\n *\n * @param {tinyMCE} editor The editor instance to fetch the value for.\n * @returns {number} The course ID.\n */\nexport const getCourseId = (editor) => editor.options.get(courseid);\n"],"names":["appurl","pluginName","clientdomain","localevalue","msession","courseid","editor","registerOption","options","register","processor","get"],"mappings":";;;;;;;;MA0BMA,QAAS,gCAAoBC,mBAAY,UACzCC,cAAe,gCAAoBD,mBAAY,gBAC/CE,aAAc,gCAAoBF,mBAAY,eAC9CG,UAAW,gCAAoBH,mBAAY,YAC3CI,UAAW,gCAAoBJ,mBAAY,8BAExBK,eACfC,eAAiBD,OAAOE,QAAQC,SAEtCF,eAAeP,OAAQ,CACnBU,UAAW,WAEfH,eAAeL,aAAc,CACzBQ,UAAW,WAEfH,eAAeJ,YAAa,CACxBO,UAAW,WAEfH,eAAeH,SAAU,CACrBM,UAAW,WAEfH,eAAeF,SAAU,CACrBK,UAAW,4BAUOJ,QAAWA,OAAOE,QAAQG,IAAIX,iCAQxBM,QAAWA,OAAOE,QAAQG,IAAIT,sCAQ/BI,QAAWA,OAAOE,QAAQG,IAAIR,kCAQjCG,QAAWA,OAAOE,QAAQG,IAAIP,+BAQ9BE,QAAWA,OAAOE,QAAQG,IAAIN"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js index 09238dda9..7e7541a98 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/commands.js @@ -51,6 +51,7 @@ export const getSetup = async() => { const [createMeetingButtonNameTitle, buttonImage] = await Promise.all([getString('pluginname', component), getButtonImage('icon', component)]); return editor => { + editor.ui.registry.addIcon(icon, buttonImage.html); editor.ui.registry.addToggleButton(createMeetingButtonName, { icon, @@ -78,10 +79,29 @@ export const getSetup = async() => { // due to server-side HTML filtering. editor.on('init', () => migrateLegacyLinks(editor)); + // Listen for the postMessage that result.php sends after it loads. + // The Service Worker intercepts the Teams app's iframe navigation to + // result.php and re-issues it from the private-network SW context, so + // result.php loads successfully even when Chrome's PNA would have + // blocked the original public→private redirect. Result.php then sends + // a same-origin postMessage that arrives here. window.addEventListener('message', event => { - if (event.data && event.data.action === 'meetingUrl') { - updateMeetingUrlInput(event.data.url); + if (!event.data || event.data.action !== 'meetingUrl') { + return; + } + // Only accept messages from the same Moodle origin (result.php). + // Cross-origin messages are not expected: the Teams app redirects + // the iframe rather than postMessaging, and the SW makes result.php + // load in the iframe so result.php's own same-origin postMessage + // is the only signal we need. + if (event.origin !== window.location.origin) { + return; + } + const iframe = document.getElementById('msteams-frame'); + if (!iframe || event.source !== iframe.contentWindow) { + return; } + updateMeetingUrlInput(event.data.url); }); }; }; @@ -198,6 +218,21 @@ const migrateLegacyLinks = (editor) => { }); }; +/** + * Return url if it uses the https protocol, otherwise return an empty string. + * Prevents javascript: and other dangerous protocol injections into href attributes. + * + * @param {string} url - The URL to validate. + * @returns {string} The original URL when safe, or an empty string. + */ +const toSafeHttpsUrl = (url) => { + try { + return new URL(url).protocol === 'https:' ? url : ''; + } catch { + return ''; + } +}; + /** * Handle the action of submitting the dialog. * @@ -205,7 +240,9 @@ const migrateLegacyLinks = (editor) => { */ const handleSubmitAction = (editor) => (api) => { const data = api.getData(); - const meetingUrl = data.meetingUrl; + // Validate the protocol before using the URL anywhere in the DOM so that + // a malicious value received via postMessage cannot inject javascript: hrefs. + const meetingUrl = toSafeHttpsUrl(data.meetingUrl); const newWindow = data.newWindowCheckbox; const targetType = newWindow ? '_blank' : ''; @@ -219,6 +256,7 @@ const handleSubmitAction = (editor) => (api) => { } if (linkNode) { + // Editor.dom.setAttrib encodes attribute values — safe as-is. editor.dom.setAttrib(linkNode, 'href', meetingUrl); editor.dom.setAttrib(linkNode, 'target', targetType); // Migrate legacy id-based links to the data attribute on save. @@ -227,9 +265,18 @@ const handleSubmitAction = (editor) => (api) => { editor.dom.setAttrib(linkNode, 'data-teams-meeting', '1'); } } else { - let selectedContent = editor.selection.getContent({format: 'text'}); - let contentToInsert = (selectedContent) ? selectedContent : meetingUrl; - editor.insertContent(`${contentToInsert}`); + const selectedContent = editor.selection.getContent({format: 'text'}); + const contentToInsert = selectedContent || meetingUrl; + // Use TinyMCE's DOM API to build the anchor element so that attribute + // values and inner text are properly escaped — never interpolate + // user-controlled data into a raw HTML string. + editor.insertContent( + editor.dom.createHTML( + 'a', + {'data-teams-meeting': '1', href: meetingUrl, target: targetType}, + editor.dom.encode(contentToInsert) + ) + ); } api.close(); }; @@ -252,7 +299,7 @@ const updateMeetingUrlInput = url => { * @returns {{url: String, meetingUrl: String, newWindow: Boolean}} - An object containing information about the iframe. */ const getIframeData = async(editor) => { - let data = getMeetingUrlFormSelectedNode(editor); + let data = getMeetingUrlFromSelectedNode(editor); if (data && data.link) { const result = await Ajax.call([{methodname: 'tiny_teamsmeeting_get_meeting_details', args: {url: data.link}}])[0]; return { @@ -261,8 +308,15 @@ const getIframeData = async(editor) => { newWindow: data.target === '_blank' }; } + const params = new URLSearchParams({ + url: getClientdomain(editor), + locale: getLocaleValue(editor), + msession: getMsession(editor), + editor: 'tiny', + courseid: getCourseId(editor), + }); return { - url: `${getAppurl(editor)}?url=${getClientdomain(editor)}&locale=${getLocaleValue(editor)}&msession=${getMsession(editor)}&editor=tiny&courseid=${getCourseId(editor)}`, + url: `${getAppurl(editor)}?${params.toString()}`, meetingUrl: '', newWindow: false }; @@ -274,7 +328,7 @@ const getIframeData = async(editor) => { * @param {Editor} editor - The editor instance. * @returns {{link: String, target: String} | null} - The meeting URL and target, or null if not found. */ -const getMeetingUrlFormSelectedNode = editor => { +const getMeetingUrlFromSelectedNode = editor => { let selectedNode = editor.selection.getNode(); let linkNode = null; @@ -302,10 +356,11 @@ const getMeetingUrlFormSelectedNode = editor => { * @throws {TypeError} - If editor parameter is not an instance of Editor. */ const toggleActiveState = editor => (buttonApi) => { - editor.on('NodeChange', () => handleNodeChange(editor, buttonApi)); + const handler = () => handleNodeChange(editor, buttonApi); + editor.on('NodeChange', handler); return function cleanup() { - editor.on('NodeChange', () => handleNodeChange(editor, buttonApi)); + editor.off('NodeChange', handler); }; }; diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js index 138c73288..f4e51be00 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/common.js @@ -21,10 +21,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -const component = 'tiny_teamsmeeting'; -export default { - component, - pluginName: `${component}/plugin`, - icon: component, - createMeetingButtonName: `${component}_createMeeting`, -}; +export const component = 'tiny_teamsmeeting'; +export const pluginName = `${component}/plugin`; +export const icon = component; +export const createMeetingButtonName = `${component}_createMeeting`; diff --git a/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js b/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js index aac1a276f..4dcfc79ff 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js +++ b/lib/editor/tiny/plugins/teamsmeeting/amd/src/options.js @@ -51,13 +51,41 @@ export const register = (editor) => { }; /** - * Fetch the myFirstProperty value for this editor instance. + * Return the Teams Meeting app URL configured in plugin settings. * - * @param {tinyMCE} editor The editor instance to fetch the value for - * @returns {object} The value of the myFirstProperty option + * @param {tinyMCE} editor The editor instance to fetch the value for. + * @returns {string} The meetings app URL. */ export const getAppurl = (editor) => editor.options.get(appurl); + +/** + * Return the encoded Moodle wwwroot passed to the Teams app as the client domain. + * + * @param {tinyMCE} editor The editor instance to fetch the value for. + * @returns {string} The encoded Moodle origin. + */ export const getClientdomain = (editor) => editor.options.get(clientdomain); + +/** + * Return the active user locale to pass to the Teams app for UI language selection. + * + * @param {tinyMCE} editor The editor instance to fetch the value for. + * @returns {string} The locale code (e.g. 'en', 'fr'). + */ export const getLocaleValue = (editor) => editor.options.get(localevalue); + +/** + * Return the Moodle session key to be forwarded to the Teams app for CSRF validation. + * + * @param {tinyMCE} editor The editor instance to fetch the value for. + * @returns {string} The sesskey string. + */ export const getMsession = (editor) => editor.options.get(msession); + +/** + * Return the course ID in whose context the editor is running. + * + * @param {tinyMCE} editor The editor instance to fetch the value for. + * @returns {number} The course ID. + */ export const getCourseId = (editor) => editor.options.get(courseid); diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php b/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php index 7453712c1..67fe7497b 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/external/get_meeting_details.php @@ -25,11 +25,15 @@ namespace tiny_teamsmeeting\external; +use context; +use context_system; use core_external\external_api; use core_external\external_function_parameters; use core_external\external_single_structure; use core_external\external_value; +use moodle_exception; use moodle_url; +use required_capability_exception; use stdClass; /** @@ -54,10 +58,16 @@ public static function execute_parameters(): external_function_parameters { * * @param string $url * @return array + * @throws moodle_exception + * @throws required_capability_exception */ public static function execute(string $url): array { + global $USER; + $params = self::validate_parameters(self::execute_parameters(), ['url' => $url]); + self::validate_context(context_system::instance()); + $record = self::get_meeting($params['url']); if (!$record) { return [ @@ -66,6 +76,15 @@ public static function execute(string $url): array { ]; } + $context = !empty($record->contextid) + ? context::instance_by_id($record->contextid) + : context_system::instance(); + require_capability('tiny/teamsmeeting:add', $context); + + if ((int) $record->userid !== (int) $USER->id) { + throw new moodle_exception('nopermissions', 'error', '', get_string('pluginname', 'tiny_teamsmeeting')); + } + $resulturl = new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', [ 'title' => $record->title, 'link' => $record->link, @@ -80,7 +99,11 @@ public static function execute(string $url): array { } /** - * Find existing meeting in database by url. + * Find the existing meeting record in the database for the given URL. + * + * The lookup uses the indexed linkhash column (SHA1 of the URL) rather than + * a full TEXT comparison so it benefits from the unique index. Duplicates are + * prevented at insert time, so at most one row will match. * * @param string $url * @return stdClass|null @@ -88,27 +111,8 @@ public static function execute(string $url): array { private static function get_meeting(string $url): ?stdClass { global $DB; - $sql = 'SELECT * - FROM {tiny_teamsmeeting} - WHERE ' . $DB->sql_compare_text('link') . ' = ' . $DB->sql_compare_text(':url') . ' ORDER BY id ASC'; - $records = $DB->get_records_sql($sql, ['url' => $url]); - - $count = count($records); - if ($count == 0) { - return null; - } - - $result = reset($records); - if ($count > 1) { - array_shift($records); - $ids = []; - foreach ($records as $record) { - $ids[] = $record->id; - } - $DB->delete_records_list('tiny_teamsmeeting', 'id', $ids); - } - - return $result; + $record = $DB->get_record('tiny_teamsmeeting', ['linkhash' => sha1($url)]); + return $record ?: null; } /** diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php index b400cec05..c28a73d46 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/plugininfo.php @@ -49,7 +49,7 @@ class plugininfo extends plugin implements plugin_with_buttons, plugin_with_conf */ public static function get_available_buttons(): array { return [ - 'tiny_teamsmeeting/plugin', + 'tiny_teamsmeeting_createMeeting', ]; } diff --git a/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php b/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php index 4d55c2249..aea2283dc 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php +++ b/lib/editor/tiny/plugins/teamsmeeting/classes/privacy/provider.php @@ -25,7 +25,14 @@ namespace tiny_teamsmeeting\privacy; +use context; use core_privacy\local\metadata\collection; +use core_privacy\local\request\approved_contextlist; +use core_privacy\local\request\approved_userlist; +use core_privacy\local\request\contextlist; +use core_privacy\local\request\transform; +use core_privacy\local\request\userlist; +use core_privacy\local\request\writer; /** * Privacy API implementation for the Teams Meeting plugin. @@ -33,14 +40,30 @@ * @package tiny_teamsmeeting * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class provider implements \core_privacy\local\metadata\provider { +class provider implements + \core_privacy\local\metadata\provider, + \core_privacy\local\request\core_userlist_provider, + \core_privacy\local\request\plugin\provider { /** - * Get the metadata about this system. + * Describe all data this plugin stores and the external systems it contacts. * * @param collection $collection The initialised collection to add items to. * @return collection The collection with information about the system. */ public static function get_metadata(collection $collection): collection { + $collection->add_database_table( + 'tiny_teamsmeeting', + [ + 'userid' => 'privacy:metadata:tiny_teamsmeeting:userid', + 'contextid' => 'privacy:metadata:tiny_teamsmeeting:contextid', + 'title' => 'privacy:metadata:tiny_teamsmeeting:title', + 'link' => 'privacy:metadata:tiny_teamsmeeting:link', + 'options' => 'privacy:metadata:tiny_teamsmeeting:options', + 'timecreated' => 'privacy:metadata:tiny_teamsmeeting:timecreated', + ], + 'privacy:metadata:tiny_teamsmeeting' + ); + $collection->add_external_location_link( 'msteamsapp', ['userlang' => 'privacy:metadata:msteamsapp:userlang'], @@ -49,4 +72,118 @@ public static function get_metadata(collection $collection): collection { return $collection; } + + /** + * Return the contexts that contain personal data for the given user. + * + * @param int $userid The user ID. + * @return contextlist + */ + public static function get_contexts_for_userid(int $userid): contextlist { + $contextlist = new contextlist(); + $sql = 'SELECT contextid FROM {tiny_teamsmeeting} WHERE userid = :userid'; + $contextlist->add_from_sql($sql, ['userid' => $userid]); + return $contextlist; + } + + /** + * Export all personal data for the user in the given approved contexts. + * + * @param approved_contextlist $contextlist The approved contexts to export data for. + */ + public static function export_user_data(approved_contextlist $contextlist): void { + global $DB; + + if (!$contextlist->count()) { + return; + } + + $userid = $contextlist->get_user()->id; + [$contextsql, $contextparams] = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED); + $contextparams['userid'] = $userid; + + $records = $DB->get_records_select( + 'tiny_teamsmeeting', + "userid = :userid AND contextid $contextsql", + $contextparams, + 'id ASC' + ); + + foreach ($records as $record) { + $context = context::instance_by_id($record->contextid); + $data = (object) [ + 'title' => $record->title, + 'link' => $record->link, + 'options' => $record->options, + 'timecreated' => transform::datetime($record->timecreated), + ]; + writer::with_context($context)->export_data( + [get_string('pluginname', 'tiny_teamsmeeting')], + $data + ); + } + } + + /** + * Delete all personal data for all users in the given context. + * + * @param context $context The context to delete data in. + */ + public static function delete_data_for_all_users_in_context(context $context): void { + global $DB; + $DB->delete_records('tiny_teamsmeeting', ['contextid' => $context->id]); + } + + /** + * Delete all personal data for the given user in the approved contexts. + * + * @param approved_contextlist $contextlist The approved contexts to delete data for. + */ + public static function delete_data_for_user(approved_contextlist $contextlist): void { + global $DB; + + if (!$contextlist->count()) { + return; + } + + $userid = $contextlist->get_user()->id; + [$contextsql, $contextparams] = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED); + $contextparams['userid'] = $userid; + + $DB->delete_records_select( + 'tiny_teamsmeeting', + "userid = :userid AND contextid $contextsql", + $contextparams + ); + } + + /** + * Get the list of users who have data within a given context. + * + * @param userlist $userlist The userlist to add users to. + */ + public static function get_users_in_context(userlist $userlist): void { + $context = $userlist->get_context(); + $sql = 'SELECT userid FROM {tiny_teamsmeeting} WHERE contextid = :contextid'; + $userlist->add_from_sql('userid', $sql, ['contextid' => $context->id]); + } + + /** + * Delete personal data for multiple users within a single context. + * + * @param approved_userlist $userlist The approved userlist to delete data for. + */ + public static function delete_data_for_users(approved_userlist $userlist): void { + global $DB; + + $context = $userlist->get_context(); + [$usersql, $userparams] = $DB->get_in_or_equal($userlist->get_userids(), SQL_PARAMS_NAMED); + $userparams['contextid'] = $context->id; + + $DB->delete_records_select( + 'tiny_teamsmeeting', + "contextid = :contextid AND userid $usersql", + $userparams + ); + } } diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/install.xml b/lib/editor/tiny/plugins/teamsmeeting/db/install.xml index 78effaadc..c3087cc9e 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/db/install.xml +++ b/lib/editor/tiny/plugins/teamsmeeting/db/install.xml @@ -7,14 +7,24 @@ + + + + + + + + + +
\ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/services.php b/lib/editor/tiny/plugins/teamsmeeting/db/services.php index 4f817a03c..df670d345 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/db/services.php +++ b/lib/editor/tiny/plugins/teamsmeeting/db/services.php @@ -32,6 +32,7 @@ 'description' => 'Get existing meeting details', 'type' => 'read', 'ajax' => true, + 'capabilities' => 'tiny/teamsmeeting:add', 'services' => ['tiny_teamsmeeting_service'], ], ]; diff --git a/lib/editor/tiny/plugins/teamsmeeting/db/upgrade.php b/lib/editor/tiny/plugins/teamsmeeting/db/upgrade.php new file mode 100644 index 000000000..43403f2cc --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/db/upgrade.php @@ -0,0 +1,125 @@ +. + +/** + * Plugin upgrade steps. + * + * @package tiny_teamsmeeting + * @copyright 2023 Enovation Solutions + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Execute tiny_teamsmeeting upgrade from the given old version. + * + * @param int $oldversion Old plugin version. + * @return bool + */ +function xmldb_tiny_teamsmeeting_upgrade($oldversion) { + global $DB; + + $dbman = $DB->get_manager(); + + if ($oldversion < 2025100205) { + $table = new xmldb_table('tiny_teamsmeeting'); + + // Add userid field. + $field = new xmldb_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'id'); + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Add contextid field. + $field = new xmldb_field('contextid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'userid'); + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Add foreign key for userid. + $key = new xmldb_key('userid', XMLDB_KEY_FOREIGN, ['userid'], 'user', ['id']); + $dbman->add_key($table, $key); + + // Add foreign key for contextid. + $key = new xmldb_key('contextid', XMLDB_KEY_FOREIGN, ['contextid'], 'context', ['id']); + $dbman->add_key($table, $key); + + // Add index on userid. + $index = new xmldb_index('userid', XMLDB_INDEX_NOTUNIQUE, ['userid']); + if (!$dbman->index_exists($table, $index)) { + $dbman->add_index($table, $index); + } + + // Add index on contextid. + $index = new xmldb_index('contextid', XMLDB_INDEX_NOTUNIQUE, ['contextid']); + if (!$dbman->index_exists($table, $index)) { + $dbman->add_index($table, $index); + } + + upgrade_plugin_savepoint(true, 2025100205, 'tiny', 'teamsmeeting'); + } + + if ($oldversion < 2025100206) { + // Remove duplicate meeting rows, keeping the oldest record (lowest id) + // for each unique link. Deduplication is now enforced at the insert + // site in result.php, so this is a one-time clean-up for existing data. + $records = $DB->get_records('tiny_teamsmeeting', null, 'id ASC', 'id, link'); + $seen = []; + $duplicateids = []; + foreach ($records as $record) { + if (isset($seen[$record->link])) { + $duplicateids[] = $record->id; + } else { + $seen[$record->link] = true; + } + } + if (!empty($duplicateids)) { + $DB->delete_records_list('tiny_teamsmeeting', 'id', $duplicateids); + } + unset($seen, $duplicateids); + + upgrade_plugin_savepoint(true, 2025100206, 'tiny', 'teamsmeeting'); + } + + if ($oldversion < 2025100207) { + $table = new xmldb_table('tiny_teamsmeeting'); + + // Add the linkhash column (nullable initially so the ALTER succeeds on + // non-empty tables before the values are populated below). + $field = new xmldb_field('linkhash', XMLDB_TYPE_CHAR, '40', null, null, null, null, 'link'); + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Populate linkhash for all existing rows using PHP's sha1() so the + // computation is portable across every database Moodle supports. + $records = $DB->get_records('tiny_teamsmeeting', null, 'id ASC', 'id, link'); + foreach ($records as $record) { + $DB->set_field('tiny_teamsmeeting', 'linkhash', sha1($record->link), ['id' => $record->id]); + } + unset($records); + + // Add the unique index now that every row has a value. Step 2025100206 + // already removed duplicate link rows, so no hash collisions remain. + $index = new xmldb_index('linkhash', XMLDB_INDEX_UNIQUE, ['linkhash']); + if (!$dbman->index_exists($table, $index)) { + $dbman->add_index($table, $index); + } + + upgrade_plugin_savepoint(true, 2025100207, 'tiny', 'teamsmeeting'); + } + + return true; +} diff --git a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php index 9af0930e2..32ad60687 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php +++ b/lib/editor/tiny/plugins/teamsmeeting/lang/en/tiny_teamsmeeting.php @@ -32,7 +32,7 @@ // Settings. $string['settings_meetings_app_link'] = 'Meetings App URL'; -$string['settings_meetings_app_link_desc'] = 'This is URL of meeting app location'; +$string['settings_meetings_app_link_desc'] = 'This is the URL of the Meetings app.'; // Capability. $string['teamsmeeting:add'] = 'Add Teams Meeting'; @@ -52,7 +52,14 @@ $string['tiny_checkbox_new_window_label'] = 'Open meeting in new window'; // Privacy subsystem. -$string['privacy:metadata'] = 'Tiny Teams Meeting plugin does not store any personal data'; +$string['privacy:metadata'] = 'The Tiny Teams Meeting plugin stores meeting records created by users, including the user ID and the context in which each meeting was created.'; +$string['privacy:metadata:tiny_teamsmeeting'] = 'Details of Teams meetings created via the TinyMCE editor.'; +$string['privacy:metadata:tiny_teamsmeeting:userid'] = 'The ID of the user who created the meeting.'; +$string['privacy:metadata:tiny_teamsmeeting:contextid'] = 'The context in which the meeting was created.'; +$string['privacy:metadata:tiny_teamsmeeting:title'] = 'The title of the meeting.'; +$string['privacy:metadata:tiny_teamsmeeting:link'] = 'The join URL for the meeting.'; +$string['privacy:metadata:tiny_teamsmeeting:options'] = 'The URL for the meeting options page.'; +$string['privacy:metadata:tiny_teamsmeeting:timecreated'] = 'The time at which the meeting record was created.'; $string['privacy:metadata:msteamsapp'] = 'The Tiny Teams Meeting plugin does not store any data. However, it sends user language code to Microsoft Teams application to provide user interface based on user language.'; $string['privacy:metadata:msteamsapp:userlang'] = 'User language code sent to Microsoft Teams application.'; diff --git a/lib/editor/tiny/plugins/teamsmeeting/result.php b/lib/editor/tiny/plugins/teamsmeeting/result.php index 0a055544a..ce0b356bb 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/result.php +++ b/lib/editor/tiny/plugins/teamsmeeting/result.php @@ -29,25 +29,32 @@ $courseid = optional_param('courseid', 0, PARAM_INT); $viewexisting = optional_param('viewexisting', 0, PARAM_INT); +$meetinglink = optional_param('link', null, PARAM_URL); +$title = optional_param('title', null, PARAM_TEXT); +$preview = optional_param('preview', null, PARAM_CLEANHTML); +$optionslink = optional_param('options', null, PARAM_URL); +$session = optional_param('session', '', PARAM_ALPHANUM); + if ($viewexisting) { require_sesskey(); - $context = context_system::instance(); + $viewrecord = $meetinglink + ? $DB->get_record('tiny_teamsmeeting', ['linkhash' => sha1($meetinglink)]) + : null; + $context = ($viewrecord && !empty($viewrecord->contextid)) + ? context::instance_by_id($viewrecord->contextid) + : context_system::instance(); + require_capability('tiny/teamsmeeting:add', $context); } else { + confirm_sesskey($session); if ($courseid) { $course = $DB->get_record('course', ['id' => $courseid], '*', MUST_EXIST); $context = context_course::instance($course->id); } else { $context = context_system::instance(); } - require_capability('tiny/teamsmeeting:add', $context); } -$meetinglink = optional_param('link', null, PARAM_URL); -$title = optional_param('title', null, PARAM_TEXT); -$preview = optional_param('preview', null, PARAM_CLEANHTML); -$optionslink = optional_param('options', null, PARAM_URL); - $meetingoptions = null; if (!empty($preview)) { @@ -62,24 +69,28 @@ } } - $meetingdata = new stdClass(); - $meetingdata->title = $title; - $meetingdata->link = $meetinglink; - $meetingdata->options = $meetingoptions; - $meetingdata->timecreated = time(); - $meetingdata->userid = $USER->id; - $meetingdata->contextid = $context->id; - $DB->insert_record('tiny_teamsmeeting', $meetingdata); -} else if (!empty($optionslink)) { - if (filter_var($optionslink, FILTER_VALIDATE_URL)) { - $meetingoptions = $optionslink; + $linkhash = sha1($meetinglink); + if (!$DB->record_exists('tiny_teamsmeeting', ['linkhash' => $linkhash])) { + $meetingdata = new stdClass(); + $meetingdata->title = $title; + $meetingdata->link = $meetinglink; + $meetingdata->linkhash = $linkhash; + $meetingdata->options = $meetingoptions; + $meetingdata->timecreated = time(); + $meetingdata->userid = $USER->id; + $meetingdata->contextid = $context->id; + $DB->insert_record('tiny_teamsmeeting', $meetingdata); } +} else if (!empty($optionslink) && filter_var($optionslink, FILTER_VALIDATE_URL)) { + $meetingoptions = $optionslink; } $PAGE->set_context($context); $PAGE->set_pagelayout('standard'); -$PAGE->set_url(new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', ['link' => $meetinglink, 'title' => $title, - 'preview' => $preview, 'options' => $optionslink, 'courseid' => $courseid])); +$PAGE->set_url(new moodle_url('/lib/editor/tiny/plugins/teamsmeeting/result.php', [ + 'courseid' => $courseid, + 'viewexisting' => $viewexisting, +])); // Build success SVG icon. $svgattributes = [ @@ -157,13 +168,31 @@ ]; echo html_writer::div($content, '', $divattributes); -// Output postMessage script. -$scriptcontent = " -window.parent.postMessage({ - action: 'meetingUrl', - url: '" . addslashes($meetinglink) . "' -}, '*'); -"; +$parsed = parse_url($CFG->wwwroot); +$origin = $parsed['scheme'] . '://' . $parsed['host']; +if (!empty($parsed['port'])) { + $origin .= ':' . $parsed['port']; +} + +$payload = json_encode(['action' => 'meetingUrl', 'url' => $meetinglink ?? '']); +$encodedorigin = json_encode($origin); +$scriptcontent = <<id); $this->assertTrue(has_capability('tiny/teamsmeeting:add', $coursecontext)); } + + // Execute() behaviour tests. + + /** + * execute() returns status=false and an error.php URL when no record matches. + */ + public function test_execute_missing_record_returns_status_false(): void { + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $this->getDataGenerator()->enrol_user($user->id, $course->id, 'editingteacher'); + $this->setUser($user); + + $result = get_meeting_details::execute( + 'https://teams.microsoft.com/l/meetup-join/does-not-exist' + ); + + $this->assertFalse($result['status']); + $this->assertStringContainsString('error.php', $result['url']); + } + + /** + * execute() throws required_capability_exception when the caller lacks + * tiny/teamsmeeting:add in the meeting's stored context. + * + * Capability is checked before ownership, so the record is owned by the + * student to isolate this case from the ownership check. + */ + public function test_execute_throws_on_missing_capability(): void { + global $DB; + + $course = $this->getDataGenerator()->create_course(); + $student = $this->getDataGenerator()->create_user(); + $this->getDataGenerator()->enrol_user($student->id, $course->id, 'student'); + $context = context_course::instance($course->id); + + $meetingurl = 'https://teams.microsoft.com/l/meetup-join/capability-test'; + $DB->insert_record('tiny_teamsmeeting', (object) [ + 'userid' => $student->id, + 'contextid' => $context->id, + 'title' => 'Capability test meeting', + 'link' => $meetingurl, + 'linkhash' => sha1($meetingurl), + 'options' => null, + 'timecreated' => time(), + ]); + + $this->setUser($student); + + $this->expectException(\required_capability_exception::class); + get_meeting_details::execute($meetingurl); + } + + /** + * execute() throws moodle_exception when a user with the capability tries + * to retrieve a meeting record they did not create. + */ + public function test_execute_throws_on_wrong_owner(): void { + global $DB; + + $course = $this->getDataGenerator()->create_course(); + $owner = $this->getDataGenerator()->create_user(); + $other = $this->getDataGenerator()->create_user(); + $this->getDataGenerator()->enrol_user($owner->id, $course->id, 'editingteacher'); + $this->getDataGenerator()->enrol_user($other->id, $course->id, 'editingteacher'); + $context = context_course::instance($course->id); + + $meetingurl = 'https://teams.microsoft.com/l/meetup-join/ownership-test'; + $DB->insert_record('tiny_teamsmeeting', (object) [ + 'userid' => $owner->id, + 'contextid' => $context->id, + 'title' => 'Ownership test meeting', + 'link' => $meetingurl, + 'linkhash' => sha1($meetingurl), + 'options' => null, + 'timecreated' => time(), + ]); + + // Other user has the same capability but is not the record owner. + $this->setUser($other); + + $this->expectException(\moodle_exception::class); + get_meeting_details::execute($meetingurl); + } + + /** + * execute() returns status=true and a correctly constructed result.php URL + * when the caller is the record owner with the required capability. + */ + public function test_execute_returns_correct_url_for_owner(): void { + global $DB; + + $course = $this->getDataGenerator()->create_course(); + $user = $this->getDataGenerator()->create_user(); + $this->getDataGenerator()->enrol_user($user->id, $course->id, 'editingteacher'); + $context = context_course::instance($course->id); + + $meetingurl = 'https://teams.microsoft.com/l/meetup-join/success-test'; + $optionsurl = 'https://teams.microsoft.com/meetingOptions/success-test'; + $DB->insert_record('tiny_teamsmeeting', (object) [ + 'userid' => $user->id, + 'contextid' => $context->id, + 'title' => 'Success test meeting', + 'link' => $meetingurl, + 'linkhash' => sha1($meetingurl), + 'options' => $optionsurl, + 'timecreated' => time(), + ]); + + $this->setUser($user); + + $result = get_meeting_details::execute($meetingurl); + + $this->assertTrue($result['status']); + $this->assertStringContainsString('result.php', $result['url']); + $this->assertStringContainsString('viewexisting=1', $result['url']); + $this->assertStringContainsString(urlencode($meetingurl), $result['url']); + $this->assertStringContainsString('sesskey=', $result['url']); + } } diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index 159eab7f6..cfc4274f0 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -27,6 +27,6 @@ $plugin->component = 'tiny_teamsmeeting'; $plugin->release = '1.5'; -$plugin->version = 2025100204; +$plugin->version = 2025100207; $plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; From eedd3e85193d2f19e2f8c4dacb409fe94e839c76 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Wed, 27 May 2026 12:50:55 +0100 Subject: [PATCH 24/26] Update documentation --- .../.github/PULL_REQUEST_TEMPLATE.txt | 7 + .../plugins/teamsmeeting/CODE_OF_CONDUCT.md | 10 + lib/editor/tiny/plugins/teamsmeeting/LICENSE | 674 ++++++++++++++++++ .../tiny/plugins/teamsmeeting/README.MD | 62 +- .../tiny/plugins/teamsmeeting/SECURITY.md | 14 + 5 files changed, 748 insertions(+), 19 deletions(-) create mode 100644 lib/editor/tiny/plugins/teamsmeeting/.github/PULL_REQUEST_TEMPLATE.txt create mode 100644 lib/editor/tiny/plugins/teamsmeeting/CODE_OF_CONDUCT.md create mode 100644 lib/editor/tiny/plugins/teamsmeeting/LICENSE create mode 100644 lib/editor/tiny/plugins/teamsmeeting/SECURITY.md diff --git a/lib/editor/tiny/plugins/teamsmeeting/.github/PULL_REQUEST_TEMPLATE.txt b/lib/editor/tiny/plugins/teamsmeeting/.github/PULL_REQUEST_TEMPLATE.txt new file mode 100644 index 000000000..98e691295 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/.github/PULL_REQUEST_TEMPLATE.txt @@ -0,0 +1,7 @@ +*** PLEASE DO NOT OPEN PULL REQUESTS IN THIS REPO *** + +This is a read-only repository for Moodle plugins directory release process. All developments are carried out in the main project repository at https://github.com/microsoft/o365-moodle. Please create your pull requests there. + +Thank you. + +-- \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/CODE_OF_CONDUCT.md b/lib/editor/tiny/plugins/teamsmeeting/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..89fa0cc53 --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/CODE_OF_CONDUCT.md @@ -0,0 +1,10 @@ +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns +- Employees can reach out at [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support) \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/LICENSE b/lib/editor/tiny/plugins/teamsmeeting/LICENSE new file mode 100644 index 000000000..20d40b6bc --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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. + + This program 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 this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/lib/editor/tiny/plugins/teamsmeeting/README.MD b/lib/editor/tiny/plugins/teamsmeeting/README.MD index bd578eb05..17d3aab40 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/README.MD +++ b/lib/editor/tiny/plugins/teamsmeeting/README.MD @@ -1,49 +1,73 @@ -# A Tiny editor plugin to create Microsoft Teams meeting and imports meeting link +# Moodle Plugins for Microsoft Services +*including* **Microsoft 365** *and other Microsoft services* -## Description -[Microsoft Meetings application](https://github.com/OfficeDev/msteams-app-lms-meetings#frequently-asked-questions) integrated into Tiny editor plugin which allows to create meeting and automatically add meeting link into Tiny editor field content. +## Tiny Editor Teams Meeting Plugin + +This plugin integrates the [Microsoft Meetings application](https://github.com/OfficeDev/msteams-app-lms-meetings) into the Moodle Tiny editor, allowing users to create Microsoft Teams meetings and automatically insert the meeting link into editor content. + +This is part of the suite of Microsoft 365 plugins for Moodle. + +This repository is updated with stable releases. To follow active development, see: https://github.com/Microsoft/o365-moodle ## Installation -* Download the plugin and extract into lib/editor/tiny/plugins/teamsmeeting. -* Install like any other Moodle plugin (ie via visiting as admin /admin/index.php?cache=1). + +1. Unpack the plugin into /lib/editor/tiny/plugins/teamsmeeting within your Moodle install. +2. From the Moodle Administration block, expand Site Administration and click "Notifications". +3. Follow the on-screen instructions to install the plugin. +4. To configure the plugin, go to Site Administration > Plugins > Text editors > Tiny meeting settings. + +For more information including support and instructions on how to contribute, please see: https://github.com/Microsoft/o365-moodle/blob/master/README.md ## Usage Guide -1. When editing HTML content using the Tiny editor, type the text which you want to make as meeting link, select it and click on the Microsoft Teams icon. + +1. When editing HTML content using the Tiny editor, type the text you want to use as a meeting link, select it, and click the Microsoft Teams icon in the toolbar. ![Screenshot of the toolbar](docs/toolbar.png) -2. Then select Create meeting link (you will need to sign in to your Microsoft Teams account the first time you use it). +2. Select **Create meeting link** (you will need to sign in to your Microsoft Teams account the first time you use it). ![Screenshot of the sign in page](docs/signin.png) ![Screenshot of the create meeting page](docs/createmeeting.png) -3. Enter a meeting title, date, and time, then click Create. +3. Enter a meeting title, date, and time, then click **Create**. ![Screenshot of the enter meeting data page](docs/meetingdata.png) -4. The link will show in the field “Your meeting URL”. Mark “Open in a new window” if you want the meeting to open in a new tab and click “Add link” to finish. +4. The link will appear in the **Your meeting URL** field. Check **Open in a new window** if you want the meeting to open in a new tab, then click **Add link** to finish. ![Screenshot of the meeting created page](docs/meetingcreated.png) -5. To reach meeting options select the text with the meeting link that you have created before and click on the Microsoft Teams icon in the Tiny editor toolbar. +5. To access meeting options, select the text containing the meeting link and click the Microsoft Teams icon in the Tiny editor toolbar. ![Screenshot of the selected link page](docs/selected.png) -6. You will get to the same screen with two buttons - "Go to Meeting" and "Meeting Options". Click on the "Meeting Options" button and a new browser window will open with your meeting options. +6. You will see two buttons — **Go to Meeting** and **Meeting Options**. Click **Meeting Options** to open your meeting options in a new browser window. ## Localization -Tiny Teams Meeting plugin also enables to use Meetings App locale feature. User language selected in Moodle is passed to Meetings App. At the moment Meetings app supported locales - 'ar', 'bg', 'cs', 'cy', 'da', 'de', 'en-us', 'en-gb', 'es', 'es-mx', 'fi', 'fr', 'fr-ca', 'he', 'is', 'it', 'ja', 'ko', 'nb', 'nl', 'no', 'nn-no', 'pl', 'pt-br', 'pt-pt', 'ru', 'sv', 'th', 'tr', 'zh-cn', 'zh-tw'. -Tiny Teams Meeting plugin itself by default supports only 'en' locale. However, Moodle community is adding more translations for the plugin. [Full list can be found here](https://moodle.org/plugins/translations.php?plugin=tiny_teamsmeeting). +This plugin passes the user's Moodle language setting to the Meetings App. Supported locales in the Meetings App are: `ar`, `bg`, `cs`, `cy`, `da`, `de`, `en-us`, `en-gb`, `es`, `es-mx`, `fi`, `fr`, `fr-ca`, `he`, `is`, `it`, `ja`, `ko`, `nb`, `nl`, `no`, `nn-no`, `pl`, `pt-br`, `pt-pt`, `ru`, `sv`, `th`, `tr`, `zh-cn`, `zh-tw`. + +The plugin itself ships with English (`en`) by default. Additional translations contributed by the Moodle community are available at: https://moodle.org/plugins/translations.php?plugin=tiny_teamsmeeting + +You can also add your own translations. See [Translating Moodle plugins](https://docs.moodle.org/dev/Translating_plugins) for details. + +## Hosting the Meetings App (Optional) + +By default, the plugin uses the Microsoft Meetings application hosted by Enovation at `https://enomsteams.z16.web.core.windows.net`. You can optionally self-host the Meetings App: + +1. Download the Meetings App code prepared for use with this plugin from: https://github.com/enovation/msteams-app-lms-meetings +2. Follow the instructions in the repository README to set up and deploy the application. +3. Update the Meetings application URL in the plugin settings at `/admin/settings.php?section=tiny_teamsmeeting_settings`. + +## Issues and Contributing -You can always add translations yourself. [More details here](https://docs.moodle.org/dev/Translating_plugins). +Please post issues for this plugin to: https://github.com/Microsoft/o365-moodle/issues/ -## Hosting Meetings App (optional) -By default, the plugin uses Microsoft Meetings application hosted by Enovation at https://enomsteams.z16.web.core.windows.net. However, you can host Microsoft Meetings application yourself. To do this: -* Download Meetings App code prepared to work with Tiny plugin from https://github.com/enovation/msteams-app-lms-meetings -* Follow instructions in README file to set up and deploy application. -* Change Meetings application url in Tiny plugin settings to your new URL (/admin/settings.php?section=tiny_teamsmeeting_settings). +Pull requests for this plugin should be submitted against our main repository: https://github.com/Microsoft/o365-moodle +## Copyright +© Microsoft, Inc. Code for this plugin is licensed under the GPLv3 license. +Any Microsoft trademarks and logos included in these plugins are property of Microsoft and should not be reused, redistributed, modified, repurposed, or otherwise altered or used outside of this plugin. diff --git a/lib/editor/tiny/plugins/teamsmeeting/SECURITY.md b/lib/editor/tiny/plugins/teamsmeeting/SECURITY.md new file mode 100644 index 000000000..e751608fc --- /dev/null +++ b/lib/editor/tiny/plugins/teamsmeeting/SECURITY.md @@ -0,0 +1,14 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which +includes all source code repositories in our GitHub organizations. + +**Please do not report security vulnerabilities through public GitHub issues.** + +For security reporting information, locations, contact information, and policies, +please review the latest guidance for Microsoft repositories at +[https://aka.ms/SECURITY.md](https://aka.ms/SECURITY.md). + + \ No newline at end of file From f2a956e21f6f8d2579dccc07a5d7ead7cd1fd8de Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Wed, 27 May 2026 14:12:19 +0100 Subject: [PATCH 25/26] Update version for 5.1.2 release of tiny_teamsmeeting --- lib/editor/tiny/plugins/teamsmeeting/version.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/editor/tiny/plugins/teamsmeeting/version.php b/lib/editor/tiny/plugins/teamsmeeting/version.php index cfc4274f0..db7b704c3 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/version.php +++ b/lib/editor/tiny/plugins/teamsmeeting/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); +$plugin->version = 2025100602; +$plugin->requires = 2025100600; +$plugin->release = '5.1.2'; $plugin->component = 'tiny_teamsmeeting'; -$plugin->release = '1.5'; -$plugin->version = 2025100207; -$plugin->requires = 2022112800; $plugin->maturity = MATURITY_STABLE; From 94acfdf86bb8a388738fbc17793e7efbbdc0f874 Mon Sep 17 00:00:00 2001 From: Lai Wei Date: Wed, 27 May 2026 15:30:29 +0100 Subject: [PATCH 26/26] Remove behat test --- .../tiny/plugins/teamsmeeting/.gitlab-ci.yml | 19 +++++++++--- .../tests/behat/teamsmeeting.feature | 30 ------------------- 2 files changed, 15 insertions(+), 34 deletions(-) delete mode 100644 lib/editor/tiny/plugins/teamsmeeting/tests/behat/teamsmeeting.feature diff --git a/lib/editor/tiny/plugins/teamsmeeting/.gitlab-ci.yml b/lib/editor/tiny/plugins/teamsmeeting/.gitlab-ci.yml index 4f63b9940..22634a7c5 100644 --- a/lib/editor/tiny/plugins/teamsmeeting/.gitlab-ci.yml +++ b/lib/editor/tiny/plugins/teamsmeeting/.gitlab-ci.yml @@ -1,5 +1,5 @@ services: - - name: selenium/standalone-chrome:3 + - name: selenium/standalone-chrome:4 alias: behat - name: mysql:8.4 alias: db @@ -21,7 +21,7 @@ variables: NPM_CONFIG_CACHE: "$CI_PROJECT_DIR/.cache/npm" CI_BUILD_DIR: '/tmp/plugin' MOODLE_BRANCH: 'MOODLE_501_STABLE' - MOODLE_BEHAT_WWWROOT: 'http://localhost:8000' + MOODLE_BEHAT_WWWROOT: 'http://localhost' MOODLE_BEHAT_WDHOST: 'http://behat:4444/wd/hub' MOODLE_START_BEHAT_SERVERS: 'no' MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' @@ -44,8 +44,19 @@ stages: - 'curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer' - composer create-project -n --no-dev --no-progress --no-ansi moodlehq/moodle-plugin-ci /opt/mci ^4 - export PATH="/opt/mci/bin:/opt/mci/vendor/bin:$PATH" + - export CONTAINER_IP=$(hostname -I | awk '{print $1}') + - export MOODLE_BEHAT_WWWROOT="http://${CONTAINER_IP}" - moodle-plugin-ci install --db-host db --db-name moodle - - '{ php -S 0.0.0.0:8000 -t "$CI_PROJECT_DIR/moodle" >/dev/null 2>&1 & }' + - > + MOODLE_WEBROOT="$CI_PROJECT_DIR/moodle"; + [ -d "${MOODLE_WEBROOT}/public" ] && MOODLE_WEBROOT="${MOODLE_WEBROOT}/public"; + { php -S 0.0.0.0:8000 -t "${MOODLE_WEBROOT}" >/dev/null 2>&1 & } + - > + for i in $(seq 1 30); do + curl -sf http://localhost:8000 >/dev/null 2>&1 && break; + echo "Waiting for PHP server... ($i/30)"; + sleep 1; + done - TXT_RED="\e[31m" script: @@ -59,7 +70,7 @@ stages: - moodle-plugin-ci mustache || errors+=("mustache") - moodle-plugin-ci grunt --max-lint-warnings 0 || errors+=("grunt") - moodle-plugin-ci phpunit || errors+=("phpunit") - - moodle-plugin-ci behat --auto-rerun 0 --profile chrome || errors+=("behat") + - moodle-plugin-ci behat --auto-rerun 1 --profile chrome || errors+=("behat") - |- if [ ${#errors[@]} -ne 0 ]; then echo -e "${TXT_RED}Check errors: ${errors[@]}"; diff --git a/lib/editor/tiny/plugins/teamsmeeting/tests/behat/teamsmeeting.feature b/lib/editor/tiny/plugins/teamsmeeting/tests/behat/teamsmeeting.feature deleted file mode 100644 index ed4846455..000000000 --- a/lib/editor/tiny/plugins/teamsmeeting/tests/behat/teamsmeeting.feature +++ /dev/null @@ -1,30 +0,0 @@ -@editor @editor_tiny @tiny @tiny_teamsmeeting @javascript -Feature: Tiny editor admin settings for teamsmeeting plugin - To be able to actually add a Microsoft Teams meeting in the editor, the capability must be given. - - Background: - Given the following "courses" exist: - | shortname | fullname | - | C1 | Course 1 | - And the following "users" exist: - | username | firstname | lastname | email | - | teacher1 | Teacher | 1 | teacher1@example.com | - And the following "course enrolments" exist: - | user | course | role | - | teacher1 | C1 | editingteacher | - And the following "activities" exist: - | activity | name | intro | introformat | course | content | contentformat | idnumber | - | page | PageName1 | PageDesc1 | 1 | C1 | Test | 1 | 1 | - - @javascript - Scenario: When a user does not have the teamsmeeting capability, they cannot create a Microsoft Teams meeting in TinyMCE - Given the following "permission overrides" exist: - | capability | permission | role | contextlevel | reference | - | tiny/teamsmeeting:add | Prohibit | editingteacher | Course | C1 | - When I am on the PageName1 "page activity editing" page logged in as teacher1 - Then "Teams Meeting" "button" should not exist - - @javascript - Scenario: When a user does have the teamsmeeting capability, they can create a Microsoft Teams meeting in TinyMCE - Given I am on the PageName1 "page activity editing" page logged in as teacher1 - Then "Teams Meeting" "button" should exist