From 32b09d17f8e9d4e1e4f4bab81a7ae3fc97d56b5d Mon Sep 17 00:00:00 2001
From: Andreas Fernandez <a.fernandez@scripting-base.de>
Date: Wed, 23 Sep 2015 17:18:12 +0200
Subject: [PATCH] [BUGFIX] Fix RequireJS resolution in FormEngine

The FormInlineAjaxController expects a different array structure
for RequireJS modules as FormResultCompiler does, which
is incompatible to each other.

Adopt the resolution of FormResultCompiler to fix JavaScript
errors and load modules properly.

Resolves: #69647
Releases: master
Change-Id: I2f2730e7c482dbc4722791b995a88c3c1138385a
Reviewed-on: http://review.typo3.org/43505
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Frans Saris <franssaris@gmail.com>
Tested-by: Frans Saris <franssaris@gmail.com>
Reviewed-by: Nicole Cordes <typo3@cordes.co>
Tested-by: Nicole Cordes <typo3@cordes.co>
---
 .../Controller/FormInlineAjaxController.php   | 37 +++++++++++++------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php b/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php
index 23560778b1bb..0167cfc1d362 100644
--- a/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php
+++ b/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php
@@ -439,19 +439,32 @@ class FormInlineAjaxController {
 			$jsonResult['scriptCall'][] = $singleAdditionalJavaScriptPost;
 		}
 		$jsonResult['scriptCall'][] = $childResult['extJSCODE'];
-		foreach ($childResult['requireJsModules'] as $moduleName => $callbacks) {
-			if (!is_array($callbacks)) {
-				$callbacks = array($callbacks);
-			}
-			foreach ($callbacks as $callback) {
-				$inlineCodeKey = $moduleName;
-				$javaScriptCode = 'require(["' . $moduleName . '"]';
-				if ($callback !== NULL) {
-					$inlineCodeKey .= sha1($callback);
-					$javaScriptCode .= ', ' . $callback;
+		if (!empty($childResult['requireJsModules'])) {
+			foreach ($childResult['requireJsModules'] as $module) {
+				$moduleName = NULL;
+				$callback = NULL;
+				if (is_string($module)) {
+					// if $module is a string, no callback
+					$moduleName = $module;
+					$callback = NULL;
+				} elseif (is_array($module)) {
+					// if $module is an array, callback is possible
+					foreach ($module as $key => $value) {
+						$moduleName = $key;
+						$callback = $value;
+						break;
+					}
+				}
+				if ($moduleName !== NULL) {
+					$inlineCodeKey = $moduleName;
+					$javaScriptCode = 'require(["' . $moduleName . '"]';
+					if ($callback !== NULL) {
+						$inlineCodeKey .= sha1($callback);
+						$javaScriptCode .= ', ' . $callback;
+					}
+					$javaScriptCode .= ');';
+					$jsonResult['scriptCall'][] = '/*RequireJS-Module-' . $inlineCodeKey . '*/' . LF . $javaScriptCode;
 				}
-				$javaScriptCode .= ');';
-				$jsonResult['scriptCall'][] = '/*RequireJS-Module-' . $inlineCodeKey . '*/' . LF . $javaScriptCode;
 			}
 		}
 		return $jsonResult;
-- 
GitLab