From 1da997b9d7823900300568e181d7d1c17ecef71f Mon Sep 17 00:00:00 2001
From: Frans Saris <franssaris@gmail.com>
Date: Fri, 6 Nov 2015 15:41:19 +0100
Subject: [PATCH] [TASK] Use ModuleTemplate API for File module navigation
 frame

Resolves: #71372
Releases: master
Change-Id: I6ebeef3f76623adb4d4936dc874826f335f959d5
Reviewed-on: https://review.typo3.org/44581
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
---
 .../Public/Less/TYPO3/_element_tree.less      |  15 +--
 .../FileSystemNavigationFrameController.php   | 106 +++++++++++-------
 .../Private/Templates/alt_file_navframe.html  |  32 ------
 .../t3skin/Resources/Public/Css/backend.css   |  15 +--
 4 files changed, 74 insertions(+), 94 deletions(-)
 delete mode 100644 typo3/sysext/backend/Resources/Private/Templates/alt_file_navframe.html

diff --git a/Build/Resources/Public/Less/TYPO3/_element_tree.less b/Build/Resources/Public/Less/TYPO3/_element_tree.less
index 7a896147b5a0..03db1cdd087a 100644
--- a/Build/Resources/Public/Less/TYPO3/_element_tree.less
+++ b/Build/Resources/Public/Less/TYPO3/_element_tree.less
@@ -195,7 +195,7 @@
 	.list-tree-control > .fa:before {
 		background-color: #f5f5f5;
 	}
-	[id=typo3-inner-docbody] {
+	.module-body {
 		padding-left: 10px;
 		padding-right: 10px;
 	}
@@ -265,8 +265,7 @@
 	}
 }
 
-#typo3-pagetree #typo3-docheader div.buttonsright,
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docheader div.buttonsright {
+#typo3-pagetree #typo3-docheader div.buttonsright {
 	margin-right: 3px;
 }
 
@@ -283,8 +282,7 @@ body#typo3-alt-db-navframe-php div.c-notice {
 // AJAX Page Tree
 //
 
-body#typo3-pagetree,
-body#ext-backend-Modules-FileSystemNavigationFrame-index-php {
+body#typo3-pagetree {
 	margin: 0;
 	padding: 0;
 }
@@ -414,12 +412,9 @@ ul.tree div.treeLinkItem span.dragIcon {
 
 body#typo3-pagetree,
 body#ext-backend-Modules-FileSystemNavigationFrame-index-php {
-	background: #ebebeb;
+	background: @navigation-bg;
 }
 
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docbody,
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docheader-row1,
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docheader-row2,
 .typo3-pagetree-indicatorBar-item,
 #typo3-pagetree-topPanelItems,
 #typo3-pagetree-topPanel .typo3-pagetree-topPanel-item,
@@ -430,7 +425,7 @@ body#ext-backend-Modules-FileSystemNavigationFrame-index-php {
 	background-repeat: repeat-y;
 }
 
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docbody,
+#ext-backend-Modules-FileSystemNavigationFrame-index-php .module-body,
 #typo3-pagetree-treeContainer {
 	background-color: @navigation-bg;
 }
diff --git a/typo3/sysext/backend/Classes/Controller/FileSystemNavigationFrameController.php b/typo3/sysext/backend/Classes/Controller/FileSystemNavigationFrameController.php
index 2ac7cf127b69..fcee072e83e0 100644
--- a/typo3/sysext/backend/Classes/Controller/FileSystemNavigationFrameController.php
+++ b/typo3/sysext/backend/Classes/Controller/FileSystemNavigationFrameController.php
@@ -16,12 +16,13 @@ namespace TYPO3\CMS\Backend\Controller;
 
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
+use TYPO3\CMS\Backend\Template\Components\ButtonBar;
+use TYPO3\CMS\Backend\Template\ModuleTemplate;
 use TYPO3\CMS\Backend\Tree\View\ElementBrowserFolderTreeView;
 use TYPO3\CMS\Core\Imaging\Icon;
 use TYPO3\CMS\Core\Imaging\IconFactory;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Filelist\FileListFolderTree;
-use TYPO3\CMS\Backend\Template\DocumentTemplate;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Recordlist\Tree\View\DummyLinkParameterProvider;
 
@@ -30,6 +31,7 @@ use TYPO3\CMS\Recordlist\Tree\View\DummyLinkParameterProvider;
  */
 class FileSystemNavigationFrameController
 {
+
     /**
      * Content accumulates in this variable.
      *
@@ -42,13 +44,6 @@ class FileSystemNavigationFrameController
      */
     public $foldertree;
 
-    /**
-     * document template object
-     *
-     * @var \TYPO3\CMS\Backend\Template\DocumentTemplate
-     */
-    public $doc;
-
     /**
      * @var string
      */
@@ -69,6 +64,13 @@ class FileSystemNavigationFrameController
      */
     public $doHighlight;
 
+    /**
+     * ModuleTemplate Container
+     *
+     * @var ModuleTemplate
+     */
+    protected $moduleTemplate;
+
     /**
      * Constructor
      */
@@ -99,6 +101,8 @@ class FileSystemNavigationFrameController
      */
     protected function init()
     {
+        $this->moduleTemplate = GeneralUtility::makeInstance(ModuleTemplate::class);
+
         // Setting GPvars:
         $this->currentSubScript = GeneralUtility::_GP('currentSubScript');
         $this->cMR = GeneralUtility::_GP('cMR');
@@ -117,7 +121,8 @@ class FileSystemNavigationFrameController
             $this->foldertree->ext_noTempRecyclerDirs = $this->scopeData['ext_noTempRecyclerDirs'];
             if ($this->foldertree instanceof ElementBrowserFolderTreeView) {
                 // create a fake provider to pass link data along properly
-                $linkParamProvider = GeneralUtility::makeInstance(DummyLinkParameterProvider::class,
+                $linkParamProvider = GeneralUtility::makeInstance(
+                    DummyLinkParameterProvider::class,
                     $this->scopeData['browser'],
                     $this->scopeData['script']
                 );
@@ -144,11 +149,9 @@ class FileSystemNavigationFrameController
     {
         // Setting highlight mode:
         $this->doHighlight = !$this->getBackendUser()->getTSConfigVal('options.pageTree.disableTitleHighlight');
-        // Create template object:
-        $this->doc = GeneralUtility::makeInstance(DocumentTemplate::class);
-        $this->doc->bodyTagId = 'ext-backend-Modules-FileSystemNavigationFrame-index-php';
-        $this->doc->setModuleTemplate('EXT:backend/Resources/Private/Templates/alt_file_navframe.html');
-        $this->doc->showFlashMessages = false;
+
+        $this->moduleTemplate->setBodyTag('<body id="ext-backend-Modules-FileSystemNavigationFrame-index-php">');
+
         // Adding javascript code for drag&drop and the filetree as well as the click menu code
         $dragDropCode = '
 			Tree.ajaxID = "sc_alt_file_navframe_expandtoggle";
@@ -160,12 +163,17 @@ class FileSystemNavigationFrameController
 			Tree.highlightActiveItem("", top.fsMod.navFrameHighlightedID["file"]);
 			';
         }
+
         // Adding javascript for drag & drop activation and highlighting
-        $this->doc->getDragDropCode('folders', $dragDropCode);
-        $this->doc->getContextMenuCode();
+        $pageRenderer = $this->moduleTemplate->getPageRenderer();
+        $pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/ClickMenu');
+        $pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/LegacyTree', 'function() {
+            DragDrop.table = "folders";
+            ' . $dragDropCode . '
+        }');
 
         // Setting JavaScript for menu.
-        $this->doc->JScode .= $this->doc->wrapScriptTags(($this->currentSubScript ? 'top.currentSubScript=unescape("' . rawurlencode($this->currentSubScript) . '");' : '') . '
+        $inlineJs = ($this->currentSubScript ? 'top.currentSubScript=unescape("' . rawurlencode($this->currentSubScript) . '");' : '') . '
 		// Function, loading the list frame from navigation tree:
 		function jumpTo(id, linkObj, highlightID, bank) {
 			var theUrl = top.currentSubScript;
@@ -181,7 +189,12 @@ class FileSystemNavigationFrameController
 			if (linkObj) { linkObj.blur(); }
 			return false;
 		}
-		' . ($this->cMR ? ' jumpTo(top.fsMod.recentIds[\'file\'],\'\');' : ''));
+		' . ($this->cMR ? ' jumpTo(top.fsMod.recentIds[\'file\'],\'\');' : '');
+
+        $this->moduleTemplate->getPageRenderer()->addJsInlineCode(
+            'FileSystemNavigationFrame',
+            $inlineJs
+        );
     }
 
     /**
@@ -194,18 +207,12 @@ class FileSystemNavigationFrameController
         // Produce browse-tree:
         $tree = $this->foldertree->getBrowsableTree();
         // Outputting page tree:
-        $this->content .= $tree;
-        // Setting up the buttons and markers for docheader
-        $docHeaderButtons = $this->getButtons();
-        $markers = array(
-            'CONTENT' => $this->content
-        );
-        $subparts = array();
+        $this->moduleTemplate->setContent($tree);
+        // Setting up the buttons
+        $this->getButtons();
         // Build the <body> for the module
-        $this->content = $this->doc->startPage('TYPO3 Folder Tree');
-        $this->content .= $this->doc->moduleBody(array(), $docHeaderButtons, $markers, $subparts);
-        $this->content .= $this->doc->endPage();
-        $this->content = $this->doc->insertStylesAndJS($this->content);
+        $this->moduleTemplate->setTitle('TYPO3 Folder Tree');
+        $this->content = $this->moduleTemplate->renderContent();
     }
 
     /**
@@ -221,28 +228,33 @@ class FileSystemNavigationFrameController
     }
 
     /**
-     * Create the panel of buttons for submitting the form or otherwise perform operations.
-     *
-     * @return array All available buttons as an assoc. array
+     * Register docHeader buttons
      */
     protected function getButtons()
     {
-        $buttons = array(
-            'csh' => '',
-            'refresh' => ''
-        );
-        $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
+        /** @var ButtonBar $buttonBar */
+        $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
+
+        /** @var IconFactory $iconFactory */
+        $iconFactory = $this->moduleTemplate->getIconFactory();
+
         // Refresh
-        $buttons['refresh'] = '<a href="' . htmlspecialchars(GeneralUtility::getIndpEnv('REQUEST_URI')) . '">' . $iconFactory->getIcon('actions-refresh', Icon::SIZE_SMALL)->render() . '</a>';
+        $refreshButton = $buttonBar->makeLinkButton()
+            ->setHref(GeneralUtility::getIndpEnv('REQUEST_URI'))
+            ->setTitle($this->getLanguageService()->makeEntities(
+                $this->getLanguageService()->sL('LLL:EXT:lang/locallang_core.xlf:labels.reload', true)
+            ))->setIcon($iconFactory->getIcon('actions-refresh', Icon::SIZE_SMALL));
+        $buttonBar->addButton($refreshButton, ButtonBar::BUTTON_POSITION_RIGHT);
+
         // CSH
-        $buttons['csh'] = str_replace('typo3-csh-inline', 'typo3-csh-inline show-right', BackendUtility::cshItem('xMOD_csh_corebe', 'filetree'));
-        return $buttons;
+        $cshButton = $buttonBar->makeHelpButton()
+            ->setModuleName('xMOD_csh_corebe')
+            ->setFieldName('filetree');
+        $buttonBar->addButton($cshButton);
     }
 
     /**********************************
-     *
      * AJAX Calls
-     *
      **********************************/
     /**
      * Makes the AJAX call to expand or collapse the foldertree.
@@ -272,4 +284,14 @@ class FileSystemNavigationFrameController
     {
         return $GLOBALS['BE_USER'];
     }
+
+    /**
+     * Returns an instance of LanguageService
+     *
+     * @return \TYPO3\CMS\Lang\LanguageService
+     */
+    protected function getLanguageService()
+    {
+        return $GLOBALS['LANG'];
+    }
 }
diff --git a/typo3/sysext/backend/Resources/Private/Templates/alt_file_navframe.html b/typo3/sysext/backend/Resources/Private/Templates/alt_file_navframe.html
deleted file mode 100644
index a2bc3b6cc0cd..000000000000
--- a/typo3/sysext/backend/Resources/Private/Templates/alt_file_navframe.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!-- ###FULLDOC### begin -->
-<div class="typo3-fullDoc">
-	<div id="typo3-docheader">
-		<div class="typo3-docheader-functions">
-		</div>
-		<div class="typo3-docheader-buttons">
-			<div class="left">###BUTTONLIST_LEFT###</div>
-			<div class="right">###BUTTONLIST_RIGHT###</div>
-		</div>
-	</div>
-
-	<div id="typo3-docbody">
-		<div id="typo3-inner-docbody">
-			###CONTENT###
-		</div>
-	</div>
-</div>
-<!-- ###FULLDOC### end -->
-
-<!-- Grouping the icons on top -->
-
-<!-- ###BUTTON_GROUP_WRAP### -->
-	<div class="buttongroup">###BUTTONS###</div>
-<!-- ###BUTTON_GROUP_WRAP### -->
-
-<!-- ###BUTTON_GROUPS_LEFT### -->
-<!-- ###BUTTON_GROUP4### --> <!-- ###BUTTON_GROUP4### -->
-<!-- ###BUTTON_GROUPS_LEFT### -->
-
-<!-- ###BUTTON_GROUPS_RIGHT### -->
-<!-- ###BUTTON_GROUP1### -->###REFRESH######CSH###<!-- ###BUTTON_GROUP1### -->
-<!-- ###BUTTON_GROUPS_RIGHT### -->
diff --git a/typo3/sysext/t3skin/Resources/Public/Css/backend.css b/typo3/sysext/t3skin/Resources/Public/Css/backend.css
index 678fb0ddf811..99509d0a2485 100644
--- a/typo3/sysext/t3skin/Resources/Public/Css/backend.css
+++ b/typo3/sysext/t3skin/Resources/Public/Css/backend.css
@@ -11313,7 +11313,7 @@ div.t3-form-field-container:first-child .t3-form-field-label-flex {
 [id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .list-tree-control > .fa:before {
   background-color: #f5f5f5;
 }
-[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] [id=typo3-inner-docbody] {
+[id=ext-backend-Modules-FileSystemNavigationFrame-index-php] .module-body {
   padding-left: 10px;
   padding-right: 10px;
 }
@@ -11370,8 +11370,7 @@ div.t3-form-field-container:first-child .t3-form-field-label-flex {
 .treeline-icon-clear:after {
   display: none;
 }
-#typo3-pagetree #typo3-docheader div.buttonsright,
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docheader div.buttonsright {
+#typo3-pagetree #typo3-docheader div.buttonsright {
   margin-right: 3px;
 }
 body#typo3-alt-db-navframe-php div.c-notice {
@@ -11381,8 +11380,7 @@ body#typo3-alt-db-navframe-php div.c-notice {
   padding: 5px 5px 5px 5px;
   width: 95%;
 }
-body#typo3-pagetree,
-body#ext-backend-Modules-FileSystemNavigationFrame-index-php {
+body#typo3-pagetree {
   margin: 0;
   padding: 0;
 }
@@ -11473,11 +11471,8 @@ ul.tree div.treeLinkItem span.dragIcon {
 }
 body#typo3-pagetree,
 body#ext-backend-Modules-FileSystemNavigationFrame-index-php {
-  background: #ebebeb;
+  background: #f5f5f5;
 }
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docbody,
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docheader-row1,
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docheader-row2,
 .typo3-pagetree-indicatorBar-item,
 #typo3-pagetree-topPanelItems,
 #typo3-pagetree-topPanel .typo3-pagetree-topPanel-item,
@@ -11487,7 +11482,7 @@ body#ext-backend-Modules-FileSystemNavigationFrame-index-php {
   background-position: right;
   background-repeat: repeat-y;
 }
-#ext-backend-Modules-FileSystemNavigationFrame-index-php #typo3-docbody,
+#ext-backend-Modules-FileSystemNavigationFrame-index-php .module-body,
 #typo3-pagetree-treeContainer {
   background-color: #f5f5f5;
 }
-- 
GitLab