2 /***************************************************************
5 * (c) 1999-2009 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 * Displays the secondary-options palette for the TCEFORMs wherever they are shown.
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 formRender extends t3lib_TCEforms
42 * 91: function printPalette($palArr)
45 * 154: class formRender_vert extends t3lib_TCEforms
46 * 163: function printPalette($palArr)
49 * 223: class SC_alt_palette
50 * 247: function init()
51 * 301: function main()
52 * 341: function printContent()
55 * (This index is automatically created/updated by the extension "extdeveval")
62 require('template.php');
63 $LANG->includeLLFile('EXT:lang/locallang_alt_doc.xml');
71 * Class for rendering the form fields.
72 * Extending the TCEforms class
74 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
77 * @deprecated since TYPO3 4.3, will be removed in TYPO3 4.5
79 class formRender
extends t3lib_TCEforms
{
82 * Creates the HTML content for the palette
83 * (Horizontally, for display in the top frame)
84 * (Used if GET var "backRef" IS set)
86 * @param array Array of information from which the fields are built.
87 * @return string HTML output
89 function printPalette($palArr) {
92 // For each element on the palette, write a few table cells with the field name, content and control images:
93 foreach($palArr as $content) {
96 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" class="c-reqIcon" src="clear.gif" width="10" height="10" alt="" />'.
97 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" class="c-cmIcon" src="clear.gif" width="7" height="10" alt="" />'.
99 <td class="c-label">'.
100 $content['NAME'].' '.
103 $content['ITEM'].$content['HELP_ICON'].
107 // Finally, wrap it all in a table:
113 TCEforms palette, rendered in top frame.
115 <table border="0" cellpadding="0" cellspacing="0" id="typo3-TCEforms-palette">
117 <td class="c-close">'.
118 '<a href="#" onclick="closePal();return false;"><img'.t3lib_iconWorks
::skinImg('','gfx/close_12h.gif','width="11" height="12"').' title="'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.close',1).'" alt="" /></a>'.
126 // Return the result:
145 * Child class for alternative rendering of form fields (when the secondary fields are shown in a little window rather than the top bar).
146 * (Used if GET var "backRef" is not set, presuming a window is opened instead.)
148 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
152 class formRender_vert
extends t3lib_TCEforms
{
155 * Creates the HTML content for the palette.
156 * (Vertically, for display in a browser window, not top frame)
158 * @param array Array of information from which the fields are built.
159 * @return string HTML output
161 function printPalette($palArr) {
163 $bgColor=' bgcolor="'.$this->colorScheme
[2].'"';
165 // For each element on the palette, write a few table cells with the field name, content and control images:
166 foreach($palArr as $content) {
169 <td><img src="clear.gif" width="'.intval($this->paletteMargin
).'" height="1" alt="" /></td>
170 <td'.$bgColor.'> </td>
171 <td nowrap="nowrap"'.$bgColor.'><font color="'.$this->colorScheme
[4].'">'.$content['NAME'].'</font></td>
176 <td valign="top"><img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" vspace="4" alt="" /><img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" vspace="4" alt="" /></td>
177 <td nowrap="nowrap" valign="top">'.$content['ITEM'].$content['HELP_ICON'].'</td>
181 // Adding the close button:
186 <td nowrap="nowrap" valign="top">
188 <input type="submit" value="'.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.close',1).'" onclick="closePal(); return false;" />
192 // Finally, wrap it all in a table:
194 <table border="0" cellpadding="0" cellspacing="0" id="typo3-TCEforms-palette-vert">
195 '.implode('',$iRow).'
214 * Script Class for rendering the palette form for TCEforms in some other frame (in top frame, horizontally)
215 * It can also be called in a pop-up window in which case a vertically oriented set of form fields are rendered instead.
217 * @author Kasper Skaarhoj <kasperYYYY@typo3.com>
221 class SC_alt_palette
{
224 var $content; // Content accumulation
225 var $backRef; // String, which is the reference back to the window which opened this one.
226 var $formRef; // String, which is the reference to the form.
227 var $doc; // Template object.
229 // Internal, static: GPvar:
230 var $formName; // Form name
231 var $GPbackref; // The value of the original backRef GPvar (not necessarily the same as $this->backRef)
232 var $inData; // Contains tablename, uid and palette number
233 var $prependFormFieldNames; // Prefix for form fields.
234 var $rec; // The "record" with the data to display in the form fields.
241 * Constructor for the class
247 // Setting GPvars, etc.
248 $this->formName
= $this->sanitizeHtmlName(t3lib_div
::_GP('formName'));
249 $this->GPbackref
= $this->sanitizeHtmlName(t3lib_div
::_GP('backRef'));
250 $this->inData
= t3lib_div
::_GP('inData');
251 // safeguards the input with whitelisting
252 if (!preg_match('/^[a-zA-Z0-9\-_\:]+$/', $this->inData
)) {
255 $this->prependFormFieldNames
=
256 $this->sanitizeHtmlName(t3lib_div
::_GP('prependFormFieldNames'));
257 $this->rec
= t3lib_div
::_GP('rec');
259 // Making references:
260 $this->backRef
= $this->GPbackref ?
$this->GPbackref
: 'window.opener';
262 $this->formRef
= $this->backRef
.'.document.'.$this->formName
;
264 // Start template object:
265 $this->doc
= t3lib_div
::makeInstance('template');
266 $this->doc
->bodyTagMargins
['x']=0;
267 $this->doc
->bodyTagMargins
['y']=0;
268 $this->doc
->form
='<form action="#" method="post" name="'.htmlspecialchars($this->formName
).'" onsubmit="return false;">';
269 $this->doc
->backPath
= '';
271 // In case the palette is opened in a SEPARATE window (as the case is with frontend editing) then another body-tag id should be used (so we don't get the background image for the palette shown!)
272 if (!$this->GPbackref
) $this->doc
->bodyTagId
.= '-vert';
274 // Setting JavaScript functions for the header:
275 $this->doc
->JScode
= $this->doc
->wrapScriptTags('
276 var serialNumber = "";
277 function timeout_func() { //
278 if ('.$this->backRef
.' && '.$this->backRef
.'.document && '.$this->formRef
.') {
279 if ('.$this->formRef
.'["_serialNumber"]) {
281 if ('.$this->formRef
.'["_serialNumber"].value != serialNumber) {closePal(); return false;}
283 serialNumber = '.$this->formRef
.'["_serialNumber"].value;
286 window.setTimeout("timeout_func();",1*1000);
289 function closePal() { //
290 '.($this->GPbackref?
'window.location.href="alt_topmenu_dummy.php";':'close();').'
298 * Sanitizes HTML names, IDs, frame names etc.
300 * @param string $input the string to sanitize
302 * @return string the unchanged $input if $input is considered to be harmless,
303 * an empty string otherwise
305 protected function sanitizeHtmlName($input) {
308 if (!preg_match('/^[a-zA-Z][a-zA-Z0-9_\-\.]*$/', $result)) {
316 * Main function, rendering the palette form
324 $inData = explode(':',$this->inData
);
327 if (is_array($inData) && count($inData)==3) {
329 // Create the TCEforms object:
330 $tceforms = $this->GPbackref ?
new formRender() : new formRender_vert();
331 $tceforms->initDefaultBEMode();
332 $tceforms->palFieldTemplate
='###FIELD_PALETTE###';
333 $tceforms->palettesCollapsed
=0;
334 $tceforms->isPalettedoc
=$this->backRef
;
336 $tceforms->formName
= $this->formName
;
337 $tceforms->prependFormFieldNames
= $this->prependFormFieldNames
;
339 // Initialize other data:
342 $thePalNum = $inData[2];
343 $this->rec
['uid']=$theUid;
345 // Getting the palette fields rendered:
346 $panel.=$tceforms->getPaletteFields($table,$this->rec
,$thePalNum,'',implode(',',array_keys($this->rec
)));
349 // Add all the content, including JavaScript as needed.
350 $this->content
.=$tceforms->printNeededJSFunctions_top().$formContent.$tceforms->printNeededJSFunctions();
353 // Assemble the page:
354 $tempContent = $this->content
;
355 $this->content
= $this->doc
->startPage('TYPO3 Edit Palette');
356 $this->content
.= $tempContent;
360 * Outputting the accumulated content to screen
364 function printContent() {
365 $this->content
.= $this->doc
->endPage();
366 $this->content
= $this->doc
->insertStylesAndJS($this->content
);
372 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE
]['XCLASS']['typo3/alt_palette.php']) {
373 include_once($TYPO3_CONF_VARS[TYPO3_MODE
]['XCLASS']['typo3/alt_palette.php']);
379 $SOBE = t3lib_div
::makeInstance('SC_alt_palette');
382 $SOBE->printContent();