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