[TASK] Move CSH Javascript to EXT:cshmanual 19/42719/6
authorBenjamin Mack <benni@typo3.org>
Tue, 18 Aug 2015 16:52:34 +0000 (18:52 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Tue, 18 Aug 2015 18:04:30 +0000 (20:04 +0200)
Releases: master
Resolves: #69161
Change-Id: If0df623ea07c06781aad7f89496919ed2a5f8729
Reviewed-on: http://review.typo3.org/42719
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/backend/Classes/Controller/LoginController.php
typo3/sysext/backend/Classes/Template/DocumentTemplate.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-69161-RemoveIncludeCshFromContainerViewHelper.rst [new file with mode: 0644]
typo3/sysext/cshmanual/Classes/Service/JavaScriptService.php [new file with mode: 0644]
typo3/sysext/cshmanual/ext_tables.php
typo3/sysext/filelist/Classes/ViewHelpers/Be/ContainerViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Be/ContainerViewHelper.php

index 652bb1a..ce7ddbf 100644 (file)
@@ -233,7 +233,7 @@ class LoginController implements \TYPO3\CMS\Core\Http\ControllerInterface {
                $loginProvider = GeneralUtility::makeInstance($this->loginProviders[$this->loginProviderIdentifier]['provider']);
                $loginProvider->render($this->view, $pageRenderer, $this);
 
-               $content = $this->getDocumentTemplate()->startPage('TYPO3 CMS Login: ' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'], FALSE);
+               $content = $this->getDocumentTemplate()->startPage('TYPO3 CMS Login: ' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']);
                $content .= $this->view->render();
                $content .= $this->getDocumentTemplate()->endPage();
 
index d697b74..e97762c 100644 (file)
@@ -784,11 +784,10 @@ function jumpToUrl(URL) {
         * This includes the proper header with charset, title, meta tag and beginning body-tag.
         *
         * @param string $title HTML Page title for the header
-        * @param bool $includeCsh flag for including CSH
         * @return string Returns the whole header section of a HTML-document based on settings in internal variables (like styles, javascript code, charset, generator and docType)
         * @see endPage()
         */
-       public function startPage($title, $includeCsh = TRUE) {
+       public function startPage($title) {
                // hook pre start page
                if (isset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/template.php']['preStartPageHook'])) {
                        $preStartPageHook = &$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/template.php']['preStartPageHook'];
@@ -809,22 +808,12 @@ function jumpToUrl(URL) {
                        }
                }
 
-
-
                // Disable rendering of XHTML tags
                $this->pageRenderer->setRenderXhtml(FALSE);
 
                $languageCode = $this->pageRenderer->getLanguage() === 'default' ? 'en' : $this->pageRenderer->getLanguage();
                $this->pageRenderer->setHtmlTag('<html lang="' . $languageCode . '">');
 
-               // Include the JS for the Context Sensitive Help
-               // @todo: right now this is a hard dependency on csh manual, as the whole help system should be moved to
-               // the extension. The core provides an API for adding help, and rendering help, but the rendering
-               // should be up to the extension itself
-               if ($includeCsh && ExtensionManagementUtility::isLoaded('cshmanual')) {
-                       $this->loadCshJavascript();
-               }
-
                $headerStart = '<!DOCTYPE html>';
                $this->pageRenderer->setXmlPrologAndDocType($headerStart);
                $this->pageRenderer->setHeadTag('<head>' . LF . '<!-- TYPO3 Script ID: ' . htmlspecialchars($this->scriptID) . ' -->');
@@ -941,11 +930,10 @@ function jumpToUrl(URL) {
         *
         * @param string $title page title
         * @param string $content page content
-        * @param bool $includeCsh flag for including csh code
         * @return string complete page
         */
-       public function render($title, $content, $includeCsh = TRUE) {
-               $pageContent = $this->startPage($title, $includeCsh);
+       public function render($title, $content) {
+               $pageContent = $this->startPage($title);
                $pageContent .= $content;
                $pageContent .= $this->endPage();
                return $this->insertStylesAndJS($pageContent);
@@ -1515,21 +1503,6 @@ function jumpToUrl(URL) {
        }
 
        /**
-        * This loads everything needed for the Context Sensitive Help (CSH)
-        *
-        * @return void
-        */
-       protected function loadCshJavascript() {
-               $this->pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/ContextHelp');
-               $this->pageRenderer->addInlineSetting('ContextHelp', 'moduleUrl', BackendUtility::getModuleUrl('help_CshmanualCshmanual', array(
-                       'tx_cshmanual_help_cshmanualcshmanual' => array(
-                               'controller' => 'Help',
-                               'action' => 'detail'
-                       )
-               )));
-       }
-
-       /**
         * Creates a tab menu from an array definition
         *
         * Returns a tab menu for a module
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-69161-RemoveIncludeCshFromContainerViewHelper.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-69161-RemoveIncludeCshFromContainerViewHelper.rst
new file mode 100644 (file)
index 0000000..f182795
--- /dev/null
@@ -0,0 +1,26 @@
+======================================================================
+Breaking: #69161 - Removed includeCsh setting from ContainerViewHelper
+======================================================================
+
+Description
+===========
+
+Include CSH setting in ``<f:be.container>`` is not needed anymore and therefor removed.
+The JavaScript will be loaded automatically when ext:cshmanual is enabled.
+
+
+Impact
+======
+
+Using ``<f:be.container>`` ViewHelpers in a custom Backend module, setting the includeCsh property, will result in a fatal error.
+
+
+Affected Installations
+======================
+
+Extensions that use ``<f:be.container>`` which set the setting includeCsh
+
+Migration
+=========
+
+Remove the property from the template. When ext:cshmanual is enabled the JavaScript is loaded automatically.
diff --git a/typo3/sysext/cshmanual/Classes/Service/JavaScriptService.php b/typo3/sysext/cshmanual/Classes/Service/JavaScriptService.php
new file mode 100644 (file)
index 0000000..7a3e818
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+namespace TYPO3\CMS\Cshmanual\Service;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+/**
+ * JavaScript Service adding JS code to each backend page
+ */
+class JavaScriptService {
+
+       /**
+        * Include the JS for the Context Sensitive Help
+        *
+        * @param string $title the title of the page
+        * @param \TYPO3\CMS\Backend\Template\DocumentTemplate $documentTemplateObject
+        */
+       public function addJavaScript($title, $documentTemplateObject) {
+               if (TYPO3_MODE === 'BE' && is_object($GLOBALS['BE_USER'])) {
+                       $pageRenderer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Page\PageRenderer::class);
+                       $pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/ContextHelp');
+                       $pageRenderer->addInlineSetting('ContextHelp', 'moduleUrl', \TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl('help_CshmanualCshmanual', array(
+                               'tx_cshmanual_help_cshmanualcshmanual' => array(
+                                       'controller' => 'Help',
+                                       'action' => 'detail'
+                               )
+                       )));
+               }
+       }
+}
+
index ecdc52e..a02a6a5 100644 (file)
@@ -16,4 +16,6 @@ if (TYPO3_MODE === 'BE') {
                        'labels' => 'LLL:EXT:lang/locallang_mod_help_cshmanual.xlf',
                )
        );
+
+       $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/template.php']['preStartPageHook']['cshmanual'] = \TYPO3\CMS\Cshmanual\Service\JavaScriptService::class . '->addJavaScript';
 }
\ No newline at end of file
index 601d3f5..fb9c191 100644 (file)
@@ -27,7 +27,7 @@ namespace TYPO3\CMS\Filelist\ViewHelpers\Be;
  * </output>
  *
  * <code title="All options">
- * <f:be.container pageTitle="foo" enableClickMenu="false" loadExtJs="true" loadExtJsTheme="false" extJsAdapter="jQuery" enableExtJsDebug="true" loadJQuery="true" includeCssFiles="0: '{f:uri.resource(path:\'Css/Styles.css\')}'" includeJsFiles="0: '{f:uri.resource(path:\'JavaScript/Library1.js\')}', 1: '{f:uri.resource(path:\'JavaScript/Library2.js\')}'" addJsInlineLabels="{0: 'label1', 1: 'label2'}" includeCsh="true">your module content</f:be.container>
+ * <f:be.container pageTitle="foo" enableClickMenu="false" loadExtJs="true" loadExtJsTheme="false" extJsAdapter="jQuery" enableExtJsDebug="true" loadJQuery="true" includeCssFiles="0: '{f:uri.resource(path:\'Css/Styles.css\')}'" includeJsFiles="0: '{f:uri.resource(path:\'JavaScript/Library1.js\')}', 1: '{f:uri.resource(path:\'JavaScript/Library2.js\')}'" addJsInlineLabels="{0: 'label1', 1: 'label2'}">your module content</f:be.container>
  * </code>
  * <output>
  * "your module content" wrapped with proper head & body tags.
@@ -50,7 +50,6 @@ class ContainerViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Be\ContainerViewH
         * @param array $includeCssFiles List of custom CSS file to be loaded
         * @param array $includeJsFiles List of custom JavaScript file to be loaded
         * @param array $addJsInlineLabels Custom labels to add to JavaScript inline labels
-        * @param bool $includeCsh flag for including CSH
         * @param array $includeRequireJsModules List of RequireJS modules to be loaded
         * @param array $addJsInlineLabelFiles List of files containing custom labels to add to JavaScript inline labels
         * @param string $addJsInline Custom inline JavaScript
@@ -58,14 +57,14 @@ class ContainerViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Be\ContainerViewH
         * @see \TYPO3\CMS\Backend\Template\DocumentTemplate
         * @see \TYPO3\CMS\Core\Page\PageRenderer
         */
-       public function render($pageTitle = '', $enableClickMenu = TRUE, $loadExtJs = FALSE, $loadExtJsTheme = TRUE, $enableExtJsDebug = FALSE, $loadJQuery = FALSE, $includeCssFiles = NULL, $includeJsFiles = NULL, $addJsInlineLabels = NULL, $includeCsh = TRUE, $includeRequireJsModules = NULL, $addJsInlineLabelFiles = NULL, $addJsInline = NULL) {
+       public function render($pageTitle = '', $enableClickMenu = TRUE, $loadExtJs = FALSE, $loadExtJsTheme = TRUE, $enableExtJsDebug = FALSE, $loadJQuery = FALSE, $includeCssFiles = NULL, $includeJsFiles = NULL, $addJsInlineLabels = NULL, $includeRequireJsModules = NULL, $addJsInlineLabelFiles = NULL, $addJsInline = NULL) {
                if (is_array($addJsInlineLabelFiles)) {
                        foreach ($addJsInlineLabelFiles as $addJsInlineLabelFile) {
                                $this->getPageRenderer()->addInlineLanguageLabelFile($addJsInlineLabelFile['file'], $addJsInlineLabelFile['prefix']);
                        }
                }
 
-               $content = parent::render($pageTitle, $enableClickMenu, $loadExtJs, $loadExtJsTheme, $enableExtJsDebug, $loadJQuery, $includeCssFiles, $includeJsFiles, $addJsInlineLabels, $includeCsh, $includeRequireJsModules);
+               $content = parent::render($pageTitle, $enableClickMenu, $loadExtJs, $loadExtJsTheme, $enableExtJsDebug, $loadJQuery, $includeCssFiles, $includeJsFiles, $addJsInlineLabels, $includeRequireJsModules);
 
                $doc = $this->getDocInstance();
                $doc->JScode .= $doc->wrapScriptTags($addJsInline);
index 72ec30d..5428c28 100644 (file)
@@ -38,7 +38,7 @@ use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
  * </output>
  *
  * <code title="All options">
- * <f:be.container pageTitle="foo" enableClickMenu="false" loadExtJs="true" loadExtJsTheme="false" extJsAdapter="jQuery" enableExtJsDebug="true" loadJQuery="true" includeCssFiles="0: '{f:uri.resource(path:\'Css/Styles.css\')}'" includeJsFiles="0: '{f:uri.resource(path:\'JavaScript/Library1.js\')}', 1: '{f:uri.resource(path:\'JavaScript/Library2.js\')}'" addJsInlineLabels="{0: 'label1', 1: 'label2'}" includeCsh="true">your module content</f:be.container>
+ * <f:be.container pageTitle="foo" enableClickMenu="false" loadExtJs="true" loadExtJsTheme="false" extJsAdapter="jQuery" enableExtJsDebug="true" loadJQuery="true" includeCssFiles="0: '{f:uri.resource(path:\'Css/Styles.css\')}'" includeJsFiles="0: '{f:uri.resource(path:\'JavaScript/Library1.js\')}', 1: '{f:uri.resource(path:\'JavaScript/Library2.js\')}'" addJsInlineLabels="{0: 'label1', 1: 'label2'}">your module content</f:be.container>
  * </code>
  * <output>
  * "your module content" wrapped with proper head & body tags.
@@ -61,13 +61,12 @@ class ContainerViewHelper extends AbstractBackendViewHelper {
         * @param array $includeCssFiles List of custom CSS file to be loaded
         * @param array $includeJsFiles List of custom JavaScript file to be loaded
         * @param array $addJsInlineLabels Custom labels to add to JavaScript inline labels
-        * @param bool $includeCsh flag for including CSH
         * @param array $includeRequireJsModules List of RequireJS modules to be loaded
         * @return string
         * @see \TYPO3\CMS\Backend\Template\DocumentTemplate
         * @see \TYPO3\CMS\Core\Page\PageRenderer
         */
-       public function render($pageTitle = '', $enableClickMenu = TRUE, $loadExtJs = FALSE, $loadExtJsTheme = TRUE, $enableExtJsDebug = FALSE, $loadJQuery = FALSE, $includeCssFiles = NULL, $includeJsFiles = NULL, $addJsInlineLabels = NULL, $includeCsh = TRUE, $includeRequireJsModules = NULL) {
+       public function render($pageTitle = '', $enableClickMenu = TRUE, $loadExtJs = FALSE, $loadExtJsTheme = TRUE, $enableExtJsDebug = FALSE, $loadJQuery = FALSE, $includeCssFiles = NULL, $includeJsFiles = NULL, $addJsInlineLabels = NULL, $includeRequireJsModules = NULL) {
                $pageRenderer = $this->getPageRenderer();
                $doc = $this->getDocInstance();
                $doc->JScode .= $doc->wrapScriptTags($doc->redirectUrls());
@@ -111,7 +110,7 @@ class ContainerViewHelper extends AbstractBackendViewHelper {
                }
                // Render the content and return it
                $output = $this->renderChildren();
-               $output = $doc->startPage($pageTitle, $includeCsh) . $output;
+               $output = $doc->startPage($pageTitle) . $output;
                $output .= $doc->endPage();
                return $output;
        }