Fix some typos in ChangeLog and other files (non-functional)
[Packages/TYPO3.CMS.git] / typo3 / wizard_colorpicker.php
1 <?php
2 /***************************************************************
3 * Copyright notice
4 *
5 * (c) 1999-2009 Kasper Skårhøj (kasperYYYY@typo3.com)
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 * Colorpicker wizard
29 *
30 * $Id $
31 * Revised for TYPO3 3.7 May/2004 by Kasper Skaarhoj
32 *
33 * @author Mathias Schreiber <schreiber@wmdb.de>
34 * @author Peter Kühn <peter@kuehn.com>
35 * @author Kasper Skaarhoj <typo3@typo3.com>
36 */
37 /**
38 * [CLASS/FUNCTION INDEX of SCRIPT]
39 *
40 *
41 *
42 * 75: class SC_wizard_colorpicker
43 * 103: function init()
44 * 182: function main()
45 * 233: function printContent()
46 * 246: function frameSet()
47 *
48 * SECTION: Rendering of various color selectors
49 * 305: function colorMatrix()
50 * 354: function colorList()
51 * 384: function colorImage()
52 * 417: function getIndex($im,$x,$y)
53 *
54 * TOTAL FUNCTIONS: 8
55 * (This index is automatically created/updated by the extension "extdeveval")
56 *
57 */
58
59
60 $BACK_PATH = '';
61 require('init.php');
62 require('template.php');
63 require_once(PATH_t3lib.'class.t3lib_stdgraphic.php');
64 $LANG->includeLLFile('EXT:lang/locallang_wizards.xml');
65
66 /**
67 * Script Class for colorpicker wizard
68 *
69 * @author Mathias Schreiber <schreiber@wmdb.de>
70 * @author Peter Kühn <peter@kuehn.com>
71 * @author Kasper Skaarhoj <typo3@typo3.com>
72 * @package TYPO3
73 * @subpackage core
74 */
75 class SC_wizard_colorpicker {
76
77 // GET vars:
78 var $P; // Wizard parameters, coming from TCEforms linking to the wizard.
79 var $colorValue; // Value of the current color picked.
80 var $fieldChangeFunc; // Serialized functions for changing the field... Necessary to call when the value is transferred to the TCEform since the form might need to do internal processing. Otherwise the value is simply not be saved.
81 var $fieldName; // Form name (from opener script)
82 var $formName; // Field name (from opener script)
83 var $md5ID; // ID of element in opener script for which to set color.
84 var $showPicker; // Internal: If false, a frameset is rendered, if true the content of the picker script.
85
86 // Static:
87 var $HTMLcolorList = "aqua,black,blue,fuchsia,gray,green,lime,maroon,navy,olive,purple,red,silver,teal,yellow,white";
88
89 // Internal:
90 var $pickerImage = '';
91 var $imageError = ''; // Error message if image not found.
92
93 /**
94 * document template object
95 *
96 * @var smallDoc
97 */
98 var $doc;
99 var $content; // Accumulated content.
100
101
102
103
104 /**
105 * Initialises the Class
106 *
107 * @return void
108 */
109 function init() {
110 global $BACK_PATH, $LANG;
111
112 // Setting GET vars (used in frameset script):
113 $this->P = t3lib_div::_GP('P',1);
114
115 // Setting GET vars (used in colorpicker script):
116 $this->colorValue = t3lib_div::_GP('colorValue');
117 $this->fieldChangeFunc = t3lib_div::_GP('fieldChangeFunc');
118 $this->fieldName = t3lib_div::_GP('fieldName');
119 $this->formName = t3lib_div::_GP('formName');
120 $this->md5ID = t3lib_div::_GP('md5ID');
121 $this->exampleImg = t3lib_div::_GP('exampleImg');
122
123
124 // Resolving image (checking existence etc.)
125 $this->imageError = '';
126 if ($this->exampleImg) {
127 $this->pickerImage = t3lib_div::getFileAbsFileName($this->exampleImg,1,1);
128 if (!$this->pickerImage || !@is_file($this->pickerImage)) {
129 $this->imageError = 'ERROR: The image, "'.$this->exampleImg.'", could not be found!';
130 }
131 }
132
133 // Setting field-change functions:
134 $fieldChangeFuncArr = unserialize($this->fieldChangeFunc);
135 $update = '';
136 if (is_array($fieldChangeFuncArr)) {
137 unset($fieldChangeFuncArr['alert']);
138 foreach($fieldChangeFuncArr as $v) {
139 $update.= '
140 parent.opener.'.$v;
141 }
142 }
143
144 // Initialize document object:
145 $this->doc = t3lib_div::makeInstance('smallDoc');
146 $this->doc->backPath = $BACK_PATH;
147 $this->doc->JScode = $this->doc->wrapScriptTags('
148 function checkReference() { //
149 if (parent.opener && parent.opener.document && parent.opener.document.'.$this->formName.' && parent.opener.document.'.$this->formName.'["'.$this->fieldName.'"]) {
150 return parent.opener.document.'.$this->formName.'["'.$this->fieldName.'"];
151 } else {
152 close();
153 }
154 }
155 function changeBGcolor(color) { // Changes the color in the table sample back in the TCEform.
156 if (parent.opener.document.layers) {
157 parent.opener.document.layers["'.$this->md5ID.'"].bgColor = color;
158 } else if (parent.opener.document.all) {
159 parent.opener.document.all["'.$this->md5ID.'"].style.background = color;
160 } else if (parent.opener.document.getElementById && parent.opener.document.getElementById("'.$this->md5ID.'")) {
161 parent.opener.document.getElementById("'.$this->md5ID.'").bgColor = color;
162 }
163 }
164 function setValue(input) { //
165 var field = checkReference();
166 if (field) {
167 field.value = input;
168 '.$update.'
169 changeBGcolor(input);
170 }
171 }
172 function getValue() { //
173 var field = checkReference();
174 return field.value;
175 }
176 ');
177
178 // Start page:
179 $this->content.=$this->doc->startPage($LANG->getLL('colorpicker_title'));
180 }
181
182 /**
183 * Main Method, rendering either colorpicker or frameset depending on ->showPicker
184 *
185 * @return void
186 */
187 function main() {
188 global $LANG;
189
190 if(!t3lib_div::_GP('showPicker')) { // Show frameset by default:
191 $this->frameSet();
192 } else {
193
194 // Putting together the items into a form:
195 $content = '
196 <form name="colorform" method="post" action="wizard_colorpicker.php">
197 '.$this->colorMatrix().'
198 '.$this->colorList().'
199 '.$this->colorImage().'
200
201 <!-- Value box: -->
202 <p class="c-head">'.$LANG->getLL('colorpicker_colorValue',1).'</p>
203 <table border="0" cellpadding="0" cellspacing="3">
204 <tr>
205 <td><input type="text" '.$this->doc->formWidth(7).' maxlength="10" name="colorValue" value="'.htmlspecialchars($this->colorValue).'" /></td>
206 <td style="background-color:'.htmlspecialchars($this->colorValue).'; border: 1px solid black;">&nbsp;<span style="color: black;">'.$LANG->getLL('colorpicker_black',1).'</span>&nbsp;<span style="color: white;">'.$LANG->getLL('colorpicker_white',1).'</span>&nbsp;</td>
207 <td><input type="submit" name="save_close" value="'.$LANG->getLL('colorpicker_setClose',1).'" /></td>
208 </tr>
209 </table>
210
211 <!-- Hidden fields with values that has to be kept constant -->
212 <input type="hidden" name="showPicker" value="1" />
213 <input type="hidden" name="fieldChangeFunc" value="'.htmlspecialchars($this->fieldChangeFunc).'" />
214 <input type="hidden" name="fieldName" value="'.htmlspecialchars($this->fieldName).'" />
215 <input type="hidden" name="formName" value="'.htmlspecialchars($this->formName).'" />
216 <input type="hidden" name="md5ID" value="'.htmlspecialchars($this->md5ID).'" />
217 <input type="hidden" name="exampleImg" value="'.htmlspecialchars($this->exampleImg).'" />
218 </form>';
219
220 // If the save/close button is clicked, then close:
221 if(t3lib_div::_GP('save_close')) {
222 $content.=$this->doc->wrapScriptTags('
223 setValue(\''.$this->colorValue.'\');
224 parent.close();
225 ');
226 }
227
228 // Output:
229 $this->content.=$this->doc->section($LANG->getLL('colorpicker_title'), $content, 0,1);
230 }
231 }
232
233 /**
234 * Returnes the sourcecode to the browser
235 *
236 * @return void
237 */
238 function printContent() {
239 $this->content.= $this->doc->endPage();
240 $this->content = $this->doc->insertStylesAndJS($this->content);
241 echo $this->content;
242 }
243
244 /**
245 * Returnes a frameset so our JavaScript Reference isn't lost
246 * Took some brains to figure this one out ;-)
247 * If Peter wouldn't have been I would've gone insane...
248 *
249 * @return void
250 */
251 function frameSet() {
252 global $LANG;
253
254 // Set doktype:
255 $GLOBALS['TBE_TEMPLATE']->docType = 'xhtml_frames';
256 $GLOBALS['TBE_TEMPLATE']->JScode = $GLOBALS['TBE_TEMPLATE']->wrapScriptTags('
257 if (!window.opener) {
258 alert("ERROR: Sorry, no link to main window... Closing");
259 close();
260 }
261 ');
262
263 $this->content = $GLOBALS['TBE_TEMPLATE']->startPage($LANG->getLL('colorpicker_title'));
264
265 // URL for the inner main frame:
266 $url = 'wizard_colorpicker.php?showPicker=1'.
267 '&colorValue='.rawurlencode($this->P['currentValue']).
268 '&fieldName='.rawurlencode($this->P['itemName']).
269 '&formName='.rawurlencode($this->P['formName']).
270 '&exampleImg='.rawurlencode($this->P['exampleImg']).
271 '&md5ID='.rawurlencode($this->P['md5ID']).
272 '&fieldChangeFunc='.rawurlencode(serialize($this->P['fieldChangeFunc']));
273
274 $this->content.='
275 <frameset rows="*,1" framespacing="0" frameborder="0" border="0">
276 <frame name="content" src="'.htmlspecialchars($url).'" marginwidth="0" marginheight="0" frameborder="0" scrolling="auto" noresize="noresize" />
277 <frame name="menu" src="dummy.php" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" noresize="noresize" />
278 </frameset>
279 ';
280
281 $this->content.='
282 </html>';
283 }
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299 /************************************
300 *
301 * Rendering of various color selectors
302 *
303 ************************************/
304
305 /**
306 * Creates a color matrix table
307 *
308 * @return void
309 */
310 function colorMatrix() {
311 global $LANG;
312
313 $steps = 51;
314
315 // Get colors:
316 $color = array();
317
318 for($rr=0;$rr<256;$rr+=$steps) {
319 for($gg=0;$gg<256;$gg+=$steps) {
320 for($bb=0;$bb<256;$bb+=$steps) {
321 $color[] = '#'.
322 substr('0'.dechex($rr),-2).
323 substr('0'.dechex($gg),-2).
324 substr('0'.dechex($bb),-2);
325 }
326 }
327 }
328
329 // Traverse colors:
330 $columns = 24;
331
332 $rows = 0;
333 $tRows = array();
334 while(isset($color[$columns*$rows])) {
335 $tCells = array();
336 for($i=0;$i<$columns;$i++) {
337 $tCells[] = '
338 <td bgcolor="'.$color[$columns*$rows+$i].'" onclick="document.colorform.colorValue.value = \''.$color[$columns*$rows+$i].'\'; document.colorform.submit();" title="'.$color[$columns*$rows+$i].'">&nbsp;&nbsp;</td>';
339 }
340 $tRows[] = '
341 <tr>'.implode('',$tCells).'
342 </tr>';
343 $rows++;
344 }
345
346 $table = '
347 <p class="c-head">'.$LANG->getLL('colorpicker_fromMatrix',1).'</p>
348 <table border="0" cellpadding="1" cellspacing="1" style="width:100%; border: 1px solid black; cursor:crosshair;">'.implode('',$tRows).'
349 </table>';
350
351 return $table;
352 }
353
354 /**
355 * Creates a selector box with all HTML color names.
356 *
357 * @return void
358 */
359 function colorList() {
360 global $LANG;
361
362 // Initialize variables:
363 $colors = explode(',',$this->HTMLcolorList);
364 $currentValue = strtolower($this->colorValue);
365 $opt = array();
366 $opt[] = '<option value=""></option>';
367
368 // Traverse colors, making option tags for selector box.
369 foreach($colors as $colorName) {
370 $opt[] = '<option style="background-color: '.$colorName.';" value="'.htmlspecialchars($colorName).'"'.($currentValue==$colorName ? ' selected="selected"' : '').'>'.htmlspecialchars($colorName).'</option>';
371 }
372
373 // Compile selector box and return result:
374 $output = '
375 <p class="c-head">'.$LANG->getLL('colorpicker_fromList',1).'</p>
376 <select onchange="document.colorform.colorValue.value = this.options[this.selectedIndex].value; document.colorform.submit(); return false;">
377 '.implode('
378 ',$opt).'
379 </select><br/>';
380
381 return $output;
382 }
383
384 /**
385 * Creates a color image selector
386 *
387 * @return void
388 */
389 function colorImage() {
390 global $LANG;
391
392 // Handling color-picker image if any:
393 if (!$this->imageError) {
394 if ($this->pickerImage) {
395 if(t3lib_div::_POST('coords_x')) {
396 $this->colorValue = '#'.$this->getIndex(t3lib_stdgraphic::imageCreateFromFile($this->pickerImage),t3lib_div::_POST('coords_x'),t3lib_div::_POST('coords_y'));
397 }
398 $pickerFormImage = '
399 <p class="c-head">'.$LANG->getLL('colorpicker_fromImage',1).'</p>
400 <input type="image" src="../'.substr($this->pickerImage,strlen(PATH_site)).'" name="coords" style="cursor:crosshair;" /><br />';
401 } else {
402 $pickerFormImage = '';
403 }
404 } else {
405 $pickerFormImage = '
406 <p class="c-head">'.htmlspecialchars($this->imageError).'</p>';
407 }
408
409 return $pickerFormImage;
410 }
411
412 /**
413 * Gets the HTML (Hex) Color Code for the selected pixel of an image
414 * This method handles the correct imageResource no matter what format
415 *
416 * @param pointer Valid ImageResource returned by t3lib_stdgraphic::imageCreateFromFile
417 * @param integer X-Coordinate of the pixel that should be checked
418 * @param integer Y-Coordinate of the pixel that should be checked
419 * @return string HEX RGB value for color
420 * @see colorImage()
421 */
422 function getIndex($im,$x,$y) {
423 $rgb = ImageColorAt($im, $x, $y);
424 $colorrgb = imagecolorsforindex($im,$rgb);
425 $index['r'] = dechex($colorrgb['red']);
426 $index['g'] = dechex($colorrgb['green']);
427 $index['b'] = dechex($colorrgb['blue']);
428 foreach ($index as $value) {
429 if(strlen($value) == 1) {
430 $hexvalue[] = strtoupper('0'.$value);
431 } else {
432 $hexvalue[] = strtoupper($value);
433 }
434 }
435 $hex = implode('',$hexvalue);
436 return $hex;
437 }
438 }
439
440
441 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/wizard_colorpicker.php']) {
442 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/wizard_colorpicker.php']);
443 }
444
445
446
447 // Make instance:
448 $SOBE = t3lib_div::makeInstance('SC_wizard_colorpicker');
449 $SOBE->init();
450 $SOBE->main();
451 $SOBE->printContent();
452
453 ?>