2 /***************************************************************
5 * (c) 1999-2004 Kasper Skaarhoj (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
31 * Revised for TYPO3 3.6 November/2003 by Kasper Skaarhoj
34 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
37 * [CLASS/FUNCTION INDEX of SCRIPT]
41 * 81: class SC_wizard_rte
43 * 123: function main()
44 * 279: function printContent()
45 * 290: function checkEditAccess($table,$uid)
48 * (This index is automatically created/updated by the extension "extdeveval")
56 require ('template.php');
57 $LANG->includeLLFile('EXT:lang/locallang_wizards.xml');
58 require_once (PATH_t3lib
.'class.t3lib_tceforms.php');
59 require_once (PATH_t3lib
.'class.t3lib_loaddbgroup.php');
60 require_once (PATH_t3lib
.'class.t3lib_transferdata.php');
62 t3lib_BEfunc
::lockRecords();
75 * Script Class for rendering the full screen RTE display
77 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
84 var $doc; // Document template object
85 var $content; // Content accumulation for the module.
87 // Internal, static: GPvars
88 var $P; // Wizard parameters, coming from TCEforms linking to the wizard.
89 var $popView; // If set, launch a new window with the current records pid.
95 * Initialization of the class
103 $this->P
= t3lib_div
::_GP('P');
104 $this->popView
= t3lib_div
::_GP('popView');
107 $this->MCONF
['name']='xMOD_wizard_rte.php';
109 // Starting the document template object:
110 $this->doc
= t3lib_div
::makeInstance('mediumDoc');
111 $this->doc
->docType
= 'xhtml_trans';
112 $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!!!
113 $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);">';
114 $this->doc
->backPath
= $BACK_PATH;
119 * Main function, rendering the document with the iframe with the RTE in.
124 global $BE_USER,$LANG;
126 // If all parameters are available:
127 if ($this->P
['table'] && $this->P
['field'] && $this->P
['uid'] && $this->checkEditAccess($this->P
['table'],$this->P
['uid'])) {
129 // Getting the raw record (we need only the pid-value from here...)
130 $rawRec = t3lib_BEfunc
::getRecord($this->P
['table'],$this->P
['uid']);
132 // Setting JavaScript, including the pid value for viewing:
133 $this->doc
->JScode
= $this->doc
->wrapScriptTags('
134 function jumpToUrl(URL,formEl) { //
135 if (document.editform) {
136 if (!TBE_EDITOR_isFormChanged()) {
137 document.location = URL;
139 if (formEl.type=="checkbox") formEl.checked = formEl.checked ? 0 : 1;
141 } else document.location = URL;
143 '.($this->popView ? t3lib_BEfunc
::viewOnClick($rawRec['pid'],'',t3lib_BEfunc
::BEgetRootLine($rawRec['pid'])) : '').'
146 // Create page HTML header:
147 $this->content
.=$this->doc
->startPage('');
150 // Initialize TCeforms - for rendering the field:
151 $tceforms = t3lib_div
::makeInstance('t3lib_TCEforms');
152 $tceforms->initDefaultBEMode(); // Init...
153 $tceforms->disableWizards
= 1; // SPECIAL: Disables all wizards - we are NOT going to need them.
154 $tceforms->colorScheme
[0]=$this->doc
->bgColor
; // SPECIAL: Setting background color of the RTE to ordinary background
156 // Initialize style for RTE object:
157 $RTEobj = &t3lib_BEfunc
::RTEgetObj(); // Getting reference to the RTE object used to render the field!
158 if ($RTEobj->ID
== 'rte') {
159 $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
160 # $RTEobj->RTEdivStyle = 'position:relative; left:0px; top:0px; height:600px; width:100%; border:solid 0px;'; // SPECIAL: Setting style for the RTE <DIV> layer containing the IFRAME
163 // Fetching content of record:
164 $trData = t3lib_div
::makeInstance('t3lib_transferData');
165 $trData->lockRecords
=1;
166 $trData->fetchRecord($this->P
['table'],$this->P
['uid'],'');
168 // Getting the processed record content out:
169 reset($trData->regTableItems_data
);
170 $rec = current($trData->regTableItems_data
);
171 $rec['uid'] = $this->P
['uid'];
172 $rec['pid'] = $rawRec['pid'];
174 // Making the toolbar:
175 $closeUrl = $this->P
['returnUrl'];
176 $R_URI=t3lib_div
::linkThisScript(array('popView'=>''));
178 // Getting settings for the undo button:
180 $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');
181 if ($undoButtonR = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($undoRes)) {
186 if ($BE_USER->mayMakeShortcut()) {
187 $sCut = $this->doc
->makeShortcutIcon('P','',$this->MCONF
['name'],1);
193 // Make Toolbar of buttons:
194 $toolBarButtons=array();
198 '<a href="#" onclick="TBE_EDITOR_checkAndDoSubmit(1); return false;">'.
199 '<img'.t3lib_iconWorks
::skinImg($this->doc
->backPath
,'gfx/savedok.gif','width="21" height="16"').' class="c-inputButton" title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveDoc',1).'" alt="" />'.
203 if (t3lib_extMgm
::isLoaded('cms')) {
205 '<a href="#" onclick="'.htmlspecialchars('document.editform.redirect.value+=\'&popView=1\'; TBE_EDITOR_checkAndDoSubmit(1); return false;').'">'.
206 '<img'.t3lib_iconWorks
::skinImg($this->doc
->backPath
,'gfx/savedokshow.gif','width="21" height="16"').' class="c-inputButton" title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveDocShow',1).'" alt="" />'.
211 '<a href="#" onclick="'.htmlspecialchars('jumpToUrl(unescape(\''.rawurlencode($closeUrl).'\')); return false;').'">'.
212 '<img'.t3lib_iconWorks
::skinImg($this->doc
->backPath
,'gfx/closedok.gif','width="21" height="16"').' class="c-inputButton" title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.closeDoc',1).'" alt="" />'.
218 '<a href="#" onclick="'.htmlspecialchars('document.location=\'show_rechis.php?element='.rawurlencode($this->P
['table'].':'.$this->P
['uid']).'&revert='.rawurlencode('field:'.$this->P
['field']).'&sumUp=-1&returnUrl='.rawurlencode($R_URI).'\'; return false;').'">'.
219 '<img'.t3lib_iconWorks
::skinImg($this->doc
->backPath
,'gfx/undo.gif','width="21" height="16"').' class="c-inputButton" title="'.htmlspecialchars(sprintf($LANG->getLL('rte_undoLastChange'),t3lib_BEfunc
::calcAge(time()-$undoButtonR['tstamp'],$LANG->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')))).'" alt="" />'.
223 $panel = '<span class="c-saveButtons">'.implode('',$toolBarButtons).'</span>';
226 // TSconfig, setting width:
227 $fieldTSConfig = $tceforms->setTSconfig($this->P
['table'],$rec,$this->P
['field']);
228 if (strcmp($fieldTSConfig['RTEfullScreenWidth'],'')) {
229 $width=$fieldTSConfig['RTEfullScreenWidth'];
234 // Get the form field and wrap it in the table with the buttons:
235 $formContent = $tceforms->getSoloField($this->P
['table'],$rec,$this->P
['field']);
242 <table border="0" cellpadding="0" cellspacing="0" width="'.$width.'" id="typo3-rtewizard">
245 <td align="right">'.$sCut.'</td>
249 <td width="'.$width.'" colspan="2" id="c-formContent">'.$formContent.'</td>
254 // Adding hidden fields:
255 $formContent.= '<input type="hidden" name="redirect" value="'.htmlspecialchars($R_URI).'" />
256 <input type="hidden" name="_serialNumber" value="'.md5(microtime()).'" />';
259 // Finally, add the whole setup:
261 $tceforms->printNeededJSFunctions_top().
263 $tceforms->printNeededJSFunctions();
266 $this->content
.=$this->doc
->startPage('');
267 $this->content
.=$this->doc
->section($LANG->getLL('forms_title'),'<span class="typo3-red">'.$LANG->getLL('table_noData',1).'</span>',0,1);
271 $this->content
.=$this->doc
->endPage();
275 * Outputting the accumulated content to screen
279 function printContent() {
284 * Checks access for element
286 * @param string Table name
287 * @param integer Record uid
290 function checkEditAccess($table,$uid) {
293 $calcPRec = t3lib_BEfunc
::getRecord($table,$uid);
294 t3lib_BEfunc
::fixVersioningPid($table,$uid);
295 if (is_array($calcPRec)) {
296 if ($table=='pages') { // If pages:
297 $CALC_PERMS = $BE_USER->calcPerms($calcPRec);
298 $hasAccess = $CALC_PERMS&2 ?
TRUE : FALSE;
300 $CALC_PERMS = $BE_USER->calcPerms(t3lib_BEfunc
::getRecord('pages',$calcPRec['pid'])); // Fetching pid-record first.
301 $hasAccess = $CALC_PERMS&16 ?
TRUE : FALSE;
304 // Check internals regarding access:
306 $hasAccess = $BE_USER->recordEditAccessInternals($table, $calcPRec);
308 } else $hasAccess = FALSE;
314 // Include extension?
315 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE
]['XCLASS']['typo3/wizard_rte.php']) {
316 include_once($TYPO3_CONF_VARS[TYPO3_MODE
]['XCLASS']['typo3/wizard_rte.php']);
331 $SOBE = t3lib_div
::makeInstance('SC_wizard_rte');
334 $SOBE->printContent();