9422d7b54a5145afc2ced74e1cb359eca47608e5
[Packages/TYPO3.CMS.git] / typo3 / sysext / recordlist / Classes / Controller / ElementBrowserFramesetController.php
1 <?php
2 namespace TYPO3\CMS\Recordlist\Controller;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use Psr\Http\Message\ResponseInterface;
18 use Psr\Http\Message\ServerRequestInterface;
19 use TYPO3\CMS\Backend\Template\DocumentTemplate;
20 use TYPO3\CMS\Backend\Utility\BackendUtility;
21 use TYPO3\CMS\Core\Localization\LanguageService;
22 use TYPO3\CMS\Core\Page\PageRenderer;
23 use TYPO3\CMS\Core\Utility\GeneralUtility;
24
25 /**
26 * Script Class, putting the frameset together.
27 */
28 class ElementBrowserFramesetController
29 {
30 /**
31 * Internal, dynamic
32 *
33 * @var string
34 */
35 public $content;
36
37 /**
38 * @var PageRenderer
39 */
40 protected $pageRenderer = null;
41
42 /**
43 * Constructor
44 */
45 public function __construct()
46 {
47 $GLOBALS['SOBE'] = $this;
48 }
49
50 /**
51 * Injects the request object for the current request or subrequest
52 * As this controller goes only through the main() method, it is rather simple for now
53 *
54 * @param ServerRequestInterface $request the current request
55 * @param ResponseInterface $response the prepared response
56 * @return ResponseInterface the response with the content
57 */
58 public function mainAction(ServerRequestInterface $request, ResponseInterface $response)
59 {
60 $this->main();
61
62 $response->getBody()->write($this->content);
63 return $response;
64 }
65
66 /**
67 * Main function.
68 * Creates the header code in XHTML, the JavaScript, then the frameset for the two frames.
69 */
70 public function main()
71 {
72 // Setting GPvars:
73 $mode = GeneralUtility::_GP('mode');
74 $bparams = GeneralUtility::_GP('bparams');
75 $moduleUrl = BackendUtility::getModuleUrl('wizard_element_browser') . '&mode=';
76 $documentTemplate = $this->getDocumentTemplate();
77 $documentTemplate->JScode = GeneralUtility::wrapJS('
78 function closing() { //
79 close();
80 }
81 function setParams(mode,params) { //
82 parent.content.location.href = ' . GeneralUtility::quoteJSvalue($moduleUrl) . '+mode+"&bparams="+params;
83 }
84 if (!window.opener) {
85 alert("ERROR: Sorry, no link to main window... Closing");
86 close();
87 }
88 ');
89
90 // build the header part
91 $documentTemplate->startPage($this->getLanguageService()->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:TYPO3_Element_Browser'));
92
93 // URL for the inner main frame:
94 $url = $moduleUrl . rawurlencode($mode) . '&bparams=' . rawurlencode($bparams);
95
96 // Create the frameset for the window
97 // Formerly there were a ' onunload="closing();"' in the <frameset> tag - but it failed on Safari browser on Mac unless the handler was "onUnload"
98 $this->content = $this->getPageRenderer()->render(PageRenderer::PART_HEADER) .
99 '<frameset rows="*,1" framespacing="0" frameborder="0" border="0">
100 <frame name="content" src="' . htmlspecialchars($url) . '" marginwidth="0" marginheight="0" frameborder="0" scrolling="auto" noresize="noresize" />
101 <frame name="menu" src="' . htmlspecialchars(BackendUtility::getModuleUrl('dummy')) . '" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" noresize="noresize" />
102 </frameset>
103 </html>
104 ';
105 }
106
107 /**
108 * @return DocumentTemplate
109 */
110 protected function getDocumentTemplate()
111 {
112 return $GLOBALS['TBE_TEMPLATE'];
113 }
114
115 /**
116 * @return LanguageService
117 */
118 protected function getLanguageService()
119 {
120 return $GLOBALS['LANG'];
121 }
122
123 /**
124 * @return PageRenderer
125 */
126 protected function getPageRenderer()
127 {
128 if ($this->pageRenderer === null) {
129 $this->pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
130 }
131
132 return $this->pageRenderer;
133 }
134 }