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