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
00179 require_once(PATH_t3lib.'class.t3lib_diff.php');
00180
00181
00182
00191 class t3lib_TCEforms {
00192
00193
00194 var $palFieldArr = array();
00195 var $disableWizards = 0;
00196 var $isPalettedoc = 0;
00197 var $paletteMargin = 1;
00198 var $defStyle = '';
00199 var $cachedTSconfig = array();
00200 var $cachedTSconfig_fieldLevel = array();
00201 var $transformedRow = array();
00202 var $extJSCODE = '';
00203 var $printNeededJS = array();
00204 var $hiddenFieldAccum=array();
00205 var $TBE_EDITOR_fieldChanged_func='';
00206 var $loadMD5_JS=1;
00207 var $prevBorderStyle='[nothing here...]';
00208 var $allowUpload=0;
00209 var $titleLen=15;
00210 var $defaultLanguageData = array();
00211 var $defaultLanguageData_diff = array();
00212
00213
00214
00215 var $backPath='';
00216 var $returnUrl='';
00217 var $doSaveFieldName='';
00218 var $palettesCollapsed=0;
00219 var $disableRTE=0;
00220 var $globalShowHelp=1;
00221 var $fieldOrder='';
00222 var $doPrintPalette=1;
00223 var $clipObj=FALSE;
00224 var $enableClickMenu=FALSE;
00225 var $enableTabMenu = FALSE;
00226
00227 var $form_rowsToStylewidth = 9.58;
00228 var $form_largeComp = 1.33;
00229 var $charsPerRow=40;
00230 var $maxTextareaWidth=48;
00231 var $maxInputWidth=48;
00232 var $defaultMultipleSelectorStyle='width:250px;';
00233
00234
00235
00236 var $prependFormFieldNames = 'data';
00237 var $prependFormFieldNames_file = 'data_files';
00238 var $formName = 'editform';
00239
00240
00241
00242
00243 var $perms_clause='';
00244 var $perms_clause_set=0;
00245 var $edit_showFieldHelp='';
00246 var $docLarge=0;
00247 var $clientInfo=array();
00248 var $RTEenabled=0;
00249 var $RTEenabled_notReasons='';
00250 var $RTEcounter = 0;
00251
00252 var $colorScheme;
00253 var $classScheme;
00254 var $defColorScheme;
00255 var $defClassScheme;
00256 var $fieldStyle;
00257 var $borderStyle;
00258
00259 var $commentMessages=array();
00260
00261
00262 var $totalWrap='<hr />|<hr />';
00263 var $fieldTemplate='<b>###FIELD_NAME###</b><br />###FIELD_ITEM###<hr />';
00264 var $sectionWrap='';
00265 var $palFieldTemplateHeader='';
00266 var $palFieldTemplate='';
00267
00268
00269 var $excludeElements='';
00270 var $palettesRendered=array();
00271 var $hiddenFieldListArr = array();
00272 var $requiredFields=array();
00273 var $requiredElements=array();
00274 var $renderDepth=0;
00275 var $savedSchemes=array();
00276
00277
00278 var $additionalCode_pre = array();
00279 var $additionalJS_pre = array();
00280 var $additionalJS_post = array();
00281 var $additionalJS_submit = array();
00282
00283
00284
00285
00286
00287
00288
00294 function t3lib_TCEforms() {
00295 global $CLIENT;
00296
00297 $this->clientInfo = t3lib_div::clientInfo();
00298
00299 $this->RTEenabled = $GLOBALS['BE_USER']->isRTE();
00300 if (!$this->RTEenabled) {
00301 $this->RTEenabled_notReasons = implode(chr(10),$GLOBALS['BE_USER']->RTE_errors);
00302 $this->commentMessages[] = 'RTE NOT ENABLED IN SYSTEM due to:'.chr(10).$this->RTEenabled_notReasons;
00303 }
00304
00305
00306 $this->defColorScheme = array(
00307 $GLOBALS['SOBE']->doc->bgColor,
00308 t3lib_div::modifyHTMLColorAll($GLOBALS['SOBE']->doc->bgColor,-20),
00309 t3lib_div::modifyHTMLColorAll($GLOBALS['SOBE']->doc->bgColor,-10),
00310 'black',
00311 '#666666'
00312 );
00313 $this->defColorScheme = array();
00314
00315
00316 $this->resetSchemes();
00317
00318
00319 $this->defColorScheme = $this->colorScheme;
00320 $this->defClassScheme = $this->classScheme;
00321 }
00322
00328 function initDefaultBEmode() {
00329 global $BE_USER;
00330 $this->prependFormFieldNames = 'data';
00331 $this->formName = 'editform';
00332 $this->setNewBEDesign();
00333 $this->docLarge = $BE_USER->uc['edit_wideDocument'] ? 1 : 0;
00334 $this->edit_showFieldHelp = $BE_USER->uc['edit_showFieldHelp'];
00335
00336 $this->edit_docModuleUpload = $BE_USER->uc['edit_docModuleUpload'];
00337 $this->titleLen = $BE_USER->uc['titleLen'];
00338 }
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00373 function getSoloField($table,$row,$theFieldToReturn) {
00374 global $TCA;
00375
00376 if ($TCA[$table]) {
00377 t3lib_div::loadTCA($table);
00378 $typeNum = $this->getRTypeNum($table,$row);
00379 if ($TCA[$table]['types'][$typeNum]) {
00380 $itemList = $TCA[$table]['types'][$typeNum]['showitem'];
00381 if ($itemList) {
00382 $fields = t3lib_div::trimExplode(',',$itemList,1);
00383 $excludeElements = $this->excludeElements = $this->getExcludeElements($table,$row,$typeNum);
00384
00385 reset($fields);
00386 while(list(,$fieldInfo)=each($fields)) {
00387 $parts = explode(';',$fieldInfo);
00388
00389 $theField = trim($parts[0]);
00390 if (!in_array($theField,$excludeElements) && !strcmp($theField,$theFieldToReturn)) {
00391 if ($TCA[$table]['columns'][$theField]) {
00392 $sField = $this->getSingleField($table,$theField,$row,$parts[1],1,$parts[3],$parts[2]);
00393 return $sField['ITEM'];
00394 }
00395 }
00396 }
00397 }
00398 }
00399 }
00400 }
00401
00412 function getMainFields($table,$row,$depth=0) {
00413 global $TCA;
00414
00415 $this->renderDepth=$depth;
00416
00417
00418 $out_array = array(array());
00419 $out_array_meta = array(array(
00420 'title' => $this->getLL('l_generalTab')
00421 ));
00422
00423 $out_pointer=0;
00424 $out_sheet=0;
00425 $this->palettesRendered=array();
00426 $this->palettesRendered[$this->renderDepth][$table]=array();
00427
00428 if ($TCA[$table]) {
00429
00430
00431 t3lib_div::loadTCA($table);
00432
00433
00434 if ($this->edit_showFieldHelp || $this->doLoadTableDescr($table)) {
00435 $GLOBALS['LANG']->loadSingleTableDescription($table);
00436 }
00437
00438 $typeNum = $this->getRTypeNum($table,$row);
00439
00440
00441 if ($TCA[$table]['types'][$typeNum]) {
00442 $itemList = $TCA[$table]['types'][$typeNum]['showitem'];
00443 if ($itemList) {
00444
00445
00446 $fields = t3lib_div::trimExplode(',',$itemList,1);
00447 if ($this->fieldOrder) {
00448 $fields = $this->rearrange($fields);
00449 }
00450
00451
00452 $excludeElements = $this->excludeElements = $this->getExcludeElements($table,$row,$typeNum);
00453 $fields = $this->mergeFieldsWithAddedFields($fields,$this->getFieldsToAdd($table,$row,$typeNum));
00454
00455
00456 $cc=0;
00457 foreach($fields as $fieldInfo) {
00458
00459 $parts = explode(';',$fieldInfo);
00460
00461
00462 $color_style_parts = t3lib_div::trimExplode('-',$parts[4]);
00463 if (strcmp($color_style_parts[0],'')) {
00464 $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][intval($color_style_parts[0])]);
00465 }
00466 if (strcmp($color_style_parts[1],'')) {
00467 $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][intval($color_style_parts[1])];
00468 if (!isset($this->fieldStyle)) $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
00469 }
00470 if (strcmp($color_style_parts[2],'')) {
00471 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00472 $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][intval($color_style_parts[2])];
00473 if (!isset($this->borderStyle)) $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
00474 }
00475
00476
00477 $theField = $parts[0];
00478 if (!in_array($theField,$excludeElements)) {
00479 if ($TCA[$table]['columns'][$theField]) {
00480 $sFieldPal='';
00481
00482 if ($parts[2] && !isset($this->palettesRendered[$this->renderDepth][$table][$parts[2]])) {
00483 $sFieldPal=$this->getPaletteFields($table,$row,$parts[2]);
00484 $this->palettesRendered[$this->renderDepth][$table][$parts[2]] = 1;
00485 }
00486 $sField = $this->getSingleField($table,$theField,$row,$parts[1],0,$parts[3],$parts[2]);
00487 if ($sField) $sField.=$sFieldPal;
00488
00489 $out_array[$out_sheet][$out_pointer].= $sField;
00490 } elseif($theField=='--div--') {
00491 if ($cc>0) {
00492 $out_array[$out_sheet][$out_pointer].=$this->getDivider();
00493
00494 if ($this->enableTabMenu && $TCA[$table]['ctrl']['dividers2tabs']) {
00495 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00496 $out_sheet++;
00497 $out_array[$out_sheet] = array();
00498 $out_array_meta[$out_sheet]['title'] = $this->sL($parts[1]);
00499 }
00500 } else {
00501 $out_array_meta[$out_sheet]['title'] = $this->sL($parts[1]);
00502 }
00503 } elseif($theField=='--palette--') {
00504 if ($parts[2] && !isset($this->palettesRendered[$this->renderDepth][$table][$parts[2]])) {
00505
00506 if ($TCA[$table]['palettes'][$parts[2]]['canNotCollapse'] AND $parts[1]) {
00507 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$parts[2],$this->sL($parts[1]));
00508 } else {
00509 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$parts[2],'','',$this->sL($parts[1]));
00510 }
00511 $this->palettesRendered[$this->renderDepth][$table][$parts[2]] = 1;
00512 }
00513 }
00514 }
00515
00516 $cc++;
00517 }
00518 }
00519 }
00520 }
00521
00522
00523 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00524
00525
00526 $this->resetSchemes();
00527
00528
00529 $mP = $TCA[$table]['ctrl']['mainpalette'];
00530 if ($mP && !isset($this->palettesRendered[$this->renderDepth][$table][$mP])) {
00531 $temp_palettesCollapsed=$this->palettesCollapsed;
00532 $this->palettesCollapsed=0;
00533 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$mP,$this->getLL('l_generalOptions'));
00534 $this->palettesCollapsed=$temp_palettesCollapsed;
00535 $this->palettesRendered[$this->renderDepth][$table][$mP] = 1;
00536 }
00537 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00538
00539 if ($this->renderDepth) {
00540 $this->renderDepth--;
00541 }
00542
00543
00544
00545 if ($out_sheet>0) {
00546
00547
00548 $parts = array();
00549 foreach($out_array as $idx => $sheetContent) {
00550 $parts[] = array(
00551 'label' => $out_array_meta[$idx]['title'],
00552 'content' => '<table border="0" cellspacing="0" cellpadding="0" width="100%">'.
00553 implode('',$sheetContent).
00554 '</table>'
00555 );
00556 }
00557
00558 return '
00559 <tr>
00560 <td colspan="2">
00561 '.$this->getDynTabMenu($parts, 'TCEforms:'.$table.':'.$row['uid']).'
00562 </td>
00563 </tr>';
00564 } else {
00565 return implode('',$out_array[$out_sheet]);
00566 }
00567 }
00568
00579 function getListedFields($table,$row,$list) {
00580 global $TCA;
00581
00582 t3lib_div::loadTCA($table);
00583 if ($this->edit_showFieldHelp || $this->doLoadTableDescr($table)) {
00584 $GLOBALS['LANG']->loadSingleTableDescription($table);
00585 }
00586
00587 $out='';
00588 $types_fieldConfig=t3lib_BEfunc::getTCAtypes($table,$row,1);
00589
00590 $editFieldList=array_unique(t3lib_div::trimExplode(',',$list,1));
00591 foreach($editFieldList as $theFieldC) {
00592 list($theField,$palFields) = split('\[|\]',$theFieldC);
00593 $theField = trim($theField);
00594 $palFields = trim($palFields);
00595 if ($TCA[$table]['columns'][$theField]) {
00596 $parts = t3lib_div::trimExplode(';',$types_fieldConfig[$theField]['origString']);
00597 $sField= $this->getSingleField($table,$theField,$row,$parts[1],0,$parts[3],0);
00598 $out.= $sField;
00599 } elseif($theField=='--div--') {
00600 $out.=$this->getDivider();
00601 }
00602 if ($palFields) {
00603 $out.=$this->getPaletteFields($table,$row,'','',implode(',',t3lib_div::trimExplode('|',$palFields,1)));
00604 }
00605 }
00606 return $out;
00607 }
00608
00620 function getPaletteFields($table,$row,$palette,$header='',$itemList='',$collapsedHeader='') {
00621 global $TCA;
00622 if (!$this->doPrintPalette) return '';
00623
00624 $out='';
00625 $palParts=array();
00626 t3lib_div::loadTCA($table);
00627
00628
00629 if (!is_array($this->excludeElements)) {
00630 $this->excludeElements = $this->getExcludeElements($table,$row,$this->getRTypeNum($table,$row));
00631 }
00632
00633
00634 if ($TCA[$table] && (is_array($TCA[$table]['palettes'][$palette]) || $itemList)) {
00635 $itemList = $itemList?$itemList:$TCA[$table]['palettes'][$palette]['showitem'];
00636 if ($itemList) {
00637 $fields = t3lib_div::trimExplode(',',$itemList,1);
00638 reset($fields);
00639 while(list(,$fieldInfo)=each($fields)) {
00640 $parts = t3lib_div::trimExplode(';',$fieldInfo);
00641 $theField = $parts[0];
00642
00643 if (!in_array($theField,$this->excludeElements) && $TCA[$table]['columns'][$theField]) {
00644 $this->palFieldArr[$palette][] = $theField;
00645 if ($this->isPalettesCollapsed($table,$palette)) {
00646 $this->hiddenFieldListArr[] = $theField;
00647 }
00648
00649 $part=$this->getSingleField($table,$theField,$row,$parts[1],1,'',$parts[2]);
00650 if (is_array($part)) {
00651 $palParts[]=$part;
00652 }
00653 }
00654 }
00655 }
00656 }
00657
00658 if (count($palParts)) {
00659 if ($header) {
00660 $out.= $this->intoTemplate(array(
00661 'HEADER' => htmlspecialchars($header)
00662 ),
00663 $this->palFieldTemplateHeader
00664 );
00665 }
00666 $out.= $this->intoTemplate(array(
00667 'PALETTE' => $this->printPalette($palParts)
00668 ),
00669 $this->palFieldTemplate
00670 );
00671 }
00672
00673 if ($this->isPalettesCollapsed($table,$palette) && $collapsedHeader) {
00674 $pC= $this->intoTemplate(array(
00675 'PALETTE' => $this->wrapOpenPalette('<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/options.gif','width="18" height="16"').' border="0" title="'.htmlspecialchars($this->getLL('l_moreOptions')).'" align="top" alt="" /><strong>'.$collapsedHeader.'</strong>',$table,$row,$palette),
00676 ),
00677 $this->palFieldTemplate
00678 );
00679 $out.=$pC;
00680 }
00681 return $out;
00682 }
00683
00696 function getSingleField($table,$field,$row,$altName='',$palette=0,$extra='',$pal=0) {
00697 global $TCA,$BE_USER;
00698
00699 $out = '';
00700 $PA = array();
00701 $PA['altName'] = $altName;
00702 $PA['palette'] = $palette;
00703 $PA['extra'] = $extra;
00704 $PA['pal'] = $pal;
00705
00706
00707 t3lib_div::loadTCA($table);
00708
00709
00710 $PA['fieldConf'] = $TCA[$table]['columns'][$field];
00711 $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00712
00713
00714 if ( is_array($PA['fieldConf']) &&
00715 (!$PA['fieldConf']['exclude'] || $BE_USER->check('non_exclude_fields',$table.':'.$field)) &&
00716 $PA['fieldConf']['config']['form_type']!='passthrough' &&
00717 ($this->RTEenabled || !$PA['fieldConf']['config']['showIfRTE']) &&
00718 (!$PA['fieldConf']['displayCond'] || $this->isDisplayCondition($PA['fieldConf']['displayCond'],$row)) &&
00719 (!$TCA[$table]['ctrl']['languageField'] || strcmp($PA['fieldConf']['l10n_mode'],'exclude') || $row[$TCA[$table]['ctrl']['languageField']]<=0)
00720 ) {
00721
00722
00723 $PA['fieldTSConfig'] = $this->setTSconfig($table,$row,$field);
00724
00725
00726 if (!$PA['fieldTSConfig']['disabled']) {
00727
00728
00729 $PA['itemFormElName']=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']';
00730 $PA['itemFormElName_file']=$this->prependFormFieldNames_file.'['.$table.']['.$row['uid'].']['.$field.']';
00731 $PA['itemFormElValue']=$row[$field];
00732
00733
00734 if (
00735 (($TCA[$table]['ctrl']['type'] && !strcmp($field,$TCA[$table]['ctrl']['type'])) ||
00736 ($TCA[$table]['ctrl']['requestUpdate'] && t3lib_div::inList($TCA[$table]['ctrl']['requestUpdate'],$field)))
00737 && !$BE_USER->uc['noOnChangeAlertInTypeFields']) {
00738 $alertMsgOnChange = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){ TBE_EDITOR_submitForm() };';
00739 } else {$alertMsgOnChange='';}
00740
00741
00742 if (in_array($field,$this->hiddenFieldListArr)) {
00743 $this->hiddenFieldAccum[]='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00744 } else {
00745
00746
00747 if (!$PA['palette']) {
00748 if ($PA['pal'] && $this->isPalettesCollapsed($table,$PA['pal'])) {
00749 list($thePalIcon,$palJSfunc) = $this->wrapOpenPalette('<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/options.gif','width="18" height="16"').' border="0" title="'.htmlspecialchars($this->getLL('l_moreOptions')).'" alt="" />',$table,$row,$PA['pal'],1);
00750 } else {
00751 $thePalIcon = '';
00752 $palJSfunc = '';
00753 }
00754 }
00755
00756 $PA['onFocus'] = ($palJSfunc && !$BE_USER->uc['dontShowPalettesOnFocusInAB']) ? ' onfocus="'.htmlspecialchars($palJSfunc).'"' : '';
00757
00758
00759 $item='';
00760 $PA['label'] = $PA['altName'] ? $PA['altName'] : $PA['fieldConf']['label'];
00761 $PA['label'] = $this->sL($PA['label']);
00762
00763 $PA['fieldChangeFunc']=array();
00764 $PA['fieldChangeFunc']['TBE_EDITOR_fieldChanged'] = "TBE_EDITOR_fieldChanged('".$table."','".$row['uid']."','".$field."','".$PA['itemFormElName']."');";
00765 $PA['fieldChangeFunc']['alert']=$alertMsgOnChange;
00766
00767
00768 $item = $this->getSingleField_SW($table,$field,$row,$PA);
00769
00770
00771 $item = $this->renderDefaultLanguageContent($table,$field,$row,$item);
00772 $item = $this->renderDefaultLanguageDiff($table,$field,$row,$item);
00773
00774
00775 $PA['label'] = t3lib_div::deHSCentities(htmlspecialchars($PA['label']));
00776 if (t3lib_div::testInt($row['uid']) && $PA['fieldTSConfig']['linkTitleToSelf']) {
00777 $lTTS_url = $this->backPath.'alt_doc.php?edit['.$table.']['.$row['uid'].']=edit&columnsOnly='.$field.
00778 ($PA['fieldTSConfig']['linkTitleToSelf.']['returnUrl']?'&returnUrl='.rawurlencode($this->thisReturnUrl()):'');
00779 $PA['label'] = '<a href="'.htmlspecialchars($lTTS_url).'">'.$PA['label'].'</a>';
00780 }
00781
00782
00783 if ($PA['fieldConf']['config']['form_type']=='user' && $PA['fieldConf']['config']['noTableWrapping']) {
00784 $out = $item;
00785 } elseif ($PA['palette']) {
00786
00787 $out=array(
00788 'NAME'=>$PA['label'],
00789 'ID'=>$row['uid'],
00790 'FIELD'=>$field,
00791 'TABLE'=>$table,
00792 'ITEM'=>$item,
00793 'HELP_ICON' => $this->helpTextIcon($table,$field,1)
00794 );
00795 $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00796 } else {
00797
00798 $out=array(
00799 'NAME'=>$PA['label'],
00800 'ITEM'=>$item,
00801 'TABLE'=>$table,
00802 'ID'=>$row['uid'],
00803 'HELP_ICON'=>$this->helpTextIcon($table,$field),
00804 'HELP_TEXT'=>$this->helpText($table,$field),
00805 'PAL_LINK_ICON'=>$thePalIcon,
00806 'FIELD'=>$field
00807 );
00808 $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00809
00810 $out=$this->intoTemplate($out);
00811 }
00812 }
00813 } else $this->commentMessages[]=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']: Disabled by TSconfig';
00814 }
00815
00816 return $out;
00817 }
00818
00830 function getSingleField_SW($table,$field,$row,&$PA) {
00831 $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00832
00833 switch($PA['fieldConf']['config']['form_type']) {
00834 case 'input':
00835 $item = $this->getSingleField_typeInput($table,$field,$row,$PA);
00836 break;
00837 case 'text':
00838 $item = $this->getSingleField_typeText($table,$field,$row,$PA);
00839 break;
00840 case 'check':
00841 $item = $this->getSingleField_typeCheck($table,$field,$row,$PA);
00842 break;
00843 case 'radio':
00844 $item = $this->getSingleField_typeRadio($table,$field,$row,$PA);
00845 break;
00846 case 'select':
00847 $item = $this->getSingleField_typeSelect($table,$field,$row,$PA);
00848 break;
00849 case 'group':
00850 $item = $this->getSingleField_typeGroup($table,$field,$row,$PA);
00851 break;
00852 case 'none':
00853 $item = $this->getSingleField_typeNone($table,$field,$row,$PA);
00854 break;
00855 case 'user':
00856 $item = $this->getSingleField_typeUser($table,$field,$row,$PA);
00857 break;
00858 case 'flex':
00859 $item = $this->getSingleField_typeFlex($table,$field,$row,$PA);
00860 break;
00861 default:
00862 $item = $this->getSingleField_typeUnknown($table,$field,$row,$PA);
00863 break;
00864 }
00865
00866 return $item;
00867 }
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00903 function getSingleField_typeInput($table,$field,$row,&$PA) {
00904
00905
00906
00907 $config = $PA['fieldConf']['config'];
00908 # $specConf = $this->getSpecConfForField($table,$row,$field);
00909 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
00910 $size = t3lib_div::intInRange($config['size']?$config['size']:30,5,$this->maxInputWidth);
00911 $evalList = t3lib_div::trimExplode(',',$config['eval'],1);
00912
00913 if (in_array('required',$evalList)) {
00914 $this->requiredFields[$table.'_'.$row['uid'].'_'.$field]=$PA['itemFormElName'];
00915 }
00916
00917 $paramsList = "'".$PA['itemFormElName']."','".implode(',',$evalList)."','".trim($config['is_in'])."',".(isset($config['checkbox'])?1:0).",'".$config['checkbox']."'";
00918 if (isset($config['checkbox'])) {
00919
00920 $nextMidNight = mktime(0,0,0)+1*3600*24;
00921 $checkSetValue = in_array('date',$evalList) ? $nextMidNight : '';
00922 $checkSetValue = in_array('datetime',$evalList) ? time() : $checkSetValue;
00923
00924 $cOnClick = 'typo3FormFieldGet('.$paramsList.',1,\''.$checkSetValue.'\');'.implode('',$PA['fieldChangeFunc']);
00925 $item.='<input type="checkbox" name="'.$PA['itemFormElName'].'_cb" onclick="'.htmlspecialchars($cOnClick).'" />';
00926 }
00927
00928 $PA['fieldChangeFunc'] = array_merge(array('typo3FormFieldGet'=>'typo3FormFieldGet('.$paramsList.');'), $PA['fieldChangeFunc']);
00929 $mLgd = ($config['max']?$config['max']:256);
00930 $iOnChange = implode('',$PA['fieldChangeFunc']);
00931 $item.='<input type="text" name="'.$PA['itemFormElName'].'_hr" value=""'.$this->formWidth($size).' maxlength="'.$mLgd.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].' />';
00932 $item.='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00933 $this->extJSCODE.='typo3FormFieldSet('.$paramsList.');';
00934
00935
00936 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'_hr" value="" />';
00937 $altItem.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00938
00939
00940 $item= $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'].'_hr',$specConf);
00941
00942 return $item;
00943 }
00944
00955 function getSingleField_typeText($table,$field,$row,&$PA) {
00956
00957
00958 $config = $PA['fieldConf']['config'];
00959
00960
00961 $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
00962
00963
00964 $origRows = $rows = t3lib_div::intInRange($config['rows'] ? $config['rows'] : 5, 1, 20);
00965 if (strlen($PA['itemFormElValue']) > $this->charsPerRow*2) {
00966 $cols = $this->maxTextareaWidth;
00967 $rows = t3lib_div::intInRange(round(strlen($PA['itemFormElValue'])/$this->charsPerRow), count(explode(chr(10),$PA['itemFormElValue'])), 20);
00968 if ($rows<$origRows) $rows = $origRows;
00969 }
00970
00971
00972 $RTEwasLoaded = 0;
00973 $RTEwouldHaveBeenLoaded = 0;
00974
00975
00976 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
00977
00978
00979 $altItem = '<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00980
00981
00982 if ($this->RTEenabled) {
00983 $p = t3lib_BEfunc::getSpecConfParametersFromArray($specConf['rte_transform']['parameters']);
00984 if (isset($specConf['richtext']) && (!$p['flag'] || !$row[$p['flag']])) {
00985 list($tscPID,$thePidValue) = $this->getTSCpid($table,$row['uid'],$row['pid']);
00986
00987
00988 if ($thePidValue >= 0) {
00989 $RTEsetup = $GLOBALS['BE_USER']->getTSConfig('RTE',t3lib_BEfunc::getPagesTSconfig($tscPID));
00990 $RTEtypeVal = t3lib_BEfunc::getTCAtypeValue($table,$row);
00991 $thisConfig = t3lib_BEfunc::RTEsetup($RTEsetup['properties'],$table,$field,$RTEtypeVal);
00992
00993 if (!$thisConfig['disabled']) {
00994 if (!$this->disableRTE) {
00995 $this->RTEcounter++;
00996
00997
00998 $eFile = t3lib_parsehtml_proc::evalWriteFile($specConf['static_write'], $row);
00999 $RTErelPath = is_array($eFile) ? dirname($eFile['relEditFile']) : '';
01000
01001
01002 $RTEobj = &t3lib_BEfunc::RTEgetObj();
01003 $item = $RTEobj->drawRTE($this,$table,$field,$row,$PA,$specConf,$thisConfig,$RTEtypeVal,$RTErelPath,$thePidValue);
01004
01005
01006 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf,1);
01007
01008 $RTEwasLoaded = 1;
01009 } else {
01010 $RTEwouldHaveBeenLoaded = 1;
01011 $this->commentMessages[] = $PA['itemFormElName'].': RTE is disabled by the on-page RTE-flag (probably you can enable it by the check-box in the bottom of this page!)';
01012 }
01013 } else $this->commentMessages[] = $PA['itemFormElName'].': RTE is disabled by the Page TSconfig, "RTE"-key (eg. by RTE.default.disabled=0 or such)';
01014 } else $this->commentMessages[] = $PA['itemFormElName'].': PID value could NOT be fetched. Rare error, normally with new records.';
01015 } else {
01016 if (!isset($specConf['richtext'])) $this->commentMessages[] = $PA['itemFormElName'].': RTE was not configured for this field in TCA-types';
01017 if (!(!$p['flag'] || !$row[$p['flag']])) $this->commentMessages[] = $PA['itemFormElName'].': Field-flag ('.$PA['flag'].') has been set to disable RTE!';
01018 }
01019 }
01020
01021
01022 if (!$RTEwasLoaded) {
01023 if ($specConf['rte_only']) {
01024 $item = '<p><em>'.htmlspecialchars($this->getLL('l_noRTEfound')).'</em></p>';
01025 } else {
01026 if ($specConf['nowrap']) {
01027 $wrap = 'off';
01028 } else {
01029 $wrap = ($config['wrap'] ? $config['wrap'] : 'virtual');
01030 }
01031 $iOnChange = implode('',$PA['fieldChangeFunc']);
01032 $item.= '
01033 <textarea name="'.$PA['itemFormElName'].'"'.$this->formWidthText($cols,$wrap).' rows="'.$rows.'" wrap="'.$wrap.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].'>'.
01034 t3lib_div::formatForTextarea($PA['itemFormElValue']).
01035 '</textarea>';
01036 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf,$RTEwouldHaveBeenLoaded);
01037 }
01038 }
01039
01040
01041 return $item;
01042 }
01043
01054 function getSingleField_typeCheck($table,$field,$row,&$PA) {
01055 $config = $PA['fieldConf']['config'];
01056
01057
01058 $selItems = $this->initItemArray($PA['fieldConf']);
01059 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01060
01061 if (!count($selItems)) {
01062 $selItems[]=array('','');
01063 }
01064 $thisValue = intval($PA['itemFormElValue']);
01065
01066 $cols = intval($config['cols']);
01067 if ($cols > 1) {
01068 $item.= '<table border="0" cellspacing="0" cellpadding="0" class="typo3-TCEforms-checkboxArray">';
01069 for ($c=0;$c<count($selItems);$c++) {
01070 $p = $selItems[$c];
01071 if(!($c%$cols)) { $item.='<tr>'; }
01072 $cBP = $this->checkBoxParams($PA['itemFormElName'],$thisValue,$c,count($selItems),implode('',$PA['fieldChangeFunc']));
01073 $cBName = $PA['itemFormElName'].'_'.$c;
01074 $item.= '<td nowrap="nowrap">'.
01075 '<input type="checkbox"'.$this->insertDefStyle('check').' value="1" name="'.$cBName.'"'.$cBP.' />'.
01076 $this->wrapLabels(htmlspecialchars($p[0]).' ').
01077 '</td>';
01078 if(($c%$cols)+1==$cols) {$item.='</tr>';}
01079 }
01080 if ($c%$cols) {
01081 $rest=$cols-($c%$cols);
01082 for ($c=0;$c<$rest;$c++) {
01083 $item.= '<td></td>';
01084 }
01085 if ($c>0) { $item.= '</tr>'; }
01086 }
01087 $item.= '</table>';
01088 } else {
01089 for ($c=0;$c<count($selItems);$c++) {
01090 $p = $selItems[$c];
01091 $cBP = $this->checkBoxParams($PA['itemFormElName'],$thisValue,$c,count($selItems),implode('',$PA['fieldChangeFunc']));
01092 $cBName = $PA['itemFormElName'].'_'.$c;
01093 $item.= ($c>0?'<br />':'').
01094 '<input type="checkbox"'.$this->insertDefStyle('check').' value="1" name="'.$cBName.'"'.$cBP.$PA['onFocus'].' />'.
01095 htmlspecialchars($p[0]);
01096 }
01097 }
01098 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($thisValue).'" />';
01099
01100 return $item;
01101 }
01102
01113 function getSingleField_typeRadio($table,$field,$row,&$PA) {
01114 $config = $PA['fieldConf']['config'];
01115
01116
01117 $selItems = $this->initItemArray($PA['fieldConf']);
01118 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01119
01120
01121 for ($c=0;$c<count($selItems);$c++) {
01122 $p = $selItems[$c];
01123 $rOnClick = implode('',$PA['fieldChangeFunc']);
01124 $rChecked = (!strcmp($p[1],$PA['itemFormElValue'])?' checked="checked"':'');
01125 $item.= '<input type="radio"'.$this->insertDefStyle('radio').' name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($p[1]).'" onclick="'.htmlspecialchars($rOnClick).'"'.$rChecked.$PA['onFocus'].' />'.
01126 htmlspecialchars($p[0]).
01127 '<br />';
01128 }
01129
01130 return $item;
01131 }
01132
01143 function getSingleField_typeSelect($table,$field,$row,&$PA) {
01144 global $TCA;
01145
01146
01147 $config = $PA['fieldConf']['config'];
01148
01149
01150 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01151
01152
01153 $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($PA['fieldConf']),$PA['fieldConf'],$this->setTSconfig($table,$row),$field);
01154 $selItems = $this->addItems($selItems,$PA['fieldTSConfig']['addItems.']);
01155 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01156
01157
01158 $removeItems = t3lib_div::trimExplode(',',$PA['fieldTSConfig']['removeItems'],1);
01159 foreach($selItems as $tk => $p) {
01160
01161
01162 $languageDeny = $TCA[$table]['ctrl']['languageField'] && !strcmp($TCA[$table]['ctrl']['languageField'], $field) && !$GLOBALS['BE_USER']->checkLanguageAccess($p[1]);
01163 $authModeDeny = $config['form_type']=='select' && $config['authMode'] && !$GLOBALS['BE_USER']->checkAuthMode($table,$field,$p[1],$config['authMode']);
01164 if (in_array($p[1],$removeItems) || $languageDeny || $authModeDeny) {
01165 unset($selItems[$tk]);
01166 } elseif (isset($PA['fieldTSConfig']['altLabels.'][$p[1]])) {
01167 $selItems[$tk][0]=$this->sL($PA['fieldTSConfig']['altLabels.'][$p[1]]);
01168 }
01169
01170
01171 if ($table.'.'.$field == 'pages.doktype') {
01172 if (!($GLOBALS['BE_USER']->isAdmin() || t3lib_div::inList($GLOBALS['BE_USER']->groupData['pagetypes_select'],$p[1]))) {
01173 unset($selItems[$tk]);
01174 }
01175 }
01176 }
01177
01178
01179 $nMV_label = isset($PA['fieldTSConfig']['noMatchingValue_label']) ? $this->sL($PA['fieldTSConfig']['noMatchingValue_label']) : '[ '.$this->getLL('l_noMatchingValue').' ]';
01180
01181
01182 $maxitems = intval($config['maxitems']);
01183
01184
01185 if ($maxitems<=1) {
01186 $item = $this->getSingleField_typeSelect_single($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01187 } elseif (!strcmp($config['renderMode'],'checkbox')) {
01188 $item = $this->getSingleField_typeSelect_checkbox($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01189 } elseif (!strcmp($config['renderMode'],'singlebox')) {
01190 $item = $this->getSingleField_typeSelect_singlebox($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01191 } else {
01192 $item = $this->getSingleField_typeSelect_multiple($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01193 }
01194
01195
01196 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01197 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
01198
01199 return $item;
01200 }
01201
01216 function getSingleField_typeSelect_single($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01217
01218
01219 $c = 0;
01220 $sI = 0;
01221 $noMatchingValue = 1;
01222 $opt = array();
01223 $selicons = array();
01224 $onlySelectedIconShown = 0;
01225 $size = intval($config['size']);
01226
01227
01228 if ($config['suppress_icons']=='IF_VALUE_FALSE') {
01229 $suppressIcons = !$PA['itemFormElValue'] ? 1 : 0;
01230 } elseif ($config['suppress_icons']=='ONLY_SELECTED') {
01231 $suppressIcons=0;
01232 $onlySelectedIconShown=1;
01233 } elseif ($config['suppress_icons']) {
01234 $suppressIcons = 1;
01235 } else $suppressIcons = 0;
01236
01237
01238 foreach($selItems as $p) {
01239 $sM = (!strcmp($PA['itemFormElValue'],$p[1])?' selected="selected"':'');
01240 if ($sM) {
01241 $sI = $c;
01242 $noMatchingValue = 0;
01243 }
01244
01245
01246 if ($config['iconsInOptionTags']) {
01247 $styleAttrValue = $this->optionTagStyle($p[2]);
01248 }
01249
01250
01251 $opt[]= '<option value="'.htmlspecialchars($p[1]).'"'.
01252 $sM.
01253 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01254 (!strcmp($p[1],'--div--') ? ' class="c-divider"' : '').
01255 '>'.t3lib_div::deHSCentities(htmlspecialchars($p[0])).'</option>';
01256
01257
01258 if ($p[2] && !$suppressIcons && (!$onlySelectedIconShown || $sM)) {
01259 list($selIconFile,$selIconInfo)=$this->getIcon($p[2]);
01260 $iOnClick = $this->elName($PA['itemFormElName']).'.selectedIndex='.$c.'; '.implode('',$PA['fieldChangeFunc']).$this->blur().'return false;';
01261 $selicons[]=array(
01262 (!$onlySelectedIconShown ? '<a href="#" onclick="'.htmlspecialchars($iOnClick).'">' : '').
01263 '<img src="'.$selIconFile.'" '.$selIconInfo[3].' vspace="2" border="0" title="'.htmlspecialchars($p[0]).'" alt="'.htmlspecialchars($p[0]).'" />'.
01264 (!$onlySelectedIconShown ? '</a>' : ''),
01265 $c,$sM);
01266 }
01267 $c++;
01268 }
01269
01270
01271 if ($PA['itemFormElValue'] && $noMatchingValue && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01272 $nMV_label = @sprintf($nMV_label, $PA['itemFormElValue']);
01273 $opt[]= '<option value="'.htmlspecialchars($PA['itemFormElValue']).'" selected="selected">'.htmlspecialchars($nMV_label).'</option>';
01274 }
01275
01276
01277 $sOnChange = 'if (this.options[this.selectedIndex].value==\'--div--\') {this.selectedIndex='.$sI.';} '.implode('',$PA['fieldChangeFunc']);
01278 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_selIconVal" value="'.htmlspecialchars($sI).'" />';
01279 $item.= '<select name="'.$PA['itemFormElName'].'"'.
01280 $this->insertDefStyle('select').
01281 ($size?' size="'.$size.'"':'').
01282 ' onchange="'.htmlspecialchars($sOnChange).'"'.
01283 $PA['onFocus'].'>';
01284 $item.= implode('',$opt);
01285 $item.= '</select>';
01286
01287
01288 if (count($selicons)) {
01289 $item.='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-selectIcons">';
01290 $selicon_cols = intval($config['selicon_cols']);
01291 if (!$selicon_cols) $selicon_cols=count($selicons);
01292 $sR = ceil(count($selicons)/$selicon_cols);
01293 $selicons = array_pad($selicons,$sR*$selicon_cols,'');
01294 for($sa=0;$sa<$sR;$sa++) {
01295 $item.='<tr>';
01296 for($sb=0;$sb<$selicon_cols;$sb++) {
01297 $sk=($sa*$selicon_cols+$sb);
01298 $imgN = 'selIcon_'.$table.'_'.$row['uid'].'_'.$field.'_'.$selicons[$sk][1];
01299 $imgS = ($selicons[$sk][2]?$this->backPath.'gfx/content_selected.gif':'clear.gif');
01300 $item.='<td><img name="'.htmlspecialchars($imgN).'" src="'.$imgS.'" width="7" height="10" alt="" /></td>';
01301 $item.='<td>'.$selicons[$sk][0].'</td>';
01302 }
01303 $item.='</tr>';
01304 }
01305 $item.='</table>';
01306 }
01307
01308 return $item;
01309 }
01310
01325 function getSingleField_typeSelect_checkbox($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01326
01327
01328 $itemArray = array_flip($this->extractValuesOnlyFromValueLabelList($PA['itemFormElValue']));
01329
01330
01331 $tRows = array();
01332 $sOnChange = implode('',$PA['fieldChangeFunc']);
01333 $c=0;
01334 $setAll = array();
01335 foreach($selItems as $p) {
01336
01337 if (!strcmp($p[1],'--div--')) {
01338 if (count($setAll)) {
01339 $tRows[] = '
01340 <tr>
01341 <td colspan="2">'.
01342 '<a href="#" onclick="'.htmlspecialchars(implode('',$setAll).' return false;').'">'.
01343 htmlspecialchars($this->getLL('l_setAllCheckboxes')).
01344 '</a></td>
01345 </tr>';
01346 $setAll = array();
01347 }
01348
01349 $tRows[] = '
01350 <tr class="c-header">
01351 <td colspan="2">'.htmlspecialchars($p[0]).'</td>
01352 </tr>';
01353 } else {
01354
01355 $sM = '';
01356 if (isset($itemArray[$p[1]])) {
01357 $sM = ' checked="checked"';
01358 unset($itemArray[$p[1]]);
01359 }
01360
01361
01362 $selIconFile = '';
01363 if ($p[2]) {
01364 list($selIconFile,$selIconInfo) = $this->getIcon($p[2]);
01365 }
01366
01367
01368 $onClickCell = $this->elName($PA['itemFormElName'].'['.$c.']').'.checked=!'.$this->elName($PA['itemFormElName'].'['.$c.']').'.checked;';
01369 $onClick = 'this.attributes.getNamedItem("class").nodeValue = '.$this->elName($PA['itemFormElName'].'['.$c.']').'.checked ? "c-selectedItem" : "";';
01370 $setAll[] = $this->elName($PA['itemFormElName'].'['.$c.']').'.checked=1;';
01371 $tRows[] = '
01372 <tr class="'.($sM ? 'c-selectedItem' : '').'" onclick="'.htmlspecialchars($onClick).'" style="cursor: pointer;">
01373 <td><input type="checkbox" name="'.htmlspecialchars($PA['itemFormElName'].'['.$c.']').'" value="'.htmlspecialchars($p[1]).'"'.$sM.' onclick="'.htmlspecialchars($sOnChange).'"'.$PA['onFocus'].' /></td>
01374 <td class="c-labelCell" onclick="'.htmlspecialchars($onClickCell).'">'.
01375 ($selIconFile ? '<img src="'.$selIconFile.'" '.$selIconInfo[3].' vspace="2" border="0" class="absmiddle" style="margin-right: 4px;" alt="" />' : '').
01376 t3lib_div::deHSCentities(htmlspecialchars($p[0])).
01377 (strcmp($p[3],'') ? '<br/><p class="c-descr">'.nl2br(trim(htmlspecialchars($p[3]))).'</p>' : '').
01378 '</td>
01379 </tr>';
01380 $c++;
01381 }
01382 }
01383
01384
01385 if (count($setAll)) {
01386 $tRows[] = '
01387 <tr>
01388 <td colspan="2">'.
01389 '<a href="#" onclick="'.htmlspecialchars(implode('',$setAll).' return false;').'">'.
01390 htmlspecialchars($this->getLL('l_setAllCheckboxes')).
01391 '</a></td>
01392 </tr>';
01393 }
01394
01395
01396 if (count($itemArray) && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01397 foreach($itemArray as $theNoMatchValue => $temp) {
01398
01399 array_unshift($tRows,'
01400 <tr class="c-invalidItem">
01401 <td><input type="checkbox" name="'.htmlspecialchars($PA['itemFormElName'].'['.$c.']').'" value="'.htmlspecialchars($theNoMatchValue).'" checked="checked" onclick="'.htmlspecialchars($sOnChange).'"'.$PA['onFocus'].' /></td>
01402 <td class="c-labelCell">'.
01403 t3lib_div::deHSCentities(htmlspecialchars(@sprintf($nMV_label, $theNoMatchValue))).
01404 '</td>
01405 </tr>');
01406 $c++;
01407 }
01408 }
01409
01410
01411 $item.='<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="" />';
01412
01413
01414 $item.= '
01415 <table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-select-checkbox">'.
01416 implode('',$tRows).'
01417 </table>
01418 ';
01419
01420 return $item;
01421 }
01422
01437 function getSingleField_typeSelect_singlebox($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01438
01439
01440 $itemArray = array_flip($this->extractValuesOnlyFromValueLabelList($PA['itemFormElValue']));
01441
01442
01443 $opt = array();
01444 $restoreCmd = array();
01445 $c = 0;
01446 foreach($selItems as $p) {
01447
01448 $sM = '';
01449 if (isset($itemArray[$p[1]])) {
01450 $sM = ' selected="selected"';
01451 $restoreCmd[] = $this->elName($PA['itemFormElName'].'[]').'.options['.$c.'].selected=1;';
01452 unset($itemArray[$p[1]]);
01453 }
01454
01455
01456 $nonSel = '';
01457 if (!strcmp($p[1],'--div--')) {
01458 $nonSel = ' onclick="this.selected=0;" class="c-divider"';
01459 }
01460
01461
01462 if ($config['iconsInOptionTags']) {
01463 $styleAttrValue = $this->optionTagStyle($p[2]);
01464 }
01465
01466
01467 $opt[] = '<option value="'.htmlspecialchars($p[1]).'"'.
01468 $sM.
01469 $nonSel.
01470 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01471 '>'.t3lib_div::deHSCentities(htmlspecialchars($p[0])).'</option>';
01472 $c++;
01473 }
01474
01475
01476 if (count($itemArray) && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01477 foreach($itemArray as $theNoMatchValue => $temp) {
01478
01479 array_unshift($opt,'<option value="'.htmlspecialchars($theNoMatchValue).'" selected="selected">'.t3lib_div::deHSCentities(htmlspecialchars(@sprintf($nMV_label, $theNoMatchValue))).'</option>');
01480 }
01481 }
01482
01483
01484 $sOnChange = implode('',$PA['fieldChangeFunc']);
01485 $selector_itemListStyle = isset($config['itemListStyle']) ? ' style="'.htmlspecialchars($config['itemListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"';
01486 $size = intval($config['size']);
01487 $size = $config['autoSizeMax'] ? t3lib_div::intInRange(count($selItems)+1,t3lib_div::intInRange($size,1),$config['autoSizeMax']) : $size;
01488 $selectBox = '<select name="'.$PA['itemFormElName'].'[]"'.
01489 $this->insertDefStyle('select').
01490 ($size ? ' size="'.$size.'"' : '').
01491 ' multiple="multiple" onchange="'.htmlspecialchars($sOnChange).'"'.
01492 $PA['onFocus'].
01493 $selector_itemListStyle.'>
01494 '.
01495 implode('
01496 ',$opt).'
01497 </select>';
01498
01499
01500 $item.='<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="" />';
01501
01502
01503 $item.= '
01504 <table border="0" cellspacing="0" cellpadding="0" width="1" class="typo3-TCEforms-select-singlebox">
01505 <tr>
01506 <td>
01507 '.$selectBox.'
01508 <br/>
01509 <em>'.
01510 htmlspecialchars($this->getLL('l_holdDownCTRL')).
01511 '</em>
01512 </td>
01513 <td valign="top">
01514 <a href="#" onclick="'.htmlspecialchars($this->elName($PA['itemFormElName'].'[]').'.selectedIndex=-1;'.implode('',$restoreCmd).' return false;').'">'.
01515 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/history.gif','width="13" height="12"').' title="'.htmlspecialchars($this->getLL('l_revertSelection')).'" alt="" />'.
01516 '</a>
01517 </td>
01518 </tr>
01519 </table>
01520 ';
01521
01522 return $item;
01523 }
01524
01539 function getSingleField_typeSelect_multiple($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01540
01541
01542 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'" />';
01543
01544
01545 $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01546 if (!$maxitems) $maxitems=100000;
01547 $minitems = t3lib_div::intInRange($config['minitems'],0);
01548
01549
01550 $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01551
01552
01553 $removeItems = t3lib_div::trimExplode(',',$PA['fieldTSConfig']['removeItems'],1);
01554
01555
01556 $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01557 foreach($itemArray as $tk => $tv) {
01558 $tvP = explode('|',$tv,2);
01559 $evalValue = rawurldecode($tvP[0]);
01560 $isRemoved = in_array($evalValue,$removeItems) || ($config['form_type']=='select' && $config['authMode'] && !$GLOBALS['BE_USER']->checkAuthMode($table,$field,$evalValue,$config['authMode']));
01561 if ($isRemoved && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01562 $tvP[1] = rawurlencode(@sprintf($nMV_label, $evalValue));
01563 } elseif (isset($PA['fieldTSConfig']['altLabels.'][$evalValue])) {
01564 $tvP[1] = rawurlencode($this->sL($PA['fieldTSConfig']['altLabels.'][$evalValue]));
01565 } else {
01566 $tvP[1] = rawurlencode($this->sL(rawurldecode($tvP[1])));
01567 }
01568 $itemArray[$tk] = implode('|',$tvP);
01569 }
01570
01571
01572 $opt = array();
01573 $styleAttrValue = '';
01574 foreach($selItems as $p) {
01575 if ($config['iconsInOptionTags']) {
01576 $styleAttrValue = $this->optionTagStyle($p[2]);
01577 }
01578 $opt[]= '<option value="'.htmlspecialchars($p[1]).'"'.
01579 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01580 '>'.htmlspecialchars($p[0]).'</option>';
01581 }
01582
01583
01584 $selector_itemListStyle = isset($config['itemListStyle']) ? ' style="'.htmlspecialchars($config['itemListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"';
01585 $size = intval($config['size']);
01586 $size = $config['autoSizeMax'] ? t3lib_div::intInRange(count($itemArray)+1,t3lib_div::intInRange($size,1),$config['autoSizeMax']) : $size;
01587 $sOnChange = 'setFormValueFromBrowseWin(\''.$PA['itemFormElName'].'\',this.options[this.selectedIndex].value,this.options[this.selectedIndex].text); '.implode('',$PA['fieldChangeFunc']);
01588 $itemsToSelect = '
01589 <select name="'.$PA['itemFormElName'].'_sel"'.
01590 $this->insertDefStyle('select').
01591 ($size ? ' size="'.$size.'"' : '').
01592 ' onchange="'.htmlspecialchars($sOnChange).'"'.
01593 $PA['onFocus'].
01594 $selector_itemListStyle.'>
01595 '.implode('
01596 ',$opt).'
01597 </select>';
01598
01599
01600 $params = array(
01601 'size' => $size,
01602 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01603 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01604 'dontShowMoveIcons' => ($maxitems<=1),
01605 'maxitems' => $maxitems,
01606 'info' => '',
01607 'headers' => array(
01608 'selector' => $this->getLL('l_selected').':<br />',
01609 'items' => $this->getLL('l_items').':<br />'
01610 ),
01611 'noBrowser' => 1,
01612 'thumbnails' => $itemsToSelect
01613 );
01614 $item.= $this->dbFileIcons($PA['itemFormElName'],'','',$itemArray,'',$params,$PA['onFocus']);
01615
01616 return $item;
01617 }
01618
01629 function getSingleField_typeGroup($table,$field,$row,&$PA) {
01630
01631 $config = $PA['fieldConf']['config'];
01632 $internal_type = $config['internal_type'];
01633 $show_thumbs = $config['show_thumbs'];
01634 $size = intval($config['size']);
01635 $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01636 if (!$maxitems) $maxitems=100000;
01637 $minitems = t3lib_div::intInRange($config['minitems'],0);
01638 $allowed = $config['allowed'];
01639 $disallowed = $config['disallowed'];
01640
01641 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'" />';
01642 $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01643 $info='';
01644
01645
01646 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01647
01648
01649 switch((string)$config['internal_type']) {
01650 case 'file':
01651
01652
01653 $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01654 if (!count($tempFT)) {$info.='*';}
01655 foreach($tempFT as $ext) {
01656 if ($ext) {
01657 $info.=strtoupper($ext).' ';
01658 }
01659 }
01660
01661 $tempFT_dis = t3lib_div::trimExplode(',',$disallowed,1);
01662 if (count($tempFT_dis)) {$info.='<br />';}
01663 foreach($tempFT_dis as $ext) {
01664 if ($ext) {
01665 $info.='-'.strtoupper($ext).' ';
01666 }
01667 }
01668
01669
01670 $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01671
01672
01673 $thumbsnail = '';
01674 if ($show_thumbs) {
01675 $imgs = array();
01676 foreach($itemArray as $imgRead) {
01677 $imgP = explode('|',$imgRead);
01678
01679 $rowCopy = array();
01680 $rowCopy[$field] = $imgP[0];
01681
01682
01683 $absFilePath = t3lib_div::getFileAbsFileName($config['uploadfolder'].'/'.$imgP[0]);
01684
01685 $fI = pathinfo($imgP[0]);
01686 $fileIcon = t3lib_BEfunc::getFileIcon(strtolower($fI['extension']));
01687 $fileIcon = '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/fileicons/'.$fileIcon,'width="18" height="16"').' class="absmiddle" title="'.htmlspecialchars($fI['basename'].($absFilePath && @is_file($absFilePath) ? ' ('.t3lib_div::formatSize(filesize($absFilePath)).'bytes)' : ' - FILE NOT FOUND!')).'" alt="" />';
01688
01689 $imgs[] = '<span class="nobr">'.t3lib_BEfunc::thumbCode($rowCopy,$table,$field,$this->backPath,'thumbs.php',$config['uploadfolder'],0,' align="middle"').
01690 ($absFilePath ? $this->getClickMenu($fileIcon, $absFilePath) : $fileIcon).
01691 $imgP[0].
01692 '</span>';
01693 }
01694 $thumbsnail = implode('<br />',$imgs);
01695 }
01696
01697
01698 $params = array(
01699 'size' => $size,
01700 'dontShowMoveIcons' => ($maxitems<=1),
01701 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01702 'maxitems' => $maxitems,
01703 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01704 'info' => $info,
01705 'thumbnails' => $thumbsnail
01706 );
01707 $item.= $this->dbFileIcons($PA['itemFormElName'],'file',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01708
01709
01710 if ($this->edit_docModuleUpload) $item.='<input type="file" name="'.$PA['itemFormElName_file'].'"'.$this->formWidth().' size="60" />';
01711 break;
01712 case 'db':
01713
01714
01715 $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01716 if (!strcmp(trim($tempFT[0]),'*')) {
01717 $info.='<span class="nobr"> '.
01718 htmlspecialchars($this->getLL('l_allTables')).
01719 '</span><br />';
01720 } else {
01721 while(list(,$theT)=each($tempFT)) {
01722 if ($theT) {
01723 $info.='<span class="nobr"> '.
01724 t3lib_iconWorks::getIconImage($theT,array(),$this->backPath,'align="top"').
01725 htmlspecialchars($this->sL($GLOBALS['TCA'][$theT]['ctrl']['title'])).
01726 '</span><br />';
01727 }
01728 }
01729 }
01730
01731 $perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
01732 $itemArray = array();
01733 $imgs = array();
01734
01735
01736 $temp_itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01737 foreach($temp_itemArray as $dbRead) {
01738 $recordParts = explode('|',$dbRead);
01739 list($this_table,$this_uid) = t3lib_BEfunc::splitTable_Uid($recordParts[0]);
01740 $itemArray[] = array('table'=>$this_table, 'id'=>$this_uid);
01741 if ($show_thumbs) {
01742 $rr = t3lib_BEfunc::getRecord($this_table,$this_uid);
01743 $imgs[] = '<span class="nobr">'.
01744 $this->getClickMenu(t3lib_iconWorks::getIconImage($this_table,$rr,$this->backPath,'align="top" title="'.htmlspecialchars(t3lib_BEfunc::getRecordPath($rr['pid'],$perms_clause,15)).' [UID: '.$rr['uid'].']"'),$this_table, $this_uid).
01745 ' '.
01746 $this->noTitle($rr[$GLOBALS['TCA'][$this_table]['ctrl']['label']],array('<em>','</em>')).' <span class="typo3-dimmed"><em>['.$rr['uid'].']</em></span>'.
01747 '</span>';
01748 }
01749 }
01750 $thumbsnail='';
01751 if ($show_thumbs) {
01752 $thumbsnail = implode('<br />',$imgs);
01753 }
01754
01755
01756 $params = array(
01757 'size' => $size,
01758 'dontShowMoveIcons' => ($maxitems<=1),
01759 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01760 'maxitems' => $maxitems,
01761 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01762 'info' => $info,
01763 'thumbnails' => $thumbsnail
01764 );
01765 $item.= $this->dbFileIcons($PA['itemFormElName'],'db',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01766 break;
01767 }
01768
01769
01770 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01771 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
01772
01773 return $item;
01774 }
01775
01786 function getSingleField_typeNone($table,$field,$row,&$PA) {
01787
01788 $config = $PA['fieldConf']['config'];
01789 $itemValue = $PA['itemFormElValue'];
01790
01791 return $this->getSingleField_typeNone_render($config,$itemValue);
01792 }
01793
01802 function getSingleField_typeNone_render($config,$itemValue) {
01803
01804
01805 $divStyle = 'border:solid 1px '.t3lib_div::modifyHTMLColorAll($this->colorScheme[0],-30).';'.$this->defStyle.$this->formElStyle('none').' background-color: '.$this->colorScheme[0].'; padding-left:1px;color:#555;';
01806
01807 if ($config['rows']>1) {
01808 if(!$config['pass_content']) {
01809 $itemValue = nl2br(htmlspecialchars($itemValue));
01810 }
01811
01812 $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
01813 if (!$config['fixedRows']) {
01814 $origRows = $rows = t3lib_div::intInRange($config['rows'] ? $config['rows'] : 5, 1, 20);
01815 if (strlen($itemValue)>$this->charsPerRow*2) {
01816 $cols = $this->maxTextareaWidth;
01817 $rows = t3lib_div::intInRange(round(strlen($itemValue)/$this->charsPerRow),count(explode(chr(10),$itemValue)),20);
01818 if ($rows<$origRows) $rows=$origRows;
01819 }
01820 } else {
01821 $rows = intval($config['rows']);
01822 }
01823
01824 if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
01825 $width = ceil($cols*$this->form_rowsToStylewidth);
01826
01827 $height=$rows*12;
01828
01829 $item='
01830 <div style="'.htmlspecialchars($divStyle.' overflow:auto; height:'.$height.'px; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'">'.
01831 $itemValue.
01832 '</div>';
01833 } else {
01834 if(!$config['pass_content']) {
01835 $itemValue = htmlspecialchars($itemValue);
01836 }
01837
01838 $cols = $config['cols']?$config['cols']:($config['size']?$config['size']:$this->maxInputWidth);
01839 if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
01840 $width = ceil($cols*$this->form_rowsToStylewidth);
01841
01842
01843 $item = '
01844 <div style="'.htmlspecialchars($divStyle.' overflow:hidden; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'" title="'.$itemValue.'">'.
01845 '<span class="nobr">'.(strcmp($itemValue,'')?$itemValue:' ').'</span>'.
01846 '</div>';
01847 }
01848
01849 return $item;
01850 }
01851
01861 function getSingleField_typeFlex($table,$field,$row,&$PA) {
01862
01863
01864 $dataStructArray = t3lib_BEfunc::getFlexFormDS($PA['fieldConf']['config'],$row,$table);
01865 #debug($dataStructArray);
01866
01867
01868 if (is_array($dataStructArray)) {
01869 #debug(array(str_replace(' ',chr(160),$PA['itemFormElValue'])));
01870
01871
01872 $xmlData = $PA['itemFormElValue'];
01873 $xmlHeaderAttributes = t3lib_div::xmlGetHeaderAttribs($xmlData);
01874 $storeInCharset = strtolower($xmlHeaderAttributes['encoding']);
01875 if ($storeInCharset) {
01876 $currentCharset=$GLOBALS['LANG']->charSet;
01877 $xmlData = $GLOBALS['LANG']->csConvObj->conv($xmlData,$storeInCharset,$currentCharset,1);
01878 }
01879 $editData=t3lib_div::xml2array($xmlData);
01880 if (!is_array($editData)) {
01881 #debug(array($editData,$xmlData));
01882 $editData=array();
01883 }
01884
01885
01886 $sheet = $editData['meta']['currentSheetId'] ? $editData['meta']['currentSheetId'] : 'sDEF';
01887 # $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'[meta][currentSheetId]" value="'.$sheet.'">';
01888
01889
01890 if (is_array($dataStructArray['sheets'])) {
01891 #$item.=$this->getSingleField_typeFlex_sheetMenu($dataStructArray['sheets'], $PA['itemFormElName'].'[meta][currentSheetId]', $sheet).'<br />';
01892 }
01893 #debug($editData);
01894
01895
01896 $langChildren = $dataStructArray['meta']['langChildren'] ? 1 : 0;
01897 $langDisabled = $dataStructArray['meta']['langDisable'] ? 1 : 0;
01898
01899 $languages = $this->getAvailableLanguages();
01900
01901 if (!is_array($editData['meta']['currentLangId']) || !count($editData['meta']['currentLangId'])) {
01902 $editData['meta']['currentLangId']=array('DEF');
01903 }
01904 $editData['meta']['currentLangId'] = array_unique($editData['meta']['currentLangId']);
01905
01906 if (!$langDisabled && count($languages) > 1) {
01907 $item.=$this->getSingleField_typeFlex_langMenu($languages, $PA['itemFormElName'].'[meta][currentLangId]', $editData['meta']['currentLangId']).'<br />';
01908 }
01909
01910 if ($langChildren || $langDisabled) {
01911 $rotateLang = array('DEF');
01912 } else {
01913 $rotateLang = $editData['meta']['currentLangId'];
01914 }
01915
01916
01917 if (is_array($dataStructArray['sheets'])) {
01918 $tabsToTraverse = array_keys($dataStructArray['sheets']);
01919 } else {
01920 $tabsToTraverse = array($sheet);
01921 }
01922
01923 foreach($rotateLang as $lKey) {
01924 if (!$langChildren && !$langDisabled) {
01925 $item.= '<b>'.$lKey.':</b>';
01926 }
01927
01928 $tabParts = array();
01929 foreach($tabsToTraverse as $sheet) {
01930 $sheetCfg = $dataStructArray['sheets'][$sheet];
01931 list ($dataStruct, $sheet) = t3lib_div::resolveSheetDefInDS($dataStructArray,$sheet);
01932
01933
01934 if (is_array($dataStruct['ROOT']) && is_array($dataStruct['ROOT']['el'])) {
01935 $cmdData = t3lib_div::_GP('flexFormsCmdData');
01936 $lang = 'l'.$lKey;
01937 $PA['_valLang'] = $langChildren && !$langDisabled ? $editData['meta']['currentLangId'] : 'DEF';
01938
01939
01940 $tRows = $this->getSingleField_typeFlex_draw(
01941 $dataStruct['ROOT']['el'],
01942 $editData['data'][$sheet][$lang],
01943 $cmdData['data'][$sheet][$lang],
01944 $table,
01945 $field,
01946 $row,
01947 $PA,
01948 '[data]['.$sheet.']['.$lang.']'
01949 );
01950 $sheetContent= '<table border="0" cellpadding="1" cellspacing="1" class="typo3-TCEforms-flexForm">'.implode('',$tRows).'</table>';
01951
01952 # $item = '<div style=" position:absolute;">'.$item.'</div>';
01953
01954 } else $sheetContent='Data Structure ERROR: No ROOT element found for sheet "'.$sheet.'".';
01955
01956
01957 $tabParts[] = array(
01958 'label' => ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sheet),
01959 'description' => ($sheetCfg['ROOT']['TCEforms']['sheetDescription'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetDescription']) : ''),
01960 'linkTitle' => ($sheetCfg['ROOT']['TCEforms']['sheetShortDescr'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetShortDescr']) : ''),
01961 'content' => $sheetContent
01962 );
01963 }
01964
01965 if (is_array($dataStructArray['sheets'])) {
01966 $item.= $this->getDynTabMenu($tabParts,'TCEFORMS:flexform:'.$PA['itemFormElName']);
01967 } else {
01968 $item.= $sheetContent;
01969 }
01970 }
01971 } else $item='Data Structure ERROR: '.$dataStructArray;
01972
01973 return $item;
01974 }
01975
01985 function getSingleField_typeFlex_langMenu($languages,$elName,$selectedLanguage,$multi=1) {
01986 $opt=array();
01987 foreach($languages as $lArr) {
01988 $opt[]='<option value="'.htmlspecialchars($lArr['ISOcode']).'"'.(in_array($lArr['ISOcode'],$selectedLanguage)?' selected="selected"':'').'>'.htmlspecialchars($lArr['title']).'</option>';
01989 }
01990
01991 $output = '<select name="'.$elName.'[]"'.($multi ? ' multiple="multiple" size="'.count($languages).'"' : '').'>'.implode('',$opt).'</select>';
01992
01993 return $output;
01994 }
01995
02004 function getSingleField_typeFlex_sheetMenu($sArr,$elName,$sheetKey) {
02005
02006 $tCells =array();
02007 $pct = round(100/count($sArr));
02008 foreach($sArr as $sKey => $sheetCfg) {
02009 $onClick = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){'.$this->elName($elName).".value='".$sKey."'; TBE_EDITOR_submitForm()};";
02010
02011 $tCells[]='<td width="'.$pct.'%" style="'.($sKey==$sheetKey ? 'background-color: #9999cc; font-weight: bold;' : 'background-color: #aaaaaa;').' cursor: hand;" onclick="'.htmlspecialchars($onClick).'" align="center">'.
02012 ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sKey).
02013 '</td>';
02014 }
02015
02016 return '<table border="0" cellpadding="0" cellspacing="2" class="typo3-TCEforms-flexForm-sheetMenu"><tr>'.implode('',$tCells).'</tr></table>';
02017 }
02018
02034 function getSingleField_typeFlex_draw($dataStruct,$editData,$cmdData,$table,$field,$row,&$PA,$formPrefix='',$level=0,$tRows=array()) {
02035
02036
02037 if (is_array($dataStruct)) {
02038 foreach($dataStruct as $key => $value) {
02039 if (is_array($value)) {
02040
02041
02042
02043
02044 $rowCells=array();
02045
02046
02047 $rowCells['title'] = '<img src="clear.gif" width="'.($level*16).'" height="1" alt="" /><strong>'.htmlspecialchars(t3lib_div::fixed_lgd_cs($this->sL($value['tx_templavoila']['title']),30)).'</strong>';;
02048
02049 $rowCells['formEl']='';
02050 if ($value['type']=='array') {
02051 if ($value['section']) {
02052
02053 if (is_array($value['el'])) {
02054 $opt=array();
02055 $opt[]='<option value=""></option>';
02056 foreach($value['el'] as $kk => $vv) {
02057 $opt[]='<option value="'.$kk.'">'.htmlspecialchars('NEW "'.$value['el'][$kk]['tx_templavoila']['title'].'"').'</option>';
02058 }
02059 $rowCells['formEl']='<select name="flexFormsCmdData'.$formPrefix.'['.$key.'][value]">'.implode('',$opt).'</select>';
02060 }
02061
02062
02063 $tRows[]='<tr class="bgColor2">
02064 <td nowrap="nowrap" valign="top">'.$rowCells['title'].'</td>
02065 <td>'.$rowCells['formEl'].'</td>
02066 </tr>';
02067
02068 $cc=0;
02069 if (is_array($editData[$key]['el'])) {
02070 foreach($editData[$key]['el'] as $k3 => $v3) {
02071 $cc=$k3;
02072 $theType = key($v3);
02073 $theDat = $v3[$theType];
02074 $newSectionEl = $value['el'][$theType];
02075 if (is_array($newSectionEl)) {
02076 $tRows = $this->getSingleField_typeFlex_draw(
02077 array($theType => $newSectionEl),
02078 array($theType => $theDat),
02079 $cmdData[$key]['el'][$cc],
02080 $table,
02081 $field,
02082 $row,
02083 $PA,
02084 $formPrefix.'['.$key.'][el]['.$cc.']',
02085 $level+1,
02086 $tRows
02087 );
02088 }
02089 }
02090 }
02091
02092
02093
02094
02095 if ($cmdData[$key]['value']) {
02096 $newSectionEl = $value['el'][$cmdData[$key]['value']];
02097 if (is_array($newSectionEl)) {
02098 $tRows = $this->getSingleField_typeFlex_draw(
02099 array($cmdData[$key]['value'] => $newSectionEl),
02100 array(),
02101 array(),
02102 $table,
02103 $field,
02104 $row,
02105 $PA,
02106 $formPrefix.'['.$key.'][el]['.($cc+1).']',
02107 $level+1,
02108 $tRows
02109 );
02110 }
02111 }
02112 } else {
02113
02114 $tRows[]='<tr class="bgColor2">
02115 <td nowrap="nowrap" valign="top">'.
02116 '<input name="_DELETE_FLEX_FORM'.$PA['itemFormElName'].$formPrefix.'" type="checkbox" value="1" /><img src="'.$this->backPath.'gfx/garbage.gif" border="0" alt="" />'.
02117 '<input name="_MOVEUP_FLEX_FORM'.$PA['itemFormElName'].$formPrefix.'" type="checkbox" value="1" /><img src="'.$this->backPath.'gfx/button_up.gif" border="0" alt="" />'.
02118 '<input name="_MOVEDOWN_FLEX_FORM'.$PA['itemFormElName'].$formPrefix.'" type="checkbox" value="1" /><img src="'.$this->backPath.'gfx/button_down.gif" border="0" alt="" />'.
02119 $rowCells['title'].'</td>
02120 <td>'.$rowCells['formEl'].'</td>
02121 </tr>';
02122
02123 $tRows = $this->getSingleField_typeFlex_draw(
02124 $value['el'],
02125 $editData[$key]['el'],
02126 $cmdData[$key]['el'],
02127 $table,
02128 $field,
02129 $row,
02130 $PA,
02131 $formPrefix.'['.$key.'][el]',
02132 $level+1,
02133 $tRows
02134 );
02135 }
02136
02137 } elseif (is_array($value['TCEforms']['config'])) {
02138
02139 if (is_array($PA['_valLang'])) {
02140 $rotateLang = $PA['_valLang'];
02141 } else {
02142 $rotateLang = array($PA['_valLang']);
02143 }
02144
02145 foreach($rotateLang as $vDEFkey) {
02146 $vDEFkey = 'v'.$vDEFkey;
02147
02148 $fakePA=array();
02149 $fakePA['fieldConf']=array(
02150 'label' => $this->sL($value['TCEforms']['label']),
02151 'config' => $value['TCEforms']['config'],
02152 'defaultExtras' => $value['TCEforms']['defaultExtras'],
02153 'displayCond' => $value['TCEforms']['displayCond'],
02154 );
02155 $fakePA['fieldChangeFunc']=$PA['fieldChangeFunc'];
02156 $fakePA['onFocus']=$PA['onFocus'];
02157 $fakePA['label']==$PA['label'];
02158
02159 $fakePA['itemFormElName']=$PA['itemFormElName'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02160 $fakePA['itemFormElName_file']=$PA['itemFormElName_file'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02161 $fakePA['itemFormElValue']=$editData[$key][$vDEFkey];
02162
02163 $rowCells['formEl']= $this->getSingleField_SW($table,$field,$row,$fakePA);
02164 $rowCells['title']= htmlspecialchars($fakePA['fieldConf']['label']);
02165
02166
02167 $tRows[]='<tr>
02168 <td nowrap="nowrap" valign="top" class="bgColor5">'.$rowCells['title'].($vDEFkey=='vDEF' ? '' : ' ('.$vDEFkey.')').'</td>
02169 <td class="bgColor4">'.$rowCells['formEl'].'</td>
02170 </tr>';
02171 }
02172 }
02173 }
02174 }
02175 }
02176
02177 return $tRows;
02178 }
02179
02189 function getSingleField_typeUnknown($table,$field,$row,&$PA) {
02190 $item='Unknown type: '.$PA['fieldConf']['config']['form_type'].'<br />';
02191
02192 return $item;
02193 }
02194
02204 function getSingleField_typeUser($table,$field,$row,&$PA) {
02205 $PA['table']=$table;
02206 $PA['field']=$field;
02207 $PA['row']=$row;
02208
02209 $PA['pObj']=&$this;
02210
02211 return t3lib_div::callUserFunction($PA['fieldConf']['config']['userFunc'],$PA,$this);
02212 }
02213
02214
02215
02216
02217
02218
02219
02220
02221
02222
02223
02224
02225
02226
02227
02228
02229
02230
02238 function getRTypeNum($table,$row) {
02239 global $TCA;
02240
02241 if ($TCA[$table]['ctrl']['type']) {
02242 $typeFieldName = $TCA[$table]['ctrl']['type'];
02243 $typeNum=$row[$typeFieldName];
02244 if (!strcmp($typeNum,'')) $typeNum=0;
02245 } else {
02246 $typeNum = 0;
02247 }
02248
02249 $typeNum = (string)$typeNum;
02250 if (!$TCA[$table]['types'][$typeNum]) {
02251 $typeNum = 1;
02252 }
02253
02254 return $typeNum;
02255 }
02256
02264 function rearrange($fields) {
02265 $fO = array_flip(t3lib_div::trimExplode(',',$this->fieldOrder,1));
02266 reset($fields);
02267 $newFields=array();
02268 while(list($cc,$content)=each($fields)) {
02269 $cP = t3lib_div::trimExplode(';',$content);
02270 if (isset($fO[$cP[0]])) {
02271 $newFields[$fO[$cP[0]]] = $content;
02272 unset($fields[$cc]);
02273 }
02274 }
02275 ksort($newFields);
02276 $fields=array_merge($newFields,$fields);
02277 return $fields;
02278 }
02279
02290 function getExcludeElements($table,$row,$typeNum) {
02291 global $TCA;
02292
02293
02294 $excludeElements=array();
02295
02296
02297 if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02298 $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02299 if (trim($TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]])) {
02300 $excludeElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]],1);
02301 }
02302 }
02303
02304
02305 if ($TCA[$table]['types'][$typeNum]['bitmask_value_field']) {
02306 $sTfield = $TCA[$table]['types'][$typeNum]['bitmask_value_field'];
02307 $sTValue = t3lib_div::intInRange($row[$sTfield],0);
02308 if (is_array($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02309 reset($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits']);
02310 while(list($bitKey,$eList)=each($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02311 $bit=substr($bitKey,1);
02312 if (t3lib_div::testInt($bit)) {
02313 $bit = t3lib_div::intInRange($bit,0,30);
02314 if (
02315 (substr($bitKey,0,1)=='-' && !($sTValue&pow(2,$bit))) ||
02316 (substr($bitKey,0,1)=='+' && ($sTValue&pow(2,$bit)))
02317 ) {
02318 $excludeElements = array_merge($excludeElements,t3lib_div::trimExplode(',',$eList,1));
02319 }
02320 }
02321 }
02322 }
02323 }
02324
02325
02326 return $excludeElements;
02327 }
02328
02338 function getFieldsToAdd($table,$row,$typeNum) {
02339 global $TCA;
02340
02341
02342 $addElements=array();
02343
02344
02345 if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02346 $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02347 if (trim($TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]])) {
02348 $addElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]],1);
02349 }
02350 }
02351
02352 return array($addElements,$sTfield);
02353 }
02354
02363 function mergeFieldsWithAddedFields($fields,$fieldsToAdd) {
02364 if (count($fieldsToAdd[0])) {
02365 reset($fields);
02366 $c=0;
02367 while(list(,$fieldInfo)=each($fields)) {
02368 $parts = explode(';',$fieldInfo);
02369 if (!strcmp(trim($parts[0]),$fieldsToAdd[1])) {
02370 array_splice(
02371 $fields,
02372 $c+1,
02373 0,
02374 $fieldsToAdd[0]
02375 );
02376 break;
02377 }
02378 $c++;
02379 }
02380 }
02381 return $fields;
02382 }
02383
02384
02395 function setTSconfig($table,$row,$field='') {
02396 $mainKey = $table.':'.$row['uid'];
02397 if (!isset($this->cachedTSconfig[$mainKey])) {
02398 $this->cachedTSconfig[$mainKey]=t3lib_BEfunc::getTCEFORM_TSconfig($table,$row);
02399 }
02400 if ($field) {
02401 return $this->cachedTSconfig[$mainKey][$field];
02402 } else {
02403 return $this->cachedTSconfig[$mainKey];
02404 }
02405 }
02406
02417 function getSpecConfForField($table,$row,$field) {
02418
02419 $types_fieldConfig = t3lib_BEfunc::getTCAtypes($table,$row);
02420
02421
02422 if (is_array($types_fieldConfig)) {
02423 foreach($types_fieldConfig as $vconf) {
02424
02425 if ($vconf['field']==$field) return $vconf['spec'];
02426 }
02427 }
02428 }
02429
02438 function getSpecConfFromString($extraString, $defaultExtras) {
02439 return t3lib_BEfunc::getSpecConfParts($extraString, $defaultExtras);
02440 }
02441
02442
02443
02444
02445
02446
02447
02448
02449
02450
02451
02452
02453
02454
02455
02456
02466 function registerDefaultLanguageData($table,$rec) {
02467 global $TCA;
02468
02469
02470 if ($TCA[$table]['ctrl']['languageField']
02471 && $rec[$TCA[$table]['ctrl']['languageField']] > 0
02472 && $TCA[$table]['ctrl']['transOrigPointerField']
02473 && intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]) > 0) {
02474
02475 $lookUpTable = $TCA[$table]['ctrl']['transOrigPointerTable'] ? $TCA[$table]['ctrl']['transOrigPointerTable'] : $table;
02476
02477
02478 $this->defaultLanguageData[$table.':'.$rec['uid']] = t3lib_BEfunc::getRecord($lookUpTable, intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]));
02479
02480
02481 if ($TCA[$table]['ctrl']['transOrigDiffSourceField']) {
02482 $this->defaultLanguageData_diff[$table.':'.$rec['uid']] = unserialize($rec[$TCA[$table]['ctrl']['transOrigDiffSourceField']]);
02483 }
02484 }
02485 }
02486
02498 function renderDefaultLanguageContent($table,$field,$row,$item) {
02499 if (is_array($this->defaultLanguageData[$table.':'.$row['uid']])) {
02500 $dLVal = t3lib_BEfunc::getProcessedValue($table,$field,$this->defaultLanguageData[$table.':'.$row['uid']][$field],0,1);
02501
02502 if (strcmp($dLVal,'')) {
02503 $item.='<div class="typo3-TCEforms-originalLanguageValue">'.nl2br(htmlspecialchars($dLVal)).' </div>';
02504 }
02505 }
02506
02507 return $item;
02508 }
02509
02521 function renderDefaultLanguageDiff($table,$field,$row,$item) {
02522 if (is_array($this->defaultLanguageData_diff[$table.':'.$row['uid']])) {
02523
02524
02525 $dLVal = array(
02526 'old' => $this->defaultLanguageData_diff[$table.':'.$row['uid']],
02527 'new' => $this->defaultLanguageData[$table.':'.$row['uid']],
02528 );
02529
02530 if (isset($dLVal['old'][$field])) {
02531 if (strcmp($dLVal['old'][$field],$dLVal['new'][$field])) {
02532
02533
02534 $t3lib_diff_Obj = t3lib_div::makeInstance('t3lib_diff');
02535 $diffres = $t3lib_diff_Obj->makeDiffDisplay(
02536 t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['old'][$field],0,1),
02537 t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['new'][$field],0,1)
02538 );
02539
02540 $item.='<div class="typo3-TCEforms-diffBox">'.
02541 '<div class="typo3-TCEforms-diffBox-header">'.htmlspecialchars($this->getLL('l_changeInOrig')).':</div>'.
02542 $diffres.
02543 '</div>';
02544 }
02545 }
02546 }
02547
02548 return $item;
02549 }
02550
02551
02552
02553
02554
02555
02556
02557
02558
02559
02560
02561
02562
02563
02564
02577 function dbFileIcons($fName,$mode,$allowed,$itemArray,$selector='',$params=array(),$onFocus='') {
02578
02579
02580 $this->printNeededJS['dbFileIcons']=1;
02581
02582
02583 $uidList=array();
02584 $opt=array();
02585 $itemArrayC=0;
02586
02587
02588 if (is_array($itemArray)) {
02589 $itemArrayC=count($itemArray);
02590 reset($itemArray);
02591 switch($mode) {
02592 case 'db':
02593 while(list(,$pp)=each($itemArray)) {
02594 $pRec = t3lib_BEfunc::getRecord($pp['table'],$pp['id']);
02595 if (is_array($pRec)) {
02596 $pTitle = t3lib_div::fixed_lgd_cs($this->noTitle($pRec[$GLOBALS['TCA'][$pp['table']]['ctrl']['label']]),$this->titleLen);
02597 $pUid = $pp['table'].'_'.$pp['id'];
02598 $uidList[]=$pUid;
02599 $opt[]='<option value="'.htmlspecialchars($pUid).'">'.htmlspecialchars($pTitle).'</option>';
02600 }
02601 }
02602 break;
02603 case 'file':
02604 while(list(,$pp)=each($itemArray)) {
02605 $pParts = explode('|',$pp);
02606 $uidList[]=$pUid=$pTitle = $pParts[0];
02607 $opt[]='<option value="'.htmlspecialchars(rawurldecode($pParts[0])).'">'.htmlspecialchars(rawurldecode($pParts[0])).'</option>';
02608 }
02609 break;
02610 default:
02611 while(list(,$pp)=each($itemArray)) {
02612 $pParts = explode('|',$pp);
02613 $uidList[]=$pUid=$pParts[0];
02614 $pTitle = $pParts[1];
02615 $opt[]='<option value="'.htmlspecialchars(rawurldecode($pUid)).'">'.htmlspecialchars(rawurldecode($pTitle)).'</option>';
02616 }
02617 break;
02618 }
02619 }
02620
02621
02622 $sSize = $params['autoSizeMax'] ? t3lib_div::intInRange($itemArrayC+1,t3lib_div::intInRange($params['size'],1),$params['autoSizeMax']) : $params['size'];
02623 if (!$selector) {
02624 $selector = '<select size="'.$sSize.'"'.$this->insertDefStyle('group').' multiple="multiple" name="'.$fName.'_list" '.$onFocus.$params['style'].'>'.implode('',$opt).'</select>';
02625 }
02626
02627
02628 $icons = array(
02629 'L' => array(),
02630 'R' => array(),
02631 );
02632 if (!$params['noBrowser']) {
02633 $aOnClick='setFormValueOpenBrowser(\''.$mode.'\',\''.($fName.'|||'.$allowed.'|').'\'); return false;';
02634 $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
02635 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/insert3.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_browse_'.($mode=='file'?'file':'db'))).' />'.
02636 '</a>';
02637 }
02638 if (!$params['dontShowMoveIcons']) {
02639 if ($sSize>=5) {
02640 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Top\'); return false;">'.
02641 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/group_totop.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_to_top')).' />'.
02642 '</a>';
02643 }
02644 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Up\'); return false;">'.
02645 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/up.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_up')).' />'.
02646 '</a>';
02647 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Down\'); return false;">'.
02648 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/down.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_down')).' />'.
02649 '</a>';
02650 if ($sSize>=5) {
02651 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Bottom\'); return false;">'.
02652 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/group_tobottom.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_to_bottom')).' />'.
02653 '</a>';
02654 }
02655 }
02656
02657 $clipElements = $this->getClipboardElements($allowed,$mode);
02658 if (count($clipElements)) {
02659 $aOnClick = '';
02660 # $counter = 0;
02661 foreach($clipElements as $elValue) {
02662 if ($mode=='file') {
02663 $itemTitle = 'unescape(\''.rawurlencode(basename($elValue)).'\')';
02664 } else {
02665 list($itemTable,$itemUid) = explode('|', $elValue);
02666 $itemTitle = $GLOBALS['LANG']->JScharCode(t3lib_BEfunc::getRecordTitle($itemTable, t3lib_BEfunc::getRecord($itemTable,$itemUid)));
02667 $elValue = $itemTable.'_'.$itemUid;
02668 }
02669 $aOnClick.= 'setFormValueFromBrowseWin(\''.$fName.'\',unescape(\''.rawurlencode(str_replace('%20',' ',$elValue)).'\'),'.$itemTitle.');';
02670
02671 # $counter++;
02672 # if ($params['maxitems'] && $counter >= $params['maxitems']) { break; } // Makes sure that no more than the max items are inserted... for convenience.
02673 }
02674 $aOnClick.= 'return false;';
02675 $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
02676 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/insert5.png','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib(sprintf($this->getLL('l_clipInsert_'.($mode=='file'?'file':'db')),count($clipElements))).' />'.
02677 '</a>';
02678 }
02679
02680 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Remove\'); return false;">'.
02681 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/group_clear.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_remove_selected')).' />'.
02682 '</a>';
02683
02684 $str='<table border="0" cellpadding="0" cellspacing="0" width="1">
02685 '.($params['headers']?'
02686 <tr>
02687 <td>'.$this->wrapLabels($params['headers']['selector']).'</td>
02688 <td></td>
02689 <td></td>
02690 <td></td>
02691 <td>'.$this->wrapLabels($params['headers']['items']).'</td>
02692 </tr>':'').
02693 '
02694 <tr>
02695 <td valign="top">'.
02696 $selector.'<br />'.
02697 $this->wrapLabels($params['info']).
02698 '</td>
02699 <td valign="top">'.
02700 implode('<br />',$icons['L']).'</td>
02701 <td valign="top">'.
02702 implode('<br />',$icons['R']).'</td>
02703 <td><img src="clear.gif" width="5" height="1" alt="" /></td>
02704 <td valign="top">'.
02705 $this->wrapLabels($params['thumbnails']).
02706 '</td>
02707 </tr>
02708 </table>';
02709
02710
02711 $str.='<input type="hidden" name="'.$fName.'" value="'.htmlspecialchars(implode(',',$uidList)).'" />';
02712
02713 return $str;
02714 }
02715
02723 function getClipboardElements($allowed,$mode) {
02724
02725 $output = array();
02726
02727 if (is_object($this->clipObj)) {
02728 switch($mode) {
02729 case 'file':
02730 $elFromTable = $this->clipObj->elFromTable('_FILE');
02731 $allowedExts = t3lib_div::trimExplode(',', $allowed, 1);
02732
02733 if ($allowedExts) {
02734 foreach($elFromTable as $elValue) {
02735 $pI = pathinfo($elValue);
02736 $ext = strtolower($pI['extension']);
02737 if (in_array($ext, $allowedExts)) {
02738 $output[] = $elValue;
02739 }
02740 }
02741 } else {
02742 $output = $elFromTable;
02743 }
02744 break;
02745 case 'db':
02746 $allowedTables = t3lib_div::trimExplode(',', $allowed, 1);
02747 if (!strcmp(trim($allowedTables[0]),'*')) {
02748 $output = $this->clipObj->elFromTable('');
02749 } else {
02750 foreach($allowedTables as $tablename) {
02751 $elFromTable = $this->clipObj->elFromTable($tablename);
02752 $output = array_merge($output,$elFromTable);
02753 }
02754 }
02755 $output = array_keys($output);
02756 break;
02757 }
02758 }
02759
02760 return $output;
02761 }
02762
02772 function getClickMenu($str,$table,$uid='') {
02773 if ($this->enableClickMenu) {
02774 $onClick = $GLOBALS['SOBE']->doc->wrapClickMenuOnIcon($str,$table,$uid,1,'','+copy,info,edit,view', TRUE);
02775 return '<a href="#" onclick="'.htmlspecialchars($onClick).'">'.$str.'</a>';
02776 }
02777 }
02778
02793 function renderWizards($itemKinds,$wizConf,$table,$row,$field,&$PA,$itemName,$specConf,$RTE=0) {
02794
02795
02796 $fieldChangeFunc = $PA['fieldChangeFunc'];
02797 $item = $itemKinds[0];
02798 $outArr = array();
02799 $colorBoxLinks = array();
02800 $fName = '['.$table.']['.$row['uid'].']['.$field.']';
02801 $md5ID = 'ID'.t3lib_div::shortmd5($itemName);
02802 $listFlag = '_list';
02803
02804
02805 if ($PA['fieldConf']['config']['form_type']=='select') {
02806 if ($PA['fieldConf']['config']['maxitems']<=1) {
02807 $listFlag = '';
02808 } elseif ($PA['fieldConf']['config']['renderMode']=='singlebox') {
02809 $itemName.='[]';
02810 $listFlag = '';
02811 }
02812 }
02813
02814
02815 if (is_array($wizConf) && !$this->disableWizards) {
02816 foreach($wizConf as $wid => $wConf) {
02817 if (substr($wid,0,1)!='_'
02818 && (!$wConf['enableByTypeConfig'] || @in_array($wid,$specConf['wizards']['parameters']))
02819 && ($RTE || !$wConf['RTEonly'])
02820 ) {
02821
02822
02823 $iTitle = htmlspecialchars($this->sL($wConf['title']));
02824 if ($wConf['icon']) {
02825 $iDat = $this->getIcon($wConf['icon']);
02826 $icon = '<img src="'.$iDat[0].'" '.$iDat[1][3].' border="0"'.t3lib_BEfunc::titleAltAttrib($iTitle).' />';
02827 } else {
02828 $icon = $iTitle;
02829 }
02830
02831
02832 switch((string)$wConf['type']) {
02833 case 'userFunc':
02834 case 'script':
02835 case 'popup':
02836 case 'colorbox':
02837 if (!$wConf['notNewRecords'] || t3lib_div::testInt($row['uid'])) {
02838
02839
02840 $params = array();
02841 $params['params'] = $wConf['params'];
02842 $params['exampleImg'] = $wConf['exampleImg'];
02843 $params['table'] = $table;
02844 $params['uid'] = $row['uid'];
02845 $params['pid'] = $row['pid'];
02846 $params['field'] = $field;
02847 $params['md5ID'] = $md5ID;
02848 $params['returnUrl'] = $this->thisReturnUrl();
02849
02850
02851 if (!strcmp(substr($wConf['script'],0,4), 'EXT:')) {
02852 $wScript = t3lib_div::getFileAbsFileName($wConf['script']);
02853 if ($wScript) {
02854 $wScript = '../'.substr($wScript,strlen(PATH_site));
02855 } else break;
02856 } else {
02857 $wScript = $wConf['script'];
02858 }
02859 $url = $this->backPath.$wScript.(strstr($wScript,'?') ? '' : '?');
02860
02861
02862 if ((string)$wConf['type']=='colorbox' && !$wConf['script']) { break; }
02863
02864
02865 if ((string)$wConf['type']=='script') {
02866 $aUrl = $url.t3lib_div::implodeArrayForUrl('',array('P'=>$params));
02867 $outArr[]='<a href="'.htmlspecialchars($aUrl).'" onclick="'.$this->blur().'return !TBE_EDITOR_isFormChanged();">'.
02868 $icon.
02869 '</a>';
02870 } else {
02871
02872
02873 $params['formName'] = $this->formName;
02874 $params['itemName'] = $itemName;
02875 $params['fieldChangeFunc'] = $fieldChangeFunc;
02876
02877 switch((string)$wConf['type']) {
02878 case 'popup':
02879 case 'colorbox':
02880
02881 $addJS = $wConf['popup_onlyOpenIfSelected']?'if (!TBE_EDITOR_curSelected(\''.$itemName.$listFlag.'\')){alert('.$GLOBALS['LANG']->JScharCode($this->getLL('m_noSelItemForEdit')).'); return false;}':'';
02882 $curSelectedValues='+\'&P[currentSelectedValues]=\'+TBE_EDITOR_curSelected(\''.$itemName.$listFlag.'\')';
02883 $aOnClick= $this->blur().
02884 $addJS.
02885 'vHWin=window.open(\''.$url.t3lib_div::implodeArrayForUrl('',array('P'=>$params)).'\'+\'&P[currentValue]=\'+TBE_EDITOR_rawurlencode('.$this->elName($itemName).'.value,200)'.$curSelectedValues.',\'popUp'.$md5ID.'\',\''.$wConf['JSopenParams'].'\');'.
02886 'vHWin.focus();return false;';
02887
02888 $colorBoxLinks = Array('<a href="#" onclick="'.htmlspecialchars($aOnClick).'">','</a>');
02889 if ((string)$wConf['type']=='popup') {
02890 $outArr[] = $colorBoxLinks[0].$icon.$colorBoxLinks[1];
02891 }
02892 break;
02893 case 'userFunc':
02894 $params['item'] = &$item;
02895 $params['icon'] = $icon;
02896 $params['iTitle'] = $iTitle;
02897 $params['wConf'] = $wConf;
02898 $params['row'] = $row;
02899 $outArr[] = t3lib_div::callUserFunction($wConf['userFunc'],$params,$this);
02900 break;
02901 }
02902 }
02903
02904
02905 if (is_array($wConf['hideParent']) || $wConf['hideParent']) {
02906 $item = $itemKinds[1];
02907 if (is_array($wConf['hideParent'])) {
02908 $item.= $this->getSingleField_typeNone_render($wConf['hideParent'], $PA['itemFormElValue']);
02909 }
02910 }
02911 }
02912 break;
02913 case 'select':
02914 $fieldValue = array('config' => $wConf);
02915 $TSconfig = $this->setTSconfig($table, $row);
02916 $TSconfig[$field] = $TSconfig[$field]['wizards.'][$wid.'.'];
02917 $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($fieldValue), $fieldValue, $TSconfig, $field);
02918
02919 $opt = array();
02920 $opt[] = '<option>'.$iTitle.'</option>';
02921 foreach($selItems as $p) {
02922 $opt[] = '<option value="'.htmlspecialchars($p[1]).'">'.htmlspecialchars($p[0]).'</option>';
02923 }
02924 if ($wConf['mode']=='append') {
02925 $assignValue = $this->elName($itemName).'.value=\'\'+this.options[this.selectedIndex].value+'.$this->elName($itemName).'.value';
02926 } elseif ($wConf['mode']=='prepend') {
02927 $assignValue = $this->elName($itemName).'.value+=\'\'+this.options[this.selectedIndex].value';
02928 } else {
02929 $assignValue = $this->elName($itemName).'.value=this.options[this.selectedIndex].value';
02930 }
02931 $sOnChange = $assignValue.';this.selectedIndex=0;'.implode('',$fieldChangeFunc);
02932 $outArr[] = '<select name="_WIZARD'.$fName.'" onchange="'.htmlspecialchars($sOnChange).'">'.implode('',$opt).'</select>';
02933 break;
02934 }
02935
02936
02937 if ((string)$wConf['type']=='colorbox') {
02938 $dim = t3lib_div::intExplode('x',$wConf['dim']);
02939 $dX = t3lib_div::intInRange($dim[0],1,200,20);
02940 $dY = t3lib_div::intInRange($dim[1],1,200,20);
02941 $color = $row[$field] ? ' bgcolor="'.htmlspecialchars($row[$field]).'"' : '';
02942 $outArr[] = '<table border="0" cellpadding="0" cellspacing="0" id="'.$md5ID.'"'.$color.' style="'.htmlspecialchars($wConf['tableStyle']).'">
02943 <tr>
02944 <td>'.
02945 $colorBoxLinks[0].
02946 '<img src="clear.gif" width="'.$dX.'" height="'.$dY.'"'.t3lib_BEfunc::titleAltAttrib(trim($iTitle.' '.$row[$field])).' border="0" />'.
02947 $colorBoxLinks[1].
02948 '</td>
02949 </tr>
02950 </table>';
02951 }
02952 }
02953 }
02954
02955
02956 if (count($outArr)) {
02957 if ($wizConf['_HIDDENFIELD']) $item = $itemKinds[1];
02958
02959 $outStr = '';
02960 $vAlign = $wizConf['_VALIGN'] ? ' valign="'.$wizConf['_VALIGN'].'"' : '';
02961 if (count($outArr)>1 || $wizConf['_PADDING']) {
02962 $dist = intval($wizConf['_DISTANCE']);
02963 if ($wizConf['_VERTICAL']) {
02964 $dist = $dist ? '<tr><td><img src="clear.gif" width="1" height="'.$dist.'" alt="" /></td></tr>' : '';
02965 $outStr = '<tr><td>'.implode('</td></tr>'.$dist.'<tr><td>',$outArr).'</td></tr>';
02966 } else {
02967 $dist = $dist ? '<td><img src="clear.gif" height="1" width="'.$dist.'" alt="" /></td>' : '';
02968 $outStr = '<tr><td'.$vAlign.'>'.implode('</td>'.$dist.'<td'.$vAlign.'>',$outArr).'</td></tr>';
02969 }
02970 $outStr = '<table border="0" cellpadding="'.intval($wizConf['_PADDING']).'" cellspacing="0">'.$outStr.'</table>';
02971 } else {
02972 $outStr = implode('',$outArr);
02973 }
02974
02975 if (!strcmp($wizConf['_POSITION'],'left')) {
02976 $outStr = '<tr><td'.$vAlign.'>'.$outStr.'</td><td'.$vAlign.'>'.$item.'</td></tr>';
02977 } elseif (!strcmp($wizConf['_POSITION'],'top')) {
02978 $outStr = '<tr><td>'.$outStr.'</td></tr><tr><td>'.$item.'</td></tr>';
02979 } elseif (!strcmp($wizConf['_POSITION'],'bottom')) {
02980 $outStr = '<tr><td>'.$item.'</td></tr><tr><td>'.$outStr.'</td></tr>';
02981 } else {
02982 $outStr = '<tr><td'.$vAlign.'>'.$item.'</td><td'.$vAlign.'>'.$outStr.'</td></tr>';
02983 }
02984
02985 $item = '<table border="0" cellpadding="0" cellspacing="0">'.$outStr.'</table>';
02986 }
02987 }
02988 return $item;
02989 }
02990
02997 function getIcon($icon) {
02998 if (substr($icon,0,4)=='EXT:') {
02999 $file = t3lib_div::getFileAbsFileName($icon);
03000 if ($file) {
03001 $file = substr($file,strlen(PATH_site));
03002 $selIconFile = $this->backPath.'../'.$file;
03003 $selIconInfo = @getimagesize(PATH_site.$file);
03004 }
03005 } elseif (substr($icon,0,3)=='../') {
03006 $selIconFile = $this->backPath.t3lib_div::resolveBackPath($icon);
03007 $selIconInfo = @getimagesize(PATH_site.t3lib_div::resolveBackPath(substr($icon,3)));
03008 } elseif (substr($icon,0,4)=='ext/' || substr($icon,0,7)=='sysext/') {
03009 $selIconFile = $this->backPath.$icon;
03010 $selIconInfo = @getimagesize(PATH_typo3.$icon);
03011 } else {
03012 $selIconFile = $this->backPath.'t3lib/gfx/'.$icon;
03013 $selIconInfo = @getimagesize(PATH_t3lib.'gfx/'.$icon);
03014 }
03015 return array($selIconFile,$selIconInfo);
03016 }
03017
03024 function optionTagStyle($iconString) {
03025 if ($iconString) {
03026 list($selIconFile,$selIconInfo) = $this->getIcon($iconString);
03027 $padTop = t3lib_div::intInRange(($selIconInfo[1]-12)/2,0);
03028 $styleAttr = 'background-image: url('.$selIconFile.'); background-repeat: no-repeat; height: '.t3lib_div::intInRange(($selIconInfo[1]+2)-$padTop,0).'px; padding-top: '.$padTop.'px; padding-left: '.($selIconInfo[0]+4).'px;';
03029 return $styleAttr;
03030 }
03031 }
03032
03040 function extractValuesOnlyFromValueLabelList($itemFormElValue) {
03041
03042 $itemArray = t3lib_div::trimExplode(',',$itemFormElValue,1);
03043 foreach($itemArray as $tk => $tv) {
03044 $tvP = explode('|',$tv,2);
03045 $tvP[0] = rawurldecode($tvP[0]);
03046
03047 $itemArray[$tk] = $tvP[0];
03048 }
03049 return $itemArray;
03050 }
03051
03062 function wrapOpenPalette($header,$table,$row,$palette,$retFunc=0) {
03063 $fieldL=array();
03064 if (!is_array($this->palFieldArr[$palette])) {$this->palFieldArr[$palette]=array();}
03065 $palFieldN = is_array($this->palFieldArr[$palette]) ? count($this->palFieldArr[$palette]) : 0;
03066 $palJSFunc = 'TBE_EDITOR_palUrl(\''.($table.':'.$row['uid'].':'.$palette).'\',\''.implode(',',$this->palFieldArr[$palette]).'\','.$palFieldN.',\''.$table.'\',\''.$row['uid'].'\',1);';
03067
03068 $aOnClick = $this->blur().substr($palJSFunc,0,-3).'0);return false;';
03069
03070 $iconCode = '<a href="#" onclick="'.htmlspecialchars($aOnClick).'" title="'.htmlspecialchars($table).'">'.
03071 $header.
03072 '</a>';
03073 return $retFunc ? array($iconCode,$palJSFunc) : $iconCode;
03074 }
03075
03086 function checkBoxParams($itemName,$thisValue,$c,$iCount,$addFunc='') {
03087 $onClick = $this->elName($itemName).'.value=this.checked?('.$this->elName($itemName).'.value|'.pow(2,$c).'):('.$this->elName($itemName).'.value&'.(pow(2,$iCount)-1-pow(2,$c)).');'.
03088 $addFunc;
03089 $str = ' onclick="'.htmlspecialchars($onClick).'"'.
03090 (($thisValue&pow(2,$c))?' checked="checked"':'');
03091 return $str;
03092 }
03093
03100 function elName($itemName) {
03101 return 'document.'.$this->formName."['".$itemName."']";
03102 }
03103
03111 function noTitle($str,$wrapParts=array()) {
03112 return strcmp($str,'') ? $str : $wrapParts[0].'['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title').']'.$wrapParts[1];
03113 }
03114
03120 function blur() {
03121 return $GLOBALS['CLIENT']['FORMSTYLE'] ? 'this.blur();':'';
03122 }
03123
03129 function thisReturnUrl() {
03130 return $this->returnUrl ? $this->returnUrl : t3lib_div::linkThisScript();
03131 }
03132
03142 function getSingleHiddenField($table,$field,$row) {
03143 global $TCA;
03144 $out='';
03145 t3lib_div::loadTCA($table);
03146 if ($TCA[$table]['columns'][$field]) {
03147
03148 $uid=$row['uid'];
03149 $itemName=$this->prependFormFieldNames.'['.$table.']['.$uid.']['.$field.']';
03150 $itemValue=$row[$field];
03151 $item.='<input type="hidden" name="'.$itemName.'" value="'.htmlspecialchars($itemValue).'" />';
03152 $out = $item;
03153 }
03154 return $out;
03155 }
03156
03164 function formWidth($size=48,$textarea=0) {
03165
03166 if ($this->docLarge) $size = round($size*$this->form_largeComp);
03167 $wAttrib = $textarea?'cols':'size';
03168 if (!$GLOBALS['CLIENT']['FORMSTYLE']) {
03169 $retVal = ' '.$wAttrib.'="'.$size.'"';
03170 } else {
03171 $pixels = ceil($size*$this->form_rowsToStylewidth);
03172 $theStyle = 'width:'.$pixels.'px;'.$this->defStyle.$this->formElStyle($textarea?'text':'input');
03173 $retVal = ' style="'.htmlspecialchars($theStyle).'"';
03174
03175 $class = $this->formElClass($textarea?'text':'input');
03176 if ($class) {
03177 $retVal.= ' class="'.htmlspecialchars($class).'"';
03178 }
03179 }
03180 return $retVal;
03181 }
03182
03191 function formWidthText($size=48,$wrap='') {
03192 $wTags = $this->formWidth($size,1);
03193
03194 if (strtolower(trim($wrap))!='off' && $GLOBALS['CLIENT']['BROWSER']=='net' && $GLOBALS['CLIENT']['VERSION']>=5) {
03195 $wTags.=' cols="'.$size.'"';
03196 }
03197 return $wTags;
03198 }
03199
03207 function formElStyle($type) {
03208 return $this->formElStyleClassValue($type);
03209 }
03210
03218 function formElClass($type) {
03219 return $this->formElStyleClassValue($type, TRUE);
03220 }
03221
03229 function formElStyleClassValue($type, $class=FALSE) {
03230
03231 if (isset($this->fieldStyle[$type])) {
03232 $style = trim($this->fieldStyle[$type]);
03233 } else {
03234 $style = trim($this->fieldStyle['all']);
03235 }
03236
03237
03238 if (substr($style,0,6)=='CLASS:') {
03239 return $class ? trim(substr($style,6)) : '';
03240 } else {
03241 return !$class ? $style : '';
03242 }
03243 }
03244
03251 function insertDefStyle($type) {
03252 $out = '';
03253
03254 $style = trim($this->defStyle.$this->formElStyle($type));
03255 $out.= $style?' style="'.htmlspecialchars($style).'"':'';
03256
03257 $class = $this->formElClass($type);
03258 $out.= $class?' class="'.htmlspecialchars($class).'"':'';
03259
03260 return $out;
03261 }
03262
03270 function getDynTabMenu($parts, $idString) {
03271 if (is_object($GLOBALS['TBE_TEMPLATE'])) {
03272 return $GLOBALS['TBE_TEMPLATE']->getDynTabMenu($parts, $idString);
03273 } else {
03274 $output = '';
03275 foreach($parts as $singlePad) {
03276 $output.='
03277 <h3>'.htmlspecialchars($singlePad['label']).'</h3>
03278 '.($singlePad['description'] ? '<p class="c-descr">'.nl2br(htmlspecialchars($singlePad['description'])).'</p>' : '').'
03279 '.$singlePad['content'];
03280 }
03281
03282 return '<div class="typo3-dyntabmenu-divs">'.$output.'</div>';
03283 }
03284 }
03285
03286
03287
03288
03289
03290
03291
03292
03293
03294
03295
03296
03297
03298
03299
03300
03301
03309 function initItemArray($fieldValue) {
03310 $items = array();
03311 if (is_array($fieldValue['config']['items'])) {
03312 reset ($fieldValue['config']['items']);
03313 while (list($itemName,$itemValue) = each($fieldValue['config']['items'])) {
03314 $items[] = array($this->sL($itemValue[0]), $itemValue[1], $itemValue[2]);
03315 }
03316 }
03317 return $items;
03318 }
03319
03327 function addItems($items,$iArray) {
03328 global $TCA;
03329 if (is_array($iArray)) {
03330 reset($iArray);
03331 while(list($value,$label)=each($iArray)) {
03332 $items[]=array($this->sl($label),$value);
03333 }
03334 }
03335 return $items;
03336 }
03337
03349 function procItems($items,$iArray,$config,$table,$row,$field) {
03350 global $TCA;
03351
03352 $params=array();
03353 $params['items'] = &$items;
03354 $params['config'] = $config;
03355 $params['TSconfig'] = $iArray;
03356 $params['table'] = $table;
03357 $params['row'] = $row;
03358 $params['field'] = $field;
03359
03360 t3lib_div::callUserFunction($config['itemsProcFunc'],$params,$this);
03361 return $items;
03362 }
03363
03373 function addSelectOptionsToItemArray($items,$fieldValue,$TSconfig,$field) {
03374 global $TCA;
03375
03376
03377 if ($fieldValue['config']['foreign_table']) {
03378 $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field);
03379 if ($fieldValue['config']['neg_foreign_table']) {
03380 $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field,1);
03381 }
03382 }
03383
03384
03385 if ($fieldValue['config']['fileFolder']) {
03386 $fileFolder = t3lib_div::getFileAbsFileName($fieldValue['config']['fileFolder']);
03387 if (@is_dir($fileFolder)) {
03388
03389
03390 $extList = $fieldValue['config']['fileFolder_extList'];
03391 $recursivityLevels = isset($fieldValue['config']['fileFolder_recursions']) ? t3lib_div::intInRange($fieldValue['config']['fileFolder_recursions'],0,99) : 99;
03392
03393
03394 $fileFolder = ereg_replace('\/$','',$fileFolder).'/';
03395 $fileArr = t3lib_div::getAllFilesAndFoldersInPath(array(),$fileFolder,$extList,0,$recursivityLevels);
03396 $fileArr = t3lib_div::removePrefixPathFromList($fileArr, $fileFolder);
03397
03398 foreach($fileArr as $fileRef) {
03399 $fI = pathinfo($fileRef);
03400 $icon = t3lib_div::inList('gif,png,jpeg,jpg', strtolower($fI['extension'])) ? '../'.substr($fileFolder,strlen(PATH_site)).$fileRef : '';
03401 $items[] = array(
03402 $fileRef,
03403 $fileRef,
03404 $icon
03405 );
03406 }
03407 }
03408 }
03409
03410
03411 if ($fieldValue['config']['special']) {
03412 switch ($fieldValue['config']['special']) {
03413 case 'tables':
03414 $temp_tc = array_keys($TCA);
03415 $descr = '';
03416
03417 foreach($temp_tc as $theTableNames) {
03418 if (!$TCA[$theTableNames]['ctrl']['adminOnly']) {
03419
03420
03421 $icon = '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($theTableNames, array()),'',1);
03422
03423
03424 if ($this->edit_showFieldHelp) {
03425 $GLOBALS['LANG']->loadSingleTableDescription($theTableNames);
03426 $fDat = $GLOBALS['TCA_DESCR'][$theTableNames]['columns'][''];
03427 $descr = $fDat['description'];
03428 }
03429
03430
03431 $items[] = array(
03432 $this->sL($TCA[$theTableNames]['ctrl']['title']),
03433 $theTableNames,
03434 $icon,
03435 $descr
03436 );
03437 }
03438 }
03439 break;
03440 case 'pagetypes':
03441 $theTypes = $TCA['pages']['columns']['doktype']['config']['items'];
03442
03443 foreach($theTypes as $theTypeArrays) {
03444
03445 $icon = $theTypeArrays[1]!='--div--' ? '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon('pages', array('doktype' => $theTypeArrays[1])),'',1) : '';
03446
03447
03448 $items[] = array(
03449 $this->sL($theTypeArrays[0]),
03450 $theTypeArrays[1],
03451 $icon
03452 );
03453 }
03454 break;
03455 case 'exclude':
03456 $theTypes = t3lib_BEfunc::getExcludeFields();
03457 $descr = '';
03458
03459 foreach($theTypes as $theTypeArrays) {
03460 list($theTable, $theField) = explode(':', $theTypeArrays[1]);
03461
03462
03463 if ($this->edit_showFieldHelp) {
03464 $GLOBALS['LANG']->loadSingleTableDescription($theTable);
03465 $fDat = $GLOBALS['TCA_DESCR'][$theTable]['columns'][$theField];
03466 $descr = $fDat['description'];
03467 }
03468
03469
03470 $items[] = array(
03471 ereg_replace(':$','',$theTypeArrays[0]),
03472 $theTypeArrays[1],
03473 '',
03474 $descr
03475 );
03476 }
03477 break;
03478 case 'explicitValues':
03479 $theTypes = t3lib_BEfunc::getExplicitAuthFieldValues();
03480
03481
03482 $icons = array(
03483 'ALLOW' => '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_ok2.gif','',1),
03484 'DENY' => '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_fatalerror.gif','',1),
03485 );
03486
03487
03488 foreach($theTypes as $tableFieldKey => $theTypeArrays) {
03489
03490 if (is_array($theTypeArrays['items'])) {
03491
03492 $items[] = array(
03493 $theTypeArrays['tableFieldLabel'],
03494 '--div--',
03495 );
03496
03497
03498 foreach($theTypeArrays['items'] as $itemValue => $itemContent) {
03499
03500 $items[] = array(
03501 '['.$itemContent[2].'] '.$itemContent[1],
03502 $tableFieldKey.':'.ereg_replace('[:|,]','',$itemValue).':'.$itemContent[0],
03503 $icons[$itemContent[0]]
03504 );
03505 }
03506 }
03507 }
03508 break;
03509 case 'languages':
03510 $items = array_merge($items,t3lib_BEfunc::getSystemLanguages());
03511 break;
03512 case 'custom':
03513
03514 $customOptions = $GLOBALS['TYPO3_CONF_VARS']['BE']['customPermOptions'];
03515 if (is_array($customOptions)) {
03516 foreach($customOptions as $coKey => $coValue) {
03517 if (is_array($coValue['items'])) {
03518
03519 $items[] = array(
03520 $GLOBALS['LANG']->sl($coValue['header']),
03521 '--div--',
03522 );
03523
03524
03525 foreach($coValue['items'] as $itemKey => $itemCfg) {
03526
03527 if ($itemCfg[1]) {
03528 list($icon) = $this->getIcon($itemCfg[1]);
03529 if ($icon) $icon = '../typo3/'.$icon;
03530 } else $icon = '';
03531
03532
03533 $items[] = array(
03534 $GLOBALS['LANG']->sl($itemCfg[0]),
03535 $coKey.':'.ereg_replace('[:|,]','',$itemKey),
03536 $icon,
03537 $GLOBALS['LANG']->sl($itemCfg[2]),
03538 );
03539 }
03540 }
03541 }
03542 }
03543 break;
03544 case 'modListGroup':
03545 case 'modListUser':
03546 if (!is_object($loadModules)) {
03547 $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
03548 $loadModules->load($GLOBALS['TBE_MODULES']);
03549 }
03550
03551 $modList = $fieldValue['config']['special']=='modListUser' ? $loadModules->modListUser : $loadModules->modListGroup;
03552 if (is_array($modList)) {
03553 $descr = '';
03554
03555 foreach($modList as $theMod) {
03556
03557
03558 $icon = $GLOBALS['LANG']->moduleLabels['tabs_images'][$theMod.'_tab'];
03559 if ($icon) {
03560 $icon = '../'.substr($icon,strlen(PATH_site));
03561 }
03562
03563
03564 if ($this->edit_showFieldHelp) {
03565 $descr = $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tablabel'].
03566 chr(10).
03567 $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tabdescr'];
03568 }
03569
03570
03571 $items[] = array(
03572 $this->addSelectOptionsToItemArray_makeModuleData($theMod),
03573 $theMod,
03574 $icon,
03575 $descr
03576 );
03577 }
03578 }
03579 break;
03580 }
03581 }
03582
03583
03584 return $items;
03585 }
03586
03595 function addSelectOptionsToItemArray_makeModuleData($value) {
03596 $label = '';
03597
03598 $pp = explode('_',$value);
03599 if (count($pp)>1) $label.=$GLOBALS['LANG']->moduleLabels['tabs'][$pp[0].'_tab'].'>';
03600
03601 $label.= $GLOBALS['LANG']->moduleLabels['tabs'][$value.'_tab'];
03602
03603 return $label;
03604 }
03605
03617 function foreignTable($items,$fieldValue,$TSconfig,$field,$pFFlag=0) {
03618 global $TCA;
03619
03620
03621 $pF=$pFFlag?'neg_':'';
03622 $f_table = $fieldValue['config'][$pF.'foreign_table'];
03623 $uidPre = $pFFlag?'-':'';
03624
03625
03626 $res = t3lib_BEfunc::exec_foreign_table_where_query($fieldValue,$field,$TSconfig,$pF);
03627
03628
03629 if ($GLOBALS['TYPO3_DB']->sql_error()) {
03630 echo($GLOBALS['TYPO3_DB']->sql_error()."\n\nThis may indicate a table defined in tables.php is not existing in the database!");
03631 return array();
03632 }
03633
03634
03635 $lPrefix = $this->sL($fieldValue['config'][$pF.'foreign_table_prefix']);
03636
03637
03638 $iField = $TCA[$f_table]['ctrl']['selicon_field'];
03639 $iPath = trim($TCA[$f_table]['ctrl']['selicon_field_path']);
03640
03641
03642 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
03643
03644 if ($iField && $iPath && $row[$iField]) {
03645 $iParts = t3lib_div::trimExplode(',',$row[$iField],1);
03646 $icon = '../'.$iPath.'/'.trim($iParts[0]);
03647 } elseif (t3lib_div::inList('singlebox,checkbox',$fieldValue['config']['renderMode'])) {
03648 $icon = '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($f_table, $row),'',1);
03649 } else $icon = '';
03650
03651
03652 $items[] = array(
03653 t3lib_div::fixed_lgd_cs($lPrefix.strip_tags(t3lib_BEfunc::getRecordTitle($f_table,$row)),$this->titleLen),
03654 $uidPre.$row['uid'],
03655 $icon
03656 );
03657 }
03658 return $items;
03659 }
03660
03661
03662
03663
03664
03665
03666
03667
03668
03669
03670
03671
03672
03673
03674
03675
03676
03677
03678
03679
03680
03681
03682
03683
03684
03685
03686
03687
03688
03689
03690
03697 function setNewBEDesign() {
03698
03699
03700 $this->totalWrap='
03701 <table border="0" cellspacing="0" cellpadding="0" width="'.($this->docLarge ? 440+150 : 440).'" class="typo3-TCEforms">'.
03702 '<tr class="bgColor2">
03703 <td> </td>
03704 <td>###RECORD_ICON### <span class="typo3-TCEforms-recHeader">###TABLE_TITLE###</span> ###ID_NEW_INDICATOR### - ###RECORD_LABEL###</td>
03705 </tr>'.
03706 '|'.
03707 '<tr>
03708 <td> </td>
03709 <td><img src="clear.gif" width="'.($this->docLarge ? 440+150 : 440).'" height="1" alt="" /></td>
03710 </tr>
03711 </table>';
03712
03713
03714 $this->fieldTemplate='
03715 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
03716 <td>###FIELD_HELP_ICON###</td>
03717 <td width="99%"><span style="color:###FONTCOLOR_HEAD###;"###CLASSATTR_4###><b>###FIELD_NAME###</b></span>###FIELD_HELP_TEXT###</td>
03718 </tr>
03719 <tr ###BGCOLOR######CLASSATTR_1###>
03720 <td nowrap="nowrap"><img name="req_###FIELD_TABLE###_###FIELD_ID###_###FIELD_FIELD###" src="clear.gif" width="10" height="10" alt="" /><img name="cm_###FIELD_TABLE###_###FIELD_ID###_###FIELD_FIELD###" src="clear.gif" width="7" height="10" alt="" /></td>
03721 <td valign="top">###FIELD_ITEM######FIELD_PAL_LINK_ICON###</td>
03722 </tr>';
03723
03724 $this->palFieldTemplate='
03725 <tr ###BGCOLOR######CLASSATTR_1###>
03726 <td> </td>
03727 <td nowrap="nowrap" valign="top">###FIELD_PALETTE###</td>
03728 </tr>';
03729 $this->palFieldTemplateHeader='
03730 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
03731 <td> </td>
03732 <td nowrap="nowrap" valign="top"><strong>###FIELD_HEADER###</strong></td>
03733 </tr>';
03734
03735 $this->sectionWrap='
03736 <tr>
03737 <td colspan="2"><img src="clear.gif" width="1" height="###SPACE_BEFORE###" alt="" /></td>
03738 </tr>
03739 <tr>
03740 <td colspan="2"><table ###TABLE_ATTRIBS###>###CONTENT###</table></td>
03741 </tr>
03742 ';
03743 }
03744
03752 function intoTemplate($inArr,$altTemplate='') {
03753
03754 $fieldTemplateParts = explode('###FIELD_',$this->rplColorScheme($altTemplate?$altTemplate:$this->fieldTemplate));
03755 reset($fieldTemplateParts);
03756 $out=current($fieldTemplateParts);
03757 while(list(,$part)=each($fieldTemplateParts)) {
03758 list($key,$val)=explode('###',$part,2);
03759 $out.=$inArr[$key];
03760 $out.=$val;
03761 }
03762 return $out;
03763 }
03764
03776 function addUserTemplateMarkers($marker,$table,$field,$row,&$PA) {
03777 return $marker;
03778 }
03779
03787 function wrapLabels($str) {
03788 return $str;
03789 }
03790
03800 function wrapTotal($c,$rec,$table) {
03801 $parts = $this->replaceTableWrap(explode('|',$this->totalWrap,2),$rec,$table);
03802 return $parts[0].$c.$parts[1].implode('',$this->hiddenFieldAccum);
03803 }
03804
03813 function replaceTableWrap($arr,$rec,$table) {
03814 global $TCA;
03815 reset($arr);
03816 while(list($k,$v)=each($arr)) {
03817
03818
03819 if (strstr($rec['uid'],'NEW')) {
03820 $newLabel = ' <span class="typo3-TCEforms-newToken">'.
03821 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.new',1).
03822 '</span>';
03823
03824 $truePid = t3lib_BEfunc::getTSconfig_pidValue($table,$rec['uid'],$rec['pid']);
03825 $prec = t3lib_BEfunc::getRecord('pages',$truePid,'title');
03826 $rLabel = '<em>[PID: '.$truePid.'] '.htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle('pages',$prec),40))).'</em>';
03827 } else {
03828 $newLabel = ' <span class="typo3-TCEforms-recUid">['.$rec['uid'].']</span>';
03829 $rLabel = htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle($table,$rec),40)));
03830 }
03831
03832
03833 $arr[$k] = str_replace('###ID_NEW_INDICATOR###', $newLabel, $arr[$k]);
03834 $arr[$k] = str_replace('###RECORD_LABEL###',$rLabel,$arr[$k]);
03835 $arr[$k] = str_replace('###TABLE_TITLE###',htmlspecialchars($this->sL($TCA[$table]['ctrl']['title'])),$arr[$k]);
03836
03837 $titleA=t3lib_BEfunc::titleAltAttrib($this->getRecordPath($table,$rec));
03838 $arr[$k]=str_replace('###RECORD_ICON###',t3lib_iconWorks::getIconImage($table,$rec,$this->backPath,'class="absmiddle"'.$titleA),$arr[$k]);
03839 }
03840 return $arr;
03841 }
03842
03850 function wrapBorder(&$out_array,&$out_pointer) {
03851 if ($this->sectionWrap && $out_array[$out_pointer]) {
03852 $tableAttribs='';
03853 $tableAttribs.= $this->borderStyle[0] ? ' style="'.htmlspecialchars($this->borderStyle[0]).'"':'';
03854 $tableAttribs.= $this->borderStyle[2] ? ' background="'.htmlspecialchars($this->backPath.$this->borderStyle[2]).'"':'';
03855 $tableAttribs.= $this->borderStyle[3] ? ' class="'.htmlspecialchars($this->borderStyle[3]).'"':'';
03856 if ($tableAttribs) {
03857 $tableAttribs='border="0" cellspacing="0" cellpadding="0" width="100%"'.$tableAttribs;
03858 $out_array[$out_pointer] = str_replace('###CONTENT###',$out_array[$out_pointer],
03859 str_replace('###TABLE_ATTRIBS###',$tableAttribs,
03860 str_replace('###SPACE_BEFORE###',intval($this->borderStyle[1]),$this->sectionWrap)));
03861 }
03862 $out_pointer++;
03863 }
03864 }
03865
03872 function rplColorScheme($inTemplate) {
03873
03874 $inTemplate = str_replace('###BGCOLOR###',$this->colorScheme[0]?' bgcolor="'.$this->colorScheme[0].'"':'',$inTemplate);
03875 $inTemplate = str_replace('###BGCOLOR_HEAD###',$this->colorScheme[1]?' bgcolor="'.$this->colorScheme[1].'"':'',$inTemplate);
03876 $inTemplate = str_replace('###FONTCOLOR_HEAD###',$this->colorScheme[3],$inTemplate);
03877
03878
03879 $inTemplate = str_replace('###CLASSATTR_1###',$this->classScheme[0]?' class="'.$this->classScheme[0].'"':'',$inTemplate);
03880 $inTemplate = str_replace('###CLASSATTR_2###',$this->classScheme[1]?' class="'.$this->classScheme[1].'"':'',$inTemplate);
03881 $inTemplate = str_replace('###CLASSATTR_4###',$this->classScheme[3]?' class="'.$this->classScheme[3].'"':'',$inTemplate);
03882
03883 return $inTemplate;
03884 }
03885
03892 function getDivider() {
03893
03894 }
03895
03902 function printPalette($palArr) {
03903
03904
03905 $ccAttr2 = $this->colorScheme[2] ? ' bgcolor="'.$this->colorScheme[2].'"' : '';
03906 $ccAttr2.= $this->classScheme[2] ? ' class="'.$this->classScheme[2].'"' : '';
03907 $ccAttr4 = $this->colorScheme[4] ? ' style="color:'.$this->colorScheme[4].'"' : '';
03908 $ccAttr4.= $this->classScheme[4] ? ' class="'.$this->classScheme[4].'"' : '';
03909
03910
03911 foreach($palArr as $content) {
03912 $hRow[]='<td'.$ccAttr2.'> </td>
03913 <td nowrap="nowrap"'.$ccAttr2.'>'.
03914 '<span'.$ccAttr4.'>'.
03915 $content['NAME'].
03916 '</span>'.
03917 '</td>';
03918 $iRow[]='<td valign="top">'.
03919 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" vspace="4" alt="" />'.
03920 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" vspace="4" alt="" />'.
03921 '</td>
03922 <td nowrap="nowrap" valign="top">'.
03923 $content['ITEM'].
03924 $content['HELP_ICON'].
03925 '</td>';
03926 }
03927
03928
03929 $out='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-palette">
03930 <tr>
03931 <td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.
03932 implode('
03933 ',$hRow).'
03934 </tr>
03935 <tr>
03936 <td></td>'.
03937 implode('
03938 ',$iRow).'
03939 </tr>
03940 </table>';
03941
03942 return $out;
03943 }
03944
03953 function helpTextIcon($table,$field,$force=0) {
03954 if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && (($this->edit_showFieldHelp=='icon'&&!$this->doLoadTableDescr($table)) || $force)) {
03955 $aOnClick = 'vHWin=window.open(\''.$this->backPath.'view_help.php?tfID='.($table.'.'.$field).'\',\'viewFieldHelp\',\'height=400,width=600,status=0,menubar=0,scrollbars=1\');vHWin.focus();return false;';
03956 return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
03957 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/helpbubble.gif','width="14" height="14"').' hspace="2" border="0" class="absmiddle"'.($GLOBALS['CLIENT']['FORMSTYLE']?' style="cursor:help;"':'').' alt="" />'.
03958 '</a>';
03959 } else {
03960
03961 #debug(array("'".$field.".description' => '[FILL IN] ".$table."->".$field."',"),$table);
03962 return ' ';
03963 }
03964 }
03965
03973 function helpText($table,$field) {
03974 if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && ($this->edit_showFieldHelp=='text' || $this->doLoadTableDescr($table))) {
03975 $fDat = $GLOBALS['TCA_DESCR'][$table]['columns'][$field];
03976 return '<table border="0" cellpadding="2" cellspacing="0" width="90%"><tr><td valign="top" width="14">'.
03977 $this->helpTextIcon(
03978 $table,
03979 $field,
03980 $fDat['details']||$fDat['syntax']||$fDat['image_descr']||$fDat['image']||$fDat['seeAlso']
03981 ).
03982 '</td><td valign="top"><span class="typo3-TCEforms-helpText">'.
03983 $GLOBALS['LANG']->hscAndCharConv(strip_tags($fDat['description']),1).
03984 '</span></td></tr></table>';
03985 }
03986 }
03987
03994 function setColorScheme($scheme) {
03995 $this->colorScheme = $this->defColorScheme;
03996 $this->classScheme = $this->defClassScheme;
03997
03998 $parts = t3lib_div::trimExplode(',',$scheme);
03999 foreach($parts as $key => $col) {
04000
04001 list($color,$class) = t3lib_div::trimExplode('|',$col);
04002
04003
04004 if ($color) $this->colorScheme[$key] = $color;
04005 if ($color=='-') $this->colorScheme[$key] = '';
04006
04007
04008 if ($class) $this->classScheme[$key] = $class;
04009 if ($class=='-') $this->classScheme[$key] = '';
04010 }
04011 }
04012
04018 function resetSchemes() {
04019 $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][0]);
04020 $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
04021 $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
04022 }
04023
04029 function storeSchemes() {
04030 $this->savedSchemes['classScheme'] = $this->classScheme;
04031 $this->savedSchemes['colorScheme'] = $this->colorScheme;
04032 $this->savedSchemes['fieldStyle'] = $this->fieldStyle;
04033 $this->savedSchemes['borderStyle'] = $this->borderStyle;
04034 }
04035
04041 function restoreSchemes() {
04042 $this->classScheme = $this->savedSchemes['classScheme'];
04043 $this->colorScheme = $this->savedSchemes['colorScheme'];
04044 $this->fieldStyle = $this->savedSchemes['fieldStyle'];
04045 $this->borderStyle = $this->savedSchemes['borderStyle'];
04046 }
04047
04048
04049
04050
04051
04052
04053
04054
04055
04056
04057
04058
04059
04060
04061
04062
04063
04064
04065
04071 function JStop() {
04072
04073 $out = '';
04074
04075
04076 if (count($this->additionalCode_pre)) {
04077 $out.= implode('
04078
04079 <!-- NEXT: -->
04080 ',$this->additionalCode_pre);
04081 }
04082
04083
04084 if (count($this->additionalJS_pre)) {
04085 $out.='
04086
04087
04088 <!--
04089 JavaScript in top of page (before form):
04090 -->
04091
04092 <script type="text/javascript">
04093
04094
04095 '.implode('
04096
04097
04098 ',$this->additionalJS_pre).'
04099
04100
04101 </script>
04102 ';
04103 }
04104
04105
04106 return $out;
04107 }
04108
04122 function JSbottom($formname='forms[0]') {
04123
04124
04125 $reqLines=array();
04126 $reqLinesCheck=array();
04127 $reqLinesSet=array();
04128 reset($this->requiredFields);
04129 while(list($itemImgName,$itemName)=each($this->requiredFields)) {
04130 $reqLines[]=" TBE_REQUIRED['".$itemName."']=1;";
04131 $reqLinesCheck[]=" if (!document.".$formname."['".$itemName."'].value) {OK=0;}";
04132 $reqLinesSet[]=" if (!document.".$formname."['".$itemName."'].value) {TBE_EDITOR_setImage('req_".$itemImgName."','TBE_EDITOR_req');}";
04133 }
04134
04135 $reqRange=array();
04136 $reqRangeCheck=array();
04137 $reqRangeSet=array();
04138 reset($this->requiredElements);
04139 while(list($itemName,$range)=each($this->requiredElements)) {
04140 $reqRange[]=" TBE_RANGE['".$itemName."']=1;";
04141 $reqRange[]=" TBE_RANGE_lower['".$itemName."']=".$range[0].";";
04142 $reqRange[]=" TBE_RANGE_upper['".$itemName."']=".$range[1].";";
04143 $reqRangeCheck[]=" if (!TBE_EDITOR_checkRange(document.".$formname."['".$itemName."_list'],".$range[0].",".$range[1].")) {OK=0;}";
04144 $reqRangeSet[]=" if (!TBE_EDITOR_checkRange(document.".$formname."['".$itemName."_list'],".$range[0].",".$range[1].")) {TBE_EDITOR_setImage('req_".$range['imgName']."','TBE_EDITOR_req');}";
04145 }
04146
04147 $this->TBE_EDITOR_fieldChanged_func='TBE_EDITOR_fieldChanged_fName(fName,formObj[fName+"_list"]);';
04148
04149 if ($this->loadMD5_JS) {
04150 $out.='
04151 <script type="text/javascript" src="'.$this->backPath.'md5.js"></script>';
04152 }
04153 $out.='
04154 <script type="text/javascript" src="'.$this->backPath.'t3lib/jsfunc.evalfield.js"></script>
04155 <script type="text/javascript">
04156
04157
04158 var TBE_EDITOR_req=new Image(); TBE_EDITOR_req.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/required_h.gif','',1).'";
04159 var TBE_EDITOR_cm=new Image(); TBE_EDITOR_cm.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_client.gif','',1).'";
04160 var TBE_EDITOR_sel=new Image(); TBE_EDITOR_sel.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_selected.gif','',1).'";
04161 var TBE_EDITOR_clear=new Image(); TBE_EDITOR_clear.src = "'.$this->backPath.'clear.gif";
04162 var TBE_REQUIRED=new Array();
04163 '.implode(chr(10),$reqLines).'
04164
04165 var TBE_RANGE=new Array();
04166 var TBE_RANGE_lower=new Array();
04167 var TBE_RANGE_upper=new Array();
04168 '.implode(chr(10),$reqRange).'
04169
04170
04171 '.implode(chr(10),$this->additionalJS_post).'
04172
04173 var TBE_EDITOR_loadTime = 0;
04174 var TBE_EDITOR_isChanged = 0;
04175
04176 function TBE_EDITOR_loginRefreshed() {
04177 var date = new Date();
04178 TBE_EDITOR_loadTime = Math.floor(date.getTime()/1000);
04179 if (top.busy && top.busy.loginRefreshed) {top.busy.loginRefreshed();}
04180 }
04181 function TBE_EDITOR_checkLoginTimeout() {
04182 var date = new Date();
04183 var theTime = Math.floor(date.getTime()/1000);
04184 if (theTime > TBE_EDITOR_loadTime+'.intval($GLOBALS['BE_USER']->auth_timeout_field).'-10) {
04185 return true;
04186 }
04187 }
04188 function TBE_EDITOR_setHiddenContent(RTEcontent,theField) {
04189 document.'.$formname.'[theField].value = RTEcontent;
04190 alert(document.'.$formname.'[theField].value);
04191 }
04192 function TBE_EDITOR_fieldChanged_fName(fName,el) {
04193 var idx='.(2+substr_count($this->prependFormFieldNames,'[')).';
04194 var table = TBE_EDITOR_split(fName, "[", idx);
04195 var uid = TBE_EDITOR_split(fName, "[", idx+1);
04196 var field = TBE_EDITOR_split(fName, "[", idx+2);
04197
04198 table = table.substr(0,table.length-1);
04199 uid = uid.substr(0,uid.length-1);
04200 field = field.substr(0,field.length-1);
04201 TBE_EDITOR_fieldChanged(table,uid,field,el);
04202 }
04203 function TBE_EDITOR_fieldChanged(table,uid,field,el) {
04204 var theField = "'.$this->prependFormFieldNames.'["+table+"]["+uid+"]["+field+"]";
04205 TBE_EDITOR_isChanged = 1;
04206
04207
04208 var imgObjName = "cm_"+table+"_"+uid+"_"+field;
04209 TBE_EDITOR_setImage(imgObjName,"TBE_EDITOR_cm");
04210
04211
04212 if (document.'.$formname.'[theField] && document.'.$formname.'[theField].type=="select-one" && document.'.$formname.'[theField+"_selIconVal"]) {
04213 var imgObjName = "selIcon_"+table+"_"+uid+"_"+field+"_";
04214 TBE_EDITOR_setImage(imgObjName+document.'.$formname.'[theField+"_selIconVal"].value,"TBE_EDITOR_clear");
04215 document.'.$formname.'[theField+"_selIconVal"].value = document.'.$formname.'[theField].selectedIndex;
04216 TBE_EDITOR_setImage(imgObjName+document.'.$formname.'[theField+"_selIconVal"].value,"TBE_EDITOR_sel");
04217 }
04218
04219
04220 var imgReqObjName = "req_"+table+"_"+uid+"_"+field;
04221 if (TBE_REQUIRED[theField] && document.'.$formname.'[theField]) {
04222 if (document.'.$formname.'[theField].value) {
04223 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_clear");
04224 } else {
04225 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_req");
04226 }
04227 }
04228 if (TBE_RANGE[theField] && document.'.$formname.'[theField]) {
04229 if (TBE_EDITOR_checkRange(document.'.$formname.'[theField+"_list"],TBE_RANGE_lower[theField],TBE_RANGE_upper[theField])) {
04230 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_clear");
04231 } else {
04232 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_req");
04233 }
04234 }
04235 '.(!$this->isPalettedoc?'':'
04236 TBE_EDITOR_setOriginalFormFieldValue(theField);
04237 ').'
04238 }
04239 '.($this->isPalettedoc?'
04240 function TBE_EDITOR_setOriginalFormFieldValue(theField) {
04241 if ('.$this->isPalettedoc.' && '.$this->isPalettedoc.'.document.'.$formname.' && '.$this->isPalettedoc.'.document.'.$formname.'[theField]) {
04242 '.$this->isPalettedoc.'.document.'.$formname.'[theField].value = document.'.$formname.'[theField].value;
04243 }
04244 }
04245 ':'').'
04246 function TBE_EDITOR_isFormChanged(noAlert) {
04247 if (TBE_EDITOR_isChanged && !noAlert && confirm('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsChanged')).')) {
04248 return 0;
04249 }
04250 return TBE_EDITOR_isChanged;
04251 }
04252 function TBE_EDITOR_checkAndDoSubmit(sendAlert) {
04253 if (TBE_EDITOR_checkSubmit(sendAlert)) {
04254 TBE_EDITOR_submitForm();
04255 }
04256 }
04257
04264 function TBE_EDITOR_checkSubmit(sendAlert) {
04265 if (TBE_EDITOR_checkLoginTimeout() && confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_refresh_login')).')) {
04266 vHWin=window.open(\''.$this->backPath.'login_frameset.php?\',\'relogin\',\'height=300,width=400,status=0,menubar=0\');
04267 vHWin.focus();
04268 return false;
04269 }
04270 var OK=1;
04271
04272
04273 '.implode(chr(10),$this->additionalJS_submit).'
04274
04275 if(!OK) {
04276 if (!confirm(unescape("SYSTEM ERROR: One or more Rich Text Editors on the page could not be contacted. This IS an error, although it should not be regular.\nYou can save the form now by pressing OK, but you will loose the Rich Text Editor content if you do.\n\nPlease report the error to your administrator if it persists."))) {
04277 return false;
04278 } else {
04279 OK = 1;
04280 }
04281 }
04282
04283 '.implode(chr(10),$reqLinesCheck).'
04284 '.implode(chr(10),$reqRangeCheck).'
04285
04286 if (OK || sendAlert==-1) {
04287 return true;
04288 } else {
04289 if(sendAlert) alert('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsMissing')).');
04290 return false;
04291 }
04292 }
04293 function TBE_EDITOR_checkRange(el,lower,upper) {
04294 if (el && el.length>=lower && el.length<=upper) {
04295 return true;
04296 } else {
04297 return false;
04298 }
04299 }
04300 function TBE_EDITOR_initRequired() {
04301 '.implode(chr(10),$reqLinesSet).'
04302 '.implode(chr(10),$reqRangeSet).'
04303 }
04304 function TBE_EDITOR_setImage(name,imgName) {
04305 if (document[name]) {document[name].src = eval(imgName+".src");}
04306 }
04307 function TBE_EDITOR_submitForm() {
04308 '.($this->doSaveFieldName?'document.'.$this->formName."['".$this->doSaveFieldName."'].value=1;":'').'
04309 document.'.$this->formName.'.submit();
04310 }
04311 function typoSetup () {
04312 this.passwordDummy = "********";
04313 this.decimalSign = ".";
04314 }
04315 var TS = new typoSetup();
04316 var evalFunc = new evalFunc();
04317
04318 function typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue) {
04319 if (document.'.$formname.'[theField]) {
04320 var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
04321 var theValue = document.'.$formname.'[theField].value;
04322 if (checkbox && theValue==checkboxValue) {
04323 document.'.$formname.'[theField+"_hr"].value="";
04324 if (document.'.$formname.'[theField+"_cb"]) document.'.$formname.'[theField+"_cb"].checked = "";
04325 } else {
04326 document.'.$formname.'[theField+"_hr"].value = evalFunc.outputObjValue(theFObj, theValue);
04327 if (document.'.$formname.'[theField+"_cb"]) document.'.$formname.'[theField+"_cb"].checked = "on";
04328 }
04329 }
04330 }
04331 function typo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off, checkSetValue) {
04332 if (document.'.$formname.'[theField]) {
04333 var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
04334 if (checkbox_off) {
04335 if (document.'.$formname.'[theField+"_cb"].checked) {
04336 document.'.$formname.'[theField].value=checkSetValue;
04337 } else {
04338 document.'.$formname.'[theField].value=checkboxValue;
04339 }
04340 }else{
04341 document.'.$formname.'[theField].value = evalFunc.evalObjValue(theFObj, document.'.$formname.'[theField+"_hr"].value);
04342 }
04343 typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue);
04344 }
04345 }
04346 function TBE_EDITOR_split(theStr1, delim, index) {
04347 var theStr = ""+theStr1;
04348 var lengthOfDelim = delim.length;
04349 sPos = -lengthOfDelim;
04350 if (index<1) {index=1;}
04351 for (var a=1; a<index; a++) {
04352 sPos = theStr.indexOf(delim, sPos+lengthOfDelim);
04353 if (sPos==-1) {return null;}
04354 }
04355 ePos = theStr.indexOf(delim, sPos+lengthOfDelim);
04356 if(ePos == -1) {ePos = theStr.length;}
04357 return (theStr.substring(sPos+lengthOfDelim,ePos));
04358 }
04359 function TBE_EDITOR_palUrl(inData,fieldList,fieldNum,table,uid,isOnFocus) {
04360 var url = "'.$this->backPath.'alt_palette.php?inData="+inData+"&formName='.rawurlencode($this->formName).'"+"&prependFormFieldNames='.rawurlencode($this->prependFormFieldNames).'";
04361 var field = "";
04362 var theField="";
04363 for (var a=0; a<fieldNum;a++) {
04364 field = TBE_EDITOR_split(fieldList, ",", a+1);
04365 theField = "'.$this->prependFormFieldNames.'["+table+"]["+uid+"]["+field+"]";
04366 if (document.'.$formname.'[theField]) url+="&rec["+field+"]="+TBE_EDITOR_rawurlencode(document.'.$formname.'[theField].value);
04367 }
04368 if (top.topmenuFrame) {
04369 top.topmenuFrame.document.location = url+"&backRef="+(top.content.list_frame ? (top.content.list_frame.view_frame ? "top.content.list_frame.view_frame" : "top.content.list_frame") : "top.content");
04370 } else if (!isOnFocus) {
04371 var vHWin=window.open(url,"palette","height=300,width=200,status=0,menubar=0,scrollbars=1");
04372 vHWin.focus();
04373 }
04374 }
04375 function TBE_EDITOR_curSelected(theField) {
04376 var fObjSel = document.'.$formname.'[theField];
04377 var retVal="";
04378 if (fObjSel) {
04379 if (fObjSel.type=="select-multiple" || fObjSel.type=="select-one") {
04380 var l=fObjSel.length;
04381 for (a=0;a<l;a++) {
04382 if (fObjSel.options[a].selected==1) {
04383 retVal+=fObjSel.options[a].value+",";
04384 }
04385 }
04386 }
04387 }
04388 return retVal;
04389 }
04390 function TBE_EDITOR_rawurlencode(str,maxlen) {
04391 var output = str;
04392 if (maxlen) output = output.substr(0,200);
04393 output = escape(output);
04394 output = TBE_EDITOR_str_replace("*","%2A", output);
04395 output = TBE_EDITOR_str_replace("+","%2B", output);
04396 output = TBE_EDITOR_str_replace("/","%2F", output);
04397 output = TBE_EDITOR_str_replace("@","%40", output);
04398 return output;
04399 }
04400 function TBE_EDITOR_str_replace(match,replace,string) {
04401 var input = ""+string;
04402 var matchStr = ""+match;
04403 if (!matchStr) {return string;}
04404 var output = "";
04405 var pointer=0;
04406 var pos = input.indexOf(matchStr);
04407 while (pos!=-1) {
04408 output+=""+input.substr(pointer, pos-pointer)+replace;
04409 pointer=pos+matchStr.length;
04410 pos = input.indexOf(match,pos+1);
04411 }
04412 output+=""+input.substr(pointer);
04413 return output;
04414 }
04415
04416 </script>
04417 <script type="text/javascript">
04418
04419
04420 '.$this->extJSCODE.'
04421
04422 TBE_EDITOR_initRequired();
04423 TBE_EDITOR_loginRefreshed();
04424
04425 </script>';
04426 return $out;
04427 }
04428
04435 function dbFileCon($formObj='document.forms[0]') {
04436 $str='
04437
04438
04439
04440
04441
04442 var browserWin="";
04443
04444 function setFormValueOpenBrowser(mode,params) {
04445 var url = "'.$this->backPath.'browser.php?mode="+mode+"&bparams="+params;
04446
04447 browserWin = window.open(url,"Typo3WinBrowser","height=350,width="+(mode=="db"?650:600)+",status=0,menubar=0,resizable=1,scrollbars=1");
04448 browserWin.focus();
04449 }
04450 function setFormValueFromBrowseWin(fName,value,label) {
04451 var formObj = setFormValue_getFObj(fName)
04452 if (formObj && value!="--div--") {
04453 fObj = formObj[fName+"_list"];
04454
04455 var l=fObj.length;
04456 var setOK=1;
04457 if (!formObj[fName+"_mul"] || formObj[fName+"_mul"].value==0) {
04458 for (a=0;a<l;a++) {
04459 if (fObj.options[a].value==value) {
04460 setOK=0;
04461 }
04462 }
04463 }
04464 if (setOK) {
04465 fObj.length++;
04466 fObj.options[l].value=value;
04467 fObj.options[l].text=unescape(label);
04468
04469
04470 setHiddenFromList(fObj,formObj[fName]);
04471 '.$this->TBE_EDITOR_fieldChanged_func.'
04472 }
04473 }
04474 }
04475 function setHiddenFromList(fObjSel,fObjHid) {
04476 l=fObjSel.length;
04477 fObjHid.value="";
04478 for (a=0;a<l;a++) {
04479 fObjHid.value+=fObjSel.options[a].value+",";
04480 }
04481 }
04482 function setFormValueManipulate(fName,type) {
04483 var formObj = setFormValue_getFObj(fName)
04484 if (formObj) {
04485 var localArray_V = new Array();
04486 var localArray_L = new Array();
04487 var localArray_S = new Array();
04488 var fObjSel = formObj[fName+"_list"];
04489 var l=fObjSel.length;
04490 var c=0;
04491 if (type=="Remove" || type=="Top" || type=="Bottom") {
04492 if (type=="Top") {
04493 for (a=0;a<l;a++) {
04494 if (fObjSel.options[a].selected==1) {
04495 localArray_V[c]=fObjSel.options[a].value;
04496 localArray_L[c]=fObjSel.options[a].text;
04497 localArray_S[c]=1;
04498 c++;
04499 }
04500 }
04501 }
04502 for (a=0;a<l;a++) {
04503 if (fObjSel.options[a].selected!=1) {
04504 localArray_V[c]=fObjSel.options[a].value;
04505 localArray_L[c]=fObjSel.options[a].text;
04506 localArray_S[c]=0;
04507 c++;
04508 }
04509 }
04510 if (type=="Bottom") {
04511 for (a=0;a<l;a++) {
04512 if (fObjSel.options[a].selected==1) {
04513 localArray_V[c]=fObjSel.options[a].value;
04514 localArray_L[c]=fObjSel.options[a].text;
04515 localArray_S[c]=1;
04516 c++;
04517 }
04518 }
04519 }
04520 }
04521 if (type=="Down") {
04522 var tC = 0;
04523 var tA = new Array();
04524
04525 for (a=0;a<l;a++) {
04526 if (fObjSel.options[a].selected!=1) {
04527
04528 localArray_V[c]=fObjSel.options[a].value;
04529 localArray_L[c]=fObjSel.options[a].text;
04530 localArray_S[c]=0;
04531 c++;
04532
04533
04534 if (tA.length > 0) {
04535 for (aa=0;aa<tA.length;aa++) {
04536 localArray_V[c]=fObjSel.options[tA[aa]].value;
04537 localArray_L[c]=fObjSel.options[tA[aa]].text;
04538 localArray_S[c]=1;
04539 c++;
04540 }
04541
04542 var tC = 0;
04543 var tA = new Array();
04544 }
04545 } else {
04546 tA[tC] = a;
04547 tC++;
04548 }
04549 }
04550
04551 if (tA.length > 0) {
04552 for (aa=0;aa<tA.length;aa++) {
04553 localArray_V[c]=fObjSel.options[tA[aa]].value;
04554 localArray_L[c]=fObjSel.options[tA[aa]].text;
04555 localArray_S[c]=1;
04556 c++;
04557 }
04558 }
04559 }
04560 if (type=="Up") {
04561 var tC = 0;
04562 var tA = new Array();
04563 var c = l-1;
04564
04565 for (a=l-1;a>=0;a--) {
04566 if (fObjSel.options[a].selected!=1) {
04567
04568
04569 localArray_V[c]=fObjSel.options[a].value;
04570 localArray_L[c]=fObjSel.options[a].text;
04571 localArray_S[c]=0;
04572 c--;
04573
04574
04575 if (tA.length > 0) {
04576 for (aa=0;aa<tA.length;aa++) {
04577 localArray_V[c]=fObjSel.options[tA[aa]].value;
04578 localArray_L[c]=fObjSel.options[tA[aa]].text;
04579 localArray_S[c]=1;
04580 c--;
04581 }
04582
04583 var tC = 0;
04584 var tA = new Array();
04585 }
04586 } else {
04587 tA[tC] = a;
04588 tC++;
04589 }
04590 }
04591
04592 if (tA.length > 0) {
04593 for (aa=0;aa<tA.length;aa++) {
04594 localArray_V[c]=fObjSel.options[tA[aa]].value;
04595 localArray_L[c]=fObjSel.options[tA[aa]].text;
04596 localArray_S[c]=1;
04597 c--;
04598 }
04599 }
04600 c=l;
04601 }
04602
04603
04604 fObjSel.length = c;
04605 for (a=0;a<c;a++) {
04606 fObjSel.options[a].value = localArray_V[a];
04607 fObjSel.options[a].text = localArray_L[a];
04608 fObjSel.options[a].selected = localArray_S[a];
04609 }
04610 setHiddenFromList(fObjSel,formObj[fName]);
04611
04612 '.$this->TBE_EDITOR_fieldChanged_func.'
04613 }
04614 }
04615 function setFormValue_getFObj(fName) {
04616 var formObj = '.$formObj.';
04617 if (formObj) {
04618 if (formObj[fName] && formObj[fName+"_list"] && formObj[fName+"_list"].type=="select-multiple") {
04619 return formObj;
04620 } else {
04621 alert("Formfields missing:\n fName: "+formObj[fName]+"\n fName_list:"+formObj[fName+"_list"]+"\n type:"+formObj[fName+"_list"].type+"\n fName:"+fName);
04622 }
04623 }
04624 return "";
04625 }
04626
04627
04628 ';
04629 return $str;
04630 }
04631
04637 function printNeededJSFunctions() {
04638
04639 $out = $this->JSbottom($this->formName);
04640
04641 if ($this->printNeededJS['dbFileIcons']) {
04642 $out.= '
04643
04644
04645
04646 <!--
04647 JavaScript after the form has been drawn:
04648 -->
04649
04650 <script type="text/javascript">
04651
04652 '.$this->dbFileCon('document.'.$this->formName).'
04653
04654 </script>';
04655 }
04656 return $out;
04657 }
04658
04664 function printNeededJSFunctions_top() {
04665
04666 $out = $this->JStop($this->formName);
04667 return $out;
04668 }
04669
04670
04671
04672
04673
04674
04675
04676
04677
04678
04679
04680
04681
04682
04683
04684
04685
04686
04687
04688
04689
04690
04691
04692
04693
04694
04695
04696
04697
04698
04699
04700
04701
04702
04703
04704
04712 function getDefaultRecord($table,$pid=0) {
04713 global $TCA;
04714 if ($TCA[$table]) {
04715 t3lib_div::loadTCA($table);
04716 $row = array();
04717
04718 if ($pid<0 && $TCA[$table]['ctrl']['useColumnsForDefaultValues']) {
04719
04720 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $table, 'uid='.abs($pid).t3lib_BEfunc::deleteClause($table));
04721 if ($drow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
04722
04723 $fArr = explode(',',$TCA[$table]['ctrl']['useColumnsForDefaultValues']);
04724 foreach($fArr as $theF) {
04725 if ($TCA[$table]['columns'][$theF]) {
04726 $row[$theF] = $drow[$theF];
04727 }
04728 }
04729 }
04730 $GLOBALS['TYPO3_DB']->sql_free_result($res);
04731 }
04732
04733 foreach($TCA[$table]['columns'] as $field => $info) {
04734 if (isset($info['config']['default'])) {
04735 $row[$field] = $info['config']['default'];
04736 }
04737 }
04738
04739 return $row;
04740 }
04741 }
04742
04751 function getRecordPath($table,$rec) {
04752 t3lib_BEfunc::fixVersioningPid($table,$rec);
04753 list($tscPID,$thePidValue)=$this->getTSCpid($table,$rec['uid'],$rec['pid']);
04754 if ($thePidValue>=0) {
04755 return t3lib_BEfunc::getRecordPath($tscPID,$this->readPerms(),15);
04756 }
04757 }
04758
04765 function readPerms() {
04766 if (!$this->perms_clause_set) {
04767 $this->perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
04768 $this->perms_clause_set=1;
04769 }
04770 return $this->perms_clause;
04771 }
04772
04779 function sL($str) {
04780 return $GLOBALS['LANG']->sL($str);
04781 }
04782
04792 function getLL($str) {
04793 switch(substr($str,0,2)) {
04794 case 'l_':
04795 return $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.'.substr($str,2));
04796 break;
04797 case 'm_':
04798 return $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:mess.'.substr($str,2));
04799 break;
04800 }
04801 }
04802
04810 function isPalettesCollapsed($table,$palette) {
04811 global $TCA;
04812
04813 if ($TCA[$table]['ctrl']['canNotCollapse']) return 0;
04814 if (is_array($TCA[$table]['palettes'][$palette]) && $TCA[$table]['palettes'][$palette]['canNotCollapse']) return 0;
04815 return $this->palettesCollapsed;
04816 }
04817
04825 function isDisplayCondition($displayCond,$row) {
04826 $output = FALSE;
04827
04828 $parts = explode(':',$displayCond);
04829 switch((string)$parts[0]) {
04830 case 'FIELD':
04831 switch((string)$parts[2]) {
04832 case 'REQ':
04833 if (strtolower($parts[3])=='true') {
04834 $output = $row[$parts[1]] ? TRUE : FALSE;
04835 } elseif (strtolower($parts[3])=='false') {
04836 $output = !$row[$parts[1]] ? TRUE : FALSE;
04837 }
04838 break;
04839 case '>':
04840 $output = $row[$parts[1]] > $parts[3];
04841 break;
04842 case '<':
04843 $output = $row[$parts[1]] < $parts[3];
04844 break;
04845 case '>=':
04846 $output = $row[$parts[1]] >= $parts[3];
04847 break;
04848 case '<=':
04849 $output = $row[$parts[1]] <= $parts[3];
04850 break;
04851 case '-':
04852 case '!-':
04853 $cmpParts = explode('-',$parts[3]);
04854 $output = $row[$parts[1]] >= $cmpParts[0] && $row[$parts[1]] <= $cmpParts[1];
04855 if ($parts[2]{0}=='!') $output = !$output;
04856 break;
04857 case 'IN':
04858 case '!IN':
04859 $output = t3lib_div::inList($parts[3],$row[$parts[1]]);
04860 if ($parts[2]{0}=='!') $output = !$output;
04861 break;
04862 case '=':
04863 case '!=':
04864 $output = t3lib_div::inList($parts[3],$row[$parts[1]]);
04865 if ($parts[2]{0}=='!') $output = !$output;
04866 break;
04867 }
04868 break;
04869 case 'EXT':
04870 switch((string)$parts[2]) {
04871 case 'LOADED':
04872 if (strtolower($parts[3])=='true') {
04873 $output = t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
04874 } elseif (strtolower($parts[3])=='false') {
04875 $output = !t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
04876 }
04877 break;
04878 }
04879 break;
04880 case 'REC':
04881 switch((string)$parts[1]) {
04882 case 'NEW':
04883 if (strtolower($parts[2])=='true') {
04884 $output = !(intval($row['uid']) > 0) ? TRUE : FALSE;
04885 } elseif (strtolower($parts[2])=='false') {
04886 $output = (intval($row['uid']) > 0) ? TRUE : FALSE;
04887 }
04888 break;
04889 }
04890 break;
04891 }
04892
04893 return $output;
04894 }
04895
04906 function getTSCpid($table,$uid,$pid) {
04907 $key = $table.':'.$uid.':'.$pid;
04908 if (!isset($this->cache_getTSCpid[$key])) {
04909 $this->cache_getTSCpid[$key] = t3lib_BEfunc::getTSCpid($table,$uid,$pid);
04910 }
04911 return $this->cache_getTSCpid[$key];
04912 }
04913
04920 function doLoadTableDescr($table) {
04921 global $TCA;
04922 return $TCA[$table]['interface']['always_description'];
04923 }
04924
04932 function getAvailableLanguages($onlyIsoCoded=1,$setDefault=1) {
04933 $isL = t3lib_extMgm::isLoaded('static_info_tables');
04934
04935
04936 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('static_lang_isocode,title,uid', 'sys_language', 'pid=0 AND hidden=0'.t3lib_BEfunc::deleteClause('sys_language'), '', 'title');
04937
04938
04939 $output=array();
04940 if ($setDefault) {
04941 $output[0]=array(
04942 'uid' => 0,
04943 'title' => 'Default language',
04944 'ISOcode' => 'DEF'
04945 );
04946 }
04947 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
04948 $output[$row['uid']]=$row;
04949
04950 if ($isL && $row['static_lang_isocode']) {
04951 $rr = t3lib_BEfunc::getRecord('static_languages',$row['static_lang_isocode'],'lg_iso_2');
04952 if ($rr['lg_iso_2']) $output[$row['uid']]['ISOcode']=$rr['lg_iso_2'];
04953 }
04954
04955 if ($onlyIsoCoded && !$output[$row['uid']]['ISOcode']) unset($output[$row['uid']]);
04956 }
04957 return $output;
04958 }
04959 }
04960
04961
04962
04963
04964
04965
04966
04967
04968
04974 class t3lib_TCEforms_FE extends t3lib_TCEforms {
04975
04982 function wrapLabels($str) {
04983 return '<font face="verdana" size="1" color="black">'.$str.'</font>';
04984 }
04985
04992 function printPalette($palArr) {
04993 $out='';
04994 reset($palArr);
04995 $bgColor=' bgcolor="#D6DAD0"';
04996 while(list(,$content)=each($palArr)) {
04997 $hRow[]='<td'.$bgColor.'><font face="verdana" size="1"> </font></td><td nowrap="nowrap"'.$bgColor.'><font color="#666666" face="verdana" size="1">'.$content['NAME'].'</font></td>';
04998 $iRow[]='<td valign="top">'.
04999 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" alt="" />'.
05000 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" alt="" />'.
05001 '</td><td nowrap="nowrap" valign="top">'.$content['ITEM'].$content['HELP_ICON'].'</td>';
05002 }
05003 $out='<table border="0" cellpadding="0" cellspacing="0">
05004 <tr><td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.implode('',$hRow).'</tr>
05005 <tr><td></td>'.implode('',$iRow).'</tr>
05006 </table>';
05007
05008 return $out;
05009 }
05010
05017 function setFancyDesign() {
05018 $this->fieldTemplate='
05019 <tr>
05020 <td nowrap="nowrap" bgcolor="#F6F2E6">###FIELD_HELP_ICON###<font face="verdana" size="1" color="black"><b>###FIELD_NAME###</b></font>###FIELD_HELP_TEXT###</td>
05021 </tr>
05022 <tr>
05023 <td nowrap="nowrap" bgcolor="#ABBBB4"><img name="req_###FIELD_TABLE###_###FIELD_ID###_###FIELD_FIELD###" src="clear.gif" width="10" height="10" alt="" /><img name="cm_###FIELD_TABLE###_###FIELD_ID###_###FIELD_FIELD###" src="clear.gif" width="7" height="10" alt="" /><font face="verdana" size="1" color="black">###FIELD_ITEM###</font>###FIELD_PAL_LINK_ICON###</td>
05024 </tr> ';
05025
05026 $this->totalWrap='<table border="0" cellpadding="1" cellspacing="0" bgcolor="black"><tr><td><table border="0" cellpadding="2" cellspacing="0">|</table></td></tr></table>';
05027
05028 $this->palFieldTemplate='
05029 <tr>
05030 <td nowrap="nowrap" bgcolor="#ABBBB4"><font face="verdana" size="1" color="black">###FIELD_PALETTE###</font></td>
05031 </tr> ';
05032 $this->palFieldTemplateHeader='
05033 <tr>
05034 <td nowrap="nowrap" bgcolor="#F6F2E6"><font face="verdana" size="1" color="black"><b>###FIELD_HEADER###</b></font></td>
05035 </tr> ';
05036 }
05037 }
05038
05039 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']) {
05040 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']);
05041 }
05042 ?>