TYPO3 API  SVNRelease
wizard_tsconfig.php
Go to the documentation of this file.
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('&nbsp; | &nbsp;',$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 &gt; and &lt; 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('&gt;','>',$str);
00473         $str = str_replace('&lt;','<',$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.'&nbsp;').'</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 ?>