From a5f19efc6fc9c305310d66f0d2c0317ccb25966a Mon Sep 17 00:00:00 2001 From: Andreas Fernandez <a.fernandez@scripting-base.de> Date: Tue, 3 Mar 2020 17:45:57 +0100 Subject: [PATCH] [BUGFIX] Set actionName for adding online media MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The property `actionName` is added to the window message to allow adding media from the "Add media by URL" again. To prevent such issues in future, a new interface is introduced which renders `actionName` mandatory. Resolves: #90626 Releases: master Change-Id: I925da0476f2f29bd9394c723369b68429e59b545 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/63538 Tested-by: TYPO3com <noreply@typo3.com> Tested-by: Christian Eßl <indy.essl@gmail.com> Tested-by: Daniel Goerz <daniel.goerz@posteo.de> Reviewed-by: Christian Eßl <indy.essl@gmail.com> Reviewed-by: Daniel Goerz <daniel.goerz@posteo.de> --- .../backend/Resources/Public/TypeScript/OnlineMedia.ts | 1 + .../Resources/Public/TypeScript/Utility/MessageUtility.ts | 7 ++++++- .../backend/Resources/Public/JavaScript/OnlineMedia.js | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/OnlineMedia.ts b/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/OnlineMedia.ts index 94b8d8946132..0b391368b356 100644 --- a/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/OnlineMedia.ts +++ b/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/OnlineMedia.ts @@ -64,6 +64,7 @@ class OnlineMedia { (data: Response): void => { if (data.file) { const message = { + actionName: 'typo3:foreignRelation:inserted', objectGroup: irreObjectUid, table: 'sys_file', uid: data.file, diff --git a/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/Utility/MessageUtility.ts b/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/Utility/MessageUtility.ts index 07aa65642c89..c3e2103b0e42 100644 --- a/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/Utility/MessageUtility.ts +++ b/Build/Sources/TypeScript/backend/Resources/Public/TypeScript/Utility/MessageUtility.ts @@ -11,6 +11,11 @@ * The TYPO3 project - inspiring people to share! */ +interface Message { + actionName: string; + [key: string]: any; +} + export class MessageUtility { /** * Generates an URL for usage in postMessage @@ -34,7 +39,7 @@ export class MessageUtility { * @param {*} message * @param {Window} windowObject */ - public static send(message: any, windowObject: Window = window): void { + public static send(message: Message, windowObject: Window = window): void { windowObject.postMessage(message, MessageUtility.getOrigin()); } } diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/OnlineMedia.js b/typo3/sysext/backend/Resources/Public/JavaScript/OnlineMedia.js index 4dca8510548a..4af0d31c5c05 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/OnlineMedia.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/OnlineMedia.js @@ -10,4 +10,4 @@ * * The TYPO3 project - inspiring people to share! */ -define(["require","exports","./Enum/KeyTypes","jquery","nprogress","./Modal","./Severity","TYPO3/CMS/Core/SecurityUtility","TYPO3/CMS/Backend/Utility/MessageUtility"],(function(e,t,i,a,n,r,o,l,s){"use strict";return new class{constructor(){this.securityUtility=new l,a(()=>{this.registerEvents()})}registerEvents(){const e=this;a(document).on("click",".t3js-online-media-add-btn",t=>{e.triggerModal(a(t.currentTarget))})}addOnlineMedia(e,t){const i=e.data("target-folder"),l=e.data("online-media-allowed"),d=e.data("file-irre-object");n.start(),a.post(TYPO3.settings.ajaxUrls.online_media_create,{url:t,targetFolder:i,allowed:l},e=>{if(e.file){const t={objectGroup:d,table:"sys_file",uid:e.file};s.MessageUtility.send(t)}else{const t=r.confirm("ERROR",e.error,o.error,[{text:TYPO3.lang["button.ok"]||"OK",btnClass:"btn-"+o.getCssClass(o.error),name:"ok",active:!0}]).on("confirm.button.ok",()=>{t.modal("hide")})}n.done()})}triggerModal(e){const t=e.data("btn-submit")||"Add",n=e.data("placeholder")||"Paste media url here...",l=a.map(e.data("online-media-allowed").split(","),e=>'<span class="label label-success">'+this.securityUtility.encodeHtml(e.toUpperCase(),!1)+"</span>"),s=e.data("online-media-allowed-help-text")||"Allow to embed from sources:",d=a("<div>").attr("class","form-control-wrap").append([a("<input>").attr("type","text").attr("class","form-control online-media-url").attr("placeholder",n),a("<div>").attr("class","help-block").html(this.securityUtility.encodeHtml(s,!1)+"<br>"+l.join(" "))]),c=r.show(e.attr("title"),d,o.notice,[{text:t,btnClass:"btn btn-primary",name:"ok",trigger:()=>{const t=c.find("input.online-media-url").val();t&&(c.modal("hide"),this.addOnlineMedia(e,t))}}]);c.on("shown.bs.modal",e=>{a(e.currentTarget).find("input.online-media-url").first().focus().on("keydown",e=>{e.keyCode===i.KeyTypesEnum.ENTER&&c.find('button[name="ok"]').trigger("click")})})}}})); \ No newline at end of file +define(["require","exports","./Enum/KeyTypes","jquery","nprogress","./Modal","./Severity","TYPO3/CMS/Core/SecurityUtility","TYPO3/CMS/Backend/Utility/MessageUtility"],(function(e,t,i,n,a,r,o,l,s){"use strict";return new class{constructor(){this.securityUtility=new l,n(()=>{this.registerEvents()})}registerEvents(){const e=this;n(document).on("click",".t3js-online-media-add-btn",t=>{e.triggerModal(n(t.currentTarget))})}addOnlineMedia(e,t){const i=e.data("target-folder"),l=e.data("online-media-allowed"),d=e.data("file-irre-object");a.start(),n.post(TYPO3.settings.ajaxUrls.online_media_create,{url:t,targetFolder:i,allowed:l},e=>{if(e.file){const t={actionName:"typo3:foreignRelation:inserted",objectGroup:d,table:"sys_file",uid:e.file};s.MessageUtility.send(t)}else{const t=r.confirm("ERROR",e.error,o.error,[{text:TYPO3.lang["button.ok"]||"OK",btnClass:"btn-"+o.getCssClass(o.error),name:"ok",active:!0}]).on("confirm.button.ok",()=>{t.modal("hide")})}a.done()})}triggerModal(e){const t=e.data("btn-submit")||"Add",a=e.data("placeholder")||"Paste media url here...",l=n.map(e.data("online-media-allowed").split(","),e=>'<span class="label label-success">'+this.securityUtility.encodeHtml(e.toUpperCase(),!1)+"</span>"),s=e.data("online-media-allowed-help-text")||"Allow to embed from sources:",d=n("<div>").attr("class","form-control-wrap").append([n("<input>").attr("type","text").attr("class","form-control online-media-url").attr("placeholder",a),n("<div>").attr("class","help-block").html(this.securityUtility.encodeHtml(s,!1)+"<br>"+l.join(" "))]),c=r.show(e.attr("title"),d,o.notice,[{text:t,btnClass:"btn btn-primary",name:"ok",trigger:()=>{const t=c.find("input.online-media-url").val();t&&(c.modal("hide"),this.addOnlineMedia(e,t))}}]);c.on("shown.bs.modal",e=>{n(e.currentTarget).find("input.online-media-url").first().focus().on("keydown",e=>{e.keyCode===i.KeyTypesEnum.ENTER&&c.find('button[name="ok"]').trigger("click")})})}}})); \ No newline at end of file -- GitLab