00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00062 $BACK_PATH='';
00063 require ('init.php');
00064 require ('template.php');
00065 $LANG->includeLLFile('EXT:lang/locallang_wizards.xml');
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00084 class SC_wizard_table {
00085
00086
00087 var $doc;
00088 var $content;
00089 var $include_once=array();
00090 var $inputStyle=0;
00091
00092
00093
00094 var $xmlStorage=0;
00095 var $colsFieldName='cols';
00096
00097
00098
00099 var $P;
00100 var $TABLECFG;
00101
00102
00103
00104
00105
00106
00112 function init() {
00113 global $BACK_PATH;
00114
00115
00116 $this->P = t3lib_div::_GP('P');
00117 $this->TABLECFG = t3lib_div::_GP('TABLE');
00118
00119
00120 $this->xmlStorage = $this->P['params']['xmlOutput'];
00121
00122
00123 $this->inputStyle=isset($this->TABLECFG['textFields']) ? $this->TABLECFG['textFields'] : 1;
00124
00125
00126 $this->doc = t3lib_div::makeInstance('mediumDoc');
00127 $this->doc->docType = 'xhtml_trans';
00128 $this->doc->backPath = $BACK_PATH;
00129 $this->doc->JScode=$this->doc->wrapScriptTags('
00130 function jumpToUrl(URL,formEl) {
00131 document.location = URL;
00132 }
00133 ');
00134
00135
00136 list($rUri) = explode('#',t3lib_div::getIndpEnv('REQUEST_URI'));
00137 $this->doc->form ='<form action="'.htmlspecialchars($rUri).'" method="post" name="wizardForm">';
00138
00139
00140 $this->content.=$this->doc->startPage('Table');
00141
00142
00143 if ($_POST['savedok_x'] || $_POST['saveandclosedok_x']) {
00144 $this->include_once[]=PATH_t3lib.'class.t3lib_tcemain.php';
00145 }
00146 }
00147
00153 function main() {
00154 global $LANG;
00155
00156 if ($this->P['table'] && $this->P['field'] && $this->P['uid']) {
00157 $this->content.=$this->doc->section($LANG->getLL('table_title'),$this->tableWizard(),0,1);
00158 } else {
00159 $this->content.=$this->doc->section($LANG->getLL('table_title'),'<span class="typo3-red">'.$LANG->getLL('table_noData',1).'</span>',0,1);
00160 }
00161 $this->content.=$this->doc->endPage();
00162 }
00163
00169 function printContent() {
00170 echo $this->content;
00171 }
00172
00178 function tableWizard() {
00179
00180
00181 $row=t3lib_BEfunc::getRecord($this->P['table'],$this->P['uid']);
00182 if (!is_array($row)) {
00183 t3lib_BEfunc::typo3PrintError ('Wizard Error','No reference to record',0);
00184 exit;
00185 }
00186
00187
00188 $tableCfgArray = $this->getConfigCode($row);
00189
00190
00191 $content = $this->getTableHTML($tableCfgArray,$row);
00192
00193
00194 return $content;
00195 }
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00217 function getConfigCode($row) {
00218
00219
00220 if (isset($this->TABLECFG['c'])) {
00221
00222
00223 $this->changeFunc();
00224
00225
00226
00227 if ($this->xmlStorage) {
00228
00229 $bodyText = t3lib_div::array2xml($this->TABLECFG['c'],'',0,'T3TableWizard');
00230
00231
00232 $cfgArr = $this->TABLECFG['c'];
00233 } else {
00234
00235 $bodyText = $this->cfgArray2CfgString($this->TABLECFG['c']);
00236
00237
00238 $cfgArr = $this->cfgString2CfgArray($bodyText,$row[$this->colsFieldName]);
00239 }
00240
00241
00242 if ($_POST['savedok_x'] || $_POST['saveandclosedok_x']) {
00243
00244
00245 $tce = t3lib_div::makeInstance('t3lib_TCEmain');
00246 $tce->stripslashes_values=0;
00247
00248
00249 $data=array();
00250 $data[$this->P['table']][$this->P['uid']][$this->P['field']]=$bodyText;
00251
00252
00253 $tce->start($data,array());
00254 $tce->process_datamap();
00255
00256
00257 if ($_POST['saveandclosedok_x']) {
00258 header('Location: '.t3lib_div::locationHeaderUrl($this->P['returnUrl']));
00259 exit;
00260 }
00261 }
00262 } else {
00263 if ($this->xmlStorage) {
00264 $cfgArr = t3lib_div::xml2array($row[$this->P['field']]);
00265 } else {
00266 $cfgArr = $this->cfgString2CfgArray($row[$this->P['field']],$row[$this->colsFieldName]);
00267 }
00268 $cfgArr = is_array($cfgArr) ? $cfgArr : array();
00269 }
00270
00271 return $cfgArr;
00272 }
00273
00282 function getTableHTML($cfgArr,$row) {
00283 global $LANG;
00284
00285
00286 $tRows=array();
00287 $k=0;
00288 foreach($cfgArr as $cellArr) {
00289 if (is_array($cellArr)) {
00290
00291 $cells=array();
00292 $a=0;
00293
00294
00295 foreach($cellArr as $cellContent) {
00296 if ($this->inputStyle) {
00297 $cells[]='<input type="text"'.$this->doc->formWidth(20).' name="TABLE[c]['.(($k+1)*2).']['.(($a+1)*2).']" value="'.htmlspecialchars($cellContent).'" />';
00298 } else {
00299 $cellContent=eregi_replace('<br[ ]?[\/]?>',chr(10),$cellContent);
00300 $cells[]='<textarea '.$this->doc->formWidth(20).' rows="5" name="TABLE[c]['.(($k+1)*2).']['.(($a+1)*2).']">'.t3lib_div::formatForTextarea($cellContent).'</textarea>';
00301 }
00302
00303
00304 $a++;
00305 }
00306
00307
00308 $onClick="document.wizardForm.action+='#ANC_".(($k+1)*2-2)."';";
00309 $onClick=' onclick="'.htmlspecialchars($onClick).'"';
00310 $ctrl='';
00311
00312 $brTag=$this->inputStyle?'':'<br />';
00313 if ($k!=0) {
00314 $ctrl.='<input type="image" name="TABLE[row_up]['.(($k+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/pil2up.gif','').$onClick.' title="'.$LANG->getLL('table_up',1).'" />'.$brTag;
00315 } else {
00316 $ctrl.='<input type="image" name="TABLE[row_bottom]['.(($k+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/turn_up.gif','').$onClick.' title="'.$LANG->getLL('table_bottom',1).'" />'.$brTag;
00317 }
00318 $ctrl.='<input type="image" name="TABLE[row_remove]['.(($k+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/garbage.gif','').$onClick.' title="'.$LANG->getLL('table_removeRow',1).'" />'.$brTag;
00319
00320 if (($k+1)!=count($tLines)) {
00321 $ctrl.='<input type="image" name="TABLE[row_down]['.(($k+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/pil2down.gif','').$onClick.' title="'.$LANG->getLL('table_down',1).'" />'.$brTag;
00322 } else {
00323 $ctrl.='<input type="image" name="TABLE[row_top]['.(($k+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/turn_down.gif','').$onClick.' title="'.$LANG->getLL('table_top',1).'" />'.$brTag;
00324 }
00325 $ctrl.='<input type="image" name="TABLE[row_add]['.(($k+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/add.gif','').$onClick.' title="'.$LANG->getLL('table_addRow',1).'" />'.$brTag;
00326
00327 $tRows[]='
00328 <tr class="bgColor4">
00329 <td class="bgColor5"><a name="ANC_'.(($k+1)*2).'"></a><span class="c-wizButtonsV">'.$ctrl.'</span></td>
00330 <td>'.implode('</td>
00331 <td>',$cells).'</td>
00332 </tr>';
00333
00334
00335 $k++;
00336 }
00337 }
00338
00339
00340 $cells=array();
00341 $cells[]='';
00342
00343 reset($cfgArr);
00344 $firstRow=current($cfgArr);
00345 if (is_array($firstRow)) {
00346
00347
00348 $a=0;
00349 $cols=count($firstRow);
00350
00351
00352 foreach($firstRow as $temp) {
00353 $ctrl='';
00354 if ($a!=0) {
00355 $ctrl.='<input type="image" name="TABLE[col_left]['.(($a+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/pil2left.gif','').' title="'.$LANG->getLL('table_left',1).'" />';
00356 } else {
00357 $ctrl.='<input type="image" name="TABLE[col_end]['.(($a+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/turn_left.gif','').' title="'.$LANG->getLL('table_end',1).'" />';
00358 }
00359 $ctrl.='<input type="image" name="TABLE[col_remove]['.(($a+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/garbage.gif','').' title="'.$LANG->getLL('table_removeColumn',1).'" />';
00360 if (($a+1)!=$cols) {
00361 $ctrl.='<input type="image" name="TABLE[col_right]['.(($a+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/pil2right.gif','').' title="'.$LANG->getLL('table_right',1).'" />';
00362 } else {
00363 $ctrl.='<input type="image" name="TABLE[col_start]['.(($a+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/turn_right.gif','').' title="'.$LANG->getLL('table_start',1).'" />';
00364 }
00365 $ctrl.='<input type="image" name="TABLE[col_add]['.(($a+1)*2).']"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/add.gif','').' title="'.$LANG->getLL('table_addColumn',1).'" />';
00366 $cells[]='<span class="c-wizButtonsH">'.$ctrl.'</span>';
00367
00368
00369 $a++;
00370 }
00371 $tRows[]='
00372 <tr class="bgColor5">
00373 <td align="center">'.implode('</td>
00374 <td align="center">',$cells).'</td>
00375 </tr>';
00376 }
00377
00378 $content = '';
00379
00380
00381 $content.= t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'wizard_table_wiz', $GLOBALS['BACK_PATH'],'');
00382
00383
00384 $content.= '
00385
00386
00387 <!--
00388 Table wizard
00389 -->
00390 <table border="0" cellpadding="0" cellspacing="1" id="typo3-tablewizard">
00391 '.implode('',$tRows).'
00392 </table>';
00393
00394
00395 $content.= '
00396
00397 <!--
00398 Save buttons:
00399 -->
00400 <div id="c-saveButtonPanel">';
00401 $content.= '<input type="image" class="c-inputButton" name="savedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/savedok.gif','').' title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveDoc',1).'" />';
00402 $content.= '<input type="image" class="c-inputButton" name="saveandclosedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/saveandclosedok.gif','').' title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveCloseDoc',1).'" />';
00403 $content.= '<a href="#" onclick="'.htmlspecialchars('jumpToUrl(unescape(\''.rawurlencode($this->P['returnUrl']).'\')); return false;').'">'.
00404 '<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="" />'.
00405 '</a>';
00406 $content.= '<input type="image" class="c-inputButton" name="_refresh"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/refresh_n.gif','').' title="'.$LANG->getLL('forms_refresh',1).'" />';
00407 $content.= t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'wizard_table_wiz_buttons', $GLOBALS['BACK_PATH'],'');
00408 $content.= '
00409 </div>
00410 ';
00411
00412
00413 $content.= '
00414
00415 <!--
00416 Input mode check box:
00417 -->
00418 <div id="c-inputMode">
00419 '.
00420 '<input type="hidden" name="TABLE[textFields]" value="0" />'.
00421 '<input type="checkbox" name="TABLE[textFields]" value="1"'.($this->inputStyle?' checked="checked"':'').' /> '.
00422 $LANG->getLL('table_smallFields').'
00423 </div>
00424
00425 <br /><br />
00426 ';
00427
00428
00429 return $content;
00430 }
00431
00438 function changeFunc() {
00439 if ($this->TABLECFG['col_remove']) {
00440 $kk = key($this->TABLECFG['col_remove']);
00441 $cmd='col_remove';
00442 } elseif ($this->TABLECFG['col_add']) {
00443 $kk = key($this->TABLECFG['col_add']);
00444 $cmd='col_add';
00445 } elseif ($this->TABLECFG['col_start']) {
00446 $kk = key($this->TABLECFG['col_start']);
00447 $cmd='col_start';
00448 } elseif ($this->TABLECFG['col_end']) {
00449 $kk = key($this->TABLECFG['col_end']);
00450 $cmd='col_end';
00451 } elseif ($this->TABLECFG['col_left']) {
00452 $kk = key($this->TABLECFG['col_left']);
00453 $cmd='col_left';
00454 } elseif ($this->TABLECFG['col_right']) {
00455 $kk = key($this->TABLECFG['col_right']);
00456 $cmd='col_right';
00457 } elseif ($this->TABLECFG['row_remove']) {
00458 $kk = key($this->TABLECFG['row_remove']);
00459 $cmd='row_remove';
00460 } elseif ($this->TABLECFG['row_add']) {
00461 $kk = key($this->TABLECFG['row_add']);
00462 $cmd='row_add';
00463 } elseif ($this->TABLECFG['row_top']) {
00464 $kk = key($this->TABLECFG['row_top']);
00465 $cmd='row_top';
00466 } elseif ($this->TABLECFG['row_bottom']) {
00467 $kk = key($this->TABLECFG['row_bottom']);
00468 $cmd='row_bottom';
00469 } elseif ($this->TABLECFG['row_up']) {
00470 $kk = key($this->TABLECFG['row_up']);
00471 $cmd='row_up';
00472 } elseif ($this->TABLECFG['row_down']) {
00473 $kk = key($this->TABLECFG['row_down']);
00474 $cmd='row_down';
00475 }
00476
00477 if ($cmd && t3lib_div::testInt($kk)) {
00478 if (substr($cmd,0,4)=='row_') {
00479 switch($cmd) {
00480 case 'row_remove':
00481 unset($this->TABLECFG['c'][$kk]);
00482 break;
00483 case 'row_add':
00484 $this->TABLECFG['c'][$kk+1]=array();
00485 break;
00486 case 'row_top':
00487 $this->TABLECFG['c'][1]=$this->TABLECFG['c'][$kk];
00488 unset($this->TABLECFG['c'][$kk]);
00489 break;
00490 case 'row_bottom':
00491 $this->TABLECFG['c'][10000000]=$this->TABLECFG['c'][$kk];
00492 unset($this->TABLECFG['c'][$kk]);
00493 break;
00494 case 'row_up':
00495 $this->TABLECFG['c'][$kk-3]=$this->TABLECFG['c'][$kk];
00496 unset($this->TABLECFG['c'][$kk]);
00497 break;
00498 case 'row_down':
00499 $this->TABLECFG['c'][$kk+3]=$this->TABLECFG['c'][$kk];
00500 unset($this->TABLECFG['c'][$kk]);
00501 break;
00502 }
00503 ksort($this->TABLECFG['c']);
00504 }
00505 if (substr($cmd,0,4)=='col_') {
00506 reset($this->TABLECFG['c']);
00507 while(list($cAK)=each($this->TABLECFG['c'])) {
00508 switch($cmd) {
00509 case 'col_remove':
00510 unset($this->TABLECFG['c'][$cAK][$kk]);
00511 break;
00512 case 'col_add':
00513 $this->TABLECFG['c'][$cAK][$kk+1]='';
00514 break;
00515 case 'col_start':
00516 $this->TABLECFG['c'][$cAK][1]=$this->TABLECFG['c'][$cAK][$kk];
00517 unset($this->TABLECFG['c'][$cAK][$kk]);
00518 break;
00519 case 'col_end':
00520 $this->TABLECFG['c'][$cAK][1000000]=$this->TABLECFG['c'][$cAK][$kk];
00521 unset($this->TABLECFG['c'][$cAK][$kk]);
00522 break;
00523 case 'col_left':
00524 $this->TABLECFG['c'][$cAK][$kk-3]=$this->TABLECFG['c'][$cAK][$kk];
00525 unset($this->TABLECFG['c'][$cAK][$kk]);
00526 break;
00527 case 'col_right':
00528 $this->TABLECFG['c'][$cAK][$kk+3]=$this->TABLECFG['c'][$cAK][$kk];
00529 unset($this->TABLECFG['c'][$cAK][$kk]);
00530 break;
00531 }
00532 ksort($this->TABLECFG['c'][$cAK]);
00533 }
00534 }
00535 }
00536
00537
00538 reset($this->TABLECFG['c']);
00539 while(list($a)=each($this->TABLECFG['c'])) {
00540 reset($this->TABLECFG['c'][$a]);
00541 while(list($b)=each($this->TABLECFG['c'][$a])) {
00542 $this->TABLECFG['c'][$a][$b] = str_replace(chr(10),'<br />',str_replace(chr(13),'',$this->TABLECFG['c'][$a][$b]));
00543 }
00544 }
00545 }
00546
00554 function cfgArray2CfgString($cfgArr) {
00555
00556
00557 $inLines=array();
00558
00559
00560 reset($this->TABLECFG['c']);
00561 while(list($a)=each($this->TABLECFG['c'])) {
00562 $thisLine=array();
00563 reset($this->TABLECFG['c'][$a]);
00564 while(list($b)=each($this->TABLECFG['c'][$a])) {
00565 $thisLine[]=str_replace('|','',$this->TABLECFG['c'][$a][$b]);
00566 }
00567 $inLines[]=implode('|',$thisLine);
00568 }
00569
00570
00571 $bodyText = implode(chr(10),$inLines);
00572
00573
00574 return $bodyText;
00575 }
00576
00585 function cfgString2CfgArray($cfgStr,$cols) {
00586
00587
00588 $tLines=explode(chr(10),$cfgStr);
00589
00590
00591 if (!$cols && trim($tLines[0])) {
00592 $cols = count(explode('|',$tLines[0]));
00593 }
00594 $cols=$cols?$cols:4;
00595
00596
00597 $cfgArr=array();
00598 foreach($tLines as $k => $v) {
00599
00600
00601 $vParts = explode('|',$v);
00602
00603
00604 for ($a=0;$a<$cols;$a++) {
00605 $cfgArr[$k][$a]=$vParts[$a];
00606 }
00607 }
00608
00609
00610 return $cfgArr;
00611 }
00612 }
00613
00614
00615 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/wizard_table.php']) {
00616 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/wizard_table.php']);
00617 }
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631 $SOBE = t3lib_div::makeInstance('SC_wizard_table');
00632 $SOBE->init();
00633
00634
00635 foreach($SOBE->include_once as $INC_FILE) include_once($INC_FILE);
00636
00637 $SOBE->main();
00638 $SOBE->printContent();
00639 ?>