|
TYPO3 API
SVNRelease
|
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 1999-2011 Kasper Skårhøj (kasperYYYY@typo3.com) 00006 * All rights reserved 00007 * 00008 * This script is part of the TYPO3 project. The TYPO3 project is 00009 * free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * The GNU General Public License can be found at 00015 * http://www.gnu.org/copyleft/gpl.html. 00016 * A copy is found in the textfile GPL.txt and important notices to the license 00017 * from the author is found in LICENSE.txt distributed with these scripts. 00018 * 00019 * 00020 * This script is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * This copyright notice MUST APPEAR in all copies of the script! 00026 ***************************************************************/ 00027 /** 00028 * Wizard for inserting TSconfig in form fields. (page,user or TS) 00029 * 00030 * $Id: wizard_tsconfig.php 10317 2011-01-26 00:56:49Z baschny $ 00031 * Revised for TYPO3 3.6 November/2003 by Kasper Skårhøj 00032 * XHTML compliant 00033 * 00034 * @author Kasper Skårhøj <kasperYYYY@typo3.com> 00035 */ 00036 /** 00037 * [CLASS/FUNCTION INDEX of SCRIPT] 00038 * 00039 * 00040 * 00041 * 98: class ext_TSparser extends t3lib_tsparser_ext 00042 * 106: function makeHtmlspecialchars($P) 00043 * 00044 * 00045 * 127: class SC_wizard_tsconfig 00046 * 149: function init() 00047 * 202: function setValue(field,value) 00048 * 232: function mixerField(cmd,objString) 00049 * 258: function str_replace(match,replace,string) 00050 * 280: function jump(show,objString) 00051 * 295: function main() 00052 * 320: function printContent() 00053 * 333: function browseTSprop($mode,$show) 00054 * 00055 * SECTION: Module functions 00056 * 419: function getObjTree() 00057 * 449: function setObj(&$objTree,$strArr,$params) 00058 * 469: function revertFromSpecialChars($str) 00059 * 482: function doLink($params) 00060 * 495: function removePointerObjects($objArray) 00061 * 514: function linkToObj($str,$uid,$objString='') 00062 * 527: function printTable($table,$objString,$objTree) 00063 * 608: function linkProperty($str,$propertyName,$prefix,$datatype) 00064 * 00065 * TOTAL FUNCTIONS: 17 00066 * (This index is automatically created/updated by the extension "extdeveval") 00067 * 00068 */ 00069 00070 00071 00072 $BACK_PATH=''; 00073 require ('init.php'); 00074 require ('template.php'); 00075 $LANG->includeLLFile('EXT:lang/locallang_wizards.xml'); 00076 00077 00078 00079 00080 00081 00082 00083 /** 00084 * TypoScript parser extension class. 00085 * 00086 * @author Kasper Skårhøj <kasperYYYY@typo3.com> 00087 * @package TYPO3 00088 * @subpackage core 00089 */ 00090 class ext_TSparser extends t3lib_tsparser_ext { 00091 00092 /** 00093 * Pass through of incoming value for link. 00094 * 00095 * @param array P array 00096 * @return string The "_LINK" key value, straight away. 00097 */ 00098 function makeHtmlspecialchars($P) { 00099 return $P['_LINK']; 00100 } 00101 } 00102 00103 00104 00105 00106 00107 00108 00109 00110 00111 00112 /** 00113 * Script Class for rendering the TSconfig/TypoScript property browser. 00114 * 00115 * @author Kasper Skårhøj <kasperYYYY@typo3.com> 00116 * @package TYPO3 00117 * @subpackage core 00118 */ 00119 class SC_wizard_tsconfig { 00120 00121 // Internal, dynamic: 00122 /** 00123 * document template object 00124 * 00125 * @var mediumDoc 00126 */ 00127 var $doc; 00128 var $content; // Content accumulation for the module. 00129 00130 // Internal, static: GPvars 00131 var $P; // Wizard parameters, coming from TCEforms linking to the wizard. 00132 var $mode; // "page", "tsref" or "beuser" 00133 var $show; // Pointing to an entry in static_tsconfig_help to show. 00134 var $objString; // Object path - for display. 00135 var $onlyProperty; // If set, the "mixed-field" is not shown and you can select only one property at a time. 00136 00137 00138 00139 00140 00141 /** 00142 * Initialization of the class 00143 * 00144 * @return void 00145 */ 00146 function init() { 00147 global $LANG,$BACK_PATH; 00148 00149 // Check if the tsconfig_help extension is loaded - which is mandatory for this wizard to work. 00150 t3lib_extMgm::isLoaded('tsconfig_help',1); 00151 00152 // Init GPvars: 00153 $this->P = t3lib_div::_GP('P'); 00154 $this->mode = t3lib_div::_GP('mode'); 00155 $this->show = t3lib_div::_GP('show'); 00156 $this->objString = t3lib_div::_GP('objString'); 00157 $this->onlyProperty = t3lib_div::_GP('onlyProperty'); 00158 // Preparing some JavaScript code: 00159 if (!$this->areFieldChangeFunctionsValid()) { 00160 $this->P['fieldChangeFunc']=array(); 00161 } 00162 unset($this->P['fieldChangeFunc']['alert']); 00163 $update=''; 00164 foreach($this->P['fieldChangeFunc'] as $k=>$v) { 00165 $update.= ' 00166 window.opener.'.$v; 00167 } 00168 00169 // Init the document table object: 00170 $this->doc = t3lib_div::makeInstance('template'); 00171 $this->doc->backPath = $BACK_PATH; 00172 $this->doc->form='<form action="" name="editform">'; 00173 00174 // Adding Styles (should go into stylesheet?) 00175 $this->doc->inDocStylesArray[] = ' 00176 A:link {text-decoration: bold; color: '.$this->doc->hoverColor.';} 00177 A:visited {text-decoration: bold; color: '.$this->doc->hoverColor.';} 00178 A:active {text-decoration: bold; color: '.$this->doc->hoverColor.';} 00179 A:hover {color: '.$this->doc->bgColor2.'} 00180 '; 00181 00182 $this->doc->JScode.=$this->doc->wrapScriptTags(' 00183 function checkReference_name() { // Checks if the input field containing the name exists in the document 00184 if (window.opener && window.opener.document && window.opener.document.'.$this->P['formName'].' && window.opener.document.'.$this->P['formName'].'["'.$this->P['itemName'].'"] ) { 00185 return window.opener.document.'.$this->P['formName'].'["'.$this->P['itemName'].'"]; 00186 } 00187 } 00188 function checkReference_value() { // Checks if the input field containing the value exists in the document 00189 if (window.opener && window.opener.document && window.opener.document.'.$this->P['formName'].' && window.opener.document.'.$this->P['formName'].'["'.$this->P['itemValue'].'"] ) { 00190 return window.opener.document.'.$this->P['formName'].'["'.$this->P['itemValue'].'"]; 00191 } 00192 } 00193 00194 /** 00195 * [Describe function...] 00196 * 00197 * @param [type] $field,value: ... 00198 * @return [type] ... 00199 */ 00200 function setValue(field,value) { 00201 var nameField = checkReference_name(); 00202 var valueField = checkReference_value(); 00203 if (nameField) { 00204 if (valueField) { // This applies to the TS Object Browser module 00205 nameField.value=field; 00206 valueField.value=value; 00207 } else { // This applies to the Info/Modify module and the Page TSconfig field 00208 if (value) { 00209 nameField.value=field+"="+value+"\n"+nameField.value; 00210 } else { 00211 nameField.value=field+"\n"+nameField.value; 00212 } 00213 } 00214 '.$update.' 00215 window.opener.focus(); 00216 } 00217 close(); 00218 } 00219 function getValue() { // This is never used. Remove it? 00220 var field = checkReference_name(); 00221 if (field) { 00222 return field.value; 00223 } else { 00224 close(); 00225 } 00226 } 00227 00228 /** 00229 * [Describe function...] 00230 * 00231 * @param [type] $cmd,objString: ... 00232 * @return [type] ... 00233 */ 00234 function mixerField(cmd,objString) { 00235 var temp; 00236 switch(cmd) { 00237 case "Indent": 00238 temp = str_replace("\n","\n ","\n"+document.editform.mixer.value); 00239 document.editform.mixer.value = temp.substr(1); 00240 break; 00241 case "Outdent": 00242 temp = str_replace("\n ","\n","\n"+document.editform.mixer.value); 00243 document.editform.mixer.value = temp.substr(1); 00244 break; 00245 case "Transfer": 00246 setValue(document.editform.mixer.value); 00247 break; 00248 case "Wrap": 00249 document.editform.mixer.value=objString+" {\n"+document.editform.mixer.value+"\n}"; 00250 break; 00251 } 00252 } 00253 00254 /** 00255 * [Describe function...] 00256 * 00257 * @param [type] $match,replace,string: ... 00258 * @return [type] ... 00259 */ 00260 function str_replace(match,replace,string) { 00261 var input = ""+string; 00262 var matchStr = ""+match; 00263 if (!matchStr) {return string;} 00264 var output = ""; 00265 var pointer=0; 00266 var pos = input.indexOf(matchStr); 00267 while (pos!=-1) { 00268 output+=""+input.substr(pointer, pos-pointer)+replace; 00269 pointer=pos+matchStr.length; 00270 pos = input.indexOf(match,pos+1); 00271 } 00272 output+=""+input.substr(pointer); 00273 return output; 00274 } 00275 00276 /** 00277 * [Describe function...] 00278 * 00279 * @param [type] $show,objString: ... 00280 * @return [type] ... 00281 */ 00282 function jump(show,objString) { 00283 window.location.href = "'.t3lib_div::linkThisScript(array('show'=>'','objString'=>'')).'&show="+show+"&objString="+objString; 00284 } 00285 '); 00286 00287 00288 // Start the page: 00289 $this->content.=$this->doc->startPage($LANG->getLL('tsprop')); 00290 } 00291 00292 /** 00293 * Main function, rendering the content of the TypoScript property browser, including links to online resources 00294 * 00295 * @return void 00296 */ 00297 function main() { 00298 global $LANG; 00299 00300 // Adding module content: 00301 $this->content.=$this->doc->section($LANG->getLL('tsprop'),$this->browseTSprop($this->mode,$this->show),0,1); 00302 00303 // Adding link to TSref: 00304 if ($this->mode=='tsref') { 00305 $this->content.=$this->doc->section($LANG->getLL('tsprop_TSref'),' 00306 <a href="'. TYPO3_URL_DOCUMENTATION_TSREF.'" target="_blank">'.$LANG->getLL('tsprop_TSref',1).'</a> 00307 ',0,1); 00308 } 00309 // Adding link to admin guides etc: 00310 if ($this->mode=='page' || $this->mode=='beuser') { 00311 $this->content.=$this->doc->section($LANG->getLL('tsprop_tsconfig'),' 00312 <a href="' . TYPO3_URL_DOCUMENTATION_TSCONFIG . '" target="_blank">' . $LANG->getLL('tsprop_tsconfig',1) . '</a> 00313 ',0,1); 00314 } 00315 } 00316 00317 /** 00318 * Outputting the accumulated content to screen 00319 * 00320 * @return void 00321 */ 00322 function printContent() { 00323 $this->content.= $this->doc->endPage(); 00324 $this->content = $this->doc->insertStylesAndJS($this->content); 00325 echo $this->content; 00326 } 00327 00328 /** 00329 * Create the content of the module: 00330 * 00331 * @param string Object string 00332 * @param integer Pointing to an entry in static_tsconfig_help to show. 00333 * @return string HTML 00334 */ 00335 function browseTSprop($mode,$show) { 00336 global $LANG; 00337 00338 // Get object tree: 00339 $objTree = $this->getObjTree(); 00340 00341 // Show single element, if show is set. 00342 $out=''; 00343 if ($show) { 00344 // Get the entry data: 00345 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'static_tsconfig_help', 'uid='.intval($show)); 00346 $rec = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); 00347 $table = unserialize($rec['appdata']); 00348 $obj_string = strtr($this->objString,'()','[]'); // Title: 00349 00350 // Title and description: 00351 $out.='<a href="'.htmlspecialchars(t3lib_div::linkThisScript(array('show'=>''))).'" class="typo3-goBack">'. 00352 t3lib_iconWorks::getSpriteIcon('actions-view-go-back') . 00353 htmlspecialchars($obj_string). 00354 '</a><br />'; 00355 if ($rec['title']) $out.= '<strong>'.htmlspecialchars($rec['title']).': </strong>'; 00356 if ($rec['description']) $out.= nl2br(htmlspecialchars(trim($rec['description']))).'<br />'; 00357 00358 // Printing the content: 00359 $out.= '<br />'.$this->printTable($table, $obj_string, $objTree[$mode.'.']); 00360 $out.='<hr />'; 00361 00362 // Printing the "mixer-field": 00363 if (!$this->onlyProperty) { 00364 $links=array(); 00365 $links[]='<a href="#" onclick="mixerField(\'Indent\');return false;">'.$LANG->getLL('tsprop_mixer_indent',1).'</a>'; 00366 $links[]='<a href="#" onclick="mixerField(\'Outdent\');return false;">'.$LANG->getLL('tsprop_mixer_outdent',1).'</a>'; 00367 $links[]='<a href="#" onclick="mixerField(\'Wrap\',unescape(\''.rawurlencode($obj_string).'\'));return false;">'.$LANG->getLL('tsprop_mixer_wrap',1).'</a>'; 00368 $links[]='<a href="#" onclick="mixerField(\'Transfer\');return false;">'.$LANG->getLL('tsprop_mixer_transfer',1).'</a>'; 00369 $out.='<textarea rows="5" name="mixer" wrap="off"'.$this->doc->formWidthText(48,'','off').' class="fixed-font enable-tab"></textarea>'; 00370 $out.='<br /><strong>'.implode(' | ',$links).'</strong>'; 00371 $out.='<hr />'; 00372 } 00373 } 00374 00375 00376 // SECTION: Showing property tree: 00377 $tmpl = t3lib_div::makeInstance('ext_TSparser'); 00378 $tmpl->tt_track = 0; // Do not log time-performance information 00379 $tmpl->fixedLgd=0; 00380 $tmpl->linkObjects=0; 00381 $tmpl->bType=''; 00382 $tmpl->ext_expandAllNotes=1; 00383 $tmpl->ext_noPMicons=1; 00384 $tmpl->ext_noSpecialCharsOnLabels=1; 00385 00386 if (is_array($objTree[$mode.'.'])) { 00387 $out.=' 00388 00389 00390 <!-- 00391 TSconfig, object tree: 00392 --> 00393 <table border="0" cellpadding="0" cellspacing="0" class="t3-tree t3-tree-config" id="typo3-objtree"> 00394 <tr class="t3-row-header"><td>TSref</td></tr> 00395 <tr> 00396 <td nowrap="nowrap">'.$tmpl->ext_getObjTree($this->removePointerObjects($objTree[$mode.'.']),'','','','','1').'</td> 00397 </tr> 00398 </table>'; 00399 } 00400 00401 return $out; 00402 } 00403 00404 00405 00406 00407 00408 00409 00410 /*************************** 00411 * 00412 * Module functions 00413 * 00414 ***************************/ 00415 00416 /** 00417 * Create object tree from static_tsconfig_help table 00418 * 00419 * @return array Object tree. 00420 * @access private 00421 */ 00422 function getObjTree() { 00423 $objTree=array(); 00424 00425 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,obj_string,title', 'static_tsconfig_help', ''); 00426 while($rec = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { 00427 $rec['obj_string'] = $this->revertFromSpecialChars($rec['obj_string']); 00428 $p = explode(';',$rec['obj_string']); 00429 foreach ($p as $v) { 00430 $p2 = t3lib_div::trimExplode(':',$v,1); 00431 $subp=t3lib_div::trimExplode('/',$p2[1],1); 00432 foreach ($subp as $v2) { 00433 $this->setObj($objTree,explode('.',$p2[0].'.'.$v2),array($rec,$v2)); 00434 } 00435 } 00436 } 00437 return $objTree; 00438 } 00439 00440 /** 00441 * Sets the information from a static_tsconfig_help record in the object array. 00442 * Makes recursive calls. 00443 * 00444 * @param array Object tree array, passed by value! 00445 * @param array Array of elements from object path (?) 00446 * @param array Array with record and something else (?) 00447 * @return void 00448 * @access private 00449 * @see getObjTree() 00450 */ 00451 function setObj(&$objTree,$strArr,$params) { 00452 $key = current($strArr); 00453 reset($strArr); 00454 if (count($strArr)>1) { 00455 array_shift($strArr); 00456 if (!isset($objTree[$key.'.'])) $objTree[$key.'.']=array(); 00457 $this->setObj($objTree[$key.'.'],$strArr,$params); 00458 } else { 00459 $objTree[$key]=$params; 00460 $objTree[$key]['_LINK']=$this->doLink($params); 00461 } 00462 } 00463 00464 /** 00465 * Converts > and < to > and < 00466 * 00467 * @param string Input string 00468 * @return string Output string 00469 * @access private 00470 */ 00471 function revertFromSpecialChars($str) { 00472 $str = str_replace('>','>',$str); 00473 $str = str_replace('<','<',$str); 00474 return $str; 00475 } 00476 00477 /** 00478 * Creates a link based on input params array: 00479 * 00480 * @param array Parameters 00481 * @return string The link. 00482 * @access private 00483 */ 00484 function doLink($params) { 00485 $title = trim($params[0]['title'])?trim($params[0]['title']):'[GO]'; 00486 $str = $this->linkToObj($title,$params[0]['uid'],$params[1]); 00487 return $str; 00488 } 00489 00490 /** 00491 * Remove pointer strings from an array 00492 * 00493 * @param array Input array 00494 * @return array Modified input array 00495 * @access private 00496 */ 00497 function removePointerObjects($objArray) { 00498 foreach ($objArray as $k => $value) { 00499 if (substr(trim($k),0,2)=="->" && trim($k)!='->.') { 00500 $objArray['->.'][substr(trim($k),2)]=$objArray[$k]; 00501 unset($objArray[$k]); 00502 } 00503 } 00504 return $objArray; 00505 } 00506 00507 /** 00508 * Linking string to object by UID 00509 * 00510 * @param string String to link 00511 * @param integer UID of a static_tsconfig_help record. 00512 * @param string Title string for that record! 00513 * @return string Linked string 00514 */ 00515 function linkToObj($str,$uid,$objString='') { 00516 $aOnClick='jump(\''.rawurlencode($uid).'\',\''.rawurlencode($objString).'\');return false;'; 00517 return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.htmlspecialchars($str).'</a>'; 00518 } 00519 00520 /** 00521 * Creates a table of properties: 00522 * 00523 * @param array Array with properties for the current object path 00524 * @param string Object path 00525 * @param array Object tree 00526 * @return string HTML content. 00527 */ 00528 function printTable($table,$objString,$objTree) { 00529 if (is_array($table['rows'])) { 00530 00531 // Initialize: 00532 $lines=array(); 00533 00534 // Adding header: 00535 $lines[]=' 00536 <tr class="t3-row-header"> 00537 <td>Property:</td> 00538 <td>Data type:</td> 00539 <td>Description:</td> 00540 <td>Default:</td> 00541 </tr>'; 00542 00543 // Traverse the content of "rows": 00544 foreach($table['rows'] as $i => $row) { 00545 00546 // Linking: 00547 $lP=t3lib_div::trimExplode(LF,$row['property'],1); 00548 $lP2=array(); 00549 foreach ($lP as $k => $lStr) { 00550 $lP2[$k] = $this->linkProperty($lStr,$lStr,$objString,$row['datatype']); 00551 } 00552 $linkedProperties=implode('<hr />',$lP2); 00553 00554 // Data type: 00555 $dataType = $row['datatype']; 00556 00557 // Generally "->[something]" 00558 $reg=array(); 00559 preg_match('/->[[:alnum:]_]*/',$dataType,$reg); 00560 if ($reg[0] && is_array($objTree[$reg[0]])) { 00561 $dataType = str_replace($reg[0],'<a href="'.htmlspecialchars(t3lib_div::linkThisScript(array('show'=>$objTree[$reg[0]][0]['uid'],'objString'=>$objString.'.'.$lP[0]))).'">'.htmlspecialchars($reg[0]).'</a>',$dataType); 00562 } 00563 00564 // stdWrap 00565 if (!strstr($dataType,'->stdWrap') && strstr(strip_tags($dataType),'stdWrap')) { 00566 // Potential problem can be that "stdWrap" is substituted inside another A-tag. So maybe we should even check if there is already a <A>-tag present and if so, not make a substitution? 00567 $dataType = str_replace('stdWrap','<a href="'.htmlspecialchars(t3lib_div::linkThisScript(array('show'=>$objTree['->stdWrap'][0]['uid'],'objString'=>$objString.'.'.$lP[0]))).'">stdWrap</a>',$dataType); 00568 } 00569 00570 00571 $lines[]=' 00572 <tr class="t3-row ' . ($i % 2 ? 't3-row-even' : 't3-row-odd') . '"> 00573 <td valign="top" class="bgColor4-20" nowrap="nowrap"><strong>'.$linkedProperties.'</strong></td> 00574 <td valign="top">'.nl2br($dataType.' ').'</td> 00575 <td valign="top">'.nl2br($row['description']).'</td> 00576 <td valign="top">'.nl2br($row['default']).'</td> 00577 </tr>'; 00578 } 00579 // Return it all: 00580 return ' 00581 00582 00583 00584 <!-- 00585 TSconfig, attribute selector: 00586 --> 00587 <table border="0" cellpadding="0" cellspacing="1" width="98%" class="t3-table" id="typo3-attributes"> 00588 '.implode('',$lines).' 00589 </table>'; 00590 } 00591 } 00592 00593 /** 00594 * Creates a link on a property. 00595 * 00596 * @param string String to link 00597 * @param string Property value. 00598 * @param string Object path prefix to value 00599 * @param string Data type 00600 * @return string Linked $str 00601 */ 00602 function linkProperty($str,$propertyName,$prefix,$datatype) { 00603 $out=''; 00604 00605 // Setting preset value: 00606 if (strstr($datatype,'boolean')) { 00607 $propertyVal='1'; // preset "1" to boolean values. 00608 } 00609 00610 // Adding mixer features; The plus icon: 00611 if(!$this->onlyProperty) { 00612 $aOnClick = 'document.editform.mixer.value=unescape(\' '.rawurlencode($propertyName.'='.$propertyVal).'\')+\'\n\'+document.editform.mixer.value; return false;'; 00613 $out.= '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'. 00614 t3lib_iconWorks::getSpriteIcon('actions-edit-add', array('title' => $GLOBALS['LANG']->getLL('tsprop_addToList', TRUE))) . 00615 '</a>'; 00616 $propertyName = $prefix.'.'.$propertyName; 00617 } 00618 00619 // Wrap string: 00620 $aOnClick = 'setValue(unescape(\''.rawurlencode($propertyName).'\'),unescape(\''.rawurlencode($propertyVal).'\')); return false;'; 00621 $out.= '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$str.'</a>'; 00622 00623 // Return link: 00624 return $out; 00625 } 00626 00627 /** 00628 * Determines whether submitted field change functions are valid 00629 * and are coming from the system and not from an external abuse. 00630 * 00631 * @return boolean Whether the submitted field change functions are valid 00632 */ 00633 protected function areFieldChangeFunctionsValid() { 00634 return ( 00635 isset($this->P['fieldChangeFunc']) && is_array($this->P['fieldChangeFunc']) && isset($this->P['fieldChangeFuncHash']) 00636 && $this->P['fieldChangeFuncHash'] == t3lib_div::hmac(serialize($this->P['fieldChangeFunc'])) 00637 ); 00638 } 00639 } 00640 00641 00642 if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/wizard_tsconfig.php'])) { 00643 include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/wizard_tsconfig.php']); 00644 } 00645 00646 00647 00648 // Make instance: 00649 $SOBE = t3lib_div::makeInstance('SC_wizard_tsconfig'); 00650 $SOBE->init(); 00651 $SOBE->main(); 00652 $SOBE->printContent(); 00653 00654 ?>
1.8.0