e34d84b057a657d1db16917dcafdcce46aa70920
[Packages/TYPO3.CMS.git] / typo3 / sysext / workspaces / Classes / Controller / PreviewController.php
1 <?php
2 /***************************************************************
3 * Copyright notice
4 *
5 * (c) 2010-2011 Workspaces Team (http://forge.typo3.org/projects/show/typo3v4-workspaces)
6 * All rights reserved
7 *
8 * This script is part of the TYPO3 project. The TYPO3 project is
9 * free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * The GNU General Public License can be found at
15 * http://www.gnu.org/copyleft/gpl.html.
16 * A copy is found in the textfile GPL.txt and important notices to the license
17 * from the author is found in LICENSE.txt distributed with these scripts.
18 *
19 *
20 * This script is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * This copyright notice MUST APPEAR in all copies of the script!
26 ***************************************************************/
27
28 /**
29 * Implements the preview controller of the workspace module.
30 *
31 * @author Workspaces Team (http://forge.typo3.org/projects/show/typo3v4-workspaces)
32 * @package Workspaces
33 * @subpackage Controller
34 */
35 class Tx_Workspaces_Controller_PreviewController extends Tx_Workspaces_Controller_AbstractController {
36
37 /**
38 * Initializes the controller before invoking an action method.
39 *
40 * @return void
41 */
42 protected function initializeAction() {
43 parent::initializeAction();
44
45 $resourcePath = t3lib_extMgm::extRelPath('workspaces') . 'Resources/Public/';
46 $GLOBALS['TBE_STYLES']['extJS']['theme'] = $resourcePath . 'StyleSheet/preview.css';
47 $this->pageRenderer->loadExtJS();
48 $this->pageRenderer->enableExtJSQuickTips();
49 $this->pageRenderer->enableExtJsDebug();
50
51 // Load JavaScript:
52 $this->pageRenderer->addExtDirectCode(array(
53 'TYPO3.Workspaces'
54 ));
55
56 $this->pageRenderer->addJsFile($this->backPath . '../t3lib/js/extjs/ux/flashmessages.js');
57 $this->pageRenderer->addJsFile($this->backPath . 'js/extjs/iframepanel.js');
58
59 $this->pageRenderer->addJsFile($resourcePath . 'JavaScript/Ext.ux.plugins.TabStripContainer.js');
60 $this->pageRenderer->addJsFile($resourcePath . 'JavaScript/preview.js');
61
62 // todo this part should be done with inlineLocallanglabels
63 $this->pageRenderer->addJsInlineCode('workspace-inline-code', $this->generateJavascript());
64 }
65
66 /**
67 * Basically makes sure that the workspace preview is rendered.
68 * The preview itself consists of three frames, so there are
69 * only the frames-urls we've to generate here
70 *
71 * @return void
72 */
73 public function indexAction() {
74 // @todo language doesn't always come throught the L parameter
75 // @todo Evaluate how the intval() call can be used with Extbase validators/filters
76 $language = intval(t3lib_div::_GP('L'));
77
78 $controller = t3lib_div::makeInstance('Tx_Workspaces_Controller_ReviewController', TRUE);
79 /** @var $uriBuilder Tx_Extbase_MVC_Web_Routing_UriBuilder */
80 $uriBuilder = $this->objectManager->create('Tx_Extbase_MVC_Web_Routing_UriBuilder');
81
82 $wsSettingsPath = t3lib_div::getIndpEnv('TYPO3_SITE_URL') . 'typo3/';
83 $wsSettingsUri = $uriBuilder->uriFor('singleIndex', array(), 'Tx_Workspaces_Controller_ReviewController', 'workspaces', 'web_workspacesworkspaces');
84 $wsSettingsParams = '&tx_workspaces_web_workspacesworkspaces[controller]=Review';
85 $wsSettingsUrl = $wsSettingsPath . $wsSettingsUri . $wsSettingsParams;
86
87 $viewDomain = t3lib_BEfunc::getViewDomain($this->pageId);
88 $wsBaseUrl = $viewDomain . '/index.php?id=' . $this->pageId . '&L=' . $language;
89
90 // @todo - handle new pages here
91 // branchpoints are not handled anymore because this feature is not supposed anymore
92 if (tx_Workspaces_Service_Workspaces::isNewPage($this->pageId)) {
93 $wsNewPageUri = $uriBuilder->uriFor('newPage', array(), 'Tx_Workspaces_Controller_PreviewController', 'workspaces', 'web_workspacesworkspaces');
94 $wsNewPageParams = '&tx_workspaces_web_workspacesworkspaces[controller]=Preview';
95 $this->view->assign('liveUrl', $wsSettingsPath . $wsNewPageUri . $wsNewPageParams);
96 } else {
97 $this->view->assign('liveUrl', $wsBaseUrl . '&ADMCMD_noBeUser=1');
98 }
99 $this->view->assign('wsUrl', $wsBaseUrl . '&ADMCMD_view=1&ADMCMD_editIcons=1&ADMCMD_previewWS=' . $GLOBALS['BE_USER']->workspace);
100 $this->view->assign('wsSettingsUrl', $wsSettingsUrl);
101 $this->view->assign('backendDomain', t3lib_div::getIndpEnv('TYPO3_HOST_ONLY'));
102 $GLOBALS['BE_USER']->setAndSaveSessionData('workspaces.backend_domain', t3lib_div::getIndpEnv('TYPO3_HOST_ONLY'));
103 $this->pageRenderer->addJsInlineCode("workspaces.preview.lll" , "TYPO3.LLL.Workspaces = {
104 visualPreview: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.visualPreview', true) . "',
105 listView: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.listView', true) . "',
106 livePreview: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.livePreview', true) . "',
107 livePreviewDetail: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.livePreviewDetail', true) . "',
108 workspacePreview: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.workspacePreview', true) . "',
109 workspacePreviewDetail: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.workspacePreviewDetail', true) . "',
110 modeSlider: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.modeSlider', true) . "',
111 modeVbox: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.modeVbox', true) . "',
112 modeHbox: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.modeHbox', true) . "'
113 };\n");
114 }
115
116 /**
117 * @return void
118 */
119 public function newPageAction() {
120 $message = t3lib_div::makeInstance(
121 't3lib_FlashMessage',
122 $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:info.newpage.detail'),
123 $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:info.newpage'),
124 t3lib_FlashMessage::INFO
125 );
126 t3lib_FlashMessageQueue::addMessage($message);
127 }
128
129 /**
130 * Generates the JavaScript code for the backend,
131 * and since we're loading a backend module outside of the actual backend
132 * this copies parts of the backend.php
133 *
134 * @return void
135 */
136 protected function generateJavascript() {
137 $pathTYPO3 = t3lib_div::dirname(t3lib_div::getIndpEnv('SCRIPT_NAME')) . '/';
138
139 // If another page module was specified, replace the default Page module with the new one
140 $newPageModule = trim($GLOBALS['BE_USER']->getTSConfigVal('options.overridePageModule'));
141 $pageModule = t3lib_BEfunc::isModuleSetInTBE_MODULES($newPageModule) ? $newPageModule : 'web_layout';
142 if (!$GLOBALS['BE_USER']->check('modules', $pageModule)) {
143 $pageModule = '';
144 }
145
146 $menuFrameName = 'menu';
147 if ($GLOBALS['BE_USER']->uc['noMenuMode'] === 'icons') {
148 $menuFrameName = 'topmenuFrame';
149 }
150
151 // determine security level from conf vars and default to super challenged
152 if ($GLOBALS['TYPO3_CONF_VARS']['BE']['loginSecurityLevel']) {
153 $loginSecurityLevel = $GLOBALS['TYPO3_CONF_VARS']['BE']['loginSecurityLevel'];
154 } else {
155 $loginSecurityLevel = 'superchallenged';
156 }
157
158 $t3Configuration = array(
159 'siteUrl' => t3lib_div::getIndpEnv('TYPO3_SITE_URL'),
160 'PATH_typo3' => $pathTYPO3,
161 'PATH_typo3_enc' => rawurlencode($pathTYPO3),
162 'username' => htmlspecialchars($GLOBALS['BE_USER']->user['username']),
163 'uniqueID' => t3lib_div::shortMD5(uniqid('')),
164 'securityLevel' => $this->loginSecurityLevel,
165 'TYPO3_mainDir' => TYPO3_mainDir,
166 'pageModule' => $pageModule,
167 'condensedMode' => $GLOBALS['BE_USER']->uc['condensedMode'] ? 1 : 0 ,
168 'inWorkspace' => $GLOBALS['BE_USER']->workspace !== 0 ? 1 : 0,
169 'workspaceFrontendPreviewEnabled' => $GLOBALS['BE_USER']->user['workspace_preview'] ? 1 : 0,
170 'veriCode' => $GLOBALS['BE_USER']->veriCode(),
171 'denyFileTypes' => PHP_EXTENSIONS_DEFAULT,
172 'moduleMenuWidth' => $this->menuWidth - 1,
173 'topBarHeight' => (isset($GLOBALS['TBE_STYLES']['dims']['topFrameH']) ? intval($GLOBALS['TBE_STYLES']['dims']['topFrameH']) : 30),
174 'showRefreshLoginPopup' => isset($GLOBALS['TYPO3_CONF_VARS']['BE']['showRefreshLoginPopup']) ? intval($GLOBALS['TYPO3_CONF_VARS']['BE']['showRefreshLoginPopup']) : FALSE,
175 'listModulePath' => t3lib_extMgm::isLoaded('recordlist') ? t3lib_extMgm::extRelPath('recordlist') . 'mod1/' : '',
176 'debugInWindow' => $GLOBALS['BE_USER']->uc['debugInWindow'] ? 1 : 0,
177 'ContextHelpWindows' => array(
178 'width' => 600,
179 'height' => 400
180 )
181 );
182
183 $t3LLLcore = array(
184 'waitTitle' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_logging_in') ,
185 'refresh_login_failed' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_failed'),
186 'refresh_login_failed_message' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_failed_message'),
187 'refresh_login_title' => sprintf($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_title'), htmlspecialchars($GLOBALS['BE_USER']->user['username'])),
188 'login_expired' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.login_expired'),
189 'refresh_login_username' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_username'),
190 'refresh_login_password' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_password'),
191 'refresh_login_emptyPassword' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_emptyPassword'),
192 'refresh_login_button' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_button'),
193 'refresh_logout_button' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_logout_button'),
194 'please_wait' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.please_wait'),
195 'loadingIndicator' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:loadingIndicator'),
196 'be_locked' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.be_locked'),
197 'refresh_login_countdown_singular' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_countdown_singular'),
198 'refresh_login_countdown' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_countdown'),
199 'login_about_to_expire' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.login_about_to_expire'),
200 'login_about_to_expire_title' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.login_about_to_expire_title'),
201 'refresh_login_refresh_button' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_login_refresh_button'),
202 'refresh_direct_logout_button' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:mess.refresh_direct_logout_button'),
203 'tabs_closeAll' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:tabs.closeAll'),
204 'tabs_closeOther' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:tabs.closeOther'),
205 'tabs_close' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:tabs.close'),
206 'tabs_openInBrowserWindow' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:tabs.openInBrowserWindow'),
207 'donateWindow_title' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.title'),
208 'donateWindow_message' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.message'),
209 'donateWindow_button_donate' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.button_donate'),
210 'donateWindow_button_disable' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.button_disable'),
211 'donateWindow_button_postpone' => $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xml:donateWindow.button_postpone'),
212 );
213
214 // Convert labels/settings back to UTF-8 since json_encode() only works with UTF-8:
215 if ($GLOBALS['LANG']->charSet !== 'utf-8') {
216 $t3Configuration['username'] = $GLOBALS['LANG']->csConvObj->conv($t3Configuration['username'], $GLOBALS['LANG']->charSet, 'utf-8');
217 $GLOBALS['LANG']->csConvObj->convArray($t3LLLcore, $GLOBALS['LANG']->charSet, 'utf-8');
218 }
219
220 $js .= '
221 TYPO3.configuration = ' . json_encode($t3Configuration) . ';
222 TYPO3.LLL = {
223 core : ' . json_encode($t3LLLcore) . '
224 };
225
226 /**
227 * TypoSetup object.
228 */
229 function typoSetup() { //
230 this.PATH_typo3 = TYPO3.configuration.PATH_typo3;
231 this.PATH_typo3_enc = TYPO3.configuration.PATH_typo3_enc;
232 this.username = TYPO3.configuration.username;
233 this.uniqueID = TYPO3.configuration.uniqueID;
234 this.navFrameWidth = 0;
235 this.securityLevel = TYPO3.configuration.securityLevel;
236 this.veriCode = TYPO3.configuration.veriCode;
237 this.denyFileTypes = TYPO3.configuration.denyFileTypes;
238 }
239 var TS = new typoSetup();
240 //backwards compatibility
241 ';
242 return $js;
243 }
244 }
245
246
247 if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/PreviewController.php'])) {
248 include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/PreviewController.php']);
249 }
250 ?>