Documentation TYPO3 par Ameos

class.tx_kickstarter_wizard.php

00001 <?php
00002 /***************************************************************
00003 *  Copyright notice
00004 *
00005 *  (c) 2001-2004 Kasper Skaarhoj (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 ***************************************************************/
00033 require_once(t3lib_extMgm::extPath("kickstarter")."modfunc1/class.tx_kickstarter_compilefiles.php");
00034 
00035 class tx_kickstarter_wizard extends tx_kickstarter_compilefiles {
00036         var $varPrefix = "kickstarter";         // redundant from "extrep"
00037         var $siteBackPath = "";
00038         var $EMmode=1;  // If run from Extension Manager, set to 1.
00039 
00040         var $wizArray=array();
00041 
00042         var $extKey_nusc = "myext";
00043         var $extKey = "my_ext";
00044         var $printWOP=0;
00045         var $outputWOP=0;
00046         var $saveKey="";
00047         var $pObj;
00048 
00049         var $afterContent;
00050 
00051         var $options = array(
00052                 "emconf" => array("General info", "Enter general information about the extension here: Title, description, category, author..."),
00053                 "tables" => array("New Database Tables", "Add database tables which can be edited inside the backend. These tables will be added to the global TCA array in TYPO3.","cm.png"),
00054                 "fields" => array("Extend existing Tables", "Add custom fields to existing tables, such as the 'pages', 'tt_content', 'fe_users' or 'be_users' table."),
00055                 "pi" => array("Frontend Plugins", "Create frontend plugins. Plugins are web applications running on the website itself (not in the backend of TYPO3). The default guestbook, message board, shop, rating feature etc. are examples of plugins. Even this very interface (the Extension Kickstarter) is a plugin (extension key 'kickstarter')."),
00056                 "module" => array("Backend Modules", "Create backend modules. A module is normally recognized as the application behind one of the TYPO3 backend menuitems. Examples are the Web>Page, Web>List, User>Setup, Doc module etc. In a more loose sense, all applications integrated with existing module (see below) also belongs to the 'module' category."),
00057                 "moduleFunction" => array("Integrate in existing Modules", "Extend existing modules with new function-menu items. Examples are extensions such as 'User>Task Center, Messaging' which adds internal messaging to TYPO3. Or 'Web>Info, Page TSconfig' which shows the Page TSconfiguration for a page. Or 'Web>Func, Wizards, Sort pages' which is a wizard for re-ordering pages in a folder."),
00058                 "cm" => array("Clickmenu items", "Adds a custom item to the clickmenus of database records. This is a very cool way to integrate small tools of your own in an elegant way!"),
00059                 'sv' => array('Services', 'Create a Services class. With a Services extension you can extend TYPO3 (or an extension which use Services) with functionality, without any changes to the code which use that service.'),
00060                 "ts" => array("Static TypoScript code", "Adds static TypoScript Setup and Constants code - just like a static template would do."),
00061                 "TSconfig" => array("TSconfig", "Adds default Page-TSconfig or User-TSconfig. Can be used to preset options inside TYPO3."),
00062                 "languages" => array("Setup languages", "Start here by entering the number of system languages you want to use in your extension."),
00063         );
00064 
00065         var $languages = array(
00066                 "dk" => "Danish",
00067                 "de" => "German",
00068                 "no" => "Norwegian",
00069                 "it" => "Italian",
00070                 "fr" => "French",
00071                 "es" => "Spanish",
00072                 "nl" => "Dutch",
00073                 "cz" => "Czech",
00074                 "pl" => "Polish",
00075                 "si" => "Slovenian",
00076                 "fi" => "Finnish",
00077                 "tr" => "Turkish",
00078                 "se" => "Swedish",
00079                 "pt" => "Portuguese",
00080                 "ru" => "Russian",
00081                 "ro" => "Romanian",
00082                 "ch" => "Chinese",
00083                 "sk" => "Slovak",
00084                 "lt" => "Lithuanian",
00085                 'is' => 'Icelandic',
00086                 'hr' => 'Croatian',
00087                 'hu' => 'Hungarian',
00088                 'gl' => 'Greenlandic',
00089                 'th' => 'Thai',
00090                 'gr' => 'Greek',
00091                 'hk' => 'Chinese (Trad)',
00092                 'eu' => 'Basque',
00093                 'bg' => 'Bulgarian',
00094                 'br' => 'Brazilian Portuguese',
00095                 'et' => 'Estonian',
00096                 'ar' => 'Arabic',
00097                 'he' => 'Hebrew',
00098                 'ua' => 'Ukrainian',
00099                 'lv' => 'Latvian',
00100                 'jp' => 'Japanese',
00101                 'vn' => 'Vietnamese',
00102                 'ca' => 'Catalan',
00103                 'ba' => 'Bosnian',
00104                 'kr' => 'Korean',
00105         );
00106         var $reservedTypo3Fields="uid,pid,endtime,starttime,sorting,fe_group,hidden,deleted,cruser_id,crdate,tstamp";
00107         var $mysql_reservedFields="data,table,field,key,desc";
00108 
00109                 // Internal:
00110         var $selectedLanguages = array();
00111         var $usedNames=array();
00112         var $fileArray=array();
00113         var $ext_tables=array();
00114         var $ext_localconf=array();
00115         var $ext_locallang=array();
00116 
00117         var $color = array("#C8D0B3","#FEE7B5","#eeeeee");
00118 
00119         var $modData;
00120 
00121         function tx_kickstarter_wizard() {
00122           $this->modData = t3lib_div::_POST($this->varPrefix);
00123         }
00124 
00125 
00126         function initWizArray() {
00127                 $inArray = unserialize(base64_decode($this->modData["wizArray_ser"]));
00128                 $this->wizArray = is_array($inArray) ? $inArray : array();
00129                 if (is_array($this->modData["wizArray_upd"]))   {
00130                         $this->wizArray = t3lib_div::array_merge_recursive_overrule($this->wizArray,$this->modData["wizArray_upd"]);
00131                 }
00132 
00133                 $lA = is_array($this->wizArray["languages"]) ? current($this->wizArray["languages"]) : "";
00134                 if (is_array($lA))      {
00135                         reset($lA);
00136                         while(list($k,$v)=each($lA))    {
00137                                 if ($v && isset($this->languages[$k]))  {
00138                                         $this->selectedLanguages[$k]=$this->languages[$k];
00139                                 }
00140                         }
00141                 }
00142         }
00143 
00144         function mgm_wizard()   {
00145                 $this->initWizArray();
00146 
00147                 $saveKey = $this->saveKey = $this->wizArray["save"]["extension_key"] = trim($this->wizArray["save"]["extension_key"]);
00148                 $this->outputWOP = $this->wizArray["save"]["print_wop_comments"] ? 1 : 0;
00149 
00150 
00151 
00152                 if ($saveKey)   {
00153                         $this->extKey=$saveKey;
00154                         $this->extKey_nusc=str_replace("_","",$saveKey);
00155                 }
00156 
00157                 if ($this->modData["viewResult"])       {
00158                         $this->modData["wizAction"]="";
00159                         $this->modData["wizSubCmd"]="";
00160                         if ($saveKey)   {
00161                                 $content = $this->view_result();
00162                         } else $content = $this->fw("<strong>Error:</strong> Please enter an extension key first!<BR><BR>");
00163                 } elseif ($this->modData["WRITE"])      {
00164                         $this->modData["wizAction"]="";
00165                         $this->modData["wizSubCmd"]="";
00166                         if ($saveKey)   {
00167                                 $this->makeFilesArray($this->saveKey);
00168                                 $uploadArray = $this->makeUploadArray($this->saveKey,$this->fileArray);
00169                                 $this->pObj->importExtFromRep(0,$this->modData["loc"],0,$uploadArray);
00170                         } else $content = $this->fw("<strong>Error:</strong> Please enter an extension key first!<BR><BR>");
00171                 } elseif ($this->modData["totalForm"])  {
00172                         $content = $this->totalForm();
00173                 } elseif ($this->modData["downloadAsFile"])     {
00174                         if ($saveKey)   {
00175                                 $this->makeFilesArray($this->saveKey);
00176                                 $uploadArray = $this->makeUploadArray($this->saveKey,$this->fileArray);
00177                                 $backUpData = $this->makeUploadDataFromArray($uploadArray);
00178                                 $filename="T3X_".$saveKey."-".str_replace(".","_","0.0.0").".t3x";
00179                                 $mimeType = "application/octet-stream";
00180                                 Header("Content-Type: ".$mimeType);
00181                                 Header("Content-Disposition: attachment; filename=".$filename);
00182                                 echo $backUpData;
00183                                 exit;
00184                         } else $content = $this->fw("<strong>Error:</strong> Please enter an extension key first!<BR><BR>");
00185                 } else {
00186                         $action = explode(":",$this->modData["wizAction"]);
00187                         if ((string)$action[0]=="deleteEl")     {
00188                                 unset($this->wizArray[$action[1]][$action[2]]);
00189                         }
00190 
00191                         $content = $this->getFormContent();
00192                 }
00193                 $wasContent = $content?1:0;
00194                 $content = '
00195                 <script language="javascript" type="text/javascript">
00196                         function setFormAnchorPoint(anchor)     {
00197                                 document.'.$this->varPrefix.'_wizard.action = unescape("'.rawurlencode($this->linkThisCmd()).'")+"#"+anchor;
00198                         }
00199                 </script>
00200                 <table border=0 cellpadding=0 cellspacing=0>
00201                         <form action="'.$this->linkThisCmd().'" method="POST" name="'.$this->varPrefix.'_wizard">
00202                         <tr>
00203                                 <td valign=top>'.$this->sidemenu().'</td>
00204                                 <td>&nbsp;&nbsp;&nbsp;</td>
00205                                 <td valign=top>'.$content.'
00206                                         <input type="hidden" name="'.$this->piFieldName("wizArray_ser").'" value="'.htmlspecialchars(base64_encode(serialize($this->wizArray))).'" /><BR>';
00207 
00208                 if ((string)$this->modData["wizSubCmd"])        {
00209                         if ($wasContent)        $content.='<input name="update2" type="submit" value="Update..."> ';
00210                 }
00211                 $content.='
00212                                         <input type="hidden" name="'.$this->piFieldName("wizAction").'" value="'.$this->modData["wizAction"].'">
00213                                         <input type="hidden" name="'.$this->piFieldName("wizSubCmd").'" value="'.$this->modData["wizSubCmd"].'">
00214                                         '.$this->cmdHiddenField().'
00215                                 </td>
00216                         </tr>
00217                         </form>
00218                 </table>'.$this->afterContent;
00219 
00220                 return $content;
00221         }
00222 
00226         function getFormContent()       {
00227                 switch((string)$this->modData["wizSubCmd"])     {
00228                         case "tables":
00229                                 $content.=$this->add_cat_tables();
00230                         break;
00231                         case "fields":
00232                                 $content.=$this->add_cat_fields();
00233                         break;
00234                         case "pi":
00235                                 $content.=$this->add_cat_pi();
00236                         break;
00237                         case "TSconfig":
00238                                 $content.=$this->add_cat_TSconfig();
00239                         break;
00240                         case "ts":
00241                                 $content.=$this->add_cat_ts();
00242                         break;
00243                         case "cm":
00244                                 $content.=$this->add_cat_cm();
00245                         break;
00246                         case "module":
00247                                 $content.=$this->add_cat_module();
00248                         break;
00249                         case "moduleFunction":
00250                                 $content.=$this->add_cat_moduleFunction();
00251                         break;
00252                         case "languages":
00253                                 $content.=$this->add_cat_languages();
00254                         break;
00255                         case 'sv':
00256                                 $content.=$this->add_cat_services();
00257                         break;
00258                         case "emconf":
00259                                 $content.=$this->add_cat_emconf();
00260                         break;
00261                         default:
00262                         break;
00263                 }
00264                 return $content;
00265         }
00266 
00270         function totalForm()    {
00271                 $buf = array($this->printWOP,$this->dontPrintImages);
00272                 $this->printWOP = 1;
00273 
00274                 reset($this->options);
00275                 $lines=array();
00276                 while(list($k,$v)=each($this->options)) {
00277                         // Add items:
00278                         $items = $this->wizArray[$k];
00279                         if (is_array($items))   {
00280                                 reset($items);
00281                                 while(list($k2,$conf)=each($items))     {
00282                                         $this->modData["wizSubCmd"]=$k;
00283                                         $this->modData["wizAction"]="edit:".$k2;
00284                                         $lines[]=$this->getFormContent();
00285                                 }
00286                         }
00287                 }
00288 
00289                 $this->modData["wizSubCmd"]="";
00290                 $this->modData["wizAction"]="";
00291                 list($this->printWOP,$this->dontPrintImages) = $buf;
00292 
00293                 $content = implode("<HR>",$lines);
00294                 return $content;
00295         }
00296 
00300         function sidemenu()     {
00301 #debug($this->modData);
00302                 $actionType = $this->modData["wizSubCmd"].":".$this->modData["wizAction"];
00303                 $singles = "emconf,save,ts,TSconfig,languages";
00304                 reset($this->options);
00305                 $lines=array();
00306                 while(list($k,$v)=each($this->options)) {
00307                         // Add items:
00308                         $items = $this->wizArray[$k];
00309                         $c=0;
00310                         $iLines=array();
00311                         if (is_array($items))   {
00312                                 reset($items);
00313                                 while(list($k2,$conf)=each($items))     {
00314                                         $dummyTitle = t3lib_div::inList($singles,$k) ? "[Click to Edit]" : "<em>Item ".$k2."</em>";
00315                                         $isActive = !strcmp($k.":edit:".$k2,$actionType);
00316                                         $delIcon = $this->linkStr('<img src="'.$this->siteBackPath.'t3lib/gfx/garbage.gif" width="11" height="12" border="0" title="Remove item">',"","deleteEl:".$k.":".$k2);
00317                                         $iLines[]='<tr'.($isActive?$this->bgCol(2,-30):$this->bgCol(2)).'><td>'.$this->fw($this->linkStr($this->bwWithFlag($conf["title"]?$conf["title"]:$dummyTitle,$isActive),$k,'edit:'.$k2)).'</td><td>'.$delIcon.'</td></tr>';
00318                                         $c=$k2;
00319                                 }
00320                         }
00321                         if (!t3lib_div::inList($singles,$k) || !count($iLines)) {
00322                                 $c++;
00323                                 $addIcon = $this->linkStr('<img src="'.$this->siteBackPath.'t3lib/gfx/add.gif" width="12" height="12" border="0" title="Add item">',$k,'edit:'.$c);
00324                         } else {$addIcon = "";}
00325 
00326                         $lines[]='<tr'.$this->bgCol(1).'><td nowrap><strong>'.$this->fw($v[0]).'</strong></td><td>'.$addIcon.'</td></tr>';
00327                         $lines = array_merge($lines,$iLines);
00328                 }
00329 
00330                 $lines[]='<tr><td>&nbsp;</td><td></td></tr>';
00331 
00332                 $lines[]='<tr><td width=150>
00333                 '.$this->fw("Enter extension key:").'<BR>
00334                 <input type="text" name="'.$this->piFieldName("wizArray_upd").'[save][extension_key]" value="'.$this->wizArray["save"]["extension_key"].'">
00335                 '.($this->wizArray["save"]["extension_key"]?"":'<BR><a href="http://typo3.org/1382.0.html" target="_blank"><font color=red>Make sure to enter the right extension key from the beginning here!</font> You can register one here.</a>').'
00336                 </td><td></td></tr>';
00337 # onClick="setFormAnchorPoint(\'_top\')"
00338                 $lines[]='<tr><td><input type="submit" value="Update..."></td><td></td></tr>';
00339                 $lines[]='<tr><td><input type="submit" name="'.$this->piFieldName("totalForm").'" value="Total form"></td><td></td></tr>';
00340 
00341                 if ($this->saveKey)     {
00342                         $lines[]='<tr><td><input type="submit" name="'.$this->piFieldName("viewResult").'" value="View result"></td><td></td></tr>';
00343                         $lines[]='<tr><td><input type="submit" name="'.$this->piFieldName("downloadAsFile").'" value="D/L as file"></td><td></td></tr>';
00344                         $lines[]='<tr><td>
00345                         <input type="hidden" name="'.$this->piFieldName("wizArray_upd").'[save][print_wop_comments]" value="0"><input type="checkbox" name="'.$this->piFieldName("wizArray_upd").'[save][print_wop_comments]" value="1" '.($this->wizArray["save"]["print_wop_comments"]?" CHECKED":"").'>'.$this->fw("Print WOP comments").'
00346                         </td><td></td></tr>';
00347                 }
00348 
00349                 /* HOOK: Place a hook here, so additional output can be integrated */
00350                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['sidemenu'])) {
00351                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['sidemenu'] as $_funcRef) {
00352                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00353                   }
00354                 }
00355 
00356                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
00357                 return $content;
00358         }
00359 
00363         function view_result()  {
00364                 $this->makeFilesArray($this->saveKey);
00365 
00366                 $keyA = array_keys($this->fileArray);
00367                 asort($keyA);
00368 
00369                 $filesOverview1=array();
00370                 $filesOverview2=array();
00371                 $filesContent=array();
00372                 reset($keyA);
00373 
00374                         $filesOverview1[]= '<tr'.$this->bgCol(1).'>
00375                                 <td><strong>'.$this->fw("Filename:").'</strong></td>
00376                                 <td><strong>'.$this->fw("Size:").'</strong></td>
00377                                 <td><strong>'.$this->fw("&nbsp;").'</strong></td>
00378                         </tr>';
00379 
00380                 while(list(,$fileName)=each($keyA))     {
00381                         $data = $this->fileArray[$fileName];
00382 
00383                         $fI = pathinfo($fileName);
00384                         if (t3lib_div::inList("php,sql,txt",strtolower($fI["extension"])))      {
00385                                 $linkToFile='<strong><a href="#'.md5($fileName).'">'.$this->fw("&nbsp;View&nbsp;").'</a></strong>';
00386                                 $filesContent[]='<tr'.$this->bgCol(1).'>
00387                                 <td><a name="'.md5($fileName).'"></a><strong>'.$this->fw($fileName).'</strong></td>
00388                                 </tr>
00389                                 <tr>
00390                                         <td>'.$this->preWrap($data["content"]).'</td>
00391                                 </tr>';
00392                         } else $linkToFile=$this->fw("&nbsp;");
00393 
00394                         $line = '<tr'.$this->bgCol(2).'>
00395                                 <td>'.$this->fw($fileName).'</td>
00396                                 <td>'.$this->fw(t3lib_div::formatSize($data["size"])).'</td>
00397                                 <td>'.$linkToFile.'</td>
00398                         </tr>';
00399                         if (strstr($fileName,"/"))      {
00400                                 $filesOverview2[]=$line;
00401                         } else {
00402                                 $filesOverview1[]=$line;
00403                         }
00404                 }
00405 
00406                 $content = '<table border=0 cellpadding=1 cellspacing=2>'.implode("",$filesOverview1).implode("",$filesOverview2).'</table>';
00407                 $content.= $this->fw("<BR><strong>Author name:</strong> ".$GLOBALS['BE_USER']->user['realName']."
00408                                                         <BR><strong>Author email:</strong> ".$GLOBALS['BE_USER']->user['email']);
00409 
00410 
00411                 $content.= '<BR><BR>';
00412                 if (!$this->EMmode)     {
00413                         $content.='<input type="submit" name="'.$this->piFieldName("WRITE").'" value="WRITE to \''.$this->saveKey.'\'">';
00414                 } else {
00415                         $content.='
00416                                 <strong>'.$this->fw("Write to location:").'</strong><BR>
00417                                 <select name="'.$this->piFieldName("loc").'">'.
00418                                         ($this->pObj->importAsType("G")?'<option value="G">Global: '.$this->pObj->typePaths["G"].$this->saveKey."/".(@is_dir(PATH_site.$this->pObj->typePaths["G"].$this->saveKey)?" (OVERWRITE)":" (empty)").'</option>':'').
00419                                         ($this->pObj->importAsType("L")?'<option value="L">Local: '.$this->pObj->typePaths["L"].$this->saveKey."/".(@is_dir(PATH_site.$this->pObj->typePaths["L"].$this->saveKey)?" (OVERWRITE)":" (empty)").'</option>':'').
00420                                 '</select>
00421                                 <input type="submit" name="'.$this->piFieldName("WRITE").'" value="WRITE" onClick="return confirm(\'If the setting in the selectorbox says OVERWRITE\nthen the current extension in that location WILL be overridden! Totally!\nPlease decide if you want to continue.\n\n(Remember, this is a *kickstarter* - not an editor!)\');">
00422                         ';
00423                 }
00424 
00425 
00426                 $this->afterContent= '<BR><table border=0 cellpadding=1 cellspacing=2>'.implode("",$filesContent).'</table>';
00427                 return $content;
00428         }
00429 
00433         function add_cat_pi()   {
00434                 $lines=array();
00435 
00436                 $catID = "pi";
00437 
00438                 $action = explode(":",$this->modData["wizAction"]);
00439                 if ($action[0]=="edit") {
00440                         $this->regNewEntry($catID,$action[1]);
00441                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"<strong>Edit Plugin #".$action[1]."</strong>",$action[1]);
00442                         $piConf = $this->wizArray[$catID][$action[1]];
00443                         $ffPrefix='['.$catID.']['.$action[1].']';
00444 
00445 
00446                                 // Enter title of the plugin
00447                         $subContent="<strong>Enter a title for the plugin:</strong><BR>".
00448                                 $this->renderStringBox_lang("title",$ffPrefix,$piConf);
00449                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00450 
00451                         $subContent = $this->renderCheckBox($ffPrefix."[plus_user_obj]",$piConf["plus_user_obj"])."USER cObjects are cached. Make it a non-cached USER_INT instead<BR>";
00452                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00453 
00454                         $subContent = $this->renderCheckBox($ffPrefix."[plus_not_staticTemplate]",$piConf["plus_not_staticTemplate"])."Enable this option if you want the TypoScript code to be set by default. Otherwise the code will go into a static template file which must be included in the template record (recommended is to <em>not</em> set this option).<BR>";
00455                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00456 
00457 
00458                                 // Position
00459                         if (is_array($this->wizArray["fields"]))        {
00460                                 $optValues = array(
00461                                         "0" => "",
00462                                 );
00463                                 reset($this->wizArray["fields"]);
00464                                 while(list($kk,$fC)=each($this->wizArray["fields"]))    {
00465                                         if ($fC["which_table"]=="tt_content")   {
00466                                                 $optValues[$kk]=($fC["title"]?$fC["title"]:"Item ".$kk)." (".count($fC["fields"])." fields)";
00467                                         }
00468                                 }
00469                                 if (count($optValues)>1)        {
00470                                         $subContent="<strong>Apply a set of extended fields</strong><BR>
00471                                                 If you have configured a set of extra fields (Extend existing Tables) for the tt_content table, you can have them assigned to this plugin.
00472                                                 <BR>".
00473                                                 $this->renderSelectBox($ffPrefix."[apply_extended]",$piConf["apply_extended"],$optValues);
00474                                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00475                                 }
00476                         }
00477 
00478 /*                              // Enter title of the plugin
00479                         $subContent="<strong>Enter a 'key'-string for the plugin:</strong><BR>".
00480                                 $this->renderStringBox($ffPrefix."[keystring]",$piConf["keystring"]).
00481                                 "<BR>(<em>A key string is used as a sub-prefix to the class name, in the database as identification of the plugin etc. If you don't specify any, the wizard will make one based on the title above.<BR>
00482                                         Example: If your extension has the extension key 'my_extension' and you enter the key value 'crazymenu', then the class, additional fields etc. will be named 'tx_myextension_crazymenu'<BR>
00483                                         Use a-z characters only.</em>)"
00484                                 ;
00485                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00486 */
00487 
00488 
00489 
00490 
00491                                 // Insert Plugin
00492                         if (is_array($this->wizArray["tables"]))        {
00493                                 $optValues = array(
00494                                         "0" => "",
00495                                 );
00496                                 reset($this->wizArray["tables"]);
00497                                 while(list($kk,$fC)=each($this->wizArray["tables"]))    {
00498                                         $optValues[$kk]=($fC["tablename"]||$fC["title"]?$fC["title"]." (".$this->returnName($this->extKey,"tables").($fC["tablename"]?"_".$fC["tablename"]:"").")":"Item ".$kk)." (".count($fC["fields"])." fields)";
00499                                 }
00500                                 $incListing="<BR><BR>If you have configured custom tables you can select one of the tables to list by default as an example:
00501                                                 <BR>".
00502                                                 $this->renderSelectBox($ffPrefix."[list_default]",$piConf["list_default"],$optValues);
00503                                 $incListing.="<BR>".$this->renderCheckBox($ffPrefix."[list_default_listmode]",$piConf["list_default_listmode"]).
00504                                         "Listing: Sections instead of table-rows";
00505                                 $incListing.="<BR>".$this->renderCheckBox($ffPrefix."[list_default_singlemode]",$piConf["list_default_singlemode"]).
00506                                         "Singleview: Sections instead of table-rows";
00507                         } else $incListing="";
00508 
00509 
00510                         if (!$piConf["addType"])        $piConf["addType"]="list_type";
00511                         $subContent=$this->renderRadioBox($ffPrefix."[addType]",$piConf["addType"],"list_type").
00512                                 $this->textSetup(
00513                                 "Add to 'Insert Plugin' list in Content Elements",
00514                                 "Most frontend plugins should be added to the Plugin list of Content Element type 'Insert Plugin'. This is what happens with most other plugins you know of.".
00515                                 $this->resImg("pi_pi.png").
00516                                 "<BR>".$this->renderCheckBox($ffPrefix."[plus_wiz]",$piConf["plus_wiz"]).
00517                                 "Add icon to 'New Content Element' wizard:".
00518                                 $this->resImg("pi_cewiz.png").
00519                                 "Write a description for the entry (if any):<BR>".
00520                                 $this->renderStringBox_lang("plus_wiz_description",$ffPrefix,$piConf).$incListing
00521                                 );
00522                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00523 
00524                                 // Text box
00525                         $subContent=$this->renderRadioBox($ffPrefix."[addType]",$piConf["addType"],"textbox").
00526                                 $this->textSetup("Add as a 'Textbox' type",
00527                                 "The Textbox Content Element is not very common but has a confortable set of fields: Bodytext and image upload.".
00528                                 $this->resImg("pi_textbox.png"));
00529                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00530 
00531                                 // Menu/Sitemap
00532                         $subContent=$this->renderRadioBox($ffPrefix."[addType]",$piConf["addType"],"menu_sitemap").
00533                                 $this->textSetup("Add as a 'Menu/Sitemap' item",
00534                                         "Adds the plugin to the Menu/Sitemap list. Use this if your plugin is a list of links to pages or elements on the website. An alternative sitemap? Or some special kind of menu in a special design?".
00535                                         $this->resImg("pi_menu_sitemap.png"));
00536                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00537 
00538                                 // New content element
00539                         $subContent=$this->renderRadioBox($ffPrefix."[addType]",$piConf["addType"],"ce").
00540                                 $this->textSetup("Add as a totally new Content Element type",
00541                                         "You can also take the plunge into a whole new content element type! Scarry eh?".
00542                                         $this->resImg("pi_ce.png").
00543 /*                                      $this->renderCheckBox($ffPrefix."[plus_rte]",$piConf["plus_rte"])."Enable Rich Text editing for the bodytext field<BR>".
00544                                         $this->renderCheckBox($ffPrefix."[plus_images]",$piConf["plus_images"])."Enable images-field<BR>".
00545                                         $this->renderCheckBox($ffPrefix."[plus_no_header]",$piConf["plus_images"])."Disable header rendering<BR>".
00546                                         $this->renderCheckBox($ffPrefix."[plus_insert_check]",$piConf["plus_insert_check"])."Insert a custom checkbox field<BR>".
00547                                         $this->renderCheckBox($ffPrefix."[plus_insert_select]",$piConf["plus_insert_select"])."Insert a custom select field<BR>".
00548                                         $this->renderCheckBox($ffPrefix."[plus_insert_string]",$piConf["plus_insert_string"])."Insert a custom text string field<BR>".
00549                                         $this->renderCheckBox($ffPrefix."[plus_insert_file]",$piConf["plus_insert_file"])."Insert a custom file field<BR>".
00550         */                              ''
00551                                 );
00552                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00553 
00554                                 // New header type
00555                         $subContent=$this->renderRadioBox($ffPrefix."[addType]",$piConf["addType"],"header").
00556                                 $this->textSetup("Add as a new header type",
00557                                         "Finally you might insert a new header type here:".
00558                                         $this->resImg("pi_header.png"));
00559                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00560 
00561                                 // Processing of tags in content.
00562                         $subContent=$this->renderRadioBox($ffPrefix."[addType]",$piConf["addType"],"typotags").
00563                                 $this->textSetup("Processing of userdefined tag",
00564                                                 htmlspecialchars("If you wish the plugin to proces content from a userdefined tag in Content Element text-fields, enter the tagname here. Eg. if you wish the tags <mytag>This is the content</mytag> to be your userdefined tags, just enter 'mytag' in this field (lowercase a-z, 0-9 and underscore):")."<BR>".
00565                                                         $this->renderStringBox($ffPrefix."[tag_name]",$piConf["tag_name"])
00566                                         );
00567                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00568 
00569                                 // Just include library
00570                         $subContent=$this->renderRadioBox($ffPrefix."[addType]",$piConf["addType"],"includeLib").
00571                                 $this->textSetup("Just include library",
00572                                         "In this case your library is just included when pages are rendered.<BR><BR>".
00573                                         $this->renderCheckBox($ffPrefix."[plus_user_ex]",$piConf["plus_user_ex"])."Provide TypoScript example for USER cObject in 'page.1000'<BR>"
00574                                         );
00575                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00576                 }
00577 
00578                 /* HOOK: Place a hook here, so additional output can be integrated */
00579                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_pi'])) {
00580                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_pi'] as $_funcRef) {
00581                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00582                   }
00583                 }
00584 
00585                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
00586                 return $content;
00587         }
00588 
00592         function add_cat_ts()   {
00593                 $lines=array();
00594 
00595                 $catID = "ts";
00596                 $action = explode(":",$this->modData["wizAction"]);
00597                 if ($action[0]=="edit") {
00598                         $action[1]=1;
00599                         $this->regNewEntry($catID,$action[1]);
00600 
00601                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
00602                         $piConf = $this->wizArray[$catID][$action[1]];
00603                         $ffPrefix='['.$catID.']['.$action[1].']';
00604 
00605                                 // Enter constants
00606                         $subContent="<strong>Constants:</strong><BR>".
00607                                 $this->renderTextareaBox($ffPrefix."[constants]",$piConf["constants"]);
00608                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00609 
00610                                 // Enter setup
00611                         $subContent="<strong>Setup:</strong><BR>".
00612                                 $this->renderTextareaBox($ffPrefix."[setup]",$piConf["setup"]);
00613                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00614                 }
00615 
00616                 /* HOOK: Place a hook here, so additional output can be integrated */
00617                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_ts'])) {
00618                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_ts'] as $_funcRef) {
00619                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00620                   }
00621                 }
00622 
00623                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
00624                 return $content;
00625         }
00626 
00630         function add_cat_TSconfig()     {
00631                 $lines=array();
00632 
00633                 $catID = "TSconfig";
00634                 $action = explode(":",$this->modData["wizAction"]);
00635                 if ($action[0]=="edit") {
00636                         $action[1]=1;
00637                         $this->regNewEntry($catID,$action[1]);
00638 
00639                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
00640                         $piConf = $this->wizArray[$catID][$action[1]];
00641                         $ffPrefix='['.$catID.']['.$action[1].']';
00642 
00643                                 // Enter Page TSconfige
00644                         $subContent="<strong>Default Page TSconfig:</strong><BR>".
00645                                 $this->renderTextareaBox($ffPrefix."[page_TSconfig]",$piConf["page_TSconfig"]);
00646                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00647 
00648                                 // Enter User TSconfig
00649                         $subContent="<strong>Default User TSconfig:</strong><BR>".
00650                                 $this->renderTextareaBox($ffPrefix."[user_TSconfig]",$piConf["user_TSconfig"]);
00651                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00652                 }
00653 
00654                 /* HOOK: Place a hook here, so additional output can be integrated */
00655                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_tsconfig'])) {
00656                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_tsconfig'] as $_funcRef) {
00657                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00658                   }
00659                 }
00660 
00661                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
00662                 return $content;
00663         }
00664 
00668         function add_cat_module()       {
00669                 $lines=array();
00670 
00671                 $catID = "module";
00672                 $action = explode(":",$this->modData["wizAction"]);
00673                 if ($action[0]=="edit") {
00674                         $this->regNewEntry($catID,$action[1]);
00675                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
00676                         $piConf = $this->wizArray[$catID][$action[1]];
00677                         $ffPrefix='['.$catID.']['.$action[1].']';
00678 
00679                                 // Enter title of the module
00680                         $subContent="<strong>Enter a title for the module:</strong><BR>".
00681                                 $this->renderStringBox_lang("title",$ffPrefix,$piConf);
00682                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00683 
00684                                 // Description
00685                         $subContent="<strong>Enter a description:</strong><BR>".
00686                                 $this->renderStringBox_lang("description",$ffPrefix,$piConf);
00687                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00688 
00689                                 // Description
00690                         $subContent="<strong>Enter a tab label (shorter description):</strong><BR>".
00691                                 $this->renderStringBox_lang("tablabel",$ffPrefix,$piConf);
00692                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00693 
00694                                 // Position
00695                         $optValues = array(
00696                                 "web" => "Sub in Web-module",
00697                                 "file" => "Sub in File-module",
00698                                 "user" => "Sub in User-module",
00699                                 "tools" => "Sub in Tools-module",
00700                                 "help" => "Sub in Help-module",
00701                                 "_MAIN" => "New main module"
00702                         );
00703                         $subContent="<strong>Sub- or main module?</strong><BR>".
00704                                 $this->renderSelectBox($ffPrefix."[position]",$piConf["position"],$optValues).
00705                                 $this->resImg("module.png");
00706                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00707 
00708                                 // Sub-position
00709                         $optValues = array(
00710                                 "0" => "Bottom (default)",
00711                                 "top" => "Top",
00712                                 "web_after_page" => "If in Web-module, after Web>Page",
00713                                 "web_before_info" => "If in Web-module, before Web>Info",
00714                         );
00715                         $subContent="<strong>Position in module menu?</strong><BR>".
00716                                 $this->renderSelectBox($ffPrefix."[subpos]",$piConf["subpos"],$optValues);
00717                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00718 
00719                                 // Admin only
00720                         $subContent = $this->renderCheckBox($ffPrefix."[admin_only]",$piConf["admin_only"])."Admin-only access!<BR>";
00721                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00722 
00723                                 // Options
00724                         $subContent = $this->renderCheckBox($ffPrefix."[interface]",$piConf["interface"])."Allow other extensions to interface with function menu<BR>";
00725 #                       $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00726                 }
00727 
00728                 /* HOOK: Place a hook here, so additional output can be integrated */
00729                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_module'])) {
00730                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_module'] as $_funcRef) {
00731                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00732                   }
00733                 }
00734 
00735                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
00736                 return $content;
00737         }
00738 
00742         function add_cat_moduleFunction()       {
00743                 $lines=array();
00744 
00745                 $catID = "moduleFunction";
00746                 $action = explode(":",$this->modData["wizAction"]);
00747                 if ($action[0]=="edit") {
00748                         $this->regNewEntry($catID,$action[1]);
00749                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
00750                         $piConf = $this->wizArray[$catID][$action[1]];
00751                         $ffPrefix='['.$catID.']['.$action[1].']';
00752 
00753                                 // Enter title of the module function
00754                         $subContent="<strong>Enter the title of function-menu item:</strong><BR>".
00755                                 $this->renderStringBox_lang("title",$ffPrefix,$piConf);
00756                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00757 
00758                                 // Position
00759                         $optValues = array(
00760                                 "web_func" => "Web>Func",
00761                                 "web_func_wizards" => "Web>Func, Wizards",
00762                                 "web_info" => "Web>Info",
00763                                 "web_ts" => "Web>Template",
00764                                 "user_task" => "User>Task Center",
00765                         );
00766                         $subContent="<strong>Sub- or main module?</strong><BR>".
00767                                 $this->renderSelectBox($ffPrefix."[position]",$piConf["position"],$optValues).
00768                                 "<BR><BR>These images gives you an idea what the options above means:".
00769                                 $this->resImg("modulefunc_task.png").
00770                                 $this->resImg("modulefunc_func.png");
00771                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00772 
00773                 }
00774 
00775                 /* HOOK: Place a hook here, so additional output can be integrated */
00776                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_moduleFunction'])) {
00777                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_moduleFunction'] as $_funcRef) {
00778                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00779                   }
00780                 }
00781 
00782                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
00783                 return $content;
00784         }
00785 
00789         function add_cat_cm()   {
00790                 $lines=array();
00791 
00792                 $catID = "cm";
00793                 $action = explode(":",$this->modData["wizAction"]);
00794                 if ($action[0]=="edit") {
00795                         $this->regNewEntry($catID,$action[1]);
00796                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
00797                         $piConf = $this->wizArray[$catID][$action[1]];
00798                         $ffPrefix='['.$catID.']['.$action[1].']';
00799 
00800                                 // Enter title of the module function
00801                         $subContent="<strong>Title of the ClickMenu element:</strong><BR>".
00802                                 $this->renderStringBox_lang("title",$ffPrefix,$piConf);
00803                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00804 
00805                                 // Position
00806                         $optValues = array(
00807                                 "bottom" => "Insert in bottom",
00808                                 "top" => "Insert in top",
00809                                 "before_delete" => "Insert before the 'Delete' item",
00810                         );
00811                         $subContent="<strong>Options</strong><BR>".
00812                                 $this->renderSelectBox($ffPrefix."[options]",$piConf["options"],$optValues);
00813                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00814 
00815                                 // Admin only
00816                         $subContent =$this->resImg("cm.png");
00817                         $subContent.= $this->renderCheckBox($ffPrefix."[second_level]",$piConf["second_level"])."Activate a second-level menu.<BR>";
00818                         $subContent.= $this->renderCheckBox($ffPrefix."[only_page]",$piConf["only_page"])."Add only if the click menu is on a 'Page' (example)<BR>";
00819                         $subContent.= $this->renderCheckBox($ffPrefix."[only_if_edit]",$piConf["only_if_edit"])."Only active if item is editable.<BR>";
00820                         $subContent.= $this->renderCheckBox($ffPrefix."[remove_view]",$piConf["remove_view"])."Remove 'Show' element (example)<BR>";
00821                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00822                 }
00823 
00824                 /* HOOK: Place a hook here, so additional output can be integrated */
00825                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_cm'])) {
00826                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_cm'] as $_funcRef) {
00827                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00828                   }
00829                 }
00830 
00831                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
00832                 return $content;
00833         }
00834 
00835 
00839         function add_cat_languages()    {
00840                 $lines=array();
00841 
00842                 $catID = "languages";
00843                 $action = explode(":",$this->modData["wizAction"]);
00844                 if ($action[0]=="edit") {
00845                         $action[1]=1;
00846                         $this->regNewEntry($catID,$action[1]);
00847 
00848                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
00849                         $piConf = $this->wizArray[$catID][$action[1]];
00850                         $ffPrefix='['.$catID.']['.$action[1].']';
00851 
00852                                 // Admin only
00853                         $subContent ="";
00854                         reset($this->languages);
00855                         while(list($k,$v)=each($this->languages))       {
00856                                 $subContent.= $this->renderCheckBox($ffPrefix."[".$k."]",$piConf[$k]).$v."<BR>";
00857                         }
00858                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($this->textSetup("Enter which languages to setup:",$subContent)).'</td></tr>';
00859                 }
00860 
00861                 /* HOOK: Place a hook here, so additional output can be integrated */
00862                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_languages'])) {
00863                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_languages'] as $_funcRef) {
00864                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00865                   }
00866                 }
00867 
00868                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
00869                 return $content;
00870         }
00871 
00872 
00876         function add_cat_services()     {
00877                 $lines=array();
00878 
00879                 $catID = 'sv';
00880                 $action = explode(':',$this->modData['wizAction']);
00881                 if ($action[0]=='edit') {
00882                         $this->regNewEntry($catID,$action[1]);
00883 
00884                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],'<strong>Edit Service #'.$action[1].'</strong>',$action[1]);
00885                         $piConf = $this->wizArray[$catID][$action[1]];
00886                         $ffPrefix='['.$catID.']['.$action[1].']';
00887 
00888                         if (!$this->EMmode && $this->saveKey)   {
00889                                 $extKeyRec = $this->pObj->getExtKeyRecord($this->saveKey);
00890                         }
00891 
00892                                 // Title
00893                         $subContent='<strong>Title:</strong><br />'.
00894                                 $this->renderStringBox($ffPrefix.'[title]',$piConf['title']?$piConf['title']:$extKeyRec['title']);
00895                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00896 
00897                                 // Description
00898                         $subContent='<strong>Description:</strong><br />'.
00899                                 $this->renderStringBox($ffPrefix.'[description]',$piConf['description']?$piConf['description']:$extKeyRec['description']);
00900                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00901 
00902                         $lines[]='<tr><td>&nbsp;</td><td></td></tr>';
00903 
00904                                 // Type
00905                         $subContent='<strong>Service type:</strong><br />'.
00906                                 $this->renderStringBox($ffPrefix.'[type]',$piConf['type']?$piConf['type']:$extKeyRec['type']).'<br />'.
00907                                 'Enter here the key to define which type of service this should be.<br />Examples: "textExtract", "metaExtract".';
00908                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00909 
00910                                 // SubType
00911                         $subContent='<strong>Sub type(s) (comma list):</strong><br />'.
00912                                 $this->renderStringBox($ffPrefix.'[subtype]',$piConf['subtype']?$piConf['subtype']:$extKeyRec['subtype']).'<br />'.
00913                                 'Possible subtypes are defined by the service type.<br />You have read the service type documentation.<br />Example: using subtypes for file types (doc, txt, pdf, ...) the service might work for.';
00914                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00915 
00916                         $lines[]='<tr><td>&nbsp;</td><td></td></tr>';
00917 
00918                                 // Priority
00919                         $optValues = Array(
00920                                 '50' => 'default (50)',
00921                                 '10' => 'very low (10)',
00922                                 '20' => 'low (20)',
00923                                 '40' => 'bit lower (40)',
00924                                 '60' => 'bit higher (60)',
00925                                 '80' => 'high (80)',
00926                                 '100' => 'Very high (100)',
00927                         );
00928                         $subContent='<strong>Priority:</strong><br />'.
00929                                 $this->renderSelectBox($ffPrefix.'[priority]',$piConf['priority'],$optValues).'<br />'.
00930                                 '50 = medium priority. <br />The priority of services can be changed by admin configuration.';
00931                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00932 
00933                                 // Quality
00934                         $quality = $piConf['quality']?$piConf['quality']:$extKeyRec['quality'];
00935                         $quality = $quality ? $quality : '50';
00936                         $subContent='<strong>Quality:</strong><br />'.
00937                                 $this->renderStringBox($ffPrefix.'[quality]',$quality).'<br />'.
00938                                 'The numbering of the quality is defined by the service type.<br />You have read the service type documentation.<br />The default quality range is 0-100.';
00939                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00940 
00941 
00942                                 // OS Dependencies
00943                         $optValues = Array(
00944                                 '' => 'no special dependency',
00945                                 'unix' => 'Unix only',
00946                                 'win' => 'Windows only',
00947 //                              'unix,win' => 'Unix or Windows',
00948                         );
00949 
00950                         $lines[]='<tr><td>&nbsp;</td><td></td></tr>';
00951 
00952                         $subContent='<strong>Operating System dependency:</strong><br />'.
00953                                 $this->renderSelectBox($ffPrefix.'[os]',$piConf['os'],$optValues);
00954                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00955 
00956                                 // Exec dependencies
00957                         $subContent='<strong>External program(s) (comma list):</strong><br />'.
00958                                 $this->renderStringBox($ffPrefix.'[exec]',$piConf['exec']).'<br />'.
00959                                 'Program(s) needed to run this service (eg. "perl").';
00960                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00961                 }
00962 
00963                 /* HOOK: Place a hook here, so additional output can be integrated */
00964                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_services'])) {
00965                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_services'] as $_funcRef) {
00966                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
00967                   }
00968                 }
00969 
00970                 $content = '<table border="0" cellpadding="2" cellspacing="2">'.implode('',$lines).'</table>';
00971                 return $content;
00972         }
00973 
00977         function add_cat_emconf()       {
00978                 $lines=array();
00979 
00980                 $catID = "emconf";
00981                 $action = explode(":",$this->modData["wizAction"]);
00982                 if ($action[0]=="edit") {
00983                         $action[1]=1;
00984                         $this->regNewEntry($catID,$action[1]);
00985 
00986                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
00987                         $piConf = $this->wizArray[$catID][$action[1]];
00988                         $ffPrefix='['.$catID.']['.$action[1].']';
00989 
00990                         if (!$this->EMmode && $this->saveKey)   {
00991                                 $extKeyRec = $this->pObj->getExtKeyRecord($this->saveKey);
00992                         }
00993 
00994                                 // Title
00995                         $subContent="<strong>Title:</strong><BR>".
00996                                 $this->renderStringBox($ffPrefix."[title]",$piConf["title"]?$piConf["title"]:$extKeyRec["title"]);
00997                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00998 
00999                                 // Description
01000                         $subContent="<strong>Description:</strong><BR>".
01001                                 $this->renderStringBox($ffPrefix."[description]",$piConf["description"]?$piConf["description"]:$extKeyRec["description"]);
01002                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01003 
01004                                 // Sub-position
01005                         $optValues = Array(
01006                                 '' => '',
01007                                 'fe' => 'Frontend',
01008                                 'plugin' => 'Frontend Plugins',
01009                                 'be' => 'Backend',
01010                                 'module' => 'Backend Modules',
01011                                 'services' => 'Services',
01012                                 'example' => 'Examples',
01013                                 'misc' => 'Miscellaneous',
01014                                 'templates' => 'Templates',
01015                                 'doc' => 'Documentation',
01016                         );
01017                         $subContent="<strong>Category:</strong><BR>".
01018                                 $this->renderSelectBox($ffPrefix."[category]",$piConf["category"],$optValues);
01019                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01020 
01021 
01022 
01023 
01024                                 // State
01025                         $optValues = Array(
01026                                 "alpha" => "Alpha (Very initial development)",
01027                                 "beta" => "Beta (Under current development, should work partly)",
01028                                 "stable" => "Stable (Stable and used in production)",
01029                                 "experimental" => "Experimental (Nobody knows if this is going anywhere yet...)",
01030                                 "test" => "Test (Test extension, demonstrates concepts etc.)",
01031                         );
01032                         $subContent="<strong>State</strong><BR>".
01033                                 $this->renderSelectBox($ffPrefix."[state]",$piConf["state"],$optValues);
01034                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01035 
01036                                 // Dependencies
01037                         $subContent="<strong>Dependencies (comma list of extkeys):</strong><BR>".
01038                                 $this->renderStringBox($ffPrefix."[dependencies]",$piConf["dependencies"]);
01039                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01040 
01041 
01042 
01043 
01044                                 // Author
01045                         $subContent="<strong>Author Name:</strong><BR>".
01046                                 $this->renderStringBox($ffPrefix."[author]",$piConf["author"]?$piConf["author"]:$GLOBALS['BE_USER']->user['realName']);
01047                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01048 
01049                                 // Author/Email
01050                         $subContent="<strong>Author email:</strong><BR>".
01051                                 $this->renderStringBox($ffPrefix."[author_email]",$piConf["author_email"]?$piConf["author_email"]:$GLOBALS['BE_USER']->user['email']);
01052                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01053                 }
01054 
01055                 /* HOOK: Place a hook here, so additional output can be integrated */
01056                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_emconf'])) {
01057                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_emconf'] as $_funcRef) {
01058                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
01059                   }
01060                 }
01061 
01062                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
01063                 return $content;
01064         }
01065 
01069         function add_cat_save() {
01070                 $lines = array();
01071 
01072                 $catID = "save";
01073                 $action = explode(":",$this->modData["wizAction"]);
01074                 if ($action[0]=="edit") {
01075                         $action[1] = 1;
01076                         $this->regNewEntry($catID,$action[1]);
01077 
01078                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
01079                         $piConf = $this->wizArray[$catID];
01080                         $ffPrefix = '['.$catID.']';
01081 
01082 
01083                         $optValues = array();
01084                         $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'tx_extrep_keytable', 'owner_fe_user='.intval($GLOBALS['TSFE']->fe_user->user['uid']).$GLOBALS['TSFE']->sys_page->enableFields('tx_extrep_keytable'));
01085                         while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))       {
01086                                 $subres = $GLOBALS['TYPO3_DB']->exec_SELECTquery('count(*)', 'tx_extrep_repository', 'extension_uid='.intval($row['uid']).' AND emconf_state IN ("alpha","beta","stable")'.$GLOBALS['TSFE']->sys_page->enableFields('tx_extrep_repository'));
01087                                 list($count) = $GLOBALS['TYPO3_DB']->sql_fetch_row($subres);
01088                                 if (!$count)    {
01089                                         $optValues[$row["extension_key"]]=$row["extension_key"].": ".$row["title"];
01090                                 }
01091                         }
01092                         if (count($optValues))  {
01093                                 $subContent = $this->renderSelectBox($ffPrefix."[extension_key]",$piConf["extension_key"],$optValues);
01094                         } else {
01095                                 $subContent = '<strong>Error:</strong> The Kickstarter allows you only to save to extensions which are not yet upgraded to alpha, beta or stable state. None of these were found, so you should register a new extension key before you can save!';
01096                         }
01097 
01098                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($this->textSetup("Select an extension key to save to:",$subContent)).'</td></tr>';
01099                 }
01100 
01101 
01102                 $this->makeRepositoryUpdateArray($piConf["extension_key"]);
01103 
01104                 /* HOOK: Place a hook here, so additional output can be integrated */
01105                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_save'])) {
01106                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_save'] as $_funcRef) {
01107                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
01108                   }
01109                 }
01110 
01111                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
01112                 return $content;
01113         }
01114 
01118         function add_cat_fields()       {
01119                 $lines=array();
01120 
01121                 $catID = "fields";
01122                 $action = explode(":",$this->modData["wizAction"]);
01123                 if ($action[0]=="edit") {
01124                         $this->regNewEntry($catID,$action[1]);
01125                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
01126                         $piConf = $this->wizArray[$catID][$action[1]];
01127                         $ffPrefix='['.$catID.']['.$action[1].']';
01128 
01129                 }
01130 
01131 
01132                                 // Header field
01133                         $optValues = array(
01134                                 "tt_content" => "Content (tt_content)",
01135                                 "fe_users" => "Frontend Users (fe_users)",
01136                                 "fe_groups" => "Frontend Groups (fe_groups)",
01137                                 "be_users" => "Backend Users (be_users)",
01138                                 "be_groups" => "Backend Groups (be_groups)",
01139                                 "tt_news" => "News (tt_news)",
01140                                 "tt_address" => "Address (tt_address)",
01141                                 "pages" => "Pages (pages)",
01142                         );
01143 
01144                         foreach($GLOBALS['TCA'] as $tablename => $tableTCA) {
01145                                 if(!$optValues[$tablename]) {
01146                                         $optValues[$tablename] = $GLOBALS['LANG']->sL($tableTCA['ctrl']['title']).' ('.$tablename.')';
01147                                 }
01148                         }
01149 
01150                         $subContent = "<strong>Which table:<BR></strong>".
01151                                         $this->renderSelectBox($ffPrefix."[which_table]",$piConf["which_table"],$optValues).
01152                                         $this->whatIsThis("Select the table which should be extended with these extra fields.");
01153                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).
01154                                 '<input type="hidden" name="'.$this->piFieldName("wizArray_upd").$ffPrefix.'[title]" value="'.($piConf["which_table"]?$optValues[$piConf["which_table"]]:"").'"></td></tr>';
01155 
01156 
01157 
01158 
01159 
01160                                 // PRESETS:
01161                         $selPresetBox=$this->presetBox($piConf["fields"]);
01162 
01163                                 // FIelds
01164                         $c=array(0);
01165                         $this->usedNames=array();
01166                         if (is_array($piConf["fields"]))        {
01167                                 $piConf["fields"] = $this->cleanFieldsAndDoCommands($piConf["fields"],$catID,$action[1]);
01168 
01169                                         // Do it for real...
01170                                 reset($piConf["fields"]);
01171                                 while(list($k,$v)=each($piConf["fields"]))      {
01172                                         $c[]=$k;
01173                                         $subContent=$this->renderField($ffPrefix."[fields][".$k."]",$v);
01174                                         $lines[]='<tr'.$this->bgCol(2).'><td>'.$this->fw("<strong>FIELD:</strong> <em>".$v["fieldname"]."</em>").'</td></tr>';
01175                                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01176                                 }
01177                         }
01178 
01179 
01180                                 // New field:
01181                         $k=max($c)+1;
01182                         $v=array();
01183                         $lines[]='<tr'.$this->bgCol(2).'><td>'.$this->fw("<strong>NEW FIELD:</strong>").'</td></tr>';
01184                         $subContent=$this->renderField($ffPrefix."[fields][".$k."]",$v,1);
01185                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01186 
01187 
01188                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw("<BR><BR>Load preset fields: <BR>".$selPresetBox).'</td></tr>';
01189 
01190                 /* HOOK: Place a hook here, so additional output can be integrated */
01191                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_fields'])) {
01192                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_fields'] as $_funcRef) {
01193                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
01194                   }
01195                 }
01196 
01197                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
01198                 return $content;
01199         }
01200 
01204         function add_cat_tables()       {
01205                 $lines=array();
01206 
01207                 $catID = "tables";
01208                 $action = explode(":",$this->modData["wizAction"]);
01209                 if ($action[0]=="edit") {
01210                         $this->regNewEntry($catID,$action[1]);
01211                         $lines = $this->catHeaderLines($lines,$catID,$this->options[$catID],"&nbsp;",$action[1]);
01212                         $piConf = $this->wizArray[$catID][$action[1]];
01213                         $ffPrefix='['.$catID.']['.$action[1].']';
01214 
01215                                 // Unique table name:
01216                         $table_suffixes=array();
01217                         if (is_array($this->wizArray[$catID]))  {
01218                                 reset($this->wizArray[$catID]);
01219                                 while(list($kk,$vv)=each($this->wizArray[$catID]))      {
01220                                         if (!strcmp($action[1],$kk))    {
01221                                                 if (count($table_suffixes) && t3lib_div::inList(implode(",",$table_suffixes),$vv["tablename"]."Z"))     {
01222                                                         $piConf["tablename"].=$kk;
01223                                                 }
01224                                                 break;
01225                                         }
01226                                         $table_suffixes[]=$vv["tablename"]."Z";
01227                                 }
01228                         }
01229 
01230 
01231                                 // Enter title of the table
01232                         $subContent="<strong>Tablename:</strong><BR>".
01233                                 $this->returnName($this->extKey,"tables")."_".$this->renderStringBox($ffPrefix."[tablename]",$piConf["tablename"]).
01234                                 "<BR><strong>Notice:</strong> Use characters a-z0-9 only. Only lowercase, no spaces.<BR>
01235                                 This becomes the table name in the database. ";
01236                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01237 
01238 
01239                                 // Enter title of the table
01240                         $subContent="<strong>Title of the table:</strong><BR>".
01241                                 $this->renderStringBox_lang("title",$ffPrefix,$piConf);
01242                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01243 
01244 
01245 
01246                                 // Fields - overview
01247                         $c=array(0);
01248                         $this->usedNames=array();
01249                         if (is_array($piConf["fields"]))        {
01250                                 $piConf["fields"] = $this->cleanFieldsAndDoCommands($piConf["fields"],$catID,$action[1]);
01251 
01252                                 // Do it for real...
01253                                 reset($piConf["fields"]);
01254                                 $lines[]='<tr'.$this->bgCol(1).'><td><strong> Fields Overview </strong></td></tr>';
01255 //                              $lines[]='<tr'.$this->bgCol(2).'><td>'.$this->fw($v[1]).'</td></tr>';
01256                                 $lines[]='<tr><td></td></tr>';
01257 
01258                                 $subContent ='<tr '.$this->bgCol(2).'>
01259                                         <td><strong>Name</strong></td>
01260                                         <td><strong>Title</strong></td>
01261                                         <td><strong>Type</strong></td>
01262                                         <td><strong>Exclude?</strong></td>
01263                                         <td><strong>Details</strong></td>
01264                                 </tr>';
01265                                 while(list($k,$v)=each($piConf["fields"]))      {
01266                                         $c[]=$k;
01267                                         $subContent .=$this->renderFieldOverview($ffPrefix."[fields][".$k."]",$v);
01268                                 }
01269                                 $lines[]='<tr'.$this->bgCol(3).'><td><table>'.$this->fw($subContent).'</table></td></tr>';
01270                         }
01271 
01272                         $lines[]='<tr'.$this->bgCol(1).'><td><strong> Edit Fields </strong></td></tr>';
01273 //                      $lines[]='<tr'.$this->bgCol(2).'><td>'.$this->fw($v[1]).'</td></tr>';
01274                         $lines[]='<tr><td></td></tr>';
01275 
01276 
01277 
01278 
01279                                 // Admin only
01280                         $subContent = "";
01281                         $subContent.= $this->renderCheckBox($ffPrefix."[add_deleted]",$piConf["add_deleted"],1)."Add 'Deleted' field ".$this->whatIsThis("Whole system: If a table has a deleted column, records are never really deleted, just 'marked deleted'. Thus deleted records can actually be restored by clearing a deleted-flag later.\nNotice that all attached files are also not deleted from the server, so if you expect the table to hold some heavy size uploads, maybe you should not set this...")."<BR>";
01282                         $subContent.= $this->renderCheckBox($ffPrefix."[add_hidden]",$piConf["add_hidden"],1)."Add 'Hidden' flag ".$this->whatIsThis("Frontend: The 'Hidden' flag will prevent the record from being displayed on the frontend.")."<BR>".$this->resImg("t_flag_hidden.png",'hspace=20','','<BR><BR>');
01283                         $subContent.= $this->renderCheckBox($ffPrefix."[add_starttime]",$piConf["add_starttime"])."Add 'Starttime' ".$this->whatIsThis("Frontend: If a 'Starttime' is set, the record will not be visible on the website, before that date arrives.")."<BR>".$this->resImg("t_flag_starttime.png",'hspace=20','','<BR><BR>');
01284                         $subContent.= $this->renderCheckBox($ffPrefix."[add_endtime]",$piConf["add_endtime"])."Add 'Endtime' ".$this->whatIsThis("Frontend: If a 'Endtime' is set, the record will be hidden from that date and into the future.")."<BR>".$this->resImg("t_flag_endtime.png",'hspace=20','','<BR><BR>');
01285                         $subContent.= $this->renderCheckBox($ffPrefix."[add_access]",$piConf["add_access"])."Add 'Access group' ".$this->whatIsThis("Frontend: If a frontend user group is set for a record, only frontend users that are members of that group will be able to see the record.")."<BR>".$this->resImg("t_flag_access.png",'hspace=20','','<BR><BR>');
01286                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01287 
01288                                 // Sorting
01289                         $optValues = array(
01290                                 "crdate" => "[crdate]",
01291                                 "cruser_id" => "[cruser_id]",
01292                                 "tstamp" => "[tstamp]",
01293                         );
01294                         $subContent = "";
01295                         $subContent.= $this->renderCheckBox($ffPrefix."[localization]",$piConf["localization"])."Enabled localization features".$this->whatIsThis("If set, the records will have a selector box for language and a reference field which can point back to the original default translation for the record. These features are part of the internal framework for localization.").'<BR>';
01296                         $subContent.= $this->renderCheckBox($ffPrefix."[versioning]",$piConf["versioning"])."Enable versioning ".$this->whatIsThis("If set, you will be able to versionize records from this table. Highly recommended if the records are passed around in a workflow.").'<BR>';
01297                         $subContent.= $this->renderCheckBox($ffPrefix."[sorting]",$piConf["sorting"])."Manual ordering of records ".$this->whatIsThis("If set, the records can be moved up and down relative to each other in the backend. Just like Content Elements. Otherwise they are sorted automatically by any field you specify").'<BR>';
01298                         $subContent.= $this->textSetup("","If 'Manual ordering' is not set, order the table by this field:<BR>".
01299                                 $this->renderSelectBox($ffPrefix."[sorting_field]",$piConf["sorting_field"],$this->currentFields($optValues,$piConf["fields"]))."<BR>".
01300                                 $this->renderCheckBox($ffPrefix."[sorting_desc]",$piConf["sorting_desc"])." Descending");
01301                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01302 
01303                                 // Type field
01304                         $optValues = array(
01305                                 "0" => "[none]",
01306                         );
01307                         $subContent = "<strong>'Type-field', if any:<BR></strong>".
01308                                         $this->renderSelectBox($ffPrefix."[type_field]",$piConf["type_field"],$this->currentFields($optValues,$piConf["fields"])).
01309                                         $this->whatIsThis("A 'type-field' is the field in the table which determines how the form is rendered in the backend, eg. which fields are shown under which circumstances.\nFor instance the Content Element table 'tt_content' has a type-field, CType. The value of this field determines if the editing form shows the bodytext field as is the case when the type is 'Text' or if also the image-field should be shown as when the type is 'Text w/Image'");
01310                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01311 
01312                                 // Header field
01313                         $optValues = array(
01314                                 "0" => "[none]",
01315                         );
01316                         $subContent = "<strong>Label-field:<BR></strong>".
01317                                         $this->renderSelectBox($ffPrefix."[header_field]",$piConf["header_field"],$this->currentFields($optValues,$piConf["fields"])).
01318                                         $this->whatIsThis("A 'label-field' is the field used as record title in the backend.");
01319                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01320 
01321                                 // Icon
01322                         $optValues = array(
01323                                 "default.gif" => "Default (white)",
01324                                 "default_black.gif" => "Black",
01325                                 "default_gray4.gif" => "Gray",
01326                                 "default_blue.gif" => "Blue",
01327                                 "default_green.gif" => "Green",
01328                                 "default_red.gif" => "Red",
01329                                 "default_yellow.gif" => "Yellow",
01330                                 "default_purple.gif" => "Purple",
01331                         );
01332 
01333                         $subContent= $this->renderSelectBox($ffPrefix."[defIcon]",$piConf["defIcon"],$optValues)." Default icon ".$this->whatIsThis("All tables have at least one associated icon. Select which default icon you wish. You can always substitute the file with another.");
01334                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01335 
01336                                 // Allowed on pages
01337                         $subContent = "<strong>Allowed on pages:<BR></strong>".
01338                                         $this->renderCheckBox($ffPrefix."[allow_on_pages]",$piConf["allow_on_pages"])." Allow records from this table to be created on regular pages.";
01339                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01340 
01341                                 // Allowed in "Insert Records"
01342                         $subContent = "<strong>Allowed in 'Insert Records' field in content elements:<BR></strong>".
01343                                         $this->renderCheckBox($ffPrefix."[allow_ce_insert_records]",$piConf["allow_ce_insert_records"])." Allow records from this table to be linked to by content elements.";
01344                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01345 
01346                                 // Add new button
01347                         $subContent = "<strong>Add 'Save and new' button in forms:<BR></strong>".
01348                                         $this->renderCheckBox($ffPrefix."[save_and_new]",$piConf["save_and_new"])." Will add an additional save-button to forms by which you can save the item and instantly create the next.";
01349                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01350 
01351 
01352                         $subContent = "<strong>Notice on fieldnames:<BR></strong>".
01353                                 "Don't use fieldnames from this list of reserved names/words: <BR>
01354                                 <blockquote><em>".implode(", ",explode(",",$this->reservedTypo3Fields.",".$this->mysql_reservedFields))."</em></blockquote>";
01355                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01356 
01357 
01358 
01359                                 // PRESETS:
01360                         $selPresetBox=$this->presetBox($piConf["fields"]);
01361 
01362                                 // Fields
01363                         $c=array(0);
01364                         $this->usedNames=array();
01365                         if (is_array($piConf["fields"]))        {
01366 
01367                                 // Do it for real...
01368                                 reset($piConf["fields"]);
01369                                 while(list($k,$v)=each($piConf["fields"]))      {
01370                                         $c[]=$k;
01371                                         $subContent=$this->renderField($ffPrefix."[fields][".$k."]",$v);
01372                                         $lines[]='<tr'.$this->bgCol(2).'><td>'.$this->fw("<strong>FIELD:</strong> <em>".$v["fieldname"]."</em>").'</td></tr>';
01373                                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01374                                 }
01375                         }
01376 
01377                                 // New field:
01378                         $k=max($c)+1;
01379                         $v=array();
01380                         $lines[]='<tr'.$this->bgCol(2).'><td>'.$this->fw("<strong>NEW FIELD:</strong>").'</td></tr>';
01381                         $subContent=$this->renderField($ffPrefix."[fields][".$k."]",$v,1);
01382                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
01383 
01384 
01385                         $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw("<BR><BR>Load preset fields: <BR>".$selPresetBox).'</td></tr>';
01386                 }
01387 
01388                 /* HOOK: Place a hook here, so additional output can be integrated */
01389                 if(is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_tables'])) {
01390                   foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['kickstarter']['add_cat_tables'] as $_funcRef) {
01391                     $lines = t3lib_div::callUserFunction($_funcRef, $lines, $this);
01392                   }
01393                 }
01394 
01395                 $content = '<table border=0 cellpadding=2 cellspacing=2>'.implode("",$lines).'</table>';
01396 
01397                 return $content;
01398         }
01399 
01403         function renderFieldOverview($prefix,$fConf,$dontRemove=0)      {
01404                         // Sorting
01405                 $optTypes = array(
01406                         "" => "",
01407                         "input" => "String input",
01408                         "input+" => "String input, advanced",
01409                         "textarea" => "Text area",
01410                         "textarea_rte" => "Text area with RTE",
01411                         "textarea_nowrap" => "Text area, No wrapping",
01412                         "check" => "Checkbox, single",
01413                         "check_4" => "Checkbox, 4 boxes in a row",
01414                         "check_10" => "Checkbox, 10 boxes in two rows (max)",
01415                         "link" => "Link",
01416                         "date" => "Date",
01417                         "datetime" => "Date and time",
01418                         "integer" => "Integer, 10-1000",
01419                         "select" => "Selectorbox",
01420                         "radio" => "Radio buttons",
01421                         "rel" => "Database relation",
01422                         "files" => "Files",
01423                 );
01424                 $optEval = array(
01425                         "" => "",
01426                         "date" => "Date (day-month-year)",
01427                         "time" => "Time (hours, minutes)",
01428                         "timesec" => "Time + seconds",
01429                         "datetime" => "Date + Time",
01430                         "year" => "Year",
01431                         "int" => "Integer",
01432                         "int+" => "Integer 0-1000",
01433                         "double2" => "Floating point, x.xx",
01434                         "alphanum" => "Alphanumeric only",
01435                         "upper" => "Upper case",
01436                         "lower" => "Lower case",
01437                 );
01438                 $optRte = array(
01439                         "tt_content" => "Transform like 'Bodytext'",
01440                         "basic" => "Typical (based on CSS)",
01441                         "moderate" => "Transform images / links",
01442                         "none" => "No transform",
01443                         "custom" => "Custom transform"
01444                 );
01445 
01446                 switch($fConf['type']) {
01447                         case 'rel':
01448                                 if ($fConf['conf_rel_table'] == '_CUSTOM') {
01449                                         $details .= $fConf['conf_custom_table_name'];
01450                                 } else {
01451                                         $details .= $fConf['conf_rel_table'];
01452                                 }
01453                         break;
01454                         case 'input+':
01455                                 if($fConf['conf_varchar']) $details[] = 'varchar';
01456                                 if($fConf['conf_unique']) $details[] = ($fConf['conf_unique'] == 'L') ?  'unique (page)': 'unique (site)';
01457                                 if($fConf['conf_eval']) $details[] = $optEval[$fConf['conf_eval']];
01458                                 $details = implode(', ', (array) $details);
01459                         break;
01460                         case 'check_10':
01461                         case 'check_4':
01462                                 $details = ($fConf['conf_numberBoxes'] ? $fConf['conf_numberBoxes'] : '4') . ' checkboxes';
01463                         break;
01464                         case 'radio':
01465                                 if($fConf['conf_select_items']) $details = $fConf['conf_select_items'] . ' options';
01466                         break;
01467                         case 'select':
01468                                 if($fConf['conf_select_items']) $details[] = $fConf['conf_select_items'] . ' options';
01469                                 if($fConf['conf_select_pro']) $details[] = 'preprocessing';
01470                                 $details = implode(', ', (array) $details);
01471                         break;
01472                         case 'textarea_rte':
01473                                 if($fConf['conf_rte']) $details = $optRte[$fConf['conf_rte']];
01474                         break;
01475                         case 'files':
01476                                 $details[] = $fConf['conf_files_type'];
01477                                 $details[] = $fConf['conf_files'] . ' files';
01478                                 $details[] = $fConf['conf_max_filesize'] . ' kB';
01479                                 $details = implode(', ', (array) $details);
01480                         break;
01481                 }
01482                 return sprintf('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td>',
01483                         $fConf['fieldname'],
01484                         $fConf['title'],
01485                         $optTypes[$fConf['type']],
01486                         $fConf['exludeField'] ? 'Yes' : '',
01487                         $details
01488                         );
01489         }
01490 
01491 
01492         function presetBox(&$piConfFields)      {
01493                 $_PRESETS = $this->modData["_PRESET"];
01494 
01495                 $optValues = array();
01496 
01497                 /* Static Presets from DB-Table are disabled. Just leave the code in here for possible future use */
01498                 //              $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'kickstarter_static_presets', '');
01499                 //              while($presetRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
01500                 //                      $optValues[] = '<option value="'.htmlspecialchars($presetRow["fieldname"]).'">'.htmlspecialchars($presetRow["title"]." (".$presetRow["fieldname"].", type: ".$presetRow["type"].")").'</option>';
01501                 //                      if (is_array($_PRESETS) && in_array($presetRow["fieldname"],$_PRESETS)) {
01502                 //                              if (!is_array($piConfFields))   $piConfFields=array();
01503                 //                              $piConfFields[] = unserialize($presetRow["appdata"]);
01504                 //                      }
01505                 //              }
01506 
01507                         // Session presets:
01508                 $ses_optValues=array();
01509                 $sesdat = $GLOBALS["BE_USER"]->getSessionData("kickstarter");
01510                 if (is_array($sesdat["presets"]))       {
01511                         reset($sesdat["presets"]);
01512                         while(list($kk1,$vv1)=each($sesdat["presets"])) {
01513                                 if (is_array($vv1))     {
01514                                         reset($vv1);
01515                                         while(list($kk2,$vv2)=each($vv1))       {
01516                                                 $ses_optValues[]='<option value="'.htmlspecialchars($kk1.".".$vv2["fieldname"]).'">'.htmlspecialchars($kk1.": ".$vv2["title"]." (".$vv2["fieldname"].", type: ".$vv2["type"].")").'</option>';
01517                                                 if (is_array($_PRESETS) && in_array($kk1.".".$vv2["fieldname"],$_PRESETS))      {
01518                                                         if (!is_array($piConfFields))   $piConfFields=array();
01519                                                         $piConfFields[] = $vv2;
01520                                                 }
01521                                         }
01522                                 }
01523                         }
01524                 }
01525                 if (count($ses_optValues))      {
01526                         $optValues = array_merge($optValues,count($optValues)?array('<option value=""></option>'):array(),array('<option value="">__Fields picked up in this session__:</option>'),$ses_optValues);
01527                 }
01528                 if (count($optValues))          $selPresetBox = '<select name="'.$this->piFieldName("_PRESET").'[]" size='.t3lib_div::intInRange(count($optValues),1,10).' multiple>'.implode("",$optValues).'</select>';
01529                 return $selPresetBox;
01530         }
01531         function cleanFieldsAndDoCommands($fConf,$catID,$action)        {
01532                 $newFConf=array();
01533                 $downFlag=0;
01534                 reset($fConf);
01535                 while(list($k,$v)=each($fConf)) {
01536                         if ($v["type"] && trim($v["fieldname"]))        {
01537                                 $v["fieldname"] = $this->cleanUpFieldName($v["fieldname"]);
01538 
01539                                 if (!$v["_DELETE"])     {
01540                                         $newFConf[$k]=$v;
01541                                         if (t3lib_div::_GP($this->varPrefix.'_CMD_'.$v["fieldname"].'_UP_x') || $downFlag)      {
01542                                                 if (count($newFConf)>=2)        {
01543                                                         $lastKeys = array_slice(array_keys($newFConf),-2);
01544 
01545                                                         $buffer = Array();
01546                                                         $buffer[$lastKeys[1]] = $newFConf[$lastKeys[1]];
01547                                                         $buffer[$lastKeys[0]] = $newFConf[$lastKeys[0]];
01548 
01549                                                         unset($newFConf[$lastKeys[0]]);
01550                                                         unset($newFConf[$lastKeys[1]]);
01551 
01552                                                         $newFConf[$lastKeys[1]] = $buffer[$lastKeys[1]];
01553                                                         $newFConf[$lastKeys[0]] = $buffer[$lastKeys[0]];
01554                                                 }
01555                                                 $downFlag=0;
01556                                         } elseif (t3lib_div::_GP($this->varPrefix.'_CMD_'.$v["fieldname"].'_DOWN_x'))   {
01557                                                 $downFlag=1;
01558                                         }
01559                                 }
01560 
01561                                         // PRESET:
01562                                 //                              if (t3lib_div::_GP($this->varPrefix.'_CMD_'.$v["fieldname"].'_SAVE_x')) {
01563                                 //                                      $datArr=Array(
01564                                 //                                              "fieldname" => $v["fieldname"],
01565                                 //                                              "title" => $v["title"],
01566 //                                              "type" => $v["type"],
01567 //                                              "appdata" => serialize($v),
01568 //                                              "tstamp" => time()
01569 //                                      );
01570 
01571 //                                      $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('fieldname', 'kickstarter_static_presets', 'fieldname="'.$GLOBALS['TYPO3_DB']->quoteStr($v['fieldname'], 'kickstarter_static_presets').'"');
01572 //                                      if ($GLOBALS['TYPO3_DB']->sql_num_rows($res) || $v["_DELETE"])  {
01573 //                                              if ($v["_DELETE"])      {
01574 //                                                      $GLOBALS['TYPO3_DB']->exec_DELETEquery('kickstarter_static_presets', 'fieldname="'.$GLOBALS['TYPO3_DB']->quoteStr($v['fieldname'], 'kickstarter_static_presets').'"');
01575 //                                              } else {
01576 //                                                      $GLOBALS['TYPO3_DB']->exec_UPDATEquery('kickstarter_static_presets', 'fieldname="'.$GLOBALS['TYPO3_DB']->quoteStr($v['fieldname'], 'kickstarter_static_presets').'"', $datArr);
01577 //                                              }
01578 //                                      } else {
01579 //                                              $GLOBALS['TYPO3_DB']->exec_INSERTquery("kickstarter_static_presets", $datArr);
01580 //                                      }
01581 //                              }
01582                         } else {
01583                           //                            unset($this->wizArray[$catID][$action]["fields"][$k]);
01584                           //                            unset($fConf[$k]);
01585                         }
01586                 }
01587                 //              debug($newFConf);
01588                 $this->wizArray[$catID][$action]["fields"] = $newFConf;
01589                 $sesdat = $GLOBALS["BE_USER"]->getSessionData("kickstarter");
01590                 $sesdat["presets"][$this->extKey."-".$catID."-".$action]=$newFConf;
01591                 $GLOBALS["BE_USER"]->setAndSaveSessionData("kickstarter",$sesdat);
01592 
01593 #debug($newFConf);
01594                 return $newFConf;
01595         }
01596 
01597 
01598         function renderField($prefix,$fConf,$dontRemove=0)      {
01599                 $onCP = $this->getOnChangeParts($prefix."[fieldname]");
01600                 $fieldName = $this->renderStringBox($prefix."[fieldname]",$fConf["fieldname"]).
01601                         (!$dontRemove?" (Remove:".$this->renderCheckBox($prefix."[_DELETE]",0).')'.
01602                                 '<input type="image" hspace=2 src="'.$this->siteBackPath.TYPO3_mainDir.'gfx/pil2up.gif" name="'.$this->varPrefix.'_CMD_'.$fConf["fieldname"].'_UP" onClick="'.$onCP[1].'">'.
01603                                 '<input type="image" hspace=2 src="'.$this->siteBackPath.TYPO3_mainDir.'gfx/pil2down.gif" name="'.$this->varPrefix.'_CMD_'.$fConf["fieldname"].'_DOWN" onClick="'.$onCP[1].'">'.
01604                                 '<input type="image" hspace=2 src="'.$this->siteBackPath.TYPO3_mainDir.'gfx/savesnapshot.gif" name="'.$this->varPrefix.'_CMD_'.$fConf["fieldname"].'_SAVE" onClick="'.$onCP[1].'" title="Save this field setting as a preset.">':'');
01605 
01606                 $fieldTitle = ((string)$fConf["type"] != 'passthrough') ? $this->renderStringBox_lang("title",$prefix,$fConf) : '';
01607                 $typeCfg = "";
01608 
01609                         // Sorting
01610                 $optValues = array(
01611                         "" => "",
01612                         "input" => "String input",
01613                         "input+" => "String input, advanced",
01614                         "textarea" => "Text area",
01615                         "textarea_rte" => "Text area with RTE",
01616                         "textarea_nowrap" => "Text area, No wrapping",
01617                         "check" => "Checkbox, single",
01618                         "check_4" => "Checkbox, 4 boxes in a row",
01619                         "check_10" => "Checkbox, 10 boxes in two rows (max)",
01620                         "link" => "Link",
01621                         "date" => "Date",
01622                         "datetime" => "Date and time",
01623                         "integer" => "Integer, 10-1000",
01624                         "select" => "Selectorbox",
01625                         "radio" => "Radio buttons",
01626                         "rel" => "Database relation",
01627                         "files" => "Files",
01628                         "none" => "Not editable, only displayed",
01629                         "passthrough" => "[Passthrough]",
01630                 );
01631                 $typeCfg.=$this->renderSelectBox($prefix."[type]",$fConf["type"],$optValues);
01632                 $typeCfg.=$this->renderCheckBox($prefix."[excludeField]",isset($fConf["excludeField"])?$fConf["excludeField"]:1)." Is Exclude-field ".$this->whatIsThis("If a field is marked 'Exclude-field', users can edit it ONLY if the field is specifically listed in one of the backend user groups of the user.\nIn other words, if a field is marked 'Exclude-field' you can control which users can edit it and which cannot.")."<BR>";
01633 
01634                 $fDetails="";
01635                 switch((string)$fConf["type"])  {
01636                         case "input+":
01637                                 $typeCfg.=$this->resImg("t_input.png",'','');
01638 
01639                                 $fDetails.=$this->renderStringBox($prefix."[conf_size]",$fConf["conf_size"],50)." Field width (5-48 relative, 30 default)<BR>";
01640                                 $fDetails.=$this->renderStringBox($prefix."[conf_max]",$fConf["conf_max"],50)." Max characters<BR>";
01641                                 $fDetails.=$this->renderCheckBox($prefix."[conf_required]",$fConf["conf_required"])."Required<BR>";
01642                                 $fDetails.=$this->resImg("t_input_required.png",'hspace=20','','<BR><BR>');
01643 
01644                                 $fDetails.=$this->renderCheckBox($prefix."[conf_varchar]",$fConf["conf_varchar"])."Create VARCHAR, not TINYTEXT field (if not forced INT)<BR>";
01645 
01646                                 $fDetails.=$this->renderCheckBox($prefix."[conf_check]",$fConf["conf_check"])."Apply checkbox<BR>";
01647                                 $fDetails.=$this->resImg("t_input_check.png",'hspace=20','','<BR><BR>');
01648 
01649                                 $optValues = array(
01650                                         "" => "",
01651                                         "date" => "Date (day-month-year)",
01652                                         "time" => "Time (hours, minutes)",
01653                                         "timesec" => "Time + seconds",
01654                                         "datetime" => "Date + Time",
01655                                         "year" => "Year",
01656                                         "int" => "Integer",
01657                                         "int+" => "Integer 0-1000",
01658                                         "double2" => "Floating point, x.xx",
01659                                         "alphanum" => "Alphanumeric only",
01660                                         "upper" => "Upper case",
01661                                         "lower" => "Lower case",
01662                                 );
01663                                 $fDetails.="<BR>Evaluate value to:<BR>".$this->renderSelectBox($prefix."[conf_eval]",$fConf["conf_eval"],$optValues)."<BR>";
01664                                 $fDetails.=$this->renderCheckBox($prefix."[conf_stripspace]",$fConf["conf_stripspace"])."Strip space<BR>";
01665                                 $fDetails.=$this->renderCheckBox($prefix."[conf_pass]",$fConf["conf_pass"])."Is password field<BR>";
01666                                 $fDetails.=$this->resImg("t_input_password.png",'hspace=20','','<BR><BR>');
01667 
01668                                 $fDetails.="<BR>";
01669                                 $fDetails.=$this->renderRadioBox($prefix."[conf_unique]",$fConf["conf_unique"],"G")."Unique in whole database<BR>";
01670                                 $fDetails.=$this->renderRadioBox($prefix."[conf_unique]",$fConf["conf_unique"],"L")."Unique inside parent page<BR>";
01671                                 $fDetails.=$this->renderRadioBox($prefix."[conf_unique]",$fConf["conf_unique"],"")."Not unique (default)<BR>";
01672                                 $fDetails.="<BR>";
01673                                 $fDetails.=$this->renderCheckBox($prefix."[conf_wiz_color]",$fConf["conf_wiz_color"])."Add colorpicker wizard<BR>";
01674                                 $fDetails.=$this->resImg("t_input_colorwiz.png",'hspace=20','','<BR><BR>');
01675                                 $fDetails.=$this->renderCheckBox($prefix."[conf_wiz_link]",$fConf["conf_wiz_link"])."Add link wizard<BR>";
01676                                 $fDetails.=$this->resImg("t_input_link2.png",'hspace=20','','<BR><BR>');
01677                         break;
01678                         case "input":
01679                                 $typeCfg.=$this->resImg("t_input.png",'','');
01680 
01681                                 $fDetails.=$this->renderStringBox($prefix."[conf_size]",$fConf["conf_size"],50)." Field width (5-48 relative, 30 default)<BR>";
01682                                 $fDetails.=$this->renderStringBox($prefix."[conf_max]",$fConf["conf_max"],50)." Max characters<BR>";
01683                                 $fDetails.=$this->renderCheckBox($prefix."[conf_required]",$fConf["conf_required"])."Required<BR>";
01684                                 $fDetails.=$this->resImg("t_input_required.png",'hspace=20','','<BR><BR>');
01685 
01686                                 $fDetails.=$this->renderCheckBox($prefix."[conf_varchar]",$fConf["conf_varchar"])."Create VARCHAR, not TINYTEXT field<BR>";
01687                         break;
01688                         case "textarea":
01689                         case "textarea_nowrap":
01690                                 $typeCfg.=$this->resImg("t_textarea.png",'','');
01691 
01692                                 $fDetails.=$this->renderStringBox($prefix."[conf_cols]",$fConf["conf_cols"],50)." Textarea width (5-48 relative, 30 default)<BR>";
01693                                 $fDetails.=$this->renderStringBox($prefix."[conf_rows]",$fConf["conf_rows"],50)." Number of rows (height)<BR>";
01694                                 $fDetails.="<BR>";
01695                                 $fDetails.=$this->renderCheckBox($prefix."[conf_wiz_example]",$fConf["conf_wiz_example"])."Add wizard example<BR>";
01696                                 $fDetails.=$this->resImg("t_textarea_wiz.png",'hspace=20','','<BR><BR>');
01697                         break;
01698                         case "textarea_rte":
01699                                 $typeCfg.=$this->resImg($fConf["conf_rte"]!="tt_content"?"t_rte.png":"t_rte2.png",'','');
01700 
01701                                 $optValues = array(
01702                                         "tt_content" => "Transform content like the Content Element 'Bodytext' field (default/old)",
01703                                         "basic" => "Typical basic setup (new 'Bodytext' field based on CSS stylesheets)",
01704                                         "moderate" => "Moderate transform of images and links",
01705                                         "none" => "No transformation at all",
01706                                         "custom" => "Custom"
01707                                 );
01708                                 $fDetails.="<BR>Rich Text Editor Mode:<BR>".$this->renderSelectBox($prefix."[conf_rte]",$fConf["conf_rte"],$optValues)."<BR>";
01709                                 if ((string)$fConf["conf_rte"]=="custom")       {
01710                                         $optValues = array(
01711                                                 "cut" => array("Cut button"),
01712                                                 "copy" => array("Copy button"),
01713                                                 "paste" => array("Paste button"),
01714                                                 "formatblock" => array("Paragraph formatting","<DIV>, <P>"),
01715                                                 "class" => array("Character formatting","<SPAN>)"),
01716                                                 "fontstyle" => array("Font face","<FONT face=>)"),
01717                                                 "fontsize" => array("Font size","<FONT size=>)"),
01718                                                 "textcolor" => array("Font color","<FONT color=>"),
01719                                                 "bold" => array("Bold","<STRONG>, <B>"),
01720                                                 "italic" => array("italic","<EM>, <I>"),
01721                                                 "underline" => array("Underline","<U>"),
01722                                                 "left" => array("Left align","<DIV>, <P>"),
01723                                                 "center" => array("Center align","<DIV>, <P>"),
01724                                                 "right" => array("Right align","<DIV>, <P>"),
01725                                                 "orderedlist" => array("Ordered bulletlist","<OL>, <LI>"),
01726                                                 "unorderedlist" => array("Unordered bulletlist","<UL>, <LI>"),
01727                                                 "outdent" => array("Outdent block","<BLOCKQUOTE>"),
01728                                                 "indent" => array("Indent block","<BLOCKQUOTE>"),
01729                                                 "link" => array("Link","<A>"),
01730                                                 "table" => array("Table","<TABLE>, <TR>, <TD>"),
01731                                                 "image" => array("Image","<IMG>"),
01732                                                 "line" => array("Ruler","<HR>"),
01733                                                 "user" => array("User defined",""),
01734                                                 "chMode" => array("Edit source?","")
01735                                         );
01736                                         $subLines=array();
01737                                         $subLines[]='<tr>
01738                                                 <td>&nbsp;</td>
01739                                                 <td>&nbsp;</td>
01740                                                 <td><strong>'.$this->fw("Button name:").'</strong></td>
01741                                                 <td><strong>'.$this->fw("Tags allowed:").'</strong></td>
01742                                         </tr>';
01743                                         reset($optValues);
01744                                         while(list($kk,$vv)=each($optValues))   {
01745                                                 $subLines[]='<tr>
01746                                                         <td>'.$this->renderCheckBox($prefix."[conf_rte_b_".$kk."]",$fConf["conf_rte_b_".$kk]).'</td>
01747                                                         <td>'.$this->resIcon($kk.".png").'</td>
01748                                                         <td>'.$this->fw($vv[0]).'</td>
01749                                                         <td>'.$this->fw(htmlspecialchars($vv[1])).'</td>
01750                                                 </tr>';
01751                                         }
01752                                         $fDetails.='<table border=0 cellpadding=2 cellspacing=2>'.implode("",$subLines).'</table><BR>';
01753 
01754                                         $fDetails.="<BR><strong>Define specific colors:</strong><BR>
01755                                                 <em>Notice: Use only HEX-values for colors ('blue' should be #0000ff etc.)</em><BR>";
01756                                         for($a=1;$a<4;$a++)     {
01757                                                 $fDetails.="Color #".$a.": ".$this->renderStringBox($prefix."[conf_rte_color".$a."]",$fConf["conf_rte_color".$a],70)."<BR>";
01758                                         }
01759                                         $fDetails.=$this->resImg("t_rte_color.png",'','','<BR><BR>');
01760 
01761                                         $fDetails.=$this->renderCheckBox($prefix."[conf_rte_removecolorpicker]",$fConf["conf_rte_removecolorpicker"])."Hide colorpicker<BR>";
01762                                         $fDetails.=$this->resImg("t_rte_colorpicker.png",'hspace=20','','<BR><BR>');
01763 
01764                                         $fDetails.="<BR><strong>Define classes:</strong><BR>";
01765                                         for($a=1;$a<7;$a++)     {
01766                                                 $fDetails.="Class Title:".$this->renderStringBox($prefix."[conf_rte_class".$a."]",$fConf["conf_rte_class".$a],100).
01767                                                         "<BR>CSS Style: {".$this->renderStringBox($prefix."[conf_rte_class".$a."_style]",$fConf["conf_rte_class".$a."_style"],250)."}".
01768                                                 "<BR>";
01769                                         }
01770                                         $fDetails.=$this->resImg("t_rte_class.png",'','','<BR><BR>');
01771 
01772 #                                       $fDetails.=$this->renderCheckBox($prefix."[conf_rte_removePdefaults]",$fConf["conf_rte_removePdefaults"])."<BR>";
01773                                         $optValues = array(
01774                                                 "0" => "",
01775                                                 "1" => "Hide Hx and PRE from Paragraph selector.",
01776                                                 "H2H3" => "Hide all, but H2,H3,P,PRE",
01777                                         );
01778                                         $fDetails.="<BR>Hide Paragraph Items:<BR>".$this->renderSelectBox($prefix."[conf_rte_removePdefaults]",$fConf["conf_rte_removePdefaults"],$optValues)."<BR>";
01779                                         $fDetails.=$this->resImg("t_rte_hideHx.png",'hspace=20','','<BR><BR>');
01780 
01781                                         $fDetails.="<BR><strong>Misc:</strong><BR>";
01782 //                                      $fDetails.=$this->renderCheckBox($prefix."[conf_rte_custom_php_processing]",$fConf["conf_rte_custom_php_processing"])."Custom PHP processing of content<BR>";
01783                                         $fDetails.=$this->renderCheckBox($prefix."[conf_rte_div_to_p]",isset($fConf["conf_rte_div_to_p"])?$fConf["conf_rte_div_to_p"]:1).htmlspecialchars("Convert all <DIV> to <P>")."<BR>";
01784                                 }
01785 
01786                                 $fDetails.="<BR>";
01787                                 $fDetails.=$this->renderCheckBox($prefix."[conf_rte_fullscreen]",isset($fConf["conf_rte_fullscreen"])?$fConf["conf_rte_fullscreen"]:1)."Fullscreen link<BR>";
01788                                 $fDetails.=$this->resImg("t_rte_fullscreen.png",'hspace=20','','<BR><BR>');
01789 
01790                                 if (t3lib_div::inList("moderate,basic,custom",$fConf["conf_rte"]))      {
01791                                         $fDetails.="<BR>";
01792                                         $fDetails.=$this->renderCheckBox($prefix."[conf_rte_separateStorageForImages]",isset($fConf["conf_rte_separateStorageForImages"])?$fConf["conf_rte_separateStorageForImages"]:1)."Storage of images in separate folder (in uploads/[extfolder]/rte/)<BR>";
01793                                 }
01794                                 if (t3lib_div::inList("moderate,custom",$fConf["conf_rte"]))    {
01795                                         $fDetails.="<BR>";
01796                                         $fDetails.=$this->renderCheckBox($prefix."[conf_mode_cssOrNot]",isset($fConf["conf_mode_cssOrNot"])?$fConf["conf_mode_cssOrNot"]:1)."Use 'ts_css' transformation instead of 'ts_images-ts-reglinks'<BR>";
01797                                 }
01798                         break;
01799                         case "check":
01800                                 $typeCfg.=$this->resImg("t_input_link.png",'','');
01801                                 $fDetails.=$this->renderCheckBox($prefix."[conf_check_default]",$fConf["conf_check_default"])."Checked by default<BR>";
01802                         break;
01803                         case "select":
01804                         case "radio":
01805                                 if ($fConf["type"]=="radio")    {
01806                                         $typeCfg.=$this->resImg("t_radio.png",'','');
01807                                 } else  {
01808                                         $typeCfg.=$this->resImg("t_sel.png",'','');
01809                                 }
01810                                 $fDetails.="<BR><strong>Define values:</strong><BR>";
01811                                 $subLines=array();
01812                                         $subLines[]='<tr>
01813                                                 <td valign=top>'.$this->fw("Item label:").'</td>
01814                                                 <td valign=top>'.$this->fw("Item value:").'</td>
01815                                         </tr>';
01816                                 $nItems = $fConf["conf_select_items"] = isset($fConf["conf_select_items"])?t3lib_div::intInRange(intval($fConf["conf_select_items"]),0,20):4;
01817                                 for($a=0;$a<$nItems;$a++)       {
01818                                         $subLines[]='<tr>
01819                                                 <td valign=top>'.$this->fw($this->renderStringBox_lang("conf_select_item_".$a,$prefix,$fConf)).'</td>
01820                                                 <td valign=top>'.$this->fw($this->renderStringBox($prefix."[conf_select_itemvalue_".$a."]",isset($fConf["conf_select_itemvalue_".$a])?$fConf["conf_select_itemvalue_".$a]:$a,50)).'</td>
01821                                         </tr>';
01822                                 }
01823                                 $fDetails.='<table border=0 cellpadding=2 cellspacing=2>'.implode("",$subLines).'</table><BR>';
01824                                 $fDetails.=$this->renderStringBox($prefix."[conf_select_items]",$fConf["conf_select_items"],50)." Number of values<BR>";
01825 
01826                                 if ($fConf["type"]=="select")   {
01827                                         $fDetails.=$this->renderCheckBox($prefix."[conf_select_icons]",$fConf["conf_select_icons"])."Add a dummy set of icons<BR>";
01828                                         $fDetails.=$this->resImg("t_select_icons.png",'hspace=20','','<BR><BR>');
01829 
01830                                         $fDetails.=$this->renderStringBox($prefix."[conf_relations]",t3lib_div::intInRange($fConf["conf_relations"],1,1000),50)." Max number of relations<BR>";
01831                                         $fDetails.=$this->renderStringBox($prefix."[conf_relations_selsize]",t3lib_div::intInRange($fConf["conf_relations_selsize"],1,50),50)." Size of selector box<BR>";
01832 
01833                                         $fDetails.=$this->renderCheckBox($prefix."[conf_select_pro]",$fConf["conf_select_pro"])."Add pre-processing with PHP-function<BR>";
01834                                 }
01835                         break;
01836                         case "rel":
01837                                 if ($fConf["conf_rel_type"]=="group" || !$fConf["conf_rel_type"])       {
01838                                         $typeCfg.=$this->resImg("t_rel_group.png",'','');
01839                                 } elseif(intval($fConf["conf_relations"])>1)    {
01840                                         $typeCfg.=$this->resImg("t_rel_selmulti.png",'','');
01841                                 } elseif(intval($fConf["conf_relations_selsize"])>1)    {
01842                                         $typeCfg.=$this->resImg("t_rel_selx.png",'','');
01843                                 } else {
01844                                         $typeCfg.=$this->resImg("t_rel_sel1.png",'','');
01845                                 }
01846 
01847 
01848                                 $optValues = array(
01849                                         "pages" => "Pages table, (pages)",
01850                                         "fe_users" => "Frontend Users, (fe_users)",
01851                                         "fe_groups" => "Frontend Usergroups, (fe_groups)",
01852                                         "tt_content" => "Content elements, (tt_content)",
01853                                         "_CUSTOM" => "Custom table (enter name below)",
01854                                         "_ALL" => "All tables allowed!",
01855                                 );
01856                                 if ($fConf["conf_rel_type"]!="group")   {unset($optValues["_ALL"]);}
01857                                 $optValues = $this->addOtherExtensionTables($optValues);
01858                                 $fDetails.="<BR>Create relation to table:<BR>".$this->renderSelectBox($prefix."[conf_rel_table]",$fConf["conf_rel_table"],$optValues)."<BR>";
01859                                 if ($fConf["conf_rel_table"]=="_CUSTOM")        $fDetails.="Custom table name: ".$this->renderStringBox($prefix."[conf_custom_table_name]",$fConf["conf_custom_table_name"],200)."<BR>";
01860 
01861                                 $optValues = array(
01862                                         "group" => "Field with Element Browser",
01863                                         "select" => "Selectorbox, select global",
01864                                         "select_cur" => "Selectorbox, select from current page",
01865                                         "select_root" => "Selectorbox, select from root page",
01866                                         "select_storage" => "Selectorbox, select from storage page",
01867                                 );
01868                                 $fDetails.="<BR>Type:<BR>".$this->renderSelectBox($prefix."[conf_rel_type]",$fConf["conf_rel_type"]?$fConf["conf_rel_type"]:"group",$optValues)."<BR>";
01869                                 if (t3lib_div::intInRange($fConf["conf_relations"],1,1000)==1 && $fConf["conf_rel_type"]!="group")      {
01870                                         $fDetails.=$this->renderCheckBox($prefix."[conf_rel_dummyitem]",$fConf["conf_rel_dummyitem"])."Add a blank item to the selector<BR>";
01871                                 }
01872 
01873                                 $fDetails.=$this->renderStringBox($prefix."[conf_relations]",t3lib_div::intInRange($fConf["conf_relations"],1,1000),50)." Max number of relations<BR>";
01874                                 $fDetails.=$this->renderStringBox($prefix."[conf_relations_selsize]",t3lib_div::intInRange($fConf["conf_relations_selsize"],1,50),50)." Size of selector box<BR>";
01875                                 $fDetails.=$this->renderCheckBox($prefix."[conf_relations_mm]",$fConf["conf_relations_mm"])."True M-M relations (otherwise commalist of values)<BR>";
01876 
01877 
01878                                 if ($fConf["conf_rel_type"]!="group")   {
01879                                         $fDetails.="<BR>";
01880                                         $fDetails.=$this->renderCheckBox($prefix."[conf_wiz_addrec]",$fConf["conf_wiz_addrec"])."Add 'Add record' link<BR>";
01881                                         $fDetails.=$this->renderCheckBox($prefix."[conf_wiz_listrec]",$fConf["conf_wiz_listrec"])."Add 'List records' link<BR>";
01882                                         $fDetails.=$this->renderCheckBox($prefix."[conf_wiz_editrec]",$fConf["conf_wiz_editrec"])."Add 'Edit record' link<BR>";
01883                                         $fDetails.=$this->resImg("t_rel_wizards.png",'hspace=20','','<BR><BR>');
01884                                 }
01885                         break;
01886                         case "files":
01887                                 if ($fConf["conf_files_type"]=="images")        {
01888                                         $typeCfg.=$this->resImg("t_file_img.png",'','');
01889                                 } elseif ($fConf["conf_files_type"]=="webimages")       {
01890                                         $typeCfg.=$this->resImg("t_file_web.png",'','');
01891                                 } else {
01892                                         $typeCfg.=$this->resImg("t_file_all.png",'','');
01893                                 }
01894 
01895                                 $optValues = array(
01896                                         "images" => "Imagefiles",
01897                                         "webimages" => "Web-imagefiles (gif,jpg,png)",
01898                                         "all" => "All files, except php/php3 extensions",
01899                                 );
01900                                 $fDetails.="<BR>Extensions:<BR>".$this->renderSelectBox($prefix."[conf_files_type]",$fConf["conf_files_type"],$optValues)."<BR>";
01901 
01902                                 $fDetails.=$this->renderStringBox($prefix."[conf_files]",t3lib_div::intInRange($fConf["conf_files"],1,1000),50)." Max number of files<BR>";
01903                                 $fDetails.=$this->renderStringBox($prefix."[conf_max_filesize]",t3lib_div::intInRange($fConf["conf_max_filesize"],1,1000,500),50)." Max filesize allowed (kb)<BR>";
01904                                 $fDetails.=$this->renderStringBox($prefix."[conf_files_selsize]",t3lib_div::intInRange($fConf["conf_files_selsize"],1,50),50)." Size of selector box<BR>";
01905                                 $fDetails.=$this->resImg("t_file_size.png",'','','<BR><BR>');
01906 //                              $fDetails.=$this->renderCheckBox($prefix."[conf_files_mm]",$fConf["conf_files_mm"])."DB relations (very rare choice, normally the commalist is fine enough)<BR>";
01907                                 $fDetails.=$this->renderCheckBox($prefix."[conf_files_thumbs]",$fConf["conf_files_thumbs"])."Show thumbnails<BR>";
01908                                 $fDetails.=$this->resImg("t_file_thumb.png",'hspace=20','','<BR><BR>');
01909                         break;
01910                         case "integer":
01911                                 $typeCfg.=$this->resImg("t_integer.png",'','');
01912                         break;
01913                         case "check_4":
01914                         case "check_10":
01915                                 if ((string)$fConf["type"]=="check_4")  {
01916                                         $typeCfg.=$this->resImg("t_check4.png",'','');
01917                                 } else {
01918                                         $typeCfg.=$this->resImg("t_check10.png",'','');
01919                                 }
01920                                 $nItems= t3lib_div::intInRange($fConf["conf_numberBoxes"],1,10,(string)$fConf["type"]=="check_4"?4:10);
01921                                 $fDetails.=$this->renderStringBox($prefix."[conf_numberBoxes]",$nItems,50)." Number of checkboxes<BR>";
01922 
01923                                 for($a=0;$a<$nItems;$a++)       {
01924                                         $fDetails.="<BR>Label ".($a+1).":<BR>".$this->renderStringBox_lang("conf_boxLabel_".$a,$prefix,$fConf);
01925                                 }
01926                         break;
01927                         case "date":
01928                                 $typeCfg.=$this->resImg("t_date.png",'','');
01929                         break;
01930                         case "datetime":
01931                                 $typeCfg.=$this->resImg("t_datetime.png",'','');
01932                         break;
01933                         case "link":
01934                                 $typeCfg.=$this->resImg("t_link.png",'','');
01935                         break;
01936                 }
01937 
01938                 if ($fConf["type"])     $typeCfg.=$this->textSetup("",$fDetails);
01939 
01940                 $content='<table border=0 cellpadding=0 cellspacing=0>
01941                         <tr><td valign=top>'.$this->fw("Field name:").'</td><td valign=top>'.$this->fw($fieldName).'</td></tr>
01942                         <tr><td valign=top>'.$this->fw("Field title:").'</td><td valign=top>'.$this->fw($fieldTitle).'</td></tr>
01943                         <tr><td valign=top>'.$this->fw("Field type:").'</td><td valign=top>'.$this->fw($typeCfg).'</td></tr>
01944                 </table>';
01945                 return $content;
01946         }
01947 
01948 
01949         function currentFields($addFields,$fArr)        {
01950                 if (is_array($fArr))    {
01951                         reset($fArr);
01952                         while(list($k,$v)=each($fArr))  {
01953                                 if ($v["type"] && trim($v["fieldname"]))        {
01954                                         $addFields[trim($v["fieldname"])]=$v["fieldname"].": ".$v["title"];
01955                                 }
01956                         }
01957                 }
01958                 return $addFields;
01959         }
01960         function addOtherExtensionTables($optValues)    {
01961                 if (is_array($this->wizArray["tables"]))        {
01962                         reset($this->wizArray["tables"]);
01963                         while(list($k,$info)=each($this->wizArray["tables"]))   {
01964                                 if (trim($info["tablename"]))   {
01965                                         $tableName = $this->returnName($this->extKey,"tables",trim($info["tablename"]));
01966                                         $optValues[$tableName]="Extension table: ".$info["title"]." (".$tableName.")";
01967                                 }
01968                         }
01969                 }
01970                 return $optValues;
01971         }
01972         function cleanUpFieldName($str) {
01973                 $fieldName = ereg_replace("[^[:alnum:]_]","",strtolower($str));
01974                 if (!$fieldName || t3lib_div::inList($this->reservedTypo3Fields.",".$this->mysql_reservedFields,$fieldName) || in_array($fieldName,$this->usedNames))   {
01975                         $fieldName.=($fieldName?"_":"").t3lib_div::shortmd5(microtime());
01976                 }
01977                 $this->usedNames[]=$fieldName;
01978                 return $fieldName;
01979         }
01980         function whatIsThis($str)       {
01981                 return ' <a href="#" title="'.htmlspecialchars($str).'" style="cursor:help" onClick="alert('.$GLOBALS['LANG']->JScharCode($str).');return false;">(What is this?)</a>';
01982         }
01983         function renderStringBox_lang($fieldName,$ffPrefix,$piConf)     {
01984                 $content = $this->renderStringBox($ffPrefix."[".$fieldName."]",$piConf[$fieldName])." [English]";
01985                 if (count($this->selectedLanguages))    {
01986                         $lines=array();
01987                         reset($this->selectedLanguages);
01988                         while(list($k,$v)=each($this->selectedLanguages))       {
01989                                 $lines[]=$this->renderStringBox($ffPrefix."[".$fieldName."_".$k."]",$piConf[$fieldName."_".$k])." [".$v."]";
01990                         }
01991                         $content.=$this->textSetup("",implode("<BR>",$lines));
01992                 }
01993                 return $content;
01994         }
01995 
01996         function textSetup($header,$content)    {
01997                 return ($header?"<strong>".$header."</strong><BR>":"")."<blockquote>".trim($content)."</blockquote>";
01998         }
01999         function resImg($name,$p='align="center"',$pre="<BR>",$post="<BR>")     {
02000                 if ($this->dontPrintImages)     return "<BR>";
02001                 $imgRel = $this->path_resources().$name;
02002                 $imgInfo = @getimagesize(PATH_site.$imgRel);
02003                 return $pre.'<img src="'.$this->siteBackPath.$imgRel.'" '.$imgInfo[3].($p?" ".$p:"").' vspace=5 border=1 style="border:solid 1px;">'.$post;
02004         }
02005         function resIcon($name,$p="")   {
02006                 if ($this->dontPrintImages)     return "";
02007                 $imgRel = $this->path_resources("icons/").$name;
02008                 if (!@is_file(PATH_site.$imgRel))       return "";
02009                 $imgInfo = @getimagesize(PATH_site.$imgRel);
02010                 return '<img src="'.$this->siteBackPath.$imgRel.'" '.$imgInfo[3].($p?" ".$p:"").'>';
02011         }
02012         function path_resources($subdir="res/") {
02013                 return substr(t3lib_extMgm::extPath("kickstarter"),strlen(PATH_site)).$subdir;
02014         }
02015         function getOnChangeParts($prefix)      {
02016                 $md5h=t3lib_div::shortMd5($this->piFieldName("wizArray_upd").$prefix);
02017                 return array('<a name="'.$md5h.'"></a>',"setFormAnchorPoint('".$md5h."');");
02018         }
02019         function renderCheckBox($prefix,$value,$defVal=0)       {
02020                 if (!isset($value))     $value=$defVal;
02021                 $onCP = $this->getOnChangeParts($prefix);
02022                 return $this->wopText($prefix).$onCP[0].'<input type="hidden" name="'.$this->piFieldName("wizArray_upd").$prefix.'" value="0"><input type="checkbox" name="'.$this->piFieldName("wizArray_upd").$prefix.'" value="1"'.($value?" CHECKED":"").' onClick="'.$onCP[1].'"'.$this->wop($prefix).'>';
02023         }
02024         function renderTextareaBox($prefix,$value)      {
02025                 $onCP = $this->getOnChangeParts($prefix);
02026                 return $this->wopText($prefix).$onCP[0].'<textarea name="'.$this->piFieldName("wizArray_upd").$prefix.'" style="width:600px;" rows="10" wrap="OFF" onChange="'.$onCP[1].'" title="'.htmlspecialchars("WOP:".$prefix).'"'.$this->wop($prefix).'>'.t3lib_div::formatForTextarea($value).'</textarea>';
02027         }
02028         function renderStringBox($prefix,$value,$width=200)     {
02029                 $onCP = $this->getOnChangeParts($prefix);
02030                 return $this->wopText($prefix).$onCP[0].'<input type="text" name="'.$this->piFieldName("wizArray_upd").$prefix.'" value="'.htmlspecialchars($value).'" style="width:'.$width.'px;" onChange="'.$onCP[1].'"'.$this->wop($prefix).'>';
02031         }
02032         function renderRadioBox($prefix,$value,$thisValue)      {
02033                 $onCP = $this->getOnChangeParts($prefix);
02034                 return $this->wopText($prefix).$onCP[0].'<input type="radio" name="'.$this->piFieldName("wizArray_upd").$prefix.'" value="'.$thisValue.'"'.(!strcmp($value,$thisValue)?" CHECKED":"").' onClick="'.$onCP[1].'"'.$this->wop($prefix).'>';
02035         }
02036         function renderSelectBox($prefix,$value,$optValues)     {
02037                 $onCP = $this->getOnChangeParts($prefix);
02038                 $opt=array();
02039                 $isSelFlag=0;
02040                 reset($optValues);
02041                 while(list($k,$v)=each($optValues))     {
02042                         $sel = (!strcmp($k,$value)?" SELECTED":"");
02043                         if ($sel)       $isSelFlag++;
02044                         $opt[]='<option value="'.htmlspecialchars($k).'"'.$sel.'>'.htmlspecialchars($v).'</option>';
02045                 }
02046                 if (!$isSelFlag && strcmp("",$value))   $opt[]='<option value="'.$value.'" SELECTED>'.htmlspecialchars("CURRENT VALUE '".$value."' DID NOT EXIST AMONG THE OPTIONS").'</option>';
02047                 return $this->wopText($prefix).$onCP[0].'<select name="'.$this->piFieldName("wizArray_upd").$prefix.'" onChange="'.$onCP[1].'"'.$this->wop($prefix).'>'.implode("",$opt).'</select>';
02048         }
02049         function wop($prefix)   {
02050                 return ' title="'.htmlspecialchars("WOP: ".$prefix).'"';
02051         }
02052         function wopText($prefix)       {
02053                 return $this->printWOP?'<font face="verdana,arial,sans-serif" size=1 color=#999999>'.htmlspecialchars($prefix).':</font><BR>':'';
02054         }
02055         function catHeaderLines($lines,$k,$v,$altHeader="",$index="")   {
02056                                         $lines[]='<tr'.$this->bgCol(1).'><td><strong>'.$this->fw($v[0]).'</strong></td></tr>';
02057                                         $lines[]='<tr'.$this->bgCol(2).'><td>'.$this->fw($v[1]).'</td></tr>';
02058                                         $lines[]='<tr><td></td></tr>';
02059                 return $lines;
02060         }
02061         function linkCurrentItems($cat) {
02062                 $items = $this->wizArray[$cat];
02063                 $lines=array();
02064                 $c=0;
02065                 if (is_array($items))   {
02066                         reset($items);
02067                         while(list($k,$conf)=each($items))      {
02068                                 $lines[]='<strong>'.$this->linkStr($conf["title"]?$conf["title"]:"<em>Item ".$k."</em>",$cat,'edit:'.$k).'</strong>';
02069                                 $c=$k;
02070                         }
02071                 }
02072                 if (!t3lib_div::inList("save,ts,TSconfig,languages",$cat) || !count($lines))    {
02073                         $c++;
02074                         if (count($lines))      $lines[]='';
02075                         $lines[]=$this->linkStr('Add new item',$cat,'edit:'.$c);
02076                 }
02077                 return $this->fw(implode("<BR>",$lines));
02078         }
02079         function linkStr($str,$wizSubCmd,$wizAction)    {
02080                 return '<a href="#" onClick="
02081                         document.'.$this->varPrefix.'_wizard[\''.$this->piFieldName("wizSubCmd").'\'].value=\''.$wizSubCmd.'\';
02082                         document.'.$this->varPrefix.'_wizard[\''.$this->piFieldName("wizAction").'\'].value=\''.$wizAction.'\';
02083                         document.'.$this->varPrefix.'_wizard.submit();
02084                         return false;">'.$str.'</a>';
02085         }
02086         function bgCol($n,$mod=0)       {
02087                 $color = $this->color[$n-1];
02088                 if ($mod)       $color = t3lib_div::modifyHTMLcolor($color,$mod,$mod,$mod);
02089                 return ' bgColor="'.$color.'"';
02090         }
02091         function regNewEntry($k,$index) {
02092                 if (!is_array($this->wizArray[$k][$index]))     {
02093                         $this->wizArray[$k][$index]=array();
02094                 }
02095         }
02096         function bwWithFlag($str,$flag) {
02097                 if ($flag)      $str = '<strong>'.$str.'</strong>';
02098                 return $str;
02099         }
02103         function makeUploadDataFromArray($uploadArray)  {
02104                 if (is_array($uploadArray))     {
02105                         $serialized = serialize($uploadArray);
02106                         $md5 = md5($serialized);
02107 
02108                         $content=$md5.":";
02109 /*                      if ($this->gzcompress)  {
02110                                 $content.="gzcompress:";
02111                                 $content.=gzcompress($serialized);
02112                         } else {
02113         */                      $content.=":";
02114                                 $content.=$serialized;
02115 //                      }
02116                 }
02117                 return $content;
02118         }
02122         function makeUploadArray($extKey,$files)        {
02123                 $uploadArray=array();
02124                 $uploadArray["extKey"]=$extKey;
02125                 $uploadArray["EM_CONF"]=Array(
02126                         "title" => "[No title]",
02127                         "description" => "[Enter description of extension]",
02128                         "category" => "example",
02129                         "author" => $this->userfield("name"),
02130                         "author_email" => $this->userfield("email"),
02131 
02132                 );
02133 
02134                 $uploadArray["EM_CONF"] = array_merge($uploadArray["EM_CONF"],$this->makeEMCONFpreset(""));
02135 
02136                 if (is_array($this->_addArray)) {
02137                         $uploadArray["EM_CONF"] = array_merge($uploadArray["EM_CONF"],$this->_addArray);
02138                 }
02139                 $uploadArray["misc"]["codelines"]=0;
02140                 $uploadArray["misc"]["codebytes"]=0;
02141                 $uploadArray["techInfo"] = "";
02142 
02143                 $uploadArray["FILES"] = $files;
02144                 return $uploadArray;
02145         }
02146 
02153         function linkThisCmd($uPA=array())      {
02154           $url = t3lib_div::linkThisScript($uPA);
02155           return $url;
02156         }
02157 
02164         function fw($str)       {
02165                 return '<span style="font-family:verdana,arial,sans-serif; font-size:10px;">'.$str.'</span>';
02166         }
02167 
02168 
02169         function piFieldName($key)      {
02170                 return $this->varPrefix."[".$key."]";
02171         }
02172         function cmdHiddenField()       {
02173                 return '<input type="hidden"  name="'.$this->piFieldName("cmd").'" value="'.htmlspecialchars($this->currentCMD).'">';
02174         }
02175 
02176         function preWrap($str)  {
02177                 $str = str_replace(chr(9),"&nbsp;&nbsp;&nbsp;&nbsp;",htmlspecialchars($str));
02178                 $str = '<pre>'.$str.'</pre>';
02179                 return $str;
02180         }
02181 }
02182 
02183 // Include extension?
02184 if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/kickstarter/modfunc1/class.tx_kickstarter_wizard.php"]) {
02185         include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/kickstarter/modfunc1/class.tx_kickstarter_wizard.php"]);
02186 }
02187 
02188 ?>


Généré par L'expert TYPO3 avec  doxygen 1.4.6