[BUGFIX] Repair EditDocumentController in FE edit scope 42/44342/7
authorAndreas Fernandez <a.fernandez@scripting-base.de>
Wed, 28 Oct 2015 22:14:30 +0000 (23:14 +0100)
committerMorton Jonuschat <m.jonuschat@mojocode.de>
Thu, 29 Oct 2015 17:13:14 +0000 (18:13 +0100)
This patch repairs the EditDocumentController when called by FE edit.
The main issue was that JavaScripts depends on global objects in ``top``
which are set by BackendController that is only called when one acts
in the fully bootstrapped backend view.

Resolves: #68819
Releases: master
Change-Id: I5635b32b3dada3a73d7534936e41cd94d3d10b56
Reviewed-on: https://review.typo3.org/44342
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
typo3/sysext/backend/Classes/Controller/EditDocumentController.php
typo3/sysext/backend/Resources/Public/JavaScript/ContextHelp.js
typo3/sysext/backend/Resources/Public/JavaScript/DateTimePicker.js
typo3/sysext/feedit/Classes/FrontendEditPanel.php

index d309f1c..50e2dcc 100644 (file)
@@ -29,6 +29,7 @@ use TYPO3\CMS\Core\Messaging\FlashMessageQueue;
 use TYPO3\CMS\Core\Messaging\FlashMessageService;
 use TYPO3\CMS\Core\Page\PageRenderer;
 use TYPO3\CMS\Core\Type\Bitmask\Permission;
+use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\Utility\HttpUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
@@ -740,8 +741,43 @@ class EditDocumentController extends AbstractModule
             'PopupWindow' => array(
                 'width' => $popupWindowWidth,
                 'height' => $popupWindowHeight
-            ),
+            )
         );
+
+        if (ExtensionManagementUtility::isLoaded('feedit') && (int)GeneralUtility::_GP('feEdit') === 1) {
+            // We have to load some locallang strings and push them into TYPO3.LLL if this request was
+            // triggered by feedit. Originally, this object is fed by BackendController which is not
+            // called here. This block of code is intended to be removed at a later point again.
+            $lang = $this->getLanguageService();
+            $coreLabels = array(
+                'csh_tooltip_loading' => $lang->sL('LLL:EXT:lang/locallang_core.xlf:csh_tooltip_loading')
+            );
+            $generatedLabels = array();
+            $generatedLabels['core'] = $coreLabels;
+            $code = 'TYPO3.LLL = ' . json_encode($generatedLabels) . ';';
+            $filePath = 'typo3temp/Language/Backend-' . sha1($code) . '.js';
+            if (!file_exists(PATH_site . $filePath)) {
+                // writeFileToTypo3tempDir() returns NULL on success (please double-read!)
+                $error = GeneralUtility::writeFileToTypo3tempDir(PATH_site . $filePath, $code);
+                if ($error !== null) {
+                    throw new \RuntimeException('Locallang JS file could not be written to ' . $filePath . '. Reason: ' . $error, 1446118286);
+                }
+            }
+            $pageRenderer->addJsFile('../' . $filePath);
+
+            // define the window size of the popups within the RTE
+            $rtePopupWindowSize = trim($beUser->getTSConfigVal('options.rte.popupWindowSize'));
+            if (!empty($rtePopupWindowSize)) {
+                list($rtePopupWindowWidth, $rtePopupWindowHeight) = GeneralUtility::trimExplode('x', $rtePopupWindowSize);
+            }
+            $rtePopupWindowWidth  = !empty($rtePopupWindowWidth) ? (int)$rtePopupWindowWidth : ($popupWindowWidth-200);
+            $rtePopupWindowHeight = !empty($rtePopupWindowHeight) ? (int)$rtePopupWindowHeight : ($popupWindowHeight-250);
+            $t3Configuration['RTEPopupWindow'] = [
+                'width' => $rtePopupWindowWidth,
+                'height' => $rtePopupWindowHeight
+            ];
+        }
+
         $javascript = '
                        TYPO3.configuration = ' . json_encode($t3Configuration) . ';
                        // Object: TS:
index d31e76e..741f8cb 100644 (file)
@@ -43,9 +43,9 @@ define(['jquery', 'TYPO3/CMS/Backend/Popover', 'bootstrap'], function($) {
                        $('.icon-actions-system-shortcut-new').closest('.btn').hide();
                }
                var title = '&nbsp;';
-               if (typeof(top.TYPO3.LLL) !== 'undefined') {
+               if (typeof top.TYPO3.LLL !== 'undefined') {
                        title = top.TYPO3.LLL.core.csh_tooltip_loading;
-               } else if (opener && typeof(opener.top.TYPO3.LLL) !== 'undefined') {
+               } else if (opener && typeof opener.top.TYPO3.LLL !== 'undefined') {
                        title = opener.top.TYPO3.LLL.core.csh_tooltip_loading;
                }
                var $element = $(this.selector);
index 34202a0..c8d5a8b 100644 (file)
@@ -26,7 +26,7 @@ define(['jquery'], function ($) {
        var DateTimePicker = {
                options: {
                        fieldSelector: '.t3js-datetimepicker',
-                       format: (opener ? opener.top : top).TYPO3.settings.DateTimePicker.DateFormat
+                       format: (opener !== null && typeof opener.top.TYPO3 !== 'undefined' ? opener.top : top).TYPO3.settings.DateTimePicker.DateFormat
                }
        };
 
index 14679f3..382c112 100644 (file)
@@ -231,7 +231,8 @@ class FrontendEditPanel
             array(
                 'edit[' . $table . '][' . $editUid . ']' => 'edit',
                 'columnsOnly' => $fieldList,
-                'noView' => $nV
+                'noView' => $nV,
+                'feEdit' => 1
             )
         ) . $addUrlParamStr;
         $icon = $this->editPanelLinkWrap_doWrap($iconImg, $url, 'content-link');
@@ -268,7 +269,7 @@ class FrontendEditPanel
         $nV = GeneralUtility::_GP('ADMCMD_view') ? 1 : 0;
         if ($cmd == 'edit') {
             $rParts = explode(':', $currentRecord);
-            $out = $this->editPanelLinkWrap_doWrap($string, BackendUtility::getModuleUrl('record_edit', array('edit[' . $rParts[0] . '][' . $rParts[1] . ']' => 'edit', 'noView=' . $nV)), $currentRecord);
+            $out = $this->editPanelLinkWrap_doWrap($string, BackendUtility::getModuleUrl('record_edit', array('edit[' . $rParts[0] . '][' . $rParts[1] . ']' => 'edit', 'noView' => $nV, 'feEdit' => 1)), $currentRecord);
         } elseif ($cmd == 'new') {
             $rParts = explode(':', $currentRecord);
             if ($rParts[0] == 'pages') {