2 /***************************************************************
5 * (c) 1999-2011 Kasper Skårhøj (kasperYYYY@typo3.com)
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.
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.
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.
25 * This copyright notice MUST APPEAR in all copies of the script!
26 ***************************************************************/
28 * Wizard to display the RTE in "full screen" mode
30 * Revised for TYPO3 3.6 November/2003 by Kasper Skårhøj
33 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
40 require ('template.php');
41 $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_wizards.xml');
43 t3lib_BEfunc
::lockRecords();
56 * Script Class for rendering the full screen RTE display
58 * @author Kasper Skårhøj <kasperYYYY@typo3.com>
66 * document template object
71 var $content; // Content accumulation for the module.
73 // Internal, static: GPvars
74 var $P; // Wizard parameters, coming from TCEforms linking to the wizard.
75 var $popView; // If set, launch a new window with the current records pid.
76 var $R_URI; // Set to the URL of this script including variables which is needed to re-display the form. See main()
82 * Initialization of the class
88 $this->P
= t3lib_div
::_GP('P');
89 $this->popView
= t3lib_div
::_GP('popView');
90 $this->R_URI
= t3lib_div
::linkThisScript(array('popView' => ''));
93 $this->MCONF
['name']='xMOD_wizard_rte.php';
95 // Starting the document template object:
96 $this->doc
= t3lib_div
::makeInstance('template');
97 $this->doc
->backPath
= $GLOBALS['BACK_PATH'];
98 $this->doc
->setModuleTemplate('templates/wizard_rte.html');
99 $this->doc
->divClass
= ''; // Need to NOT have the page wrapped in DIV since if we do that we destroy the feature that the RTE spans the whole height of the page!!!
100 $this->doc
->form
='<form action="tce_db.php" method="post" enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'" name="editform" onsubmit="return TBE_EDITOR.checkSubmit(1);">';
104 * Main function, rendering the document with the iframe with the RTE in.
109 // translate id to the workspace version:
110 if ($versionRec = t3lib_BEfunc
::getWorkspaceVersionOfRecord($GLOBALS['BE_USER']->workspace
, $this->P
['table'], $this->P
['uid'], 'uid')) {
111 $this->P
['uid'] = $versionRec['uid'];
114 // If all parameters are available:
115 if ($this->P
['table'] && $this->P
['field'] && $this->P
['uid'] && $this->checkEditAccess($this->P
['table'],$this->P
['uid'])) {
117 // Getting the raw record (we need only the pid-value from here...)
118 $rawRec = t3lib_BEfunc
::getRecord($this->P
['table'],$this->P
['uid']);
119 t3lib_BEfunc
::fixVersioningPid($this->P
['table'], $rawRec);
121 // Setting JavaScript, including the pid value for viewing:
122 $this->doc
->JScode
= $this->doc
->wrapScriptTags('
123 function jumpToUrl(URL,formEl) { //
124 if (document.editform) {
125 if (!TBE_EDITOR.isFormChanged()) {
126 window.location.href = URL;
128 if (formEl.type=="checkbox") formEl.checked = formEl.checked ? 0 : 1;
130 } else window.location.href = URL;
132 '.($this->popView ? t3lib_BEfunc
::viewOnClick($rawRec['pid'],'',t3lib_BEfunc
::BEgetRootLine($rawRec['pid'])) : '').'
135 // Initialize TCeforms - for rendering the field:
136 $tceforms = t3lib_div
::makeInstance('t3lib_TCEforms');
137 $tceforms->initDefaultBEMode(); // Init...
138 $tceforms->disableWizards
= 1; // SPECIAL: Disables all wizards - we are NOT going to need them.
139 $tceforms->colorScheme
[0]=$this->doc
->bgColor
; // SPECIAL: Setting background color of the RTE to ordinary background
141 // Initialize style for RTE object:
142 $RTEobj = t3lib_BEfunc
::RTEgetObj(); // Getting reference to the RTE object used to render the field!
143 if ($RTEobj->ID
== 'rte') {
144 $RTEobj->RTEdivStyle
= 'position:relative; left:0px; top:0px; height:100%; width:100%; border:solid 0px;'; // SPECIAL: Setting style for the RTE <DIV> layer containing the IFRAME
147 // Fetching content of record:
148 $trData = t3lib_div
::makeInstance('t3lib_transferData');
149 $trData->lockRecords
=1;
150 $trData->fetchRecord($this->P
['table'],$this->P
['uid'],'');
152 // Getting the processed record content out:
153 $rec = reset($trData->regTableItems_data
);
154 $rec['uid'] = $this->P
['uid'];
155 $rec['pid'] = $rawRec['pid'];
157 // TSconfig, setting width:
158 $fieldTSConfig = $tceforms->setTSconfig($this->P
['table'],$rec,$this->P
['field']);
159 if (strcmp($fieldTSConfig['RTEfullScreenWidth'],'')) {
160 $width=$fieldTSConfig['RTEfullScreenWidth'];
165 // Get the form field and wrap it in the table with the buttons:
166 $formContent = $tceforms->getSoloField($this->P
['table'],$rec,$this->P
['field']);
173 <table border="0" cellpadding="0" cellspacing="0" width="'.$width.'" id="typo3-rtewizard">
175 <td width="'.$width.'" colspan="2" id="c-formContent">'.$formContent.'</td>
180 // Adding hidden fields:
181 $formContent.= '<input type="hidden" name="redirect" value="'.htmlspecialchars($this->R_URI
).'" />
182 <input type="hidden" name="_serialNumber" value="'.md5(microtime()).'" />' .
183 t3lib_TCEforms
::getHiddenTokenField('tceAction');
186 // Finally, add the whole setup:
188 $tceforms->printNeededJSFunctions_top().
190 $tceforms->printNeededJSFunctions();
193 $this->content
.=$this->doc
->section($GLOBALS['LANG']->getLL('forms_title'),'<span class="typo3-red">'.$GLOBALS['LANG']->getLL('table_noData',1).'</span>',0,1);
196 // Setting up the buttons and markers for docheader
197 $docHeaderButtons = $this->getButtons();
198 $markers['CONTENT'] = $this->content
;
200 // Build the <body> for the module
201 $this->content
= $this->doc
->startPage('');
202 $this->content
.= $this->doc
->moduleBody($this->pageinfo
, $docHeaderButtons, $markers);
203 $this->content
.= $this->doc
->endPage();
204 $this->content
= $this->doc
->insertStylesAndJS($this->content
);
209 * Outputting the accumulated content to screen
213 function printContent() {
214 $this->content
.= $this->doc
->endPage();
215 $this->content
= $this->doc
->insertStylesAndJS($this->content
);
220 * Create the panel of buttons for submitting the form or otherwise perform operations.
222 * @return array all available buttons as an assoc. array
224 protected function getButtons() {
234 if ($this->P
['table'] && $this->P
['field'] && $this->P
['uid'] && $this->checkEditAccess($this->P
['table'],$this->P
['uid'])) {
235 $closeUrl = t3lib_div
::sanitizeLocalUrl($this->P
['returnUrl']);
237 // Getting settings for the undo button:
239 $undoRes = $GLOBALS['TYPO3_DB']->exec_SELECTquery('tstamp', 'sys_history', 'tablename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($this->P
['table'], 'sys_history') . ' AND recuid=' . intval($this->P
['uid']), '', 'tstamp DESC', '1');
240 if ($undoButtonR = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($undoRes)) {
245 $buttons['close'] = '<a href="#" onclick="' . htmlspecialchars('jumpToUrl(unescape(\'' . rawurlencode($closeUrl) . '\')); return false;') . '">' .
246 '<img' . t3lib_iconWorks
::skinImg($this->doc
->backPath
, 'gfx/closedok.gif') . ' class="c-inputButton" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:rm.closeDoc', 1) . '" alt="" />' .
250 $buttons['save'] = '<a href="#" onclick="TBE_EDITOR.checkAndDoSubmit(1); return false;">' .
251 '<img' . t3lib_iconWorks
::skinImg($this->doc
->backPath
, 'gfx/savedok.gif') . ' class="c-inputButton" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:rm.saveDoc', 1) . '" alt="" />' .
255 if (t3lib_extMgm
::isLoaded('cms')) {
256 $buttons['save_view'] = '<a href="#" onclick="' . htmlspecialchars('document.editform.redirect.value+=\'&popView=1\'; TBE_EDITOR.checkAndDoSubmit(1); return false;') . '">' .
257 '<img' . t3lib_iconWorks
::skinImg($this->doc
->backPath
, 'gfx/savedokshow.gif') . ' class="c-inputButton" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:rm.saveDocShow', 1) . '" alt="" />' .
262 $buttons['save_close'] = '<input type="image" class="c-inputButton" onclick="' . htmlspecialchars('document.editform.redirect.value=\'' . $closeUrl . '\'; TBE_EDITOR.checkAndDoSubmit(1); return false;') . '" name="_saveandclosedok"' . t3lib_iconWorks
::skinImg($this->doc
->backPath
, 'gfx/saveandclosedok.gif', '') . ' title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:rm.saveCloseDoc', 1) . '" />';
266 $buttons['undo'] = '<a href="#" onclick="' . htmlspecialchars('window.location.href=\'show_rechis.php?element=' . rawurlencode($this->P
['table'] . ':' . $this->P
['uid']) . '&revert=' . rawurlencode('field:' . $this->P
['field']) . '&sumUp=-1&returnUrl=' . rawurlencode($this->R_URI
) . '\'; return false;') . '">' .
267 '<img' . t3lib_iconWorks
::skinImg($this->doc
->backPath
, 'gfx/undo.gif') . ' class="c-inputButton" title="' . htmlspecialchars(sprintf($GLOBALS['LANG']->getLL('rte_undoLastChange'), t3lib_BEfunc
::calcAge($GLOBALS['EXEC_TIME'] - $undoButtonR['tstamp'], $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')))) . '" alt="" />' .
272 if ($GLOBALS['BE_USER']->mayMakeShortcut()) {
273 $buttons['shortcut'] = $this->doc
->makeShortcutIcon('P', '', $this->MCONF
['name'], 1);
281 * Checks access for element
283 * @param string Table name
284 * @param integer Record uid
287 function checkEditAccess($table,$uid) {
288 $calcPRec = t3lib_BEfunc
::getRecord($table,$uid);
289 t3lib_BEfunc
::fixVersioningPid($table,$calcPRec);
290 if (is_array($calcPRec)) {
291 if ($table=='pages') { // If pages:
292 $CALC_PERMS = $GLOBALS['BE_USER']->calcPerms($calcPRec);
293 $hasAccess = $CALC_PERMS&2 ?
TRUE : FALSE;
295 // Fetching pid-record first.
296 $CALC_PERMS = $GLOBALS['BE_USER']->calcPerms(t3lib_BEfunc
::getRecord('pages',$calcPRec['pid']));
297 $hasAccess = $CALC_PERMS&16 ?
TRUE : FALSE;
300 // Check internals regarding access:
302 $hasAccess = $GLOBALS['BE_USER']->recordEditAccessInternals($table, $calcPRec);
304 } else $hasAccess = FALSE;
311 $SOBE = t3lib_div
::makeInstance('SC_wizard_rte');
314 $SOBE->printContent();