00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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";
00037 var $siteBackPath = "";
00038 var $EMmode=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
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> </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
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
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> </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
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(" ").'</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(" View ").'</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(" ");
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
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
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
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
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
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
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
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
00544
00545
00546
00547
00548
00549
00550 ''
00551 );
00552 $lines[]='<tr'.$this->bgCol(3).'><td>'.$this->fw($subContent).'</td></tr>';
00553
00554
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
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
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
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]," ",$action[1]);
00602 $piConf = $this->wizArray[$catID][$action[1]];
00603 $ffPrefix='['.$catID.']['.$action[1].']';
00604
00605
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
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
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]," ",$action[1]);
00640 $piConf = $this->wizArray[$catID][$action[1]];
00641 $ffPrefix='['.$catID.']['.$action[1].']';
00642
00643
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
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
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]," ",$action[1]);
00676 $piConf = $this->wizArray[$catID][$action[1]];
00677 $ffPrefix='['.$catID.']['.$action[1].']';
00678
00679
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
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
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
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
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
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
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
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]," ",$action[1]);
00750 $piConf = $this->wizArray[$catID][$action[1]];
00751 $ffPrefix='['.$catID.']['.$action[1].']';
00752
00753
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
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
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]," ",$action[1]);
00797 $piConf = $this->wizArray[$catID][$action[1]];
00798 $ffPrefix='['.$catID.']['.$action[1].']';
00799
00800
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
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
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
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]," ",$action[1]);
00849 $piConf = $this->wizArray[$catID][$action[1]];
00850 $ffPrefix='['.$catID.']['.$action[1].']';
00851
00852
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
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
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
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> </td><td></td></tr>';
00903
00904
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
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> </td><td></td></tr>';
00917
00918
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
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
00943 $optValues = Array(
00944 '' => 'no special dependency',
00945 'unix' => 'Unix only',
00946 'win' => 'Windows only',
00947
00948 );
00949
00950 $lines[]='<tr><td> </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
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
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]," ",$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
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
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
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
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
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
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
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
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]," ",$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
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]," ",$action[1]);
01126 $piConf = $this->wizArray[$catID][$action[1]];
01127 $ffPrefix='['.$catID.']['.$action[1].']';
01128
01129 }
01130
01131
01132
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
01161 $selPresetBox=$this->presetBox($piConf["fields"]);
01162
01163
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
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
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
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]," ",$action[1]);
01212 $piConf = $this->wizArray[$catID][$action[1]];
01213 $ffPrefix='['.$catID.']['.$action[1].']';
01214
01215
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
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
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
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
01253 reset($piConf["fields"]);
01254 $lines[]='<tr'.$this->bgCol(1).'><td><strong> Fields Overview </strong></td></tr>';
01255
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
01274 $lines[]='<tr><td></td></tr>';
01275
01276
01277
01278
01279
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
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
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
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
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
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
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
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
01360 $selPresetBox=$this->presetBox($piConf["fields"]);
01361
01362
01363 $c=array(0);
01364 $this->usedNames=array();
01365 if (is_array($piConf["fields"])) {
01366
01367
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
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
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
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
01498
01499
01500
01501
01502
01503
01504
01505
01506
01507
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
01562
01563
01564
01565
01566
01567
01568
01569
01570
01571
01572
01573
01574
01575
01576
01577
01578
01579
01580
01581
01582 } else {
01583
01584
01585 }
01586 }
01587
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
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> </td>
01739 <td> </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
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
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
02110
02111
02112
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)," ",htmlspecialchars($str));
02178 $str = '<pre>'.$str.'</pre>';
02179 return $str;
02180 }
02181 }
02182
02183
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 ?>