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
00183 require_once(PATH_t3lib.'class.t3lib_diff.php');
00184 require_once(PATH_t3lib.'class.t3lib_tceforms_inline.php');
00185
00186
00187
00196 class t3lib_TCEforms {
00197
00198
00199 var $palFieldArr = array();
00200 var $disableWizards = 0;
00201 var $isPalettedoc = 0;
00202 var $paletteMargin = 1;
00203 var $defStyle = '';
00204 var $cachedTSconfig = array();
00205 var $cachedTSconfig_fieldLevel = array();
00206 var $cachedLanguageFlag = array();
00207 var $cachedAdditionalPreviewLanguages = NULL;
00208 var $transformedRow = array();
00209 var $extJSCODE = '';
00210 var $printNeededJS = array();
00211 var $hiddenFieldAccum=array();
00212 var $TBE_EDITOR_fieldChanged_func='';
00213 var $loadMD5_JS=1;
00214 var $prevBorderStyle='[nothing here...]';
00215 var $allowUpload=0;
00216 var $titleLen=15;
00217 var $defaultLanguageData = array();
00218 var $defaultLanguageData_diff = array();
00219 var $additionalPreviewLanguageData = array();
00220
00221
00222
00223 var $backPath='';
00224 var $returnUrl='';
00225 var $doSaveFieldName='';
00226 var $palettesCollapsed=0;
00227 var $disableRTE=0;
00228 var $globalShowHelp=1;
00229 var $localizationMode='';
00230 var $fieldOrder='';
00231 var $doPrintPalette=1;
00232 var $clipObj=FALSE;
00233 var $enableClickMenu=FALSE;
00234 var $enableTabMenu = FALSE;
00235 var $renderReadonly = FALSE;
00236
00237 var $form_rowsToStylewidth = 9.58;
00238 var $form_largeComp = 1.33;
00239 var $charsPerRow=40;
00240 var $maxTextareaWidth=48;
00241 var $maxInputWidth=48;
00242 var $defaultMultipleSelectorStyle='width:250px;';
00243
00244
00245
00246 var $prependFormFieldNames = 'data';
00247 var $prependCmdFieldNames = 'cmd';
00248 var $prependFormFieldNames_file = 'data_files';
00249 var $formName = 'editform';
00250 var $allowOverrideMatrix = array();
00251
00252
00253
00254
00255 var $perms_clause='';
00256 var $perms_clause_set=0;
00257 var $edit_showFieldHelp='';
00258 var $docLarge=0;
00259 var $clientInfo=array();
00260 var $RTEenabled=0;
00261 var $RTEenabled_notReasons='';
00262 var $RTEcounter = 0;
00263
00264 var $colorScheme;
00265 var $classScheme;
00266 var $defColorScheme;
00267 var $defClassScheme;
00268 var $fieldStyle;
00269 var $borderStyle;
00270
00271 var $commentMessages=array();
00272
00273
00274 var $totalWrap='<hr />|<hr />';
00275 var $fieldTemplate='<b>###FIELD_NAME###</b><br />###FIELD_ITEM###<hr />';
00276 var $sectionWrap='';
00277 var $palFieldTemplateHeader='';
00278 var $palFieldTemplate='';
00279
00280
00281 var $excludeElements='';
00282 var $palettesRendered=array();
00283 var $hiddenFieldListArr = array();
00284 var $requiredFields=array();
00285 var $requiredElements=array();
00286 var $renderDepth=0;
00287 var $savedSchemes=array();
00288 var $dynTabLevelStack = array();
00289
00290
00291 var $additionalCode_pre = array();
00292 var $additionalJS_pre = array();
00293 var $additionalJS_post = array();
00294 var $additionalJS_submit = array();
00295
00296 var $inline;
00297 var $hookObjectsMainFields = array();
00298 var $hookObjectsSingleField = array();
00299 var $extraFormHeaders = array();
00300
00301
00302
00303
00304
00310 function t3lib_TCEforms() {
00311 global $CLIENT, $TYPO3_CONF_VARS;
00312
00313 $this->clientInfo = t3lib_div::clientInfo();
00314
00315 $this->RTEenabled = $GLOBALS['BE_USER']->isRTE();
00316 if (!$this->RTEenabled) {
00317 $this->RTEenabled_notReasons = implode(chr(10),$GLOBALS['BE_USER']->RTE_errors);
00318 $this->commentMessages[] = 'RTE NOT ENABLED IN SYSTEM due to:'.chr(10).$this->RTEenabled_notReasons;
00319 }
00320
00321
00322 $this->defColorScheme = array(
00323 $GLOBALS['SOBE']->doc->bgColor,
00324 t3lib_div::modifyHTMLColorAll($GLOBALS['SOBE']->doc->bgColor,-20),
00325 t3lib_div::modifyHTMLColorAll($GLOBALS['SOBE']->doc->bgColor,-10),
00326 'black',
00327 '#666666'
00328 );
00329 $this->defColorScheme = array();
00330
00331
00332 $this->resetSchemes();
00333
00334
00335 $this->defColorScheme = $this->colorScheme;
00336 $this->defClassScheme = $this->classScheme;
00337
00338
00339 $this->allowOverrideMatrix = array(
00340 'input' => array('size', 'max'),
00341 'text' => array('cols', 'rows', 'wrap'),
00342 'check' => array('cols', 'showIfRTE'),
00343 'select' => array('size', 'autoSizeMax', 'maxitems', 'minitems'),
00344 'group' => array('size', 'autoSizeMax', 'max_size', 'show_thumbs', 'maxitems', 'minitems'),
00345 'inline' => array('appearance', 'foreign_label', 'foreign_selector', 'foreign_unique', 'maxitems', 'minitems', 'size', 'autoSizeMax', 'symmetric_label'),
00346 );
00347
00348 $this->inline = t3lib_div::makeInstance('t3lib_TCEforms_inline');
00349
00350
00351 $this->hookObjectsMainFields = array();
00352 if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getMainFieldsClass'])) {
00353 foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getMainFieldsClass'] as $classRef) {
00354 $this->hookObjectsMainFields[] = &t3lib_div::getUserObj($classRef);
00355 }
00356 }
00357 $this->hookObjectsSingleField = array();
00358 if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'])) {
00359 foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'] as $classRef) {
00360 $this->hookObjectsSingleField[] = &t3lib_div::getUserObj($classRef);
00361 }
00362 }
00363
00364 }
00365
00371 function initDefaultBEmode() {
00372 global $BE_USER;
00373 $this->prependFormFieldNames = 'data';
00374 $this->formName = 'editform';
00375 $this->setNewBEDesign();
00376 $this->docLarge = $BE_USER->uc['edit_wideDocument'] ? 1 : 0;
00377 $this->edit_showFieldHelp = $BE_USER->uc['edit_showFieldHelp'];
00378
00379 $this->edit_docModuleUpload = $BE_USER->uc['edit_docModuleUpload'];
00380 $this->titleLen = $BE_USER->uc['titleLen'];
00381
00382 $this->inline->init($this);
00383 }
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00418 function getSoloField($table,$row,$theFieldToReturn) {
00419 global $TCA;
00420
00421 if ($TCA[$table]) {
00422 t3lib_div::loadTCA($table);
00423 $typeNum = $this->getRTypeNum($table,$row);
00424 if ($TCA[$table]['types'][$typeNum]) {
00425 $itemList = $TCA[$table]['types'][$typeNum]['showitem'];
00426 if ($itemList) {
00427 $fields = t3lib_div::trimExplode(',',$itemList,1);
00428 $excludeElements = $this->excludeElements = $this->getExcludeElements($table,$row,$typeNum);
00429
00430 reset($fields);
00431 while(list(,$fieldInfo)=each($fields)) {
00432 $parts = explode(';',$fieldInfo);
00433
00434 $theField = trim($parts[0]);
00435 if (!in_array($theField,$excludeElements) && !strcmp($theField,$theFieldToReturn)) {
00436 if ($TCA[$table]['columns'][$theField]) {
00437 $sField = $this->getSingleField($table,$theField,$row,$parts[1],1,$parts[3],$parts[2]);
00438 return $sField['ITEM'];
00439 }
00440 }
00441 }
00442 }
00443 }
00444 }
00445 }
00446
00457 function getMainFields($table,$row,$depth=0) {
00458 global $TCA, $TYPO3_CONF_VARS;
00459
00460 $this->renderDepth=$depth;
00461
00462
00463 $out_array = array(array());
00464 $out_array_meta = array(array(
00465 'title' => $this->getLL('l_generalTab')
00466 ));
00467
00468 $out_pointer=0;
00469 $out_sheet=0;
00470 $this->palettesRendered=array();
00471 $this->palettesRendered[$this->renderDepth][$table]=array();
00472
00473
00474 foreach ($this->hookObjectsMainFields as $hookObj) {
00475 if (method_exists($hookObj,'getMainFields_preProcess')) {
00476 $hookObj->getMainFields_preProcess($table,$row,$this);
00477 }
00478 }
00479
00480 if ($TCA[$table]) {
00481
00482
00483 t3lib_div::loadTCA($table);
00484
00485
00486 if ($this->edit_showFieldHelp || $this->doLoadTableDescr($table)) {
00487 $GLOBALS['LANG']->loadSingleTableDescription($table);
00488 }
00489
00490 $typeNum = $this->getRTypeNum($table,$row);
00491
00492
00493 if ($TCA[$table]['types'][$typeNum]) {
00494 $itemList = $TCA[$table]['types'][$typeNum]['showitem'];
00495 if ($itemList) {
00496
00497 if (strstr($itemList, '--div--') !== false && $this->enableTabMenu && $TCA[$table]['ctrl']['dividers2tabs']) {
00498 $tabIdentString = 'TCEforms:'.$table.':'.$row['uid'];
00499 $tabIdentStringMD5 = $GLOBALS['TBE_TEMPLATE']->getDynTabMenuId('TCEforms:'.$table.':'.$row['uid']);
00500 $this->dynTabLevelStack[$tabIdentStringMD5] = 1;
00501 }
00502
00503
00504 $fields = t3lib_div::trimExplode(',',$itemList,1);
00505 if ($this->fieldOrder) {
00506 $fields = $this->rearrange($fields);
00507 }
00508
00509
00510 $excludeElements = $this->excludeElements = $this->getExcludeElements($table,$row,$typeNum);
00511 $fields = $this->mergeFieldsWithAddedFields($fields,$this->getFieldsToAdd($table,$row,$typeNum));
00512
00513
00514 $cc=0;
00515 foreach($fields as $fieldInfo) {
00516
00517 $parts = explode(';',$fieldInfo);
00518
00519
00520 $color_style_parts = t3lib_div::trimExplode('-',$parts[4]);
00521 if (strcmp($color_style_parts[0],'')) {
00522 $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][intval($color_style_parts[0])]);
00523 }
00524 if (strcmp($color_style_parts[1],'')) {
00525 $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][intval($color_style_parts[1])];
00526 if (!isset($this->fieldStyle)) $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
00527 }
00528 if (strcmp($color_style_parts[2],'')) {
00529 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00530 $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][intval($color_style_parts[2])];
00531 if (!isset($this->borderStyle)) $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
00532 }
00533
00534
00535 $theField = $parts[0];
00536 if (!in_array($theField,$excludeElements)) {
00537 if ($TCA[$table]['columns'][$theField]) {
00538 $sFieldPal='';
00539
00540 if ($parts[2] && !isset($this->palettesRendered[$this->renderDepth][$table][$parts[2]])) {
00541 $sFieldPal=$this->getPaletteFields($table,$row,$parts[2]);
00542 $this->palettesRendered[$this->renderDepth][$table][$parts[2]] = 1;
00543 }
00544 $sField = $this->getSingleField($table,$theField,$row,$parts[1],0,$parts[3],$parts[2]);
00545 if ($sField) { $sField.= $sFieldPal; }
00546
00547 $out_array[$out_sheet][$out_pointer].= $sField;
00548 } elseif ($theField=='--div--') {
00549 if ($cc>0) {
00550 $out_array[$out_sheet][$out_pointer].=$this->getDivider();
00551
00552 if ($this->enableTabMenu && $TCA[$table]['ctrl']['dividers2tabs']) {
00553 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00554 $out_sheet++;
00555
00556 $this->dynTabLevelStack[$tabIdentStringMD5] = $out_sheet+1;
00557 $out_array[$out_sheet] = array();
00558 $out_array_meta[$out_sheet]['title'] = $this->sL($parts[1]);
00559 }
00560 } else {
00561 $out_array_meta[$out_sheet]['title'] = $this->sL($parts[1]);
00562 }
00563 } elseif($theField=='--palette--') {
00564 if ($parts[2] && !isset($this->palettesRendered[$this->renderDepth][$table][$parts[2]])) {
00565
00566 if ($TCA[$table]['palettes'][$parts[2]]['canNotCollapse'] AND $parts[1]) {
00567 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$parts[2],$this->sL($parts[1]));
00568 } else {
00569 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$parts[2],'','',$this->sL($parts[1]));
00570 }
00571 $this->palettesRendered[$this->renderDepth][$table][$parts[2]] = 1;
00572 }
00573 }
00574 }
00575
00576 $cc++;
00577 }
00578 }
00579 }
00580 }
00581
00582
00583 foreach ($this->hookObjectsMainFields as $hookObj) {
00584 if (method_exists($hookObj,'getMainFields_postProcess')) {
00585 $hookObj->getMainFields_postProcess($table,$row,$this);
00586 }
00587 }
00588
00589
00590 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00591
00592
00593 $this->resetSchemes();
00594
00595
00596 $mParr = t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['mainpalette']);
00597 $i = 0;
00598 if (count($mParr)) {
00599 foreach ($mParr as $mP) {
00600 if (!isset($this->palettesRendered[$this->renderDepth][$table][$mP])) {
00601 $temp_palettesCollapsed=$this->palettesCollapsed;
00602 $this->palettesCollapsed=0;
00603 $label = ($i==0?$this->getLL('l_generalOptions'):$this->getLL('l_generalOptions_more'));
00604 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$mP,$label);
00605 $this->palettesCollapsed=$temp_palettesCollapsed;
00606 $this->palettesRendered[$this->renderDepth][$table][$mP] = 1;
00607 }
00608 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00609 $i++;
00610 if ($this->renderDepth) {
00611 $this->renderDepth--;
00612 }
00613 }
00614 }
00615
00616
00617 if ($out_sheet>0) {
00618
00619
00620 $parts = array();
00621 foreach ($out_array as $idx => $sheetContent) {
00622 $parts[] = array(
00623 'label' => $out_array_meta[$idx]['title'],
00624 'content' => '<table border="0" cellspacing="0" cellpadding="0" width="100%">'.
00625 implode('',$sheetContent).
00626 '</table>'
00627 );
00628 }
00629
00630
00631 unset($this->dynTabLevelStack[$tabIdentStringMD5]);
00632
00633 return '
00634 <tr>
00635 <td colspan="2">
00636 '.$this->getDynTabMenu($parts, $tabIdentString).'
00637 </td>
00638 </tr>';
00639 } else {
00640 return implode('',$out_array[$out_sheet]);
00641 }
00642 }
00643
00654 function getListedFields($table,$row,$list) {
00655 global $TCA;
00656
00657 t3lib_div::loadTCA($table);
00658 if ($this->edit_showFieldHelp || $this->doLoadTableDescr($table)) {
00659 $GLOBALS['LANG']->loadSingleTableDescription($table);
00660 }
00661
00662 $out = '';
00663 $types_fieldConfig = t3lib_BEfunc::getTCAtypes($table,$row,1);
00664
00665 $editFieldList=array_unique(t3lib_div::trimExplode(',',$list,1));
00666 foreach($editFieldList as $theFieldC) {
00667 list($theField,$palFields) = split('\[|\]',$theFieldC);
00668 $theField = trim($theField);
00669 $palFields = trim($palFields);
00670 if ($TCA[$table]['columns'][$theField]) {
00671 $parts = t3lib_div::trimExplode(';',$types_fieldConfig[$theField]['origString']);
00672 $sField = $this->getSingleField($table,$theField,$row,$parts[1],0,$parts[3],0);
00673 $out.= $sField;
00674 } elseif($theField=='--div--') {
00675 $out.= $this->getDivider();
00676 }
00677 if ($palFields) {
00678 $out.= $this->getPaletteFields($table,$row,'','',implode(',',t3lib_div::trimExplode('|',$palFields,1)));
00679 }
00680 }
00681
00682 return $out;
00683 }
00684
00696 function getPaletteFields($table,$row,$palette,$header='',$itemList='',$collapsedHeader='') {
00697 global $TCA;
00698 if (!$this->doPrintPalette) return '';
00699
00700 $out='';
00701 $palParts = array();
00702 t3lib_div::loadTCA($table);
00703
00704
00705 if (!is_array($this->excludeElements)) {
00706 $this->excludeElements = $this->getExcludeElements($table,$row,$this->getRTypeNum($table,$row));
00707 }
00708
00709
00710 if ($TCA[$table] && (is_array($TCA[$table]['palettes'][$palette]) || $itemList)) {
00711 $itemList = $itemList?$itemList:$TCA[$table]['palettes'][$palette]['showitem'];
00712 if ($itemList) {
00713 $fields = t3lib_div::trimExplode(',',$itemList,1);
00714 reset($fields);
00715 while(list(,$fieldInfo)=each($fields)) {
00716 $parts = t3lib_div::trimExplode(';',$fieldInfo);
00717 $theField = $parts[0];
00718
00719 if (!in_array($theField,$this->excludeElements) && $TCA[$table]['columns'][$theField]) {
00720 $this->palFieldArr[$palette][] = $theField;
00721 if ($this->isPalettesCollapsed($table,$palette)) {
00722 $this->hiddenFieldListArr[] = $theField;
00723 }
00724
00725 $part = $this->getSingleField($table,$theField,$row,$parts[1],1,'',$parts[2]);
00726 if (is_array($part)) {
00727 $palParts[] = $part;
00728 }
00729 }
00730 }
00731 }
00732 }
00733
00734 if (count($palParts)) {
00735 if ($header) {
00736 $out.= $this->intoTemplate(array(
00737 'HEADER' => htmlspecialchars($header)
00738 ),
00739 $this->palFieldTemplateHeader
00740 );
00741 }
00742 $out.= $this->intoTemplate(array(
00743 'PALETTE' => $this->printPalette($palParts)
00744 ),
00745 $this->palFieldTemplate
00746 );
00747 }
00748
00749 if ($this->isPalettesCollapsed($table,$palette) && $collapsedHeader) {
00750 $pC = $this->intoTemplate(array(
00751 '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),
00752 ),
00753 $this->palFieldTemplate
00754 );
00755 $out.= $pC;
00756 }
00757
00758 return $out;
00759 }
00760
00773 function getSingleField($table,$field,$row,$altName='',$palette=0,$extra='',$pal=0) {
00774 global $TCA,$BE_USER;
00775
00776
00777 foreach ($this->hookObjectsSingleField as $hookObj) {
00778 if (method_exists($hookObj,'getSingleField_preProcess')) {
00779 $hookObj->getSingleField_preProcess($table, $field, $row, $altName, $palette, $extra, $pal, $this);
00780 }
00781 }
00782
00783 $out = '';
00784 $PA = array();
00785 $PA['altName'] = $altName;
00786 $PA['palette'] = $palette;
00787 $PA['extra'] = $extra;
00788 $PA['pal'] = $pal;
00789
00790
00791 t3lib_div::loadTCA($table);
00792
00793
00794 $PA['fieldConf'] = $TCA[$table]['columns'][$field];
00795 $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00796
00797 $skipThisField = $this->inline->skipField($table, $field, $row, $PA['fieldConf']['config']);
00798
00799
00800 if ( is_array($PA['fieldConf']) &&
00801 !$skipThisField &&
00802 (!$PA['fieldConf']['exclude'] || $BE_USER->check('non_exclude_fields',$table.':'.$field)) &&
00803 $PA['fieldConf']['config']['form_type']!='passthrough' &&
00804 ($this->RTEenabled || !$PA['fieldConf']['config']['showIfRTE']) &&
00805 (!$PA['fieldConf']['displayCond'] || $this->isDisplayCondition($PA['fieldConf']['displayCond'],$row)) &&
00806 (!$TCA[$table]['ctrl']['languageField'] || $PA['fieldConf']['l10n_display'] || strcmp($PA['fieldConf']['l10n_mode'],'exclude') || $row[$TCA[$table]['ctrl']['languageField']]<=0) &&
00807 (!$TCA[$table]['ctrl']['languageField'] || !$this->localizationMode || $this->localizationMode===$PA['fieldConf']['l10n_cat'])
00808 ) {
00809
00810
00811
00812
00813 $PA['fieldTSConfig'] = $this->setTSconfig($table,$row,$field);
00814
00815
00816 if (!$PA['fieldTSConfig']['disabled']) {
00817
00818 $PA['fieldConf']['config'] = $this->overrideFieldConf($PA['fieldConf']['config'], $PA['fieldTSConfig']);
00819
00820
00821 $PA['itemFormElName']=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']';
00822 $PA['itemFormElName_file']=$this->prependFormFieldNames_file.'['.$table.']['.$row['uid'].']['.$field.']';
00823 $PA['itemFormElValue']=$row[$field];
00824 $PA['itemFormElID']=$this->prependFormFieldNames.'_'.$table.'_'.$row['uid'].'_'.$field;
00825
00826
00827 if ($PA['fieldConf']['l10n_display'] AND t3lib_div::inList($PA['fieldConf']['l10n_display'], 'defaultAsReadonly') AND $row[$TCA[$table]['ctrl']['languageField']]) {
00828 $PA['fieldConf']['config']['readOnly'] = true;
00829 $PA['itemFormElValue'] = $this->defaultLanguageData[$table.':'.$row['uid']][$field];
00830 }
00831
00832
00833 if (
00834 ($TCA[$table]['ctrl']['type'] && !strcmp($field,$TCA[$table]['ctrl']['type'])) ||
00835 ($TCA[$table]['ctrl']['requestUpdate'] && t3lib_div::inList($TCA[$table]['ctrl']['requestUpdate'],$field))) {
00836 if($GLOBALS['BE_USER']->jsConfirmation(1)) {
00837 $alertMsgOnChange = 'if (confirm(TBE_EDITOR.labels.onChangeAlert) && TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm() };';
00838 } else {
00839 $alertMsgOnChange = 'if (TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm() };';
00840 }
00841 } else {
00842 $alertMsgOnChange = '';
00843 }
00844
00845
00846 if (in_array($field,$this->hiddenFieldListArr)) {
00847 $this->hiddenFieldAccum[]='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00848 } else {
00849
00850
00851 if (!$PA['palette']) {
00852 if ($PA['pal'] && $this->isPalettesCollapsed($table,$PA['pal'])) {
00853 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);
00854 } else {
00855 $thePalIcon = '';
00856 $palJSfunc = '';
00857 }
00858 }
00859
00860 $PA['onFocus'] = ($palJSfunc && !$BE_USER->uc['dontShowPalettesOnFocusInAB']) ? ' onfocus="'.htmlspecialchars($palJSfunc).'"' : '';
00861
00862
00863 $item='';
00864 $PA['label'] = $PA['altName'] ? $PA['altName'] : $PA['fieldConf']['label'];
00865 $PA['label'] = $this->sL($PA['label']);
00866
00867 $PA['fieldChangeFunc']=array();
00868 $PA['fieldChangeFunc']['TBE_EDITOR_fieldChanged'] = "TBE_EDITOR.fieldChanged('".$table."','".$row['uid']."','".$field."','".$PA['itemFormElName']."');";
00869 $PA['fieldChangeFunc']['alert']=$alertMsgOnChange;
00870
00871 if ($this->inline->isInlineChildAndLabelField($table, $field)) {
00872 $PA['fieldChangeFunc']['inline'] = "inline.handleChangedField('".$PA['itemFormElName']."','".$this->inline->inlineNames['object']."[$table][".$row['uid']."]');";
00873 }
00874
00875
00876 $item = $this->getSingleField_SW($table,$field,$row,$PA);
00877
00878
00879 if ($PA['fieldConf']['l10n_display'] && (t3lib_div::inList($PA['fieldConf']['l10n_display'], 'hideDiff') || t3lib_div::inList($PA['fieldConf']['l10n_display'], 'defaultAsReadonly'))) {
00880 $renderLanguageDiff = false;
00881 } else {
00882 $renderLanguageDiff = true;
00883 }
00884
00885 if ($renderLanguageDiff) {
00886 $item = $this->renderDefaultLanguageContent($table,$field,$row,$item);
00887 $item = $this->renderDefaultLanguageDiff($table,$field,$row,$item);
00888 }
00889
00890
00891 $PA['label'] = t3lib_div::deHSCentities(htmlspecialchars($PA['label']));
00892 if (t3lib_div::testInt($row['uid']) && $PA['fieldTSConfig']['linkTitleToSelf']) {
00893 $lTTS_url = $this->backPath.'alt_doc.php?edit['.$table.']['.$row['uid'].']=edit&columnsOnly='.$field.
00894 ($PA['fieldTSConfig']['linkTitleToSelf.']['returnUrl']?'&returnUrl='.rawurlencode($this->thisReturnUrl()):'');
00895 $PA['label'] = '<a href="'.htmlspecialchars($lTTS_url).'">'.$PA['label'].'</a>';
00896 }
00897
00898
00899 if ($PA['fieldConf']['config']['form_type']=='user' && $PA['fieldConf']['config']['noTableWrapping']) {
00900 $out = $item;
00901 } elseif ($PA['palette']) {
00902
00903 $out=array(
00904 'NAME'=>$PA['label'],
00905 'ID'=>$row['uid'],
00906 'FIELD'=>$field,
00907 'TABLE'=>$table,
00908 'ITEM'=>$item,
00909 'HELP_ICON' => $this->helpTextIcon($table,$field,1)
00910 );
00911 $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00912 } else {
00913
00914 $out=array(
00915 'NAME'=>$PA['label'],
00916 'ITEM'=>$item,
00917 'TABLE'=>$table,
00918 'ID'=>$row['uid'],
00919 'HELP_ICON'=>$this->helpTextIcon($table,$field),
00920 'HELP_TEXT'=>$this->helpText($table,$field),
00921 'PAL_LINK_ICON'=>$thePalIcon,
00922 'FIELD'=>$field
00923 );
00924 $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00925
00926 $out=$this->intoTemplate($out);
00927 }
00928 }
00929 } else $this->commentMessages[]=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']: Disabled by TSconfig';
00930 }
00931
00932 foreach ($this->hookObjectsSingleField as $hookObj) {
00933 if (method_exists($hookObj,'getSingleField_postProcess')) {
00934 $hookObj->getSingleField_postProcess($table, $field, $row, $out, $PA, $this);
00935 }
00936 }
00937
00938 return $out;
00939 }
00940
00952 function getSingleField_SW($table,$field,$row,&$PA) {
00953 $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00954
00955 switch($PA['fieldConf']['config']['form_type']) {
00956 case 'input':
00957 $item = $this->getSingleField_typeInput($table,$field,$row,$PA);
00958 break;
00959 case 'text':
00960 $item = $this->getSingleField_typeText($table,$field,$row,$PA);
00961 break;
00962 case 'check':
00963 $item = $this->getSingleField_typeCheck($table,$field,$row,$PA);
00964 break;
00965 case 'radio':
00966 $item = $this->getSingleField_typeRadio($table,$field,$row,$PA);
00967 break;
00968 case 'select':
00969 $item = $this->getSingleField_typeSelect($table,$field,$row,$PA);
00970 break;
00971 case 'group':
00972 $item = $this->getSingleField_typeGroup($table,$field,$row,$PA);
00973 break;
00974 case 'inline':
00975 $item = $this->inline->getSingleField_typeInline($table,$field,$row,$PA);
00976 break;
00977 case 'none':
00978 $item = $this->getSingleField_typeNone($table,$field,$row,$PA);
00979 break;
00980 case 'user':
00981 $item = $this->getSingleField_typeUser($table,$field,$row,$PA);
00982 break;
00983 case 'flex':
00984 $item = $this->getSingleField_typeFlex($table,$field,$row,$PA);
00985 break;
00986 default:
00987 $item = $this->getSingleField_typeUnknown($table,$field,$row,$PA);
00988 break;
00989 }
00990
00991 return $item;
00992 }
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01028 function getSingleField_typeInput($table,$field,$row,&$PA) {
01029
01030
01031
01032 $config = $PA['fieldConf']['config'];
01033
01034 # $specConf = $this->getSpecConfForField($table,$row,$field);
01035 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01036 $size = t3lib_div::intInRange($config['size']?$config['size']:30,5,$this->maxInputWidth);
01037 $evalList = t3lib_div::trimExplode(',',$config['eval'],1);
01038
01039
01040 if($this->renderReadonly || $config['readOnly']) {
01041 $itemFormElValue = $PA['itemFormElValue'];
01042 if (in_array('date',$evalList)) {
01043 $config['format'] = 'date';
01044 } elseif (in_array('date',$evalList)) {
01045 $config['format'] = 'date';
01046 } elseif (in_array('datetime',$evalList)) {
01047 $config['format'] = 'datetime';
01048 } elseif (in_array('time',$evalList)) {
01049 $config['format'] = 'time';
01050 }
01051 if (in_array('password',$evalList)) {
01052 $itemFormElValue = $itemFormElValue ? '*********' : '';
01053 }
01054 return $this->getSingleField_typeNone_render($config, $itemFormElValue);
01055 }
01056
01057 if (in_array('required',$evalList)) {
01058 $this->requiredFields[$table.'_'.$row['uid'].'_'.$field]=$PA['itemFormElName'];
01059 }
01060
01061 $paramsList = "'".$PA['itemFormElName']."','".implode(',',$evalList)."','".trim($config['is_in'])."',".(isset($config['checkbox'])?1:0).",'".$config['checkbox']."'";
01062 if (isset($config['checkbox'])) {
01063
01064 $thisMidnight = mktime(0,0,0);
01065 $checkSetValue = in_array('date',$evalList) ? $thisMidnight : '';
01066 $checkSetValue = in_array('datetime',$evalList) ? time() : $checkSetValue;
01067
01068 $cOnClick = 'typo3form.fieldGet('.$paramsList.',1,\''.$checkSetValue.'\');'.implode('',$PA['fieldChangeFunc']);
01069 $item.='<input type="checkbox"'.$this->insertDefStyle('check').' name="'.$PA['itemFormElName'].'_cb" onclick="'.htmlspecialchars($cOnClick).'" />';
01070 }
01071
01072 $PA['fieldChangeFunc'] = array_merge(array('typo3form.fieldGet'=>'typo3form.fieldGet('.$paramsList.');'), $PA['fieldChangeFunc']);
01073 $mLgd = ($config['max']?$config['max']:256);
01074 $iOnChange = implode('',$PA['fieldChangeFunc']);
01075 $item.='<input type="text" name="'.$PA['itemFormElName'].'_hr" value=""'.$this->formWidth($size).' maxlength="'.$mLgd.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].' />';
01076 $item.='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01077 $this->extJSCODE.='typo3form.fieldSet('.$paramsList.');';
01078
01079
01080 foreach ($evalList as $evalData) {
01081 if (substr($evalData, 0, 3) == 'tx_') {
01082 $evalObj = t3lib_div::getUserObj($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tce']['formevals'][$evalData].':&'.$evalData);
01083 if(is_object($evalObj) && method_exists($evalObj, 'returnFieldJS')) {
01084 $this->extJSCODE .= "\n\nfunction ".$evalData."(value) {\n".$evalObj->returnFieldJS()."\n}\n";
01085 }
01086 }
01087 }
01088
01089
01090 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'_hr" value="" />';
01091 $altItem.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01092
01093
01094 $item= $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'].'_hr',$specConf);
01095
01096 return $item;
01097 }
01098
01109 function getSingleField_typeText($table,$field,$row,&$PA) {
01110
01111
01112 $config = $PA['fieldConf']['config'];
01113
01114 if($this->renderReadonly || $config['readOnly']) {
01115 return $this->getSingleField_typeNone_render($config, $PA['itemFormElValue']);
01116 }
01117
01118
01119 $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
01120
01121
01122 $origRows = $rows = t3lib_div::intInRange($config['rows'] ? $config['rows'] : 5, 1, 20);
01123 if (strlen($PA['itemFormElValue']) > $this->charsPerRow*2) {
01124 $cols = $this->maxTextareaWidth;
01125 $rows = t3lib_div::intInRange(round(strlen($PA['itemFormElValue'])/$this->charsPerRow), count(explode(chr(10),$PA['itemFormElValue'])), 20);
01126 if ($rows<$origRows) $rows = $origRows;
01127 }
01128
01129
01130 $RTEwasLoaded = 0;
01131 $RTEwouldHaveBeenLoaded = 0;
01132
01133
01134 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01135
01136
01137 $altItem = '<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01138
01139
01140 if ($this->RTEenabled) {
01141 $p = t3lib_BEfunc::getSpecConfParametersFromArray($specConf['rte_transform']['parameters']);
01142 if (isset($specConf['richtext']) && (!$p['flag'] || !$row[$p['flag']])) {
01143 t3lib_BEfunc::fixVersioningPid($table,$row);
01144 list($tscPID,$thePidValue) = $this->getTSCpid($table,$row['uid'],$row['pid']);
01145
01146
01147 if ($thePidValue >= 0) {
01148 $RTEsetup = $GLOBALS['BE_USER']->getTSConfig('RTE',t3lib_BEfunc::getPagesTSconfig($tscPID));
01149 $RTEtypeVal = t3lib_BEfunc::getTCAtypeValue($table,$row);
01150 $thisConfig = t3lib_BEfunc::RTEsetup($RTEsetup['properties'],$table,$field,$RTEtypeVal);
01151
01152 if (!$thisConfig['disabled']) {
01153 if (!$this->disableRTE) {
01154 $this->RTEcounter++;
01155
01156
01157 $eFile = t3lib_parsehtml_proc::evalWriteFile($specConf['static_write'], $row);
01158 $RTErelPath = is_array($eFile) ? dirname($eFile['relEditFile']) : '';
01159
01160
01161 $RTEobj = &t3lib_BEfunc::RTEgetObj();
01162 $item = $RTEobj->drawRTE($this,$table,$field,$row,$PA,$specConf,$thisConfig,$RTEtypeVal,$RTErelPath,$thePidValue);
01163
01164
01165 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf,1);
01166
01167 $RTEwasLoaded = 1;
01168 } else {
01169 $RTEwouldHaveBeenLoaded = 1;
01170 $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!)';
01171 }
01172 } else $this->commentMessages[] = $PA['itemFormElName'].': RTE is disabled by the Page TSconfig, "RTE"-key (eg. by RTE.default.disabled=0 or such)';
01173 } else $this->commentMessages[] = $PA['itemFormElName'].': PID value could NOT be fetched. Rare error, normally with new records.';
01174 } else {
01175 if (!isset($specConf['richtext'])) $this->commentMessages[] = $PA['itemFormElName'].': RTE was not configured for this field in TCA-types';
01176 if (!(!$p['flag'] || !$row[$p['flag']])) $this->commentMessages[] = $PA['itemFormElName'].': Field-flag ('.$PA['flag'].') has been set to disable RTE!';
01177 }
01178 }
01179
01180
01181 if (!$RTEwasLoaded) {
01182 if ($specConf['rte_only']) {
01183 $item = '<p><em>'.htmlspecialchars($this->getLL('l_noRTEfound')).'</em></p>';
01184 } else {
01185 if ($specConf['nowrap']) {
01186 $wrap = 'off';
01187 } else {
01188 $wrap = ($config['wrap'] ? $config['wrap'] : 'virtual');
01189 }
01190
01191 $classes = array();
01192 if ($specConf['fixed-font']) { $classes[] = 'fixed-font'; }
01193 if ($specConf['enable-tab']) { $classes[] = 'enable-tab'; }
01194
01195 $formWidthText = $this->formWidthText($cols,$wrap);
01196
01197
01198 if (preg_match('/ class="(.+?)"/',$formWidthText,$res)) {
01199 $formWidthText = str_replace(' class="'.$res[1].'"','',$formWidthText);
01200 $classes = array_merge($classes, explode(' ',$res[1]));
01201 }
01202
01203 if (count($classes)) {
01204 $class = ' class="'.implode(' ',$classes).'"';
01205 } else $class='';
01206
01207 $iOnChange = implode('',$PA['fieldChangeFunc']);
01208 $item.= '
01209 <textarea name="'.$PA['itemFormElName'].'"'.$formWidthText.$class.' rows="'.$rows.'" wrap="'.$wrap.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].'>'.
01210 t3lib_div::formatForTextarea($PA['itemFormElValue']).
01211 '</textarea>';
01212 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf,$RTEwouldHaveBeenLoaded);
01213 }
01214 }
01215
01216
01217 return $item;
01218 }
01219
01230 function getSingleField_typeCheck($table,$field,$row,&$PA) {
01231 $config = $PA['fieldConf']['config'];
01232
01233 $disabled = '';
01234 if($this->renderReadonly || $config['readOnly']) {
01235 $disabled = ' disabled="disabled"';
01236 }
01237
01238
01239 $selItems = $this->initItemArray($PA['fieldConf']);
01240 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01241
01242 if (!count($selItems)) {
01243 $selItems[]=array('','');
01244 }
01245 $thisValue = intval($PA['itemFormElValue']);
01246
01247 $cols = intval($config['cols']);
01248 if ($cols > 1) {
01249 $item.= '<table border="0" cellspacing="0" cellpadding="0" class="typo3-TCEforms-checkboxArray">';
01250 for ($c=0;$c<count($selItems);$c++) {
01251 $p = $selItems[$c];
01252 if(!($c%$cols)) { $item.='<tr>'; }
01253 $cBP = $this->checkBoxParams($PA['itemFormElName'],$thisValue,$c,count($selItems),implode('',$PA['fieldChangeFunc']));
01254 $cBName = $PA['itemFormElName'].'_'.$c;
01255 $cBID = $PA['itemFormElID'].'_'.$c;
01256 $item.= '<td nowrap="nowrap">'.
01257 '<input type="checkbox"'.$this->insertDefStyle('check').' value="1" name="'.$cBName.'"'.$cBP.$disabled.' id="'.$cBID.'" />'.
01258 $this->wrapLabels('<label for="'.$cBID.'">'.htmlspecialchars($p[0]).'</label> ').
01259 '</td>';
01260 if(($c%$cols)+1==$cols) {$item.='</tr>';}
01261 }
01262 if ($c%$cols) {
01263 $rest=$cols-($c%$cols);
01264 for ($c=0;$c<$rest;$c++) {
01265 $item.= '<td></td>';
01266 }
01267 if ($c>0) { $item.= '</tr>'; }
01268 }
01269 $item.= '</table>';
01270 } else {
01271 for ($c=0;$c<count($selItems);$c++) {
01272 $p = $selItems[$c];
01273 $cBP = $this->checkBoxParams($PA['itemFormElName'],$thisValue,$c,count($selItems),implode('',$PA['fieldChangeFunc']));
01274 $cBName = $PA['itemFormElName'].'_'.$c;
01275 $cBID = $PA['itemFormElID'].'_'.$c;
01276 $item.= ($c>0?'<br />':'').
01277 '<input type="checkbox"'.$this->insertDefStyle('check').' value="1" name="'.$cBName.'"'.$cBP.$PA['onFocus'].$disabled.' id="'.$cBID.'" />'.
01278 htmlspecialchars($p[0]);
01279 }
01280 }
01281 if (!$disabled) {
01282 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($thisValue).'" />';
01283 }
01284
01285 return $item;
01286 }
01287
01298 function getSingleField_typeRadio($table,$field,$row,&$PA) {
01299 $config = $PA['fieldConf']['config'];
01300
01301 $disabled = '';
01302 if($this->renderReadonly || $config['readOnly']) {
01303 $disabled = ' disabled="disabled"';
01304 }
01305
01306
01307 $selItems = $this->initItemArray($PA['fieldConf']);
01308 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01309
01310
01311 for ($c=0;$c<count($selItems);$c++) {
01312 $p = $selItems[$c];
01313 $rID = $PA['itemFormElID'].'_'.$c;
01314 $rOnClick = implode('',$PA['fieldChangeFunc']);
01315 $rChecked = (!strcmp($p[1],$PA['itemFormElValue'])?' checked="checked"':'');
01316 $item.= '<input type="radio"'.$this->insertDefStyle('radio').' name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($p[1]).'" onclick="'.htmlspecialchars($rOnClick).'"'.$rChecked.$PA['onFocus'].$disabled.' id="'.$rID.'" />
01317 <label for="'.$rID.'">'.htmlspecialchars($p[0]).'</label>
01318 <br />';
01319 }
01320
01321 return $item;
01322 }
01323
01334 function getSingleField_typeSelect($table,$field,$row,&$PA) {
01335 global $TCA;
01336
01337
01338 $config = $PA['fieldConf']['config'];
01339
01340 $disabled = '';
01341 if($this->renderReadonly || $config['readOnly']) {
01342 $disabled = ' disabled="disabled"';
01343 }
01344
01345
01346 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01347
01348
01349 $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($PA['fieldConf']),$PA['fieldConf'],$this->setTSconfig($table,$row),$field);
01350 $selItems = $this->addItems($selItems,$PA['fieldTSConfig']['addItems.']);
01351 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01352
01353
01354 $removeItems = t3lib_div::trimExplode(',',$PA['fieldTSConfig']['removeItems'],1);
01355 foreach($selItems as $tk => $p) {
01356
01357
01358 $languageDeny = $TCA[$table]['ctrl']['languageField'] && !strcmp($TCA[$table]['ctrl']['languageField'], $field) && !$GLOBALS['BE_USER']->checkLanguageAccess($p[1]);
01359 $authModeDeny = $config['form_type']=='select' && $config['authMode'] && !$GLOBALS['BE_USER']->checkAuthMode($table,$field,$p[1],$config['authMode']);
01360 if (in_array($p[1],$removeItems) || $languageDeny || $authModeDeny) {
01361 unset($selItems[$tk]);
01362 } elseif (isset($PA['fieldTSConfig']['altLabels.'][$p[1]])) {
01363 $selItems[$tk][0]=$this->sL($PA['fieldTSConfig']['altLabels.'][$p[1]]);
01364 }
01365
01366
01367 if ($table.'.'.$field == 'pages.doktype') {
01368 if (!($GLOBALS['BE_USER']->isAdmin() || t3lib_div::inList($GLOBALS['BE_USER']->groupData['pagetypes_select'],$p[1]))) {
01369 unset($selItems[$tk]);
01370 }
01371 }
01372 }
01373
01374
01375 $nMV_label = isset($PA['fieldTSConfig']['noMatchingValue_label']) ? $this->sL($PA['fieldTSConfig']['noMatchingValue_label']) : '[ '.$this->getLL('l_noMatchingValue').' ]';
01376
01377
01378 $maxitems = intval($config['maxitems']);
01379
01380
01381 if ($maxitems<=1) {
01382 $item = $this->getSingleField_typeSelect_single($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01383 } elseif (!strcmp($config['renderMode'],'checkbox')) {
01384 $item = $this->getSingleField_typeSelect_checkbox($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01385 } elseif (!strcmp($config['renderMode'],'singlebox')) {
01386 $item = $this->getSingleField_typeSelect_singlebox($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01387 } else {
01388 $item = $this->getSingleField_typeSelect_multiple($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01389 }
01390
01391
01392 if (!$disabled) {
01393 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01394 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
01395 }
01396
01397 return $item;
01398 }
01399
01414 function getSingleField_typeSelect_single($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01415
01416 $inlineParent = $this->inline->getStructureLevel(-1);
01417 if(is_array($inlineParent) && $inlineParent['uid']) {
01418 if ($inlineParent['config']['foreign_table'] == $table && $inlineParent['config']['foreign_unique'] == $field) {
01419 $uniqueIds = $this->inline->inlineData['unique'][$this->inline->inlineNames['object'].'['.$table.']']['used'];
01420 $PA['fieldChangeFunc']['inlineUnique'] = "inline.updateUnique(this,'".$this->inline->inlineNames['object'].'['.$table."]','".$this->inline->inlineNames['form']."','".$row['uid']."');";
01421 }
01422
01423 if ($inlineParent['config']['foreign_table'] == $table && ($inlineParent['config']['foreign_field'] == $field || $inlineParent['config']['symmetric_field'] == $field)) {
01424 $uniqueIds[] = $inlineParent['uid'];
01425 }
01426 }
01427
01428
01429 $c = 0;
01430 $sI = 0;
01431 $noMatchingValue = 1;
01432 $opt = array();
01433 $selicons = array();
01434 $onlySelectedIconShown = 0;
01435 $size = intval($config['size']);
01436
01437 $disabled = '';
01438 if($this->renderReadonly || $config['readOnly']) {
01439 $disabled = ' disabled="disabled"';
01440 $onlySelectedIconShown = 1;
01441 }
01442
01443
01444 if ($config['suppress_icons']=='IF_VALUE_FALSE') {
01445 $suppressIcons = !$PA['itemFormElValue'] ? 1 : 0;
01446 } elseif ($config['suppress_icons']=='ONLY_SELECTED') {
01447 $suppressIcons=0;
01448 $onlySelectedIconShown=1;
01449 } elseif ($config['suppress_icons']) {
01450 $suppressIcons = 1;
01451 } else $suppressIcons = 0;
01452
01453
01454 foreach($selItems as $p) {
01455 $sM = (!strcmp($PA['itemFormElValue'],$p[1])?' selected="selected"':'');
01456 if ($sM) {
01457 $sI = $c;
01458 $noMatchingValue = 0;
01459 }
01460
01461
01462 if ($config['iconsInOptionTags']) {
01463 $styleAttrValue = $this->optionTagStyle($p[2]);
01464 }
01465
01466
01467 if (!($p[1] != $PA['itemFormElValue'] && is_array($uniqueIds) && in_array($p[1], $uniqueIds))) {
01468 $opt[]= '<option value="'.htmlspecialchars($p[1]).'"'.
01469 $sM.
01470 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01471 (!strcmp($p[1],'--div--') ? ' class="c-divider"' : '').
01472 '>'.t3lib_div::deHSCentities(htmlspecialchars($p[0])).'</option>';
01473 }
01474
01475
01476 if ($p[2] && !$suppressIcons && (!$onlySelectedIconShown || $sM)) {
01477 list($selIconFile,$selIconInfo)=$this->getIcon($p[2]);
01478 $iOnClick = $this->elName($PA['itemFormElName']).'.selectedIndex='.$c.'; '.implode('',$PA['fieldChangeFunc']).$this->blur().'return false;';
01479 $selicons[]=array(
01480 (!$onlySelectedIconShown ? '<a href="#" onclick="'.htmlspecialchars($iOnClick).'">' : '').
01481 '<img src="'.$selIconFile.'" '.$selIconInfo[3].' vspace="2" border="0" title="'.htmlspecialchars($p[0]).'" alt="'.htmlspecialchars($p[0]).'" />'.
01482 (!$onlySelectedIconShown ? '</a>' : ''),
01483 $c,$sM);
01484 }
01485 $c++;
01486 }
01487
01488
01489 if ($PA['itemFormElValue'] && $noMatchingValue && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01490 $nMV_label = @sprintf($nMV_label, $PA['itemFormElValue']);
01491 $opt[]= '<option value="'.htmlspecialchars($PA['itemFormElValue']).'" selected="selected">'.htmlspecialchars($nMV_label).'</option>';
01492 }
01493
01494
01495 $sOnChange = 'if (this.options[this.selectedIndex].value==\'--div--\') {this.selectedIndex='.$sI.';} '.implode('',$PA['fieldChangeFunc']);
01496 if(!$disabled) {
01497 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_selIconVal" value="'.htmlspecialchars($sI).'" />';
01498 }
01499 $item.= '<select name="'.$PA['itemFormElName'].'"'.
01500 $this->insertDefStyle('select').
01501 ($size?' size="'.$size.'"':'').
01502 ' onchange="'.htmlspecialchars($sOnChange).'"'.
01503 $PA['onFocus'].$disabled.'>';
01504 $item.= implode('',$opt);
01505 $item.= '</select>';
01506
01507
01508 if (count($selicons)) {
01509 $item.='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-selectIcons">';
01510 $selicon_cols = intval($config['selicon_cols']);
01511 if (!$selicon_cols) $selicon_cols=count($selicons);
01512 $sR = ceil(count($selicons)/$selicon_cols);
01513 $selicons = array_pad($selicons,$sR*$selicon_cols,'');
01514 for($sa=0;$sa<$sR;$sa++) {
01515 $item.='<tr>';
01516 for($sb=0;$sb<$selicon_cols;$sb++) {
01517 $sk=($sa*$selicon_cols+$sb);
01518 $imgN = 'selIcon_'.$table.'_'.$row['uid'].'_'.$field.'_'.$selicons[$sk][1];
01519 $imgS = ($selicons[$sk][2]?$this->backPath.'gfx/content_selected.gif':'clear.gif');
01520 $item.='<td><img name="'.htmlspecialchars($imgN).'" src="'.$imgS.'" width="7" height="10" alt="" /></td>';
01521 $item.='<td>'.$selicons[$sk][0].'</td>';
01522 }
01523 $item.='</tr>';
01524 }
01525 $item.='</table>';
01526 }
01527
01528 return $item;
01529 }
01530
01545 function getSingleField_typeSelect_checkbox($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01546
01547
01548 $itemArray = array_flip($this->extractValuesOnlyFromValueLabelList($PA['itemFormElValue']));
01549
01550 $disabled = '';
01551 if($this->renderReadonly || $config['readOnly']) {
01552 $disabled = ' disabled="disabled"';
01553 }
01554
01555
01556 $tRows = array();
01557 $c=0;
01558 if (!$disabled) {
01559 $sOnChange = implode('',$PA['fieldChangeFunc']);
01560 $setAll = array();
01561 foreach($selItems as $p) {
01562
01563 if (!strcmp($p[1],'--div--')) {
01564 if (count($setAll)) {
01565 $tRows[] = '
01566 <tr>
01567 <td colspan="2">'.
01568 '<a href="#" onclick="'.htmlspecialchars(implode('',$setAll).' return false;').'">'.
01569 htmlspecialchars($this->getLL('l_setAllCheckboxes')).
01570 '</a></td>
01571 </tr>';
01572 $setAll = array();
01573 }
01574
01575 $tRows[] = '
01576 <tr class="c-header">
01577 <td colspan="2">'.htmlspecialchars($p[0]).'</td>
01578 </tr>';
01579 } else {
01580
01581 $sM = '';
01582 if (isset($itemArray[$p[1]])) {
01583 $sM = ' checked="checked"';
01584 unset($itemArray[$p[1]]);
01585 }
01586
01587
01588 $selIconFile = '';
01589 if ($p[2]) {
01590 list($selIconFile,$selIconInfo) = $this->getIcon($p[2]);
01591 }
01592
01593
01594 $onClickCell = $this->elName($PA['itemFormElName'].'['.$c.']').'.checked=!'.$this->elName($PA['itemFormElName'].'['.$c.']').'.checked;';
01595 $onClick = 'this.attributes.getNamedItem("class").nodeValue = '.$this->elName($PA['itemFormElName'].'['.$c.']').'.checked ? "c-selectedItem" : "";';
01596 $setAll[] = $this->elName($PA['itemFormElName'].'['.$c.']').'.checked=1;';
01597 $tRows[] = '
01598 <tr class="'.($sM ? 'c-selectedItem' : '').'" onclick="'.htmlspecialchars($onClick).'" style="cursor: pointer;">
01599 <td><input type="checkbox"'.$this->insertDefStyle('check').' name="'.htmlspecialchars($PA['itemFormElName'].'['.$c.']').'" value="'.htmlspecialchars($p[1]).'"'.$sM.' onclick="'.htmlspecialchars($sOnChange).'"'.$PA['onFocus'].' /></td>
01600 <td class="c-labelCell" onclick="'.htmlspecialchars($onClickCell).'">'.
01601 ($selIconFile ? '<img src="'.$selIconFile.'" '.$selIconInfo[3].' vspace="2" border="0" class="absmiddle" style="margin-right: 4px;" alt="" />' : '').
01602 t3lib_div::deHSCentities(htmlspecialchars($p[0])).
01603 (strcmp($p[3],'') ? '<br/><p class="c-descr">'.nl2br(trim(htmlspecialchars($p[3]))).'</p>' : '').
01604 '</td>
01605 </tr>';
01606 $c++;
01607 }
01608 }
01609
01610
01611 if (count($setAll)) {
01612 $tRows[] = '
01613 <tr>
01614 <td colspan="2">'.
01615 '<a href="#" onclick="'.htmlspecialchars(implode('',$setAll).' return false;').'">'.
01616 htmlspecialchars($this->getLL('l_setAllCheckboxes')).
01617 '</a></td>
01618 </tr>';
01619 }
01620 }
01621
01622
01623 if (count($itemArray) && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01624 foreach($itemArray as $theNoMatchValue => $temp) {
01625
01626 array_unshift($tRows,'
01627 <tr class="c-invalidItem">
01628 <td><input type="checkbox"'.$this->insertDefStyle('check').' name="'.htmlspecialchars($PA['itemFormElName'].'['.$c.']').'" value="'.htmlspecialchars($theNoMatchValue).'" checked="checked" onclick="'.htmlspecialchars($sOnChange).'"'.$PA['onFocus'].$disabled.' /></td>
01629 <td class="c-labelCell">'.
01630 t3lib_div::deHSCentities(htmlspecialchars(@sprintf($nMV_label, $theNoMatchValue))).
01631 '</td>
01632 </tr>');
01633 $c++;
01634 }
01635 }
01636
01637
01638 $item.='<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="" />';
01639
01640
01641 $item.= '
01642 <table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-select-checkbox">'.
01643 implode('',$tRows).'
01644 </table>
01645 ';
01646
01647 return $item;
01648 }
01649
01664 function getSingleField_typeSelect_singlebox($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01665
01666
01667 $itemArray = array_flip($this->extractValuesOnlyFromValueLabelList($PA['itemFormElValue']));
01668
01669 $disabled = '';
01670 if($this->renderReadonly || $config['readOnly']) {
01671 $disabled = ' disabled="disabled"';
01672 }
01673
01674
01675 $opt = array();
01676 $restoreCmd = array();
01677 $c = 0;
01678 foreach($selItems as $p) {
01679
01680 $sM = '';
01681 if (isset($itemArray[$p[1]])) {
01682 $sM = ' selected="selected"';
01683 $restoreCmd[] = $this->elName($PA['itemFormElName'].'[]').'.options['.$c.'].selected=1;';
01684 unset($itemArray[$p[1]]);
01685 }
01686
01687
01688 $nonSel = '';
01689 if (!strcmp($p[1],'--div--')) {
01690 $nonSel = ' onclick="this.selected=0;" class="c-divider"';
01691 }
01692
01693
01694 if ($config['iconsInOptionTags']) {
01695 $styleAttrValue = $this->optionTagStyle($p[2]);
01696 }
01697
01698
01699 $opt[] = '<option value="'.htmlspecialchars($p[1]).'"'.
01700 $sM.
01701 $nonSel.
01702 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01703 '>'.t3lib_div::deHSCentities(htmlspecialchars($p[0])).'</option>';
01704 $c++;
01705 }
01706
01707
01708 if (count($itemArray) && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01709 foreach($itemArray as $theNoMatchValue => $temp) {
01710
01711 array_unshift($opt,'<option value="'.htmlspecialchars($theNoMatchValue).'" selected="selected">'.t3lib_div::deHSCentities(htmlspecialchars(@sprintf($nMV_label, $theNoMatchValue))).'</option>');
01712 }
01713 }
01714
01715
01716 $sOnChange = implode('',$PA['fieldChangeFunc']);
01717 $selector_itemListStyle = isset($config['itemListStyle']) ? ' style="'.htmlspecialchars($config['itemListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"';
01718 $size = intval($config['size']);
01719 $size = $config['autoSizeMax'] ? t3lib_div::intInRange(count($selItems)+1,t3lib_div::intInRange($size,1),$config['autoSizeMax']) : $size;
01720 $selectBox = '<select name="'.$PA['itemFormElName'].'[]"'.
01721 $this->insertDefStyle('select').
01722 ($size ? ' size="'.$size.'"' : '').
01723 ' multiple="multiple" onchange="'.htmlspecialchars($sOnChange).'"'.
01724 $PA['onFocus'].
01725 $selector_itemListStyle.
01726 $disabled.'>
01727 '.
01728 implode('
01729 ',$opt).'
01730 </select>';
01731
01732
01733 if (!$disabled) {
01734 $item.='<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="" />';
01735 }
01736
01737
01738 $item.= '
01739 <table border="0" cellspacing="0" cellpadding="0" width="1" class="typo3-TCEforms-select-singlebox">
01740 <tr>
01741 <td>
01742 '.$selectBox.'
01743 <br/>
01744 <em>'.
01745 htmlspecialchars($this->getLL('l_holdDownCTRL')).
01746 '</em>
01747 </td>
01748 <td valign="top">
01749 <a href="#" onclick="'.htmlspecialchars($this->elName($PA['itemFormElName'].'[]').'.selectedIndex=-1;'.implode('',$restoreCmd).' return false;').'">'.
01750 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/history.gif','width="13" height="12"').' title="'.htmlspecialchars($this->getLL('l_revertSelection')).'" alt="" />'.
01751 '</a>
01752 </td>
01753 </tr>
01754 </table>
01755 ';
01756
01757 return $item;
01758 }
01759
01774 function getSingleField_typeSelect_multiple($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01775
01776 $disabled = '';
01777 if($this->renderReadonly || $config['readOnly']) {
01778 $disabled = ' disabled="disabled"';
01779 }
01780
01781
01782 if (!$disabled) {
01783 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'" />';
01784 }
01785
01786
01787 $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01788 if (!$maxitems) $maxitems=100000;
01789 $minitems = t3lib_div::intInRange($config['minitems'],0);
01790
01791
01792 $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01793
01794
01795 $removeItems = t3lib_div::trimExplode(',',$PA['fieldTSConfig']['removeItems'],1);
01796
01797
01798 $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01799 foreach($itemArray as $tk => $tv) {
01800 $tvP = explode('|',$tv,2);
01801 $evalValue = rawurldecode($tvP[0]);
01802 $isRemoved = in_array($evalValue,$removeItems) || ($config['form_type']=='select' && $config['authMode'] && !$GLOBALS['BE_USER']->checkAuthMode($table,$field,$evalValue,$config['authMode']));
01803 if ($isRemoved && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01804 $tvP[1] = rawurlencode(@sprintf($nMV_label, $evalValue));
01805 } elseif (isset($PA['fieldTSConfig']['altLabels.'][$evalValue])) {
01806 $tvP[1] = rawurlencode($this->sL($PA['fieldTSConfig']['altLabels.'][$evalValue]));
01807 }
01808 $itemArray[$tk] = implode('|',$tvP);
01809 }
01810 $itemsToSelect = '';
01811
01812 if(!$disabled) {
01813
01814 $opt = array();
01815 $styleAttrValue = '';
01816 foreach($selItems as $p) {
01817 if ($config['iconsInOptionTags']) {
01818 $styleAttrValue = $this->optionTagStyle($p[2]);
01819 }
01820 $opt[]= '<option value="'.htmlspecialchars($p[1]).'"'.
01821 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01822 '>'.htmlspecialchars($p[0]).'</option>';
01823 }
01824
01825
01826 $selector_itemListStyle = isset($config['itemListStyle']) ? ' style="'.htmlspecialchars($config['itemListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"';
01827 $size = intval($config['size']);
01828 $size = $config['autoSizeMax'] ? t3lib_div::intInRange(count($itemArray)+1,t3lib_div::intInRange($size,1),$config['autoSizeMax']) : $size;
01829 if ($config['exclusiveKeys']) {
01830 $sOnChange = 'setFormValueFromBrowseWin(\''.$PA['itemFormElName'].'\',this.options[this.selectedIndex].value,this.options[this.selectedIndex].text,\''.$config['exclusiveKeys'].'\'); ';
01831 } else {
01832 $sOnChange = 'setFormValueFromBrowseWin(\''.$PA['itemFormElName'].'\',this.options[this.selectedIndex].value,this.options[this.selectedIndex].text); ';
01833 }
01834 $sOnChange .= implode('',$PA['fieldChangeFunc']);
01835 $itemsToSelect = '
01836 <select name="'.$PA['itemFormElName'].'_sel"'.
01837 $this->insertDefStyle('select').
01838 ($size ? ' size="'.$size.'"' : '').
01839 ' onchange="'.htmlspecialchars($sOnChange).'"'.
01840 $PA['onFocus'].
01841 $selector_itemListStyle.'>
01842 '.implode('
01843 ',$opt).'
01844 </select>';
01845 }
01846
01847
01848 $params = array(
01849 'size' => $size,
01850 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01851 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01852 'dontShowMoveIcons' => ($maxitems<=1),
01853 'maxitems' => $maxitems,
01854 'info' => '',
01855 'headers' => array(
01856 'selector' => $this->getLL('l_selected').':<br />',
01857 'items' => $this->getLL('l_items').':<br />'
01858 ),
01859 'noBrowser' => 1,
01860 'thumbnails' => $itemsToSelect,
01861 'readOnly' => $disabled
01862 );
01863 $item.= $this->dbFileIcons($PA['itemFormElName'],'','',$itemArray,'',$params,$PA['onFocus']);
01864
01865 return $item;
01866 }
01867
01878 function getSingleField_typeGroup($table,$field,$row,&$PA) {
01879
01880 $config = $PA['fieldConf']['config'];
01881 $internal_type = $config['internal_type'];
01882 $show_thumbs = $config['show_thumbs'];
01883 $size = intval($config['size']);
01884 $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01885 if (!$maxitems) $maxitems=100000;
01886 $minitems = t3lib_div::intInRange($config['minitems'],0);
01887 $allowed = $config['allowed'];
01888 $disallowed = $config['disallowed'];
01889
01890 $disabled = '';
01891 if($this->renderReadonly || $config['readOnly']) {
01892 $disabled = ' disabled="disabled"';
01893 }
01894
01895 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'"'.$disabled.' />';
01896 $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01897 $info='';
01898
01899
01900 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01901
01902
01903 switch((string)$config['internal_type']) {
01904 case 'file':
01905
01906
01907 $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01908 if (!count($tempFT)) {$info.='*';}
01909 foreach($tempFT as $ext) {
01910 if ($ext) {
01911 $info.=strtoupper($ext).' ';
01912 }
01913 }
01914
01915 $tempFT_dis = t3lib_div::trimExplode(',',$disallowed,1);
01916 if (count($tempFT_dis)) {$info.='<br />';}
01917 foreach($tempFT_dis as $ext) {
01918 if ($ext) {
01919 $info.='-'.strtoupper($ext).' ';
01920 }
01921 }
01922
01923
01924 $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01925
01926
01927 $thumbsnail = '';
01928 if ($show_thumbs) {
01929 $imgs = array();
01930 foreach($itemArray as $imgRead) {
01931 $imgP = explode('|',$imgRead);
01932 $imgPath = rawurldecode($imgP[0]);
01933
01934 $rowCopy = array();
01935 $rowCopy[$field] = $imgPath;
01936
01937
01938 $absFilePath = t3lib_div::getFileAbsFileName($config['uploadfolder'].'/'.$imgPath);
01939
01940 $fI = pathinfo($imgPath);
01941 $fileIcon = t3lib_BEfunc::getFileIcon(strtolower($fI['extension']));
01942 $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="" />';
01943
01944 $imgs[] = '<span class="nobr">'.t3lib_BEfunc::thumbCode($rowCopy,$table,$field,$this->backPath,'thumbs.php',$config['uploadfolder'],0,' align="middle"').
01945 ($absFilePath ? $this->getClickMenu($fileIcon, $absFilePath) : $fileIcon).
01946 $imgPath.
01947 '</span>';
01948 }
01949 $thumbsnail = implode('<br />',$imgs);
01950 }
01951
01952
01953 $params = array(
01954 'size' => $size,
01955 'dontShowMoveIcons' => ($maxitems<=1),
01956 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01957 'maxitems' => $maxitems,
01958 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01959 'info' => $info,
01960 'thumbnails' => $thumbsnail,
01961 'readOnly' => $disabled
01962 );
01963 $item.= $this->dbFileIcons($PA['itemFormElName'],'file',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01964
01965 if(!$disabled) {
01966
01967 if ($this->edit_docModuleUpload) $item.='<input type="file" name="'.$PA['itemFormElName_file'].'"'.$this->formWidth().' size="60" />';
01968 }
01969 break;
01970 case 'db':
01971
01972
01973 $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01974 if (!strcmp(trim($tempFT[0]),'*')) {
01975 $info.='<span class="nobr"> '.
01976 htmlspecialchars($this->getLL('l_allTables')).
01977 '</span><br />';
01978 } else {
01979 while(list(,$theT)=each($tempFT)) {
01980 if ($theT) {
01981 $info.='<span class="nobr"> '.
01982 t3lib_iconWorks::getIconImage($theT,array(),$this->backPath,'align="top"').
01983 htmlspecialchars($this->sL($GLOBALS['TCA'][$theT]['ctrl']['title'])).
01984 '</span><br />';
01985 }
01986 }
01987 }
01988
01989 $perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
01990 $itemArray = array();
01991 $imgs = array();
01992
01993
01994 $temp_itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01995 foreach($temp_itemArray as $dbRead) {
01996 $recordParts = explode('|',$dbRead);
01997 list($this_table,$this_uid) = t3lib_BEfunc::splitTable_Uid($recordParts[0]);
01998 $itemArray[] = array('table'=>$this_table, 'id'=>$this_uid);
01999 if (!$disabled && $show_thumbs) {
02000 $rr = t3lib_BEfunc::getRecordWSOL($this_table,$this_uid);
02001 $imgs[] = '<span class="nobr">'.
02002 $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).
02003 ' '.
02004 t3lib_BEfunc::getRecordTitle($this_table,$rr,TRUE).' <span class="typo3-dimmed"><em>['.$rr['uid'].']</em></span>'.
02005 '</span>';
02006 }
02007 }
02008 $thumbsnail='';
02009 if (!$disabled && $show_thumbs) {
02010 $thumbsnail = implode('<br />',$imgs);
02011 }
02012
02013
02014 $params = array(
02015 'size' => $size,
02016 'dontShowMoveIcons' => ($maxitems<=1),
02017 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
02018 'maxitems' => $maxitems,
02019 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
02020 'info' => $info,
02021 'thumbnails' => $thumbsnail,
02022 'readOnly' => $disabled
02023 );
02024 $item.= $this->dbFileIcons($PA['itemFormElName'],'db',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus'],$table,$field,$row['uid']);
02025
02026 break;
02027 }
02028
02029
02030 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
02031 if (!$disabled) {
02032 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
02033 }
02034
02035 return $item;
02036 }
02037
02048 function getSingleField_typeNone($table,$field,$row,&$PA) {
02049
02050 $config = $PA['fieldConf']['config'];
02051 $itemValue = $PA['itemFormElValue'];
02052
02053 return $this->getSingleField_typeNone_render($config,$itemValue);
02054 }
02055
02064 function getSingleField_typeNone_render($config,$itemValue) {
02065
02066
02067 $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;';
02068
02069 if ($config['format']) {
02070 $itemValue = $this->formatValue($config, $itemValue);
02071 }
02072
02073 $rows = intval($config['rows']);
02074 if ($rows > 1) {
02075 if(!$config['pass_content']) {
02076 $itemValue = nl2br(htmlspecialchars($itemValue));
02077 }
02078
02079 $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
02080 if (!$config['fixedRows']) {
02081 $origRows = $rows = t3lib_div::intInRange($rows, 1, 20);
02082 if (strlen($itemValue)>$this->charsPerRow*2) {
02083 $cols = $this->maxTextareaWidth;
02084 $rows = t3lib_div::intInRange(round(strlen($itemValue)/$this->charsPerRow),count(explode(chr(10),$itemValue)),20);
02085 if ($rows<$origRows) $rows=$origRows;
02086 }
02087 }
02088
02089 if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
02090 $width = ceil($cols*$this->form_rowsToStylewidth);
02091
02092 $height=$rows*12;
02093
02094 $item='
02095 <div style="'.htmlspecialchars($divStyle.' overflow:auto; height:'.$height.'px; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'">'.
02096 $itemValue.
02097 '</div>';
02098 } else {
02099 if(!$config['pass_content']) {
02100 $itemValue = htmlspecialchars($itemValue);
02101 }
02102
02103 $cols = $config['cols']?$config['cols']:($config['size']?$config['size']:$this->maxInputWidth);
02104 if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
02105 $width = ceil($cols*$this->form_rowsToStylewidth);
02106
02107
02108 $item = '
02109 <div style="'.htmlspecialchars($divStyle.' overflow:hidden; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'" title="'.$itemValue.'">'.
02110 '<span class="nobr">'.(strcmp($itemValue,'')?$itemValue:' ').'</span>'.
02111 '</div>';
02112 }
02113
02114 return $item;
02115 }
02116
02126 function getSingleField_typeFlex($table,$field,$row,&$PA) {
02127
02128
02129 $dataStructArray = t3lib_BEfunc::getFlexFormDS($PA['fieldConf']['config'],$row,$table);
02130
02131
02132 if (is_array($dataStructArray)) {
02133
02134
02135 $xmlData = $PA['itemFormElValue'];
02136 $xmlHeaderAttributes = t3lib_div::xmlGetHeaderAttribs($xmlData);
02137 $storeInCharset = strtolower($xmlHeaderAttributes['encoding']);
02138 if ($storeInCharset) {
02139 $currentCharset=$GLOBALS['LANG']->charSet;
02140 $xmlData = $GLOBALS['LANG']->csConvObj->conv($xmlData,$storeInCharset,$currentCharset,1);
02141 }
02142 $editData=t3lib_div::xml2array($xmlData);
02143 if (!is_array($editData)) {
02144 $editData=array();
02145 } elseif (!isset($editData['meta']) || !is_array($editData['meta'])) {
02146 $editData['meta'] = array();
02147 }
02148
02149
02150 $sheet = $editData['meta']['currentSheetId'] ? $editData['meta']['currentSheetId'] : 'sDEF';
02151
02152
02153
02154
02155
02156
02157
02158 $langChildren = $dataStructArray['meta']['langChildren'] ? 1 : 0;
02159 $langDisabled = $dataStructArray['meta']['langDisable'] ? 1 : 0;
02160
02161 $editData['meta']['currentLangId']=array();
02162 $languages = $this->getAvailableLanguages();
02163
02164 foreach($languages as $lInfo) {
02165 if ($GLOBALS['BE_USER']->checkLanguageAccess($lInfo['uid'])) {
02166 $editData['meta']['currentLangId'][] = $lInfo['ISOcode'];
02167 }
02168 }
02169 if (!is_array($editData['meta']['currentLangId']) || !count($editData['meta']['currentLangId'])) {
02170 $editData['meta']['currentLangId']=array('DEF');
02171 }
02172
02173 $editData['meta']['currentLangId'] = array_unique($editData['meta']['currentLangId']);
02174
02175
02176
02177
02178
02179
02180 $PA['_noEditDEF'] = FALSE;
02181 if ($langChildren || $langDisabled) {
02182 $rotateLang = array('DEF');
02183 } else {
02184 if (!in_array('DEF',$editData['meta']['currentLangId'])) {
02185 array_unshift($editData['meta']['currentLangId'],'DEF');
02186 $PA['_noEditDEF'] = TRUE;
02187 }
02188 $rotateLang = $editData['meta']['currentLangId'];
02189 }
02190
02191
02192 if (is_array($dataStructArray['sheets'])) {
02193 $tabsToTraverse = array_keys($dataStructArray['sheets']);
02194 } else {
02195 $tabsToTraverse = array($sheet);
02196 }
02197
02198 foreach ($rotateLang as $lKey) {
02199 if (!$langChildren && !$langDisabled) {
02200 $item.= '<b>'.$this->getLanguageIcon($table,$row,'v'.$lKey).$lKey.':</b>';
02201 }
02202
02203 $tabParts = array();
02204 foreach ($tabsToTraverse as $sheet) {
02205 $sheetCfg = $dataStructArray['sheets'][$sheet];
02206 list ($dataStruct, $sheet) = t3lib_div::resolveSheetDefInDS($dataStructArray,$sheet);
02207
02208
02209 if (is_array($dataStruct['ROOT']) && is_array($dataStruct['ROOT']['el'])) {
02210 $cmdData = t3lib_div::_GP('flexFormsCmdData');
02211 $lang = 'l'.$lKey;
02212 $PA['_valLang'] = $langChildren && !$langDisabled ? $editData['meta']['currentLangId'] : 'DEF';
02213 $PA['_lang'] = $lang;
02214
02215
02216 $tRows = $this->getSingleField_typeFlex_draw(
02217 $dataStruct['ROOT']['el'],
02218 $editData['data'][$sheet][$lang],
02219 $cmdData['data'][$sheet][$lang],
02220 $table,
02221 $field,
02222 $row,
02223 $PA,
02224 '[data]['.$sheet.']['.$lang.']'
02225 );
02226 $sheetContent= '<table border="0" cellpadding="1" cellspacing="1" class="typo3-TCEforms-flexForm">'.implode('',$tRows).'</table>';
02227
02228 # $item = '<div style=" position:absolute;">'.$item.'</div>';
02229
02230 } else $sheetContent='Data Structure ERROR: No ROOT element found for sheet "'.$sheet.'".';
02231
02232
02233 $tabParts[] = array(
02234 'label' => ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sheet),
02235 'description' => ($sheetCfg['ROOT']['TCEforms']['sheetDescription'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetDescription']) : ''),
02236 'linkTitle' => ($sheetCfg['ROOT']['TCEforms']['sheetShortDescr'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetShortDescr']) : ''),
02237 'content' => $sheetContent
02238 );
02239 }
02240
02241 if (is_array($dataStructArray['sheets'])) {
02242 $item.= $this->getDynTabMenu($tabParts,'TCEFORMS:flexform:'.$PA['itemFormElName'].$PA['_lang']);
02243 } else {
02244 $item.= $sheetContent;
02245 }
02246 }
02247 } else $item='Data Structure ERROR: '.$dataStructArray;
02248
02249 return $item;
02250 }
02251
02261 function getSingleField_typeFlex_langMenu($languages,$elName,$selectedLanguage,$multi=1) {
02262 $opt=array();
02263 foreach($languages as $lArr) {
02264 $opt[]='<option value="'.htmlspecialchars($lArr['ISOcode']).'"'.(in_array($lArr['ISOcode'],$selectedLanguage)?' selected="selected"':'').'>'.htmlspecialchars($lArr['title']).'</option>';
02265 }
02266
02267 $output = '<select name="'.$elName.'[]"'.($multi ? ' multiple="multiple" size="'.count($languages).'"' : '').'>'.implode('',$opt).'</select>';
02268
02269 return $output;
02270 }
02271
02280 function getSingleField_typeFlex_sheetMenu($sArr,$elName,$sheetKey) {
02281
02282 $tCells =array();
02283 $pct = round(100/count($sArr));
02284 foreach($sArr as $sKey => $sheetCfg) {
02285 if ($GLOBALS['BE_USER']->jsConfirmation(1)) {
02286 $onClick = 'if (confirm(TBE_EDITOR.labels.onChangeAlert) && TBE_EDITOR.checkSubmit(-1)){'.$this->elName($elName).".value='".$sKey."'; TBE_EDITOR.submitForm()};";
02287 } else {
02288 $onClick = 'if(TBE_EDITOR.checkSubmit(-1)){ '.$this->elName($elName).".value='".$sKey."'; TBE_EDITOR.submitForm();}";
02289 }
02290
02291
02292 $tCells[]='<td width="'.$pct.'%" style="'.($sKey==$sheetKey ? 'background-color: #9999cc; font-weight: bold;' : 'background-color: #aaaaaa;').' cursor: hand;" onclick="'.htmlspecialchars($onClick).'" align="center">'.
02293 ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sKey).
02294 '</td>';
02295 }
02296
02297 return '<table border="0" cellpadding="0" cellspacing="2" class="typo3-TCEforms-flexForm-sheetMenu"><tr>'.implode('',$tCells).'</tr></table>';
02298 }
02299
02315 function getSingleField_typeFlex_draw($dataStruct,$editData,$cmdData,$table,$field,$row,&$PA,$formPrefix='',$level=0,$tRows=array()) {
02316
02317
02318 if (is_array($dataStruct)) {
02319 foreach($dataStruct as $key => $value) {
02320 if (is_array($value)) {
02321
02322
02323
02324
02325 $rowCells=array();
02326
02327
02328 $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>';;
02329
02330 $rowCells['formEl']='';
02331 if ($value['type']=='array') {
02332 if ($value['section']) {
02333
02334 if (is_array($value['el'])) {
02335 $opt=array();
02336 $opt[]='<option value=""></option>';
02337 foreach($value['el'] as $kk => $vv) {
02338 $opt[]='<option value="'.$kk.'">'.htmlspecialchars($this->getLL('l_new') . ' "'.$this->sL($value['el'][$kk]['tx_templavoila']['title']).'"').'</option>';
02339 }
02340 $rowCells['formEl']='<select name="flexFormsCmdData'.$formPrefix.'['.$key.'][value]">'.implode('',$opt).'</select>';
02341 }
02342
02343
02344 $tRows[]='<tr class="bgColor2">
02345 <td nowrap="nowrap" valign="top">'.$rowCells['title'].'</td>
02346 <td>'.$rowCells['formEl'].'</td>
02347 </tr>';
02348
02349 $cc=0;
02350 if (is_array($editData[$key]['el'])) {
02351 foreach ($editData[$key]['el'] as $k3 => $v3) {
02352 $cc=$k3;
02353 $theType = key($v3);
02354 $theDat = $v3[$theType];
02355 $newSectionEl = $value['el'][$theType];
02356 if (is_array($newSectionEl)) {
02357 $tRows = $this->getSingleField_typeFlex_draw(
02358 array($theType => $newSectionEl),
02359 array($theType => $theDat),
02360 $cmdData[$key]['el'][$cc],
02361 $table,
02362 $field,
02363 $row,
02364 $PA,
02365 $formPrefix.'['.$key.'][el]['.$cc.']',
02366 $level+1,
02367 $tRows
02368 );
02369 }
02370 }
02371 }
02372
02373
02374
02375
02376 if ($cmdData[$key]['value']) {
02377 $newSectionEl = $value['el'][$cmdData[$key]['value']];
02378 if (is_array($newSectionEl)) {
02379 $tRows = $this->getSingleField_typeFlex_draw(
02380 array($cmdData[$key]['value'] => $newSectionEl),
02381 array(),
02382 array(),
02383 $table,
02384 $field,
02385 $row,
02386 $PA,
02387 $formPrefix.'['.$key.'][el]['.($cc+1).']',
02388 $level+1,
02389 $tRows
02390 );
02391 }
02392 }
02393 } else {
02394 $idTagPrefix = uniqid('id',true);
02395
02396
02397 $tRows[]='<tr class="bgColor2">
02398 <td nowrap="nowrap" valign="top">'.
02399 '<input name="_DELETE_FLEX_FORM'.$PA['itemFormElName'].$formPrefix.'" id="'.$idTagPrefix.'-del" type="checkbox"'.$this->insertDefStyle('check').' value="1" /><label for="'.$idTagPrefix.'-del"><img src="'.$this->backPath.'gfx/garbage.gif" border="0" alt="" /></label>'.
02400 '<input name="_MOVEUP_FLEX_FORM'.$PA['itemFormElName'].$formPrefix.'" id="'.$idTagPrefix.'-mvup" type="checkbox"'.$this->insertDefStyle('check').' value="1" /><label for="'.$idTagPrefix.'-mvup"><img src="'.$this->backPath.'gfx/button_up.gif" border="0" alt="" /></label>'.
02401 '<input name="_MOVEDOWN_FLEX_FORM'.$PA['itemFormElName'].$formPrefix.'" id="'.$idTagPrefix.'-mvdown" type="checkbox"'.$this->insertDefStyle('check').' value="1" /><label for="'.$idTagPrefix.'-mvdown"><img src="'.$this->backPath.'gfx/button_down.gif" border="0" alt="" /></label>'.
02402 $rowCells['title'].'</td>
02403 <td>'.$rowCells['formEl'].'</td>
02404 </tr>';
02405
02406 $tRows = $this->getSingleField_typeFlex_draw(
02407 $value['el'],
02408 $editData[$key]['el'],
02409 $cmdData[$key]['el'],
02410 $table,
02411 $field,
02412 $row,
02413 $PA,
02414 $formPrefix.'['.$key.'][el]',
02415 $level+1,
02416 $tRows
02417 );
02418 }
02419
02420 } elseif (is_array($value['TCEforms']['config'])) {
02421
02422 if (is_array($PA['_valLang'])) {
02423 $rotateLang = $PA['_valLang'];
02424 } else {
02425 $rotateLang = array($PA['_valLang']);
02426 }
02427
02428 foreach($rotateLang as $vDEFkey) {
02429 $vDEFkey = 'v'.$vDEFkey;
02430
02431 if (!$value['TCEforms']['displayCond'] || $this->isDisplayCondition($value['TCEforms']['displayCond'],$editData,$vDEFkey)) {
02432 $fakePA=array();
02433 $fakePA['fieldConf']=array(
02434 'label' => $this->sL(trim($value['TCEforms']['label'])),
02435 'config' => $value['TCEforms']['config'],
02436 'defaultExtras' => $value['TCEforms']['defaultExtras'],
02437 'onChange' => $value['TCEforms']['onChange']
02438 );
02439 if ($PA['_noEditDEF'] && $PA['_lang']==='lDEF') {
02440 $fakePA['fieldConf']['config'] = array(
02441 'type' => 'none',
02442 'rows' => 2
02443 );
02444 }
02445
02446 if (
02447 $fakePA['fieldConf']['onChange'] == 'reload' ||
02448 ($GLOBALS['TCA'][$table]['ctrl']['type'] && !strcmp($key,$GLOBALS['TCA'][$table]['ctrl']['type'])) ||
02449 ($GLOBALS['TCA'][$table]['ctrl']['requestUpdate'] && t3lib_div::inList($GLOBALS['TCA'][$table]['ctrl']['requestUpdate'],$key))) {
02450 if ($GLOBALS['BE_USER']->jsConfirmation(1)) {
02451 $alertMsgOnChange = 'if (confirm(TBE_EDITOR.labels.onChangeAlert) && TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm() };';
02452 } else {
02453 $alertMsgOnChange = 'if(TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm();}';
02454 }
02455 } else {
02456 $alertMsgOnChange = '';
02457 }
02458
02459 $fakePA['fieldChangeFunc']=$PA['fieldChangeFunc'];
02460 if (strlen($alertMsgOnChange)) {
02461 $fakePA['fieldChangeFunc']['alert']=$alertMsgOnChange;
02462 }
02463 $fakePA['onFocus']=$PA['onFocus'];
02464 $fakePA['label']=$PA['label'];
02465
02466 $fakePA['itemFormElName']=$PA['itemFormElName'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02467 $fakePA['itemFormElName_file']=$PA['itemFormElName_file'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02468
02469 if(isset($editData[$key][$vDEFkey])) {
02470 $fakePA['itemFormElValue']=$editData[$key][$vDEFkey];
02471 } else {
02472 $fakePA['itemFormElValue']=$fakePA['fieldConf']['config']['default'];
02473 }
02474
02475 $rowCells['formEl']= $this->getSingleField_SW($table,$field,$row,$fakePA);
02476 $rowCells['title']= htmlspecialchars($fakePA['fieldConf']['label']);
02477
02478 if (!in_array('DEF',$rotateLang)) {
02479 $defInfo = '<div class="typo3-TCEforms-originalLanguageValue">'.$this->getLanguageIcon($table,$row,0).$this->previewFieldValue($editData[$key]['vDEF'], $fakePA['fieldConf']).' </div>';
02480 } else {
02481 $defInfo = '';
02482 }
02483
02484 if (!$PA['_noEditDEF']) {
02485 $prLang = $this->getAdditionalPreviewLanguages();
02486 foreach($prLang as $prL) {
02487 $defInfo.= '<div class="typo3-TCEforms-originalLanguageValue">'.$this->getLanguageIcon($table,$row,'v'.$prL['ISOcode']).$this->previewFieldValue($editData[$key]['v'.$prL['ISOcode']], $fakePA['fieldConf']).' </div>';
02488 }
02489 }
02490
02491
02492 $tRows[]='<tr>
02493 <td nowrap="nowrap" valign="top" class="bgColor5">'.($vDEFkey=='vDEF' ? '' : $this->getLanguageIcon($table,$row,$vDEFkey)).$rowCells['title'].'</td>
02494 <td class="bgColor4">'.$rowCells['formEl'].$defInfo.'</td>
02495 </tr>';
02496 }
02497 }
02498 }
02499 }
02500 }
02501 }
02502
02503 return $tRows;
02504 }
02505
02515 function getSingleField_typeUnknown($table,$field,$row,&$PA) {
02516 $item='Unknown type: '.$PA['fieldConf']['config']['form_type'].'<br />';
02517
02518 return $item;
02519 }
02520
02530 function getSingleField_typeUser($table,$field,$row,&$PA) {
02531 $PA['table']=$table;
02532 $PA['field']=$field;
02533 $PA['row']=$row;
02534
02535 $PA['pObj']=&$this;
02536
02537 return t3lib_div::callUserFunction($PA['fieldConf']['config']['userFunc'],$PA,$this);
02538 }
02539
02540
02541
02542
02543
02544
02545
02546
02547
02548
02549
02550
02559 function formatValue ($config, $itemValue) {
02560 $format = trim($config['format']);
02561 switch($format) {
02562 case 'date':
02563 if ($itemValue) {
02564 $option = trim($config['format.']['option']);
02565 if ($option) {
02566 if ($config['format.']['strftime']) {
02567 $value = strftime($option,$itemValue);
02568 } else {
02569 $value = date($option,$itemValue);
02570 }
02571 } else {
02572 $value = date('d-m-Y',$itemValue);
02573 }
02574 } else {
02575 $value = '';
02576 }
02577 if ($config['format.']['appendAge']) {
02578 $value .= ' ('.t3lib_BEfunc::calcAge((time()-$itemValue), $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')).')';
02579 }
02580 $itemValue = $value;
02581 break;
02582 case 'datetime':
02583 $itemValue = date('H:i d-m-Y',$itemValue);
02584 break;
02585 case 'time':
02586 $itemValue = date('H:i',$itemValue);
02587 break;
02588 case 'timesec':
02589 $itemValue = date('H:i:s',$itemValue);
02590 break;
02591 case 'year':
02592 $itemValue = date('Y',$itemValue);
02593 break;
02594 case 'int':
02595 $baseArr = array('dec'=>'d','hex'=>'x','HEX'=>'X','oct'=>'o','bin'=>'b');
02596 $base = trim($config['format.']['base']);
02597 $format = $baseArr[$base] ? $baseArr[$base] : 'd';
02598 $itemValue = sprintf('%'.$format,$itemValue);
02599 break;
02600 case 'float':
02601 $precision = t3lib_div::intInRange($config['format.']['precision'],1,10,2);
02602 $itemValue = sprintf('%.'.$precision.'f',$itemValue);
02603 break;
02604 case 'number':
02605 $format = trim($config['format.']['option']);
02606 $itemValue = sprintf('%'.$format,$itemValue);
02607 break;
02608 case 'md5':
02609 $itemValue = md5($itemValue);
02610 break;
02611 case 'filesize':
02612 $value = t3lib_div::formatSize(intval($itemValue));
02613 if ($config['format.']['appendByteSize']) {
02614 $value .= ' ('.$itemValue.')';
02615 }
02616 $itemValue = $value;
02617 break;
02618 case 'user':
02619 $func = trim($config['format.']['userFunc']);
02620 if ($func) {
02621 $params = array(
02622 'value' => $itemValue,
02623 'args' => $config['format.']['userFunc'],
02624 'config' => $config,
02625 'pObj' => &$this
02626 );
02627 $itemValue = t3lib_div::callUserFunction($func,$params,$this);
02628 }
02629 break;
02630 default:
02631 break;
02632 }
02633
02634 return $itemValue;
02635 }
02636
02637
02638
02639
02640
02641
02642
02643
02644
02645
02646
02647
02655 function getRTypeNum($table,$row) {
02656 global $TCA;
02657
02658 if ($TCA[$table]['ctrl']['type']) {
02659 $typeFieldName = $TCA[$table]['ctrl']['type'];
02660 $typeNum=$row[$typeFieldName];
02661 if (!strcmp($typeNum,'')) $typeNum=0;
02662 } else {
02663 $typeNum = 0;
02664 }
02665
02666 $typeNum = (string)$typeNum;
02667 if (!$TCA[$table]['types'][$typeNum]) {
02668 $typeNum = 1;
02669 }
02670
02671 return $typeNum;
02672 }
02673
02681 function rearrange($fields) {
02682 $fO = array_flip(t3lib_div::trimExplode(',',$this->fieldOrder,1));
02683 reset($fields);
02684 $newFields=array();
02685 while(list($cc,$content)=each($fields)) {
02686 $cP = t3lib_div::trimExplode(';',$content);
02687 if (isset($fO[$cP[0]])) {
02688 $newFields[$fO[$cP[0]]] = $content;
02689 unset($fields[$cc]);
02690 }
02691 }
02692 ksort($newFields);
02693 $fields=array_merge($newFields,$fields);
02694 return $fields;
02695 }
02696
02707 function getExcludeElements($table,$row,$typeNum) {
02708 global $TCA;
02709
02710
02711 $excludeElements=array();
02712
02713
02714 if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02715 $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02716 if (trim($TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]])) {
02717 $excludeElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]],1);
02718 }
02719 }
02720
02721
02722 if ($TCA[$table]['types'][$typeNum]['bitmask_value_field']) {
02723 $sTfield = $TCA[$table]['types'][$typeNum]['bitmask_value_field'];
02724 $sTValue = t3lib_div::intInRange($row[$sTfield],0);
02725 if (is_array($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02726 reset($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits']);
02727 while(list($bitKey,$eList)=each($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02728 $bit=substr($bitKey,1);
02729 if (t3lib_div::testInt($bit)) {
02730 $bit = t3lib_div::intInRange($bit,0,30);
02731 if (
02732 (substr($bitKey,0,1)=='-' && !($sTValue&pow(2,$bit))) ||
02733 (substr($bitKey,0,1)=='+' && ($sTValue&pow(2,$bit)))
02734 ) {
02735 $excludeElements = array_merge($excludeElements,t3lib_div::trimExplode(',',$eList,1));
02736 }
02737 }
02738 }
02739 }
02740 }
02741
02742
02743 return $excludeElements;
02744 }
02745
02755 function getFieldsToAdd($table,$row,$typeNum) {
02756 global $TCA;
02757
02758
02759 $addElements=array();
02760
02761
02762 if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02763 $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02764 if (trim($TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]])) {
02765 $addElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]],1);
02766 }
02767 }
02768
02769 return array($addElements,$sTfield);
02770 }
02771
02780 function mergeFieldsWithAddedFields($fields,$fieldsToAdd) {
02781 if (count($fieldsToAdd[0])) {
02782 reset($fields);
02783 $c=0;
02784 while(list(,$fieldInfo)=each($fields)) {
02785 $parts = explode(';',$fieldInfo);
02786 if (!strcmp(trim($parts[0]),$fieldsToAdd[1])) {
02787 array_splice(
02788 $fields,
02789 $c+1,
02790 0,
02791 $fieldsToAdd[0]
02792 );
02793 break;
02794 }
02795 $c++;
02796 }
02797 }
02798 return $fields;
02799 }
02800
02801
02812 function setTSconfig($table,$row,$field='') {
02813 $mainKey = $table.':'.$row['uid'];
02814 if (!isset($this->cachedTSconfig[$mainKey])) {
02815 $this->cachedTSconfig[$mainKey]=t3lib_BEfunc::getTCEFORM_TSconfig($table,$row);
02816 }
02817 if ($field) {
02818 return $this->cachedTSconfig[$mainKey][$field];
02819 } else {
02820 return $this->cachedTSconfig[$mainKey];
02821 }
02822 }
02823
02834 function overrideFieldConf($fieldConfig, $TSconfig) {
02835 if (is_array($TSconfig)) {
02836 $TSconfig = t3lib_div::removeDotsFromTS($TSconfig);
02837 $type = $fieldConfig['type'];
02838 if (is_array($TSconfig['config']) && is_array($this->allowOverrideMatrix[$type])) {
02839
02840 foreach (array_keys($TSconfig['config']) as $key) {
02841 if (!in_array($key, $this->allowOverrideMatrix[$type], true)) {
02842 unset($TSconfig['config'][$key]);
02843 }
02844 }
02845
02846 if (count($TSconfig['config'])) {
02847 $fieldConfig = array_merge($fieldConfig, $TSconfig['config']);
02848 }
02849 }
02850 }
02851
02852 return $fieldConfig;
02853 }
02854
02865 function getSpecConfForField($table,$row,$field) {
02866
02867 $types_fieldConfig = t3lib_BEfunc::getTCAtypes($table,$row);
02868
02869
02870 if (is_array($types_fieldConfig)) {
02871 foreach($types_fieldConfig as $vconf) {
02872
02873 if ($vconf['field']==$field) return $vconf['spec'];
02874 }
02875 }
02876 }
02877
02886 function getSpecConfFromString($extraString, $defaultExtras) {
02887 return t3lib_BEfunc::getSpecConfParts($extraString, $defaultExtras);
02888 }
02889
02890
02891
02892
02893
02894
02895
02896
02897
02898
02899
02900
02901
02902
02903
02904
02914 function registerDefaultLanguageData($table,$rec) {
02915 global $TCA;
02916
02917
02918 if ($TCA[$table]['ctrl']['languageField']
02919 && $rec[$TCA[$table]['ctrl']['languageField']] > 0
02920 && $TCA[$table]['ctrl']['transOrigPointerField']
02921 && intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]) > 0) {
02922
02923 $lookUpTable = $TCA[$table]['ctrl']['transOrigPointerTable'] ? $TCA[$table]['ctrl']['transOrigPointerTable'] : $table;
02924
02925
02926 $this->defaultLanguageData[$table.':'.$rec['uid']] = t3lib_BEfunc::getRecordWSOL($lookUpTable, intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]));
02927
02928
02929 if ($TCA[$table]['ctrl']['transOrigDiffSourceField']) {
02930 $this->defaultLanguageData_diff[$table.':'.$rec['uid']] = unserialize($rec[$TCA[$table]['ctrl']['transOrigDiffSourceField']]);
02931 }
02932
02933
02934 $prLang = $this->getAdditionalPreviewLanguages();
02935 foreach($prLang as $prL) {
02936 $t8Tools = t3lib_div::makeInstance('t3lib_transl8tools');
02937 $tInfo = $t8Tools->translationInfo($lookUpTable,intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]),$prL['uid']);
02938 if (is_array($tInfo['translations'][$prL['uid']])) {
02939 $this->additionalPreviewLanguageData[$table.':'.$rec['uid']][$prL['uid']] = t3lib_BEfunc::getRecordWSOL($lookUpTable, intval($tInfo['translations'][$prL['uid']]['uid']));
02940 }
02941 }
02942 }
02943 }
02944
02956 function getLanguageOverlayRawValue($table, $row, $field, $fieldConf) {
02957 global $TCA;
02958
02959 $value = $row[$field];
02960
02961 if (is_array($this->defaultLanguageData[$table.':'.$row['uid']])) {
02962
02963 if ($fieldConf['l10n_mode']=='exclude'
02964 || ($fieldConf['l10n_mode']=='mergeIfNotBlank' && strcmp(trim($this->defaultLanguageData[$table.':'.$row['uid']][$field]),''))) {
02965 $value = $this->defaultLanguageData[$table.':'.$row['uid']][$field];
02966 }
02967
02968 }
02969
02970 return $value;
02971 }
02972
02984 function renderDefaultLanguageContent($table,$field,$row,$item) {
02985 if (is_array($this->defaultLanguageData[$table.':'.$row['uid']])) {
02986 $dLVal = t3lib_BEfunc::getProcessedValue($table,$field,$this->defaultLanguageData[$table.':'.$row['uid']][$field],0,1);
02987 $fCfg = $GLOBALS['TCA'][$table]['columns'][$field];
02988
02989 if (strcmp($dLVal,'')) {
02990 $item.='<div class="typo3-TCEforms-originalLanguageValue">'.$this->getLanguageIcon($table,$row,0).$this->previewFieldValue($dLVal,$fCfg).' </div>';
02991 }
02992
02993 $prLang = $this->getAdditionalPreviewLanguages();
02994 foreach($prLang as $prL) {
02995 $dlVal = t3lib_BEfunc::getProcessedValue($table,$field,$this->additionalPreviewLanguageData[$table.':'.$row['uid']][$prL['uid']][$field],0,1);
02996 $item.= '<div class="typo3-TCEforms-originalLanguageValue">'.$this->getLanguageIcon($table,$row,'v'.$prL['ISOcode']).$this->previewFieldValue($dlVal, $fCfg).' </div>';
02997 }
02998
02999 }
03000
03001 return $item;
03002 }
03003
03015 function renderDefaultLanguageDiff($table,$field,$row,$item) {
03016 if (is_array($this->defaultLanguageData_diff[$table.':'.$row['uid']])) {
03017
03018
03019 $dLVal = array(
03020 'old' => $this->defaultLanguageData_diff[$table.':'.$row['uid']],
03021 'new' => $this->defaultLanguageData[$table.':'.$row['uid']],
03022 );
03023
03024 if (isset($dLVal['old'][$field])) {
03025 if (strcmp($dLVal['old'][$field],$dLVal['new'][$field])) {
03026
03027
03028 $t3lib_diff_Obj = t3lib_div::makeInstance('t3lib_diff');
03029 $diffres = $t3lib_diff_Obj->makeDiffDisplay(
03030 t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['old'][$field],0,1),
03031 t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['new'][$field],0,1)
03032 );
03033
03034 $item.='<div class="typo3-TCEforms-diffBox">'.
03035 '<div class="typo3-TCEforms-diffBox-header">'.htmlspecialchars($this->getLL('l_changeInOrig')).':</div>'.
03036 $diffres.
03037 '</div>';
03038 }
03039 }
03040 }
03041
03042 return $item;
03043 }
03044
03045
03046
03047
03048
03049
03050
03051
03052
03053
03054
03055
03056
03057
03058
03074 function dbFileIcons($fName,$mode,$allowed,$itemArray,$selector='',$params=array(),$onFocus='',$table='',$field='',$uid='') {
03075
03076
03077 $disabled = '';
03078 if($this->renderReadonly || $params['readOnly']) {
03079 $disabled = ' disabled="disabled"';
03080 }
03081
03082
03083 $this->printNeededJS['dbFileIcons']=1;
03084
03085
03086 $uidList=array();
03087 $opt=array();
03088 $itemArrayC=0;
03089
03090
03091 if (is_array($itemArray)) {
03092 $itemArrayC=count($itemArray);
03093 reset($itemArray);
03094 switch($mode) {
03095 case 'db':
03096 while(list(,$pp)=each($itemArray)) {
03097 $pRec = t3lib_BEfunc::getRecordWSOL($pp['table'],$pp['id']);
03098 if (is_array($pRec)) {
03099 $pTitle = t3lib_BEfunc::getRecordTitle($pp['table'], $pRec, FALSE, TRUE);
03100 $pUid = $pp['table'].'_'.$pp['id'];
03101 $uidList[]=$pUid;
03102 $opt[]='<option value="'.htmlspecialchars($pUid).'">'.htmlspecialchars($pTitle).'</option>';
03103 }
03104 }
03105 break;
03106 case 'file':
03107 while(list(,$pp)=each($itemArray)) {
03108 $pParts = explode('|',$pp);
03109 $uidList[]=$pUid=$pTitle = $pParts[0];
03110 $opt[]='<option value="'.htmlspecialchars(rawurldecode($pParts[0])).'">'.htmlspecialchars(rawurldecode($pParts[0])).'</option>';
03111 }
03112 break;
03113 default:
03114 while(list(,$pp)=each($itemArray)) {
03115 $pParts = explode('|',$pp, 2);
03116 $uidList[]=$pUid=$pParts[0];
03117 $pTitle = $pParts[1];
03118 $opt[]='<option value="'.htmlspecialchars(rawurldecode($pUid)).'">'.htmlspecialchars(rawurldecode($pTitle)).'</option>';
03119 }
03120 break;
03121 }
03122 }
03123
03124
03125 $sSize = $params['autoSizeMax'] ? t3lib_div::intInRange($itemArrayC+1,t3lib_div::intInRange($params['size'],1),$params['autoSizeMax']) : $params['size'];
03126 if (!$selector) {
03127 $selector = '<select size="'.$sSize.'"'.$this->insertDefStyle('group').' multiple="multiple" name="'.$fName.'_list" '.$onFocus.$params['style'].$disabled.'>'.implode('',$opt).'</select>';
03128 }
03129
03130
03131 $icons = array(
03132 'L' => array(),
03133 'R' => array(),
03134 );
03135 if (!$params['readOnly']) {
03136 if (!$params['noBrowser']) {
03137
03138 $inlineParent = $this->inline->getStructureLevel(-1);
03139 if(is_array($inlineParent) && $inlineParent['uid']) {
03140 if ($inlineParent['config']['foreign_table'] == $table && $inlineParent['config']['foreign_unique'] == $field) {
03141 $objectPrefix = $this->inline->inlineNames['object'].'['.$table.']';
03142 $aOnClickInline = $objectPrefix.'|inline.checkUniqueElement|inline.setUniqueElement';
03143 $rOnClickInline = 'inline.revertUnique(\''.$objectPrefix.'\',null,\''.$uid.'\');';
03144 }
03145 }
03146 $aOnClick='setFormValueOpenBrowser(\''.$mode.'\',\''.($fName.'|||'.$allowed.'|'.$aOnClickInline).'\'); return false;';
03147 $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
03148 '<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'))).' />'.
03149 '</a>';
03150 }
03151 if (!$params['dontShowMoveIcons']) {
03152 if ($sSize>=5) {
03153 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Top\'); return false;">'.
03154 '<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')).' />'.
03155 '</a>';
03156 }
03157 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Up\'); return false;">'.
03158 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/up.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_up')).' />'.
03159 '</a>';
03160 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Down\'); return false;">'.
03161 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/down.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_down')).' />'.
03162 '</a>';
03163 if ($sSize>=5) {
03164 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Bottom\'); return false;">'.
03165 '<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')).' />'.
03166 '</a>';
03167 }
03168 }
03169
03170 $clipElements = $this->getClipboardElements($allowed,$mode);
03171 if (count($clipElements)) {
03172 $aOnClick = '';
03173 # $counter = 0;
03174 foreach($clipElements as $elValue) {
03175 if ($mode=='file') {
03176 $itemTitle = 'unescape(\''.rawurlencode(basename($elValue)).'\')';
03177 } else {
03178 list($itemTable,$itemUid) = explode('|', $elValue);
03179 $itemTitle = $GLOBALS['LANG']->JScharCode(t3lib_BEfunc::getRecordTitle($itemTable, t3lib_BEfunc::getRecordWSOL($itemTable,$itemUid)));
03180 $elValue = $itemTable.'_'.$itemUid;
03181 }
03182 $aOnClick.= 'setFormValueFromBrowseWin(\''.$fName.'\',unescape(\''.rawurlencode(str_replace('%20',' ',$elValue)).'\'),'.$itemTitle.');';
03183
03184 # $counter++;
03185 # if ($params['maxitems'] && $counter >= $params['maxitems']) { break; } // Makes sure that no more than the max items are inserted... for convenience.
03186 }
03187 $aOnClick.= 'return false;';
03188 $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
03189 '<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))).' />'.
03190 '</a>';
03191 }
03192 $rOnClick = $rOnClickInline.'setFormValueManipulate(\''.$fName.'\',\'Remove\'); return false';
03193 $icons['L'][]='<a href="#" onclick="'.htmlspecialchars($rOnClick).'">'.
03194 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/group_clear.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_remove_selected')).' />'.
03195 '</a>';
03196 }
03197
03198 $str='<table border="0" cellpadding="0" cellspacing="0" width="1">
03199 '.($params['headers']?'
03200 <tr>
03201 <td>'.$this->wrapLabels($params['headers']['selector']).'</td>
03202 <td></td>
03203 <td></td>
03204 <td></td>
03205 <td>'.($params['thumbnails'] ? $this->wrapLabels($params['headers']['items']) : '').'</td>
03206 </tr>':'').
03207 '
03208 <tr>
03209 <td valign="top">'.
03210 $selector.'<br />'.
03211 $this->wrapLabels($params['info']).
03212 '</td>
03213 <td valign="top">'.
03214 implode('<br />',$icons['L']).'</td>
03215 <td valign="top">'.
03216 implode('<br />',$icons['R']).'</td>
03217 <td><img src="clear.gif" width="5" height="1" alt="" /></td>
03218 <td valign="top">'.
03219 $this->wrapLabels($params['thumbnails']).
03220 '</td>
03221 </tr>
03222 </table>';
03223
03224
03225 $str.='<input type="hidden" name="'.$fName.'" value="'.htmlspecialchars(implode(',',$uidList)).'" />';
03226
03227 return $str;
03228 }
03229
03237 function getClipboardElements($allowed,$mode) {
03238
03239 $output = array();
03240
03241 if (is_object($this->clipObj)) {
03242 switch($mode) {
03243 case 'file':
03244 $elFromTable = $this->clipObj->elFromTable('_FILE');
03245 $allowedExts = t3lib_div::trimExplode(',', $allowed, 1);
03246
03247 if ($allowedExts) {
03248 foreach($elFromTable as $elValue) {
03249 $pI = pathinfo($elValue);
03250 $ext = strtolower($pI['extension']);
03251 if (in_array($ext, $allowedExts)) {
03252 $output[] = $elValue;
03253 }
03254 }
03255 } else {
03256 $output = $elFromTable;
03257 }
03258 break;
03259 case 'db':
03260 $allowedTables = t3lib_div::trimExplode(',', $allowed, 1);
03261 if (!strcmp(trim($allowedTables[0]),'*')) {
03262 $output = $this->clipObj->elFromTable('');
03263 } else {
03264 foreach($allowedTables as $tablename) {
03265 $elFromTable = $this->clipObj->elFromTable($tablename);
03266 $output = array_merge($output,$elFromTable);
03267 }
03268 }
03269 $output = array_keys($output);
03270 break;
03271 }
03272 }
03273
03274 return $output;
03275 }
03276
03286 function getClickMenu($str,$table,$uid='') {
03287 if ($this->enableClickMenu) {
03288 $onClick = $GLOBALS['SOBE']->doc->wrapClickMenuOnIcon($str,$table,$uid,1,'','+copy,info,edit,view', TRUE);
03289 return '<a href="#" onclick="'.htmlspecialchars($onClick).'">'.$str.'</a>';
03290 }
03291 }
03292
03307 function renderWizards($itemKinds,$wizConf,$table,$row,$field,&$PA,$itemName,$specConf,$RTE=0) {
03308
03309
03310 $fieldChangeFunc = $PA['fieldChangeFunc'];
03311 $item = $itemKinds[0];
03312 $outArr = array();
03313 $colorBoxLinks = array();
03314 $fName = '['.$table.']['.$row['uid'].']['.$field.']';
03315 $md5ID = 'ID'.t3lib_div::shortmd5($itemName);
03316 $listFlag = '_list';
03317
03318
03319 if ($PA['fieldConf']['config']['form_type']=='select') {
03320 if ($PA['fieldConf']['config']['maxitems']<=1) {
03321 $listFlag = '';
03322 } elseif ($PA['fieldConf']['config']['renderMode']=='singlebox') {
03323 $itemName.='[]';
03324 $listFlag = '';
03325 }
03326 }
03327
03328
03329 if (is_array($wizConf) && !$this->disableWizards) {
03330 foreach($wizConf as $wid => $wConf) {
03331 if (substr($wid,0,1)!='_'
03332 && (!$wConf['enableByTypeConfig'] || @in_array($wid,$specConf['wizards']['parameters']))
03333 && ($RTE || !$wConf['RTEonly'])
03334 ) {
03335
03336
03337 $iTitle = htmlspecialchars($this->sL($wConf['title']));
03338 if ($wConf['icon']) {
03339 $iDat = $this->getIcon($wConf['icon']);
03340 $icon = '<img src="'.$iDat[0].'" '.$iDat[1][3].' border="0"'.t3lib_BEfunc::titleAltAttrib($iTitle).' />';
03341 } else {
03342 $icon = $iTitle;
03343 }
03344
03345
03346 switch((string)$wConf['type']) {
03347 case 'userFunc':
03348 case 'script':
03349 case 'popup':
03350 case 'colorbox':
03351 if (!$wConf['notNewRecords'] || t3lib_div::testInt($row['uid'])) {
03352
03353
03354 $params = array();
03355 $params['params'] = $wConf['params'];
03356 $params['exampleImg'] = $wConf['exampleImg'];
03357 $params['table'] = $table;
03358 $params['uid'] = $row['uid'];
03359 $params['pid'] = $row['pid'];
03360 $params['field'] = $field;
03361 $params['md5ID'] = $md5ID;
03362 $params['returnUrl'] = $this->thisReturnUrl();
03363
03364
03365 if (!strcmp(substr($wConf['script'],0,4), 'EXT:')) {
03366 $wScript = t3lib_div::getFileAbsFileName($wConf['script']);
03367 if ($wScript) {
03368 $wScript = '../'.substr($wScript,strlen(PATH_site));
03369 } else break;
03370 } else {
03371 $wScript = $wConf['script'];
03372 }
03373 $url = $this->backPath.$wScript.(strstr($wScript,'?') ? '' : '?');
03374
03375
03376 if ((string)$wConf['type']=='colorbox' && !$wConf['script']) { break; }
03377
03378
03379 if ((string)$wConf['type']=='script') {
03380 $aUrl = $url.t3lib_div::implodeArrayForUrl('',array('P'=>$params));
03381 $outArr[]='<a href="'.htmlspecialchars($aUrl).'" onclick="'.$this->blur().'return !TBE_EDITOR.isFormChanged();">'.
03382 $icon.
03383 '</a>';
03384 } else {
03385
03386
03387 $params['formName'] = $this->formName;
03388 $params['itemName'] = $itemName;
03389 $params['fieldChangeFunc'] = $fieldChangeFunc;
03390
03391 switch((string)$wConf['type']) {
03392 case 'popup':
03393 case 'colorbox':
03394
03395 $addJS = $wConf['popup_onlyOpenIfSelected']?'if (!TBE_EDITOR.curSelected(\''.$itemName.$listFlag.'\')){alert('.$GLOBALS['LANG']->JScharCode($this->getLL('m_noSelItemForEdit')).'); return false;}':'';
03396 $curSelectedValues='+\'&P[currentSelectedValues]=\'+TBE_EDITOR.curSelected(\''.$itemName.$listFlag.'\')';
03397 $aOnClick= $this->blur().
03398 $addJS.
03399 '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'].'\');'.
03400 'vHWin.focus();return false;';
03401
03402 $colorBoxLinks = Array('<a href="#" onclick="'.htmlspecialchars($aOnClick).'">','</a>');
03403 if ((string)$wConf['type']=='popup') {
03404 $outArr[] = $colorBoxLinks[0].$icon.$colorBoxLinks[1];
03405 }
03406 break;
03407 case 'userFunc':
03408 $params['item'] = &$item;
03409 $params['icon'] = $icon;
03410 $params['iTitle'] = $iTitle;
03411 $params['wConf'] = $wConf;
03412 $params['row'] = $row;
03413 $outArr[] = t3lib_div::callUserFunction($wConf['userFunc'],$params,$this);
03414 break;
03415 }
03416 }
03417
03418
03419 if (is_array($wConf['hideParent']) || $wConf['hideParent']) {
03420 $item = $itemKinds[1];
03421 if (is_array($wConf['hideParent'])) {
03422 $item.= $this->getSingleField_typeNone_render($wConf['hideParent'], $PA['itemFormElValue']);
03423 }
03424 }
03425 }
03426 break;
03427 case 'select':
03428 $fieldValue = array('config' => $wConf);
03429 $TSconfig = $this->setTSconfig($table, $row);
03430 $TSconfig[$field] = $TSconfig[$field]['wizards.'][$wid.'.'];
03431 $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($fieldValue), $fieldValue, $TSconfig, $field);
03432
03433 $opt = array();
03434 $opt[] = '<option>'.$iTitle.'</option>';
03435 foreach($selItems as $p) {
03436 $opt[] = '<option value="'.htmlspecialchars($p[1]).'">'.htmlspecialchars($p[0]).'</option>';
03437 }
03438 if ($wConf['mode']=='append') {
03439 $assignValue = $this->elName($itemName).'.value=\'\'+this.options[this.selectedIndex].value+'.$this->elName($itemName).'.value';
03440 } elseif ($wConf['mode']=='prepend') {
03441 $assignValue = $this->elName($itemName).'.value+=\'\'+this.options[this.selectedIndex].value';
03442 } else {
03443 $assignValue = $this->elName($itemName).'.value=this.options[this.selectedIndex].value';
03444 }
03445 $sOnChange = $assignValue.';this.selectedIndex=0;'.implode('',$fieldChangeFunc);
03446 $outArr[] = '<select name="_WIZARD'.$fName.'" onchange="'.htmlspecialchars($sOnChange).'">'.implode('',$opt).'</select>';
03447 break;
03448 }
03449
03450
03451 if ((string)$wConf['type']=='colorbox') {
03452 $dim = t3lib_div::intExplode('x',$wConf['dim']);
03453 $dX = t3lib_div::intInRange($dim[0],1,200,20);
03454 $dY = t3lib_div::intInRange($dim[1],1,200,20);
03455 $color = $row[$field] ? ' bgcolor="'.htmlspecialchars($row[$field]).'"' : '';
03456 $outArr[] = '<table border="0" cellpadding="0" cellspacing="0" id="'.$md5ID.'"'.$color.' style="'.htmlspecialchars($wConf['tableStyle']).'">
03457 <tr>
03458 <td>'.
03459 $colorBoxLinks[0].
03460 '<img src="clear.gif" width="'.$dX.'" height="'.$dY.'"'.t3lib_BEfunc::titleAltAttrib(trim($iTitle.' '.$row[$field])).' border="0" />'.
03461 $colorBoxLinks[1].
03462 '</td>
03463 </tr>
03464 </table>';
03465 }
03466 }
03467 }
03468
03469
03470 if (count($outArr)) {
03471 if ($wizConf['_HIDDENFIELD']) $item = $itemKinds[1];
03472
03473 $outStr = '';
03474 $vAlign = $wizConf['_VALIGN'] ? ' valign="'.$wizConf['_VALIGN'].'"' : '';
03475 if (count($outArr)>1 || $wizConf['_PADDING']) {
03476 $dist = intval($wizConf['_DISTANCE']);
03477 if ($wizConf['_VERTICAL']) {
03478 $dist = $dist ? '<tr><td><img src="clear.gif" width="1" height="'.$dist.'" alt="" /></td></tr>' : '';
03479 $outStr = '<tr><td>'.implode('</td></tr>'.$dist.'<tr><td>',$outArr).'</td></tr>';
03480 } else {
03481 $dist = $dist ? '<td><img src="clear.gif" height="1" width="'.$dist.'" alt="" /></td>' : '';
03482 $outStr = '<tr><td'.$vAlign.'>'.implode('</td>'.$dist.'<td'.$vAlign.'>',$outArr).'</td></tr>';
03483 }
03484 $outStr = '<table border="0" cellpadding="'.intval($wizConf['_PADDING']).'" cellspacing="0">'.$outStr.'</table>';
03485 } else {
03486 $outStr = implode('',$outArr);
03487 }
03488
03489 if (!strcmp($wizConf['_POSITION'],'left')) {
03490 $outStr = '<tr><td'.$vAlign.'>'.$outStr.'</td><td'.$vAlign.'>'.$item.'</td></tr>';
03491 } elseif (!strcmp($wizConf['_POSITION'],'top')) {
03492 $outStr = '<tr><td>'.$outStr.'</td></tr><tr><td>'.$item.'</td></tr>';
03493 } elseif (!strcmp($wizConf['_POSITION'],'bottom')) {
03494 $outStr = '<tr><td>'.$item.'</td></tr><tr><td>'.$outStr.'</td></tr>';
03495 } else {
03496 $outStr = '<tr><td'.$vAlign.'>'.$item.'</td><td'.$vAlign.'>'.$outStr.'</td></tr>';
03497 }
03498
03499 $item = '<table border="0" cellpadding="0" cellspacing="0">'.$outStr.'</table>';
03500 }
03501 }
03502 return $item;
03503 }
03504
03511 function getIcon($icon) {
03512 if (substr($icon,0,4)=='EXT:') {
03513 $file = t3lib_div::getFileAbsFileName($icon);
03514 if ($file) {
03515 $file = substr($file,strlen(PATH_site));
03516 $selIconFile = $this->backPath.'../'.$file;
03517 $selIconInfo = @getimagesize(PATH_site.$file);
03518 }
03519 } elseif (substr($icon,0,3)=='../') {
03520 $selIconFile = $this->backPath.t3lib_div::resolveBackPath($icon);
03521 $selIconInfo = @getimagesize(PATH_site.t3lib_div::resolveBackPath(substr($icon,3)));
03522 } elseif (substr($icon,0,4)=='ext/' || substr($icon,0,7)=='sysext/') {
03523 $selIconFile = $this->backPath.$icon;
03524 $selIconInfo = @getimagesize(PATH_typo3.$icon);
03525 } else {
03526 $selIconFile = t3lib_iconWorks::skinImg($this->backPath,'gfx/'.$icon,'',1);
03527 $selIconInfo = @getimagesize(PATH_typo3.$selIconFile);
03528 }
03529 return array($selIconFile,$selIconInfo);
03530 }
03531
03538 function optionTagStyle($iconString) {
03539 if ($iconString) {
03540 list($selIconFile,$selIconInfo) = $this->getIcon($iconString);
03541 $padTop = t3lib_div::intInRange(($selIconInfo[1]-12)/2,0);
03542 $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;';
03543 return $styleAttr;
03544 }
03545 }
03546
03554 function extractValuesOnlyFromValueLabelList($itemFormElValue) {
03555
03556 $itemArray = t3lib_div::trimExplode(',',$itemFormElValue,1);
03557 foreach($itemArray as $tk => $tv) {
03558 $tvP = explode('|',$tv,2);
03559 $tvP[0] = rawurldecode($tvP[0]);
03560
03561 $itemArray[$tk] = $tvP[0];
03562 }
03563 return $itemArray;
03564 }
03565
03576 function wrapOpenPalette($header,$table,$row,$palette,$retFunc=0) {
03577 $fieldL=array();
03578 if (!is_array($this->palFieldArr[$palette])) {$this->palFieldArr[$palette]=array();}
03579 $palFieldN = is_array($this->palFieldArr[$palette]) ? count($this->palFieldArr[$palette]) : 0;
03580 $palJSFunc = 'TBE_EDITOR.palUrl(\''.($table.':'.$row['uid'].':'.$palette).'\',\''.implode(',',$this->palFieldArr[$palette]).'\','.$palFieldN.',\''.$table.'\',\''.$row['uid'].'\',1);';
03581
03582 $aOnClick = $this->blur().substr($palJSFunc,0,-3).'0);return false;';
03583
03584 $iconCode = '<a href="#" onclick="'.htmlspecialchars($aOnClick).'" title="'.htmlspecialchars($table).'">'.
03585 $header.
03586 '</a>';
03587 return $retFunc ? array($iconCode,$palJSFunc) : $iconCode;
03588 }
03589
03600 function checkBoxParams($itemName,$thisValue,$c,$iCount,$addFunc='') {
03601 $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)).');'.
03602 $addFunc;
03603 $str = ' onclick="'.htmlspecialchars($onClick).'"'.
03604 (($thisValue&pow(2,$c))?' checked="checked"':'');
03605 return $str;
03606 }
03607
03614 function elName($itemName) {
03615 return 'document.'.$this->formName."['".$itemName."']";
03616 }
03617
03628 function noTitle($str,$wrapParts=array()) {
03629 return strcmp($str,'') ? $str : $wrapParts[0].'['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title').']'.$wrapParts[1];
03630 }
03631
03637 function blur() {
03638 return $GLOBALS['CLIENT']['FORMSTYLE'] ? 'this.blur();':'';
03639 }
03640
03646 function thisReturnUrl() {
03647 return $this->returnUrl ? $this->returnUrl : t3lib_div::linkThisScript();
03648 }
03649
03659 function getSingleHiddenField($table,$field,$row) {
03660 global $TCA;
03661 $out='';
03662 t3lib_div::loadTCA($table);
03663 if ($TCA[$table]['columns'][$field]) {
03664
03665 $uid=$row['uid'];
03666 $itemName=$this->prependFormFieldNames.'['.$table.']['.$uid.']['.$field.']';
03667 $itemValue=$row[$field];
03668 $item.='<input type="hidden" name="'.$itemName.'" value="'.htmlspecialchars($itemValue).'" />';
03669 $out = $item;
03670 }
03671 return $out;
03672 }
03673
03681 function formWidth($size=48,$textarea=0) {
03682
03683 if ($this->docLarge) $size = round($size*$this->form_largeComp);
03684 $wAttrib = $textarea?'cols':'size';
03685 if (!$GLOBALS['CLIENT']['FORMSTYLE']) {
03686 $retVal = ' '.$wAttrib.'="'.$size.'"';
03687 } else {
03688 $pixels = ceil($size*$this->form_rowsToStylewidth);
03689 $theStyle = 'width:'.$pixels.'px;'.$this->defStyle.$this->formElStyle($textarea?'text':'input');
03690 $retVal = ' style="'.htmlspecialchars($theStyle).'"';
03691
03692 $class = $this->formElClass($textarea?'text':'input');
03693 if ($class) {
03694 $retVal.= ' class="'.htmlspecialchars($class).'"';
03695 }
03696 }
03697 return $retVal;
03698 }
03699
03708 function formWidthText($size=48,$wrap='') {
03709 $wTags = $this->formWidth($size,1);
03710
03711 if (strtolower(trim($wrap))!='off' && $GLOBALS['CLIENT']['BROWSER']=='net' && $GLOBALS['CLIENT']['VERSION']>=5) {
03712 $wTags.= ' cols="'.$size.'"';
03713 }
03714 return $wTags;
03715 }
03716
03724 function formElStyle($type) {
03725 return $this->formElStyleClassValue($type);
03726 }
03727
03735 function formElClass($type) {
03736 return $this->formElStyleClassValue($type, TRUE);
03737 }
03738
03746 function formElStyleClassValue($type, $class=FALSE) {
03747
03748 if (isset($this->fieldStyle[$type])) {
03749 $style = trim($this->fieldStyle[$type]);
03750 } else {
03751 $style = trim($this->fieldStyle['all']);
03752 }
03753
03754
03755 if (substr($style,0,6)=='CLASS:') {
03756 $out = $class ? trim(substr($style,6)) : '';
03757 } else {
03758 $out = !$class ? $style : '';
03759 }
03760
03761 return $out;
03762 }
03763
03770 function insertDefStyle($type) {
03771 $out = '';
03772
03773 $style = trim($this->defStyle.$this->formElStyle($type));
03774 $out.= $style?' style="'.htmlspecialchars($style).'"':'';
03775
03776 $class = $this->formElClass($type);
03777 $out.= $class?' class="'.htmlspecialchars($class).'"':'';
03778
03779 return $out;
03780 }
03781
03789 function getDynTabMenu($parts, $idString) {
03790 if (is_object($GLOBALS['TBE_TEMPLATE'])) {
03791 return $GLOBALS['TBE_TEMPLATE']->getDynTabMenu($parts, $idString);
03792 } else {
03793 $output = '';
03794 foreach($parts as $singlePad) {
03795 $output.='
03796 <h3>'.htmlspecialchars($singlePad['label']).'</h3>
03797 '.($singlePad['description'] ? '<p class="c-descr">'.nl2br(htmlspecialchars($singlePad['description'])).'</p>' : '').'
03798 '.$singlePad['content'];
03799 }
03800
03801 return '<div class="typo3-dyntabmenu-divs">'.$output.'</div>';
03802 }
03803 }
03804
03805
03806
03807
03808
03809
03810
03811
03812
03813
03814
03815
03816
03817
03818
03819
03820
03828 function initItemArray($fieldValue) {
03829 $items = array();
03830 if (is_array($fieldValue['config']['items'])) {
03831 reset ($fieldValue['config']['items']);
03832 while (list($itemName,$itemValue) = each($fieldValue['config']['items'])) {
03833 $items[] = array($this->sL($itemValue[0]), $itemValue[1], $itemValue[2]);
03834 }
03835 }
03836 return $items;
03837 }
03838
03846 function addItems($items,$iArray) {
03847 global $TCA;
03848 if (is_array($iArray)) {
03849 reset($iArray);
03850 while(list($value,$label)=each($iArray)) {
03851 $items[]=array($this->sl($label),$value);
03852 }
03853 }
03854 return $items;
03855 }
03856
03868 function procItems($items,$iArray,$config,$table,$row,$field) {
03869 global $TCA;
03870
03871 $params=array();
03872 $params['items'] = &$items;
03873 $params['config'] = $config;
03874 $params['TSconfig'] = $iArray;
03875 $params['table'] = $table;
03876 $params['row'] = $row;
03877 $params['field'] = $field;
03878
03879 t3lib_div::callUserFunction($config['itemsProcFunc'],$params,$this);
03880 return $items;
03881 }
03882
03892 function addSelectOptionsToItemArray($items,$fieldValue,$TSconfig,$field) {
03893 global $TCA;
03894
03895
03896 if ($fieldValue['config']['foreign_table']) {
03897 $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field);
03898 if ($fieldValue['config']['neg_foreign_table']) {
03899 $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field,1);
03900 }
03901 }
03902
03903
03904 if ($fieldValue['config']['fileFolder']) {
03905 $fileFolder = t3lib_div::getFileAbsFileName($fieldValue['config']['fileFolder']);
03906 if (@is_dir($fileFolder)) {
03907
03908
03909 $extList = $fieldValue['config']['fileFolder_extList'];
03910 $recursivityLevels = isset($fieldValue['config']['fileFolder_recursions']) ? t3lib_div::intInRange($fieldValue['config']['fileFolder_recursions'],0,99) : 99;
03911
03912
03913 $fileFolder = ereg_replace('\/$','',$fileFolder).'/';
03914 $fileArr = t3lib_div::getAllFilesAndFoldersInPath(array(),$fileFolder,$extList,0,$recursivityLevels);
03915 $fileArr = t3lib_div::removePrefixPathFromList($fileArr, $fileFolder);
03916
03917 foreach($fileArr as $fileRef) {
03918 $fI = pathinfo($fileRef);
03919 $icon = t3lib_div::inList('gif,png,jpeg,jpg', strtolower($fI['extension'])) ? '../'.substr($fileFolder,strlen(PATH_site)).$fileRef : '';
03920 $items[] = array(
03921 $fileRef,
03922 $fileRef,
03923 $icon
03924 );
03925 }
03926 }
03927 }
03928
03929
03930 if ($fieldValue['config']['special']) {
03931 switch ($fieldValue['config']['special']) {
03932 case 'tables':
03933 $temp_tc = array_keys($TCA);
03934 $descr = '';
03935
03936 foreach($temp_tc as $theTableNames) {
03937 if (!$TCA[$theTableNames]['ctrl']['adminOnly']) {
03938
03939
03940 $icon = '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($theTableNames, array()),'',1);
03941
03942
03943 if ($this->edit_showFieldHelp) {
03944 $GLOBALS['LANG']->loadSingleTableDescription($theTableNames);
03945 $fDat = $GLOBALS['TCA_DESCR'][$theTableNames]['columns'][''];
03946 $descr = $fDat['description'];
03947 }
03948
03949
03950 $items[] = array(
03951 $this->sL($TCA[$theTableNames]['ctrl']['title']),
03952 $theTableNames,
03953 $icon,
03954 $descr
03955 );
03956 }
03957 }
03958 break;
03959 case 'pagetypes':
03960 $theTypes = $TCA['pages']['columns']['doktype']['config']['items'];
03961
03962 foreach($theTypes as $theTypeArrays) {
03963
03964 $icon = $theTypeArrays[1]!='--div--' ? '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon('pages', array('doktype' => $theTypeArrays[1])),'',1) : '';
03965
03966
03967 $items[] = array(
03968 $this->sL($theTypeArrays[0]),
03969 $theTypeArrays[1],
03970 $icon
03971 );
03972 }
03973 break;
03974 case 'exclude':
03975 $theTypes = t3lib_BEfunc::getExcludeFields();
03976 $descr = '';
03977
03978 foreach($theTypes as $theTypeArrays) {
03979 list($theTable, $theField) = explode(':', $theTypeArrays[1]);
03980
03981
03982 if ($this->edit_showFieldHelp) {
03983 $GLOBALS['LANG']->loadSingleTableDescription($theTable);
03984 $fDat = $GLOBALS['TCA_DESCR'][$theTable]['columns'][$theField];
03985 $descr = $fDat['description'];
03986 }
03987
03988
03989 $items[] = array(
03990 ereg_replace(':$','',$theTypeArrays[0]),
03991 $theTypeArrays[1],
03992 '',
03993 $descr
03994 );
03995 }
03996 break;
03997 case 'explicitValues':
03998 $theTypes = t3lib_BEfunc::getExplicitAuthFieldValues();
03999
04000
04001 $icons = array(
04002 'ALLOW' => '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_ok2.gif','',1),
04003 'DENY' => '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_fatalerror.gif','',1),
04004 );
04005
04006
04007 foreach($theTypes as $tableFieldKey => $theTypeArrays) {
04008
04009 if (is_array($theTypeArrays['items'])) {
04010
04011 $items[] = array(
04012 $theTypeArrays['tableFieldLabel'],
04013 '--div--',
04014 );
04015
04016
04017 foreach($theTypeArrays['items'] as $itemValue => $itemContent) {
04018
04019 $items[] = array(
04020 '['.$itemContent[2].'] '.$itemContent[1],
04021 $tableFieldKey.':'.ereg_replace('[:|,]','',$itemValue).':'.$itemContent[0],
04022 $icons[$itemContent[0]]
04023 );
04024 }
04025 }
04026 }
04027 break;
04028 case 'languages':
04029 $items = array_merge($items,t3lib_BEfunc::getSystemLanguages());
04030 break;
04031 case 'custom':
04032
04033 $customOptions = $GLOBALS['TYPO3_CONF_VARS']['BE']['customPermOptions'];
04034 if (is_array($customOptions)) {
04035 foreach($customOptions as $coKey => $coValue) {
04036 if (is_array($coValue['items'])) {
04037
04038 $items[] = array(
04039 $GLOBALS['LANG']->sl($coValue['header']),
04040 '--div--',
04041 );
04042
04043
04044 foreach($coValue['items'] as $itemKey => $itemCfg) {
04045
04046 if ($itemCfg[1]) {
04047 list($icon) = $this->getIcon($itemCfg[1]);
04048 if ($icon) $icon = '../'.TYPO3_mainDir.$icon;
04049 } else $icon = '';
04050
04051
04052 $items[] = array(
04053 $GLOBALS['LANG']->sl($itemCfg[0]),
04054 $coKey.':'.ereg_replace('[:|,]','',$itemKey),
04055 $icon,
04056 $GLOBALS['LANG']->sl($itemCfg[2]),
04057 );
04058 }
04059 }
04060 }
04061 }
04062 break;
04063 case 'modListGroup':
04064 case 'modListUser':
04065 $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
04066 $loadModules->load($GLOBALS['TBE_MODULES']);
04067
04068 $modList = $fieldValue['config']['special']=='modListUser' ? $loadModules->modListUser : $loadModules->modListGroup;
04069 if (is_array($modList)) {
04070 $descr = '';
04071
04072 foreach($modList as $theMod) {
04073
04074
04075 $icon = $GLOBALS['LANG']->moduleLabels['tabs_images'][$theMod.'_tab'];
04076 if ($icon) {
04077 $icon = '../'.substr($icon,strlen(PATH_site));
04078 }
04079
04080
04081 if ($this->edit_showFieldHelp) {
04082 $descr = $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tablabel'].
04083 chr(10).
04084 $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tabdescr'];
04085 }
04086
04087
04088 $items[] = array(
04089 $this->addSelectOptionsToItemArray_makeModuleData($theMod),
04090 $theMod,
04091 $icon,
04092 $descr
04093 );
04094 }
04095 }
04096 break;
04097 }
04098 }
04099
04100
04101 return $items;
04102 }
04103
04112 function addSelectOptionsToItemArray_makeModuleData($value) {
04113 $label = '';
04114
04115 $pp = explode('_',$value);
04116 if (count($pp)>1) $label.=$GLOBALS['LANG']->moduleLabels['tabs'][$pp[0].'_tab'].'>';
04117
04118 $label.= $GLOBALS['LANG']->moduleLabels['tabs'][$value.'_tab'];
04119
04120 return $label;
04121 }
04122
04134 function foreignTable($items,$fieldValue,$TSconfig,$field,$pFFlag=0) {
04135 global $TCA;
04136
04137
04138 $pF=$pFFlag?'neg_':'';
04139 $f_table = $fieldValue['config'][$pF.'foreign_table'];
04140 $uidPre = $pFFlag?'-':'';
04141
04142
04143 $res = t3lib_BEfunc::exec_foreign_table_where_query($fieldValue,$field,$TSconfig,$pF);
04144
04145
04146 if ($GLOBALS['TYPO3_DB']->sql_error()) {
04147 echo($GLOBALS['TYPO3_DB']->sql_error()."\n\nThis may indicate a table defined in tables.php is not existing in the database!");
04148 return array();
04149 }
04150
04151
04152 $lPrefix = $this->sL($fieldValue['config'][$pF.'foreign_table_prefix']);
04153
04154
04155 $iField = $TCA[$f_table]['ctrl']['selicon_field'];
04156 $iPath = trim($TCA[$f_table]['ctrl']['selicon_field_path']);
04157
04158
04159 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
04160 t3lib_BEfunc::workspaceOL($f_table, $row);
04161
04162 if ($iField && $iPath && $row[$iField]) {
04163 $iParts = t3lib_div::trimExplode(',',$row[$iField],1);
04164 $icon = '../'.$iPath.'/'.trim($iParts[0]);
04165 } elseif (t3lib_div::inList('singlebox,checkbox',$fieldValue['config']['renderMode'])) {
04166 $icon = '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($f_table, $row),'',1);
04167 } else $icon = '';
04168
04169
04170 $items[] = array(
04171 $lPrefix.strip_tags(t3lib_BEfunc::getRecordTitle($f_table,$row)),
04172 $uidPre.$row['uid'],
04173 $icon
04174 );
04175 }
04176 return $items;
04177 }
04178
04179
04180
04181
04182
04183
04184
04185
04186
04187
04188
04189
04190
04191
04192
04193
04194
04195
04196
04197
04198
04199
04200
04201
04202
04203
04204
04205
04206
04207
04208
04215 function setNewBEDesign() {
04216
04217
04218 $this->totalWrap='
04219 <table border="0" cellspacing="0" cellpadding="0" width="'.($this->docLarge ? 440+150 : 440).'" class="typo3-TCEforms">'.
04220 '<tr class="bgColor2">
04221 <td> </td>
04222 <td>###RECORD_ICON### <span class="typo3-TCEforms-recHeader">###TABLE_TITLE###</span> ###ID_NEW_INDICATOR### - ###RECORD_LABEL###</td>
04223 </tr>'.
04224 '|'.
04225 '<tr>
04226 <td> </td>
04227 <td><img src="clear.gif" width="'.($this->docLarge ? 440+150 : 440).'" height="1" alt="" /></td>
04228 </tr>
04229 </table>';
04230
04231
04232 $this->fieldTemplate='
04233 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
04234 <td>###FIELD_HELP_ICON###</td>
04235 <td width="99%"><span style="color:###FONTCOLOR_HEAD###;"###CLASSATTR_4###><b>###FIELD_NAME###</b></span>###FIELD_HELP_TEXT###</td>
04236 </tr>
04237 <tr ###BGCOLOR######CLASSATTR_1###>
04238 <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>
04239 <td valign="top">###FIELD_ITEM######FIELD_PAL_LINK_ICON###</td>
04240 </tr>';
04241
04242 $this->palFieldTemplate='
04243 <tr ###BGCOLOR######CLASSATTR_1###>
04244 <td> </td>
04245 <td nowrap="nowrap" valign="top">###FIELD_PALETTE###</td>
04246 </tr>';
04247 $this->palFieldTemplateHeader='
04248 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
04249 <td> </td>
04250 <td nowrap="nowrap" valign="top"><strong>###FIELD_HEADER###</strong></td>
04251 </tr>';
04252
04253 $this->sectionWrap='
04254 <tr>
04255 <td colspan="2"><img src="clear.gif" width="1" height="###SPACE_BEFORE###" alt="" /></td>
04256 </tr>
04257 <tr>
04258 <td colspan="2"><table ###TABLE_ATTRIBS###>###CONTENT###</table></td>
04259 </tr>
04260 ';
04261 }
04262
04270 function intoTemplate($inArr,$altTemplate='') {
04271
04272 $fieldTemplateParts = explode('###FIELD_',$this->rplColorScheme($altTemplate?$altTemplate:$this->fieldTemplate));
04273 reset($fieldTemplateParts);
04274 $out=current($fieldTemplateParts);
04275 while(list(,$part)=each($fieldTemplateParts)) {
04276 list($key,$val)=explode('###',$part,2);
04277 $out.=$inArr[$key];
04278 $out.=$val;
04279 }
04280 return $out;
04281 }
04282
04294 function addUserTemplateMarkers($marker,$table,$field,$row,&$PA) {
04295 return $marker;
04296 }
04297
04305 function wrapLabels($str) {
04306 return $str;
04307 }
04308
04318 function wrapTotal($c,$rec,$table) {
04319 $parts = $this->replaceTableWrap(explode('|',$this->totalWrap,2),$rec,$table);
04320 return $parts[0].$c.$parts[1].implode('',$this->hiddenFieldAccum);
04321 }
04322
04331 function replaceTableWrap($arr,$rec,$table) {
04332 global $TCA;
04333
04334
04335 if (strstr($rec['uid'],'NEW')) {
04336 $newLabel = ' <span class="typo3-TCEforms-newToken">'.
04337 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.new',1).
04338 '</span>';
04339
04340 #t3lib_BEfunc::fixVersioningPid($table,$rec); // Kasper: Should not be used here because NEW records are not offline workspace versions...
04341 $truePid = t3lib_BEfunc::getTSconfig_pidValue($table,$rec['uid'],$rec['pid']);
04342 $prec = t3lib_BEfunc::getRecordWSOL('pages',$truePid,'title');
04343 $rLabel = '<em>[PID: '.$truePid.'] '.htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle('pages',$prec),40))).'</em>';
04344 } else {
04345 $newLabel = ' <span class="typo3-TCEforms-recUid">['.$rec['uid'].']</span>';
04346 $rLabel = htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle($table,$rec),40)));
04347 }
04348
04349 foreach ($arr as $k => $v) {
04350
04351 $arr[$k] = str_replace('###ID_NEW_INDICATOR###', $newLabel, $arr[$k]);
04352 $arr[$k] = str_replace('###RECORD_LABEL###',$rLabel,$arr[$k]);
04353 $arr[$k] = str_replace('###TABLE_TITLE###',htmlspecialchars($this->sL($TCA[$table]['ctrl']['title'])),$arr[$k]);
04354
04355 $titleA=t3lib_BEfunc::titleAltAttrib($this->getRecordPath($table,$rec));
04356 $arr[$k]=str_replace('###RECORD_ICON###',t3lib_iconWorks::getIconImage($table,$rec,$this->backPath,'class="absmiddle"'.$titleA),$arr[$k]);
04357 }
04358 return $arr;
04359 }
04360
04368 function wrapBorder(&$out_array,&$out_pointer) {
04369 if ($this->sectionWrap && $out_array[$out_pointer]) {
04370 $tableAttribs='';
04371 $tableAttribs.= $this->borderStyle[0] ? ' style="'.htmlspecialchars($this->borderStyle[0]).'"':'';
04372 $tableAttribs.= $this->borderStyle[2] ? ' background="'.htmlspecialchars($this->backPath.$this->borderStyle[2]).'"':'';
04373 $tableAttribs.= $this->borderStyle[3] ? ' class="'.htmlspecialchars($this->borderStyle[3]).'"':'';
04374 if ($tableAttribs) {
04375 $tableAttribs='border="0" cellspacing="0" cellpadding="0" width="100%"'.$tableAttribs;
04376 $out_array[$out_pointer] = str_replace('###CONTENT###',$out_array[$out_pointer],
04377 str_replace('###TABLE_ATTRIBS###',$tableAttribs,
04378 str_replace('###SPACE_BEFORE###',intval($this->borderStyle[1]),$this->sectionWrap)));
04379 }
04380 $out_pointer++;
04381 }
04382 }
04383
04390 function rplColorScheme($inTemplate) {
04391
04392 $inTemplate = str_replace('###BGCOLOR###',$this->colorScheme[0]?' bgcolor="'.$this->colorScheme[0].'"':'',$inTemplate);
04393 $inTemplate = str_replace('###BGCOLOR_HEAD###',$this->colorScheme[1]?' bgcolor="'.$this->colorScheme[1].'"':'',$inTemplate);
04394 $inTemplate = str_replace('###FONTCOLOR_HEAD###',$this->colorScheme[3],$inTemplate);
04395
04396
04397 $inTemplate = str_replace('###CLASSATTR_1###',$this->classScheme[0]?' class="'.$this->classScheme[0].'"':'',$inTemplate);
04398 $inTemplate = str_replace('###CLASSATTR_2###',$this->classScheme[1]?' class="'.$this->classScheme[1].'"':'',$inTemplate);
04399 $inTemplate = str_replace('###CLASSATTR_4###',$this->classScheme[3]?' class="'.$this->classScheme[3].'"':'',$inTemplate);
04400
04401 return $inTemplate;
04402 }
04403
04410 function getDivider() {
04411
04412 }
04413
04420 function printPalette($palArr) {
04421
04422
04423 $ccAttr2 = $this->colorScheme[2] ? ' bgcolor="'.$this->colorScheme[2].'"' : '';
04424 $ccAttr2.= $this->classScheme[2] ? ' class="'.$this->classScheme[2].'"' : '';
04425 $ccAttr4 = $this->colorScheme[4] ? ' style="color:'.$this->colorScheme[4].'"' : '';
04426 $ccAttr4.= $this->classScheme[4] ? ' class="'.$this->classScheme[4].'"' : '';
04427
04428
04429 foreach($palArr as $content) {
04430 $hRow[]='<td'.$ccAttr2.'> </td>
04431 <td nowrap="nowrap"'.$ccAttr2.'>'.
04432 '<span'.$ccAttr4.'>'.
04433 $content['NAME'].
04434 '</span>'.
04435 '</td>';
04436 $iRow[]='<td valign="top">'.
04437 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" vspace="4" alt="" />'.
04438 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" vspace="4" alt="" />'.
04439 '</td>
04440 <td nowrap="nowrap" valign="top">'.
04441 $content['ITEM'].
04442 $content['HELP_ICON'].
04443 '</td>';
04444 }
04445
04446
04447 $out='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-palette">
04448 <tr>
04449 <td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.
04450 implode('
04451 ',$hRow).'
04452 </tr>
04453 <tr>
04454 <td></td>'.
04455 implode('
04456 ',$iRow).'
04457 </tr>
04458 </table>';
04459
04460 return $out;
04461 }
04462
04471 function helpTextIcon($table,$field,$force=0) {
04472 if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && (($this->edit_showFieldHelp=='icon'&&!$this->doLoadTableDescr($table)) || $force)) {
04473 $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;';
04474 return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
04475 '<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="" />'.
04476 '</a>';
04477 } else {
04478
04479 #debug(array("'".$field.".description' => '[FILL IN] ".$table."->".$field."',"),$table);
04480 return '<span class="nbsp"> </span>';
04481 }
04482 }
04483
04491 function helpText($table,$field) {
04492 if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && ($this->edit_showFieldHelp=='text' || $this->doLoadTableDescr($table))) {
04493 $fDat = $GLOBALS['TCA_DESCR'][$table]['columns'][$field];
04494 return '<table border="0" cellpadding="2" cellspacing="0" width="90%"><tr><td valign="top" width="14">'.
04495 $this->helpTextIcon(
04496 $table,
04497 $field,
04498 $fDat['details']||$fDat['syntax']||$fDat['image_descr']||$fDat['image']||$fDat['seeAlso']
04499 ).
04500 '</td><td valign="top"><span class="typo3-TCEforms-helpText">'.
04501 $GLOBALS['LANG']->hscAndCharConv(strip_tags($fDat['description']),1).
04502 '</span></td></tr></table>';
04503 }
04504 }
04505
04512 function setColorScheme($scheme) {
04513 $this->colorScheme = $this->defColorScheme;
04514 $this->classScheme = $this->defClassScheme;
04515
04516 $parts = t3lib_div::trimExplode(',',$scheme);
04517 foreach($parts as $key => $col) {
04518
04519 list($color,$class) = t3lib_div::trimExplode('|',$col);
04520
04521
04522 if ($color) $this->colorScheme[$key] = $color;
04523 if ($color=='-') $this->colorScheme[$key] = '';
04524
04525
04526 if ($class) $this->classScheme[$key] = $class;
04527 if ($class=='-') $this->classScheme[$key] = '';
04528 }
04529 }
04530
04536 function resetSchemes() {
04537 $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][0]);
04538 $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
04539 $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
04540 }
04541
04547 function storeSchemes() {
04548 $this->savedSchemes['classScheme'] = $this->classScheme;
04549 $this->savedSchemes['colorScheme'] = $this->colorScheme;
04550 $this->savedSchemes['fieldStyle'] = $this->fieldStyle;
04551 $this->savedSchemes['borderStyle'] = $this->borderStyle;
04552 }
04553
04559 function restoreSchemes() {
04560 $this->classScheme = $this->savedSchemes['classScheme'];
04561 $this->colorScheme = $this->savedSchemes['colorScheme'];
04562 $this->fieldStyle = $this->savedSchemes['fieldStyle'];
04563 $this->borderStyle = $this->savedSchemes['borderStyle'];
04564 }
04565
04566
04567
04568
04569
04570
04571
04572
04573
04574
04575
04576
04577
04578
04579
04580
04581
04582
04583
04589 function JStop() {
04590
04591 $out = '';
04592
04593
04594 if (count($this->additionalCode_pre)) {
04595 $out.= implode('
04596
04597 <!-- NEXT: -->
04598 ',$this->additionalCode_pre);
04599 }
04600
04601
04602 if (count($this->additionalJS_pre)) {
04603 $out.='
04604
04605
04606 <!--
04607 JavaScript in top of page (before form):
04608 -->
04609
04610 <script type="text/javascript">
04611
04612
04613 '.implode('
04614
04615
04616 ',$this->additionalJS_pre).'
04617
04618
04619 </script>
04620 ';
04621 }
04622
04623
04624 return $out;
04625 }
04626
04641 function JSbottom($formname='forms[0]', $update = false) {
04642 $jsFile = array();
04643 $elements = array();
04644
04645
04646 foreach ($this->requiredFields as $itemImgName => $itemName) {
04647 if (preg_match('/^(.+)\[((\w|\d|_)+)\]$/', $itemName, $match)) {
04648 $record = $match[1];
04649 $field = $match[2];
04650 $elements[$record][$field]['required'] = 1;
04651 $elements[$record][$field]['requiredImg'] = $itemImgName;
04652 }
04653 }
04654
04655 foreach ($this->requiredElements as $itemName => $range) {
04656 if (preg_match('/^(.+)\[((\w|\d|_)+)\]$/', $itemName, $match)) {
04657 $record = $match[1];
04658 $field = $match[2];
04659 $elements[$record][$field]['range'] = array($range[0], $range[1]);
04660 $elements[$record][$field]['rangeImg'] = $range['imgName'];
04661 }
04662 }
04663
04664 $this->TBE_EDITOR_fieldChanged_func='TBE_EDITOR.fieldChanged_fName(fName,formObj[fName+"_list"]);';
04665
04666 if (!$update) {
04667 if ($this->loadMD5_JS) {
04668 $jsFile[] = '<script type="text/javascript" src="'.$this->backPath.'md5.js"></script>';
04669 }
04670
04671 $jsFile[] = '<script type="text/javascript" src="'.$this->backPath.'contrib/prototype/prototype.js"></script>';
04672 $jsFile[] = '<script type="text/javascript" src="'.$this->backPath.'../t3lib/jsfunc.evalfield.js"></script>';
04673 $jsFile[] = '<script type="text/javascript" src="'.$this->backPath.'jsfunc.tbe_editor.js"></script>';
04674
04675
04676 if ($this->inline->inlineCount) {
04677 $jsFile[] = '<script src="'.$this->backPath.'contrib/scriptaculous/scriptaculous.js" type="text/javascript"></script>';
04678 $jsFile[] = '<script src="'.$this->backPath.'../t3lib/jsfunc.inline.js" type="text/javascript"></script>';
04679 $out .= '
04680 inline.setPrependFormFieldNames("'.$this->inline->prependNaming.'");
04681 inline.setNoTitleString("'.addslashes(t3lib_BEfunc::getNoRecordTitle(true)).'");
04682 ';
04683 }
04684
04685 $out .= '
04686 TBE_EDITOR.images.req.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/required_h.gif','',1).'";
04687 TBE_EDITOR.images.cm.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_client.gif','',1).'";
04688 TBE_EDITOR.images.sel.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_selected.gif','',1).'";
04689 TBE_EDITOR.images.clear.src = "'.$this->backPath.'clear.gif";
04690
04691 TBE_EDITOR.auth_timeout_field = '.intval($GLOBALS['BE_USER']->auth_timeout_field).';
04692 TBE_EDITOR.formname = "'.$formname.'";
04693 TBE_EDITOR.formnameUENC = "'.rawurlencode($formname).'";
04694 TBE_EDITOR.backPath = "'.addslashes($this->backPath).'";
04695 TBE_EDITOR.prependFormFieldNames = "'.$this->prependFormFieldNames.'";
04696 TBE_EDITOR.prependFormFieldNamesUENC = "'.rawurlencode($this->prependFormFieldNames).'";
04697 TBE_EDITOR.prependFormFieldNamesCnt = '.substr_count($this->prependFormFieldNames,'[').';
04698 TBE_EDITOR.isPalettedoc = '.($this->isPalettedoc ? addslashes($this->isPalettedoc) : 'null').';
04699 TBE_EDITOR.doSaveFieldName = "'.($this->doSaveFieldName ? addslashes($this->doSaveFieldName) : '').'";
04700 TBE_EDITOR.labels.fieldsChanged = '.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsChanged')).';
04701 TBE_EDITOR.labels.fieldsMissing = '.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsMissing')).';
04702 TBE_EDITOR.labels.refresh_login = '.$GLOBALS['LANG']->JScharCode($this->getLL('m_refresh_login')).';
04703 TBE_EDITOR.labels.onChangeAlert = '.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).';
04704 evalFunc.USmode = '.($GLOBALS['TYPO3_CONF_VARS']['SYS']['USdateFormat']?'1':'0').';
04705 ';
04706 }
04707
04708
04709 if (count($this->inline->inlineData)) {
04710 $out .= '
04711 inline.addToDataArray('.$this->inline->getJSON($this->inline->inlineData).');
04712 ';
04713 }
04714
04715 if (count($elements)) {
04716 $out .= '
04717 TBE_EDITOR.addElements('.$this->inline->getJSON($elements).');
04718 TBE_EDITOR.initRequired()
04719 ';
04720 }
04721
04722 if ($this->additionalJS_submit) {
04723 $additionalJS_submit = implode('', $this->additionalJS_submit);
04724 $additionalJS_submit = str_replace("\r", '', $additionalJS_submit);
04725 $additionalJS_submit = str_replace("\n", '', $additionalJS_submit);
04726 $out .= '
04727 TBE_EDITOR.addActionChecks("submit", "'.addslashes($additionalJS_submit).'");
04728 ';
04729 }
04730
04731 $out .= chr(10).implode(chr(10),$this->additionalJS_post).chr(10).$this->extJSCODE;
04732 $out .= '
04733 TBE_EDITOR.loginRefreshed();
04734 ';
04735
04736
04737 if (!$update) {
04738 $spacer = chr(10).chr(9);
04739 $out = $spacer.implode($spacer, $jsFile).t3lib_div::wrapJS($out);
04740 }
04741
04742 return $out;
04743 }
04744
04751 function dbFileCon($formObj='document.forms[0]') {
04752
04753 $str='
04754
04755
04756
04757
04758
04759 var browserWin="";
04760
04761 function setFormValueOpenBrowser(mode,params) {
04762 var url = "'.$this->backPath.'browser.php?mode="+mode+"&bparams="+params;
04763
04764 browserWin = window.open(url,"Typo3WinBrowser","height=350,width="+(mode=="db"?650:600)+",status=0,menubar=0,resizable=1,scrollbars=1");
04765 browserWin.focus();
04766 }
04767 function setFormValueFromBrowseWin(fName,value,label,exclusiveValues) {
04768 var formObj = setFormValue_getFObj(fName)
04769 if (formObj && value!="--div--") {
04770 fObj = formObj[fName+"_list"];
04771 var len = fObj.length;
04772
04773 if (exclusiveValues) {
04774 var m = new RegExp("(^|,)"+value+"($|,)");
04775 if (exclusiveValues.match(m)) {
04776
04777 for (a=len-1;a>=0;a--) fObj[a] = null;
04778 len = 0;
04779 } else if (len == 1) {
04780 m = new RegExp("(^|,)"+fObj.options[0].value+"($|,)");
04781 if (exclusiveValues.match(m)) {
04782
04783 fObj[0] = null;
04784 len = 0;
04785 }
04786 }
04787 }
04788
04789 var setOK = 1;
04790 if (!formObj[fName+"_mul"] || formObj[fName+"_mul"].value==0) {
04791 for (a=0;a<len;a++) {
04792 if (fObj.options[a].value==value) {
04793 setOK = 0;
04794 }
04795 }
04796 }
04797 if (setOK) {
04798 fObj.length++;
04799 fObj.options[len].value = value;
04800 fObj.options[len].text = unescape(label);
04801
04802
04803 setHiddenFromList(fObj,formObj[fName]);
04804 '.$this->TBE_EDITOR_fieldChanged_func.'
04805 }
04806 }
04807 }
04808 function setHiddenFromList(fObjSel,fObjHid) {
04809 l=fObjSel.length;
04810 fObjHid.value="";
04811 for (a=0;a<l;a++) {
04812 fObjHid.value+=fObjSel.options[a].value+",";
04813 }
04814 }
04815 function setFormValueManipulate(fName,type) {
04816 var formObj = setFormValue_getFObj(fName)
04817 if (formObj) {
04818 var localArray_V = new Array();
04819 var localArray_L = new Array();
04820 var localArray_S = new Array();
04821 var fObjSel = formObj[fName+"_list"];
04822 var l=fObjSel.length;
04823 var c=0;
04824 if (type=="Remove" || type=="Top" || type=="Bottom") {
04825 if (type=="Top") {
04826 for (a=0;a<l;a++) {
04827 if (fObjSel.options[a].selected==1) {
04828 localArray_V[c]=fObjSel.options[a].value;
04829 localArray_L[c]=fObjSel.options[a].text;
04830 localArray_S[c]=1;
04831 c++;
04832 }
04833 }
04834 }
04835 for (a=0;a<l;a++) {
04836 if (fObjSel.options[a].selected!=1) {
04837 localArray_V[c]=fObjSel.options[a].value;
04838 localArray_L[c]=fObjSel.options[a].text;
04839 localArray_S[c]=0;
04840 c++;
04841 }
04842 }
04843 if (type=="Bottom") {
04844 for (a=0;a<l;a++) {
04845 if (fObjSel.options[a].selected==1) {
04846 localArray_V[c]=fObjSel.options[a].value;
04847 localArray_L[c]=fObjSel.options[a].text;
04848 localArray_S[c]=1;
04849 c++;
04850 }
04851 }
04852 }
04853 }
04854 if (type=="Down") {
04855 var tC = 0;
04856 var tA = new Array();
04857
04858 for (a=0;a<l;a++) {
04859 if (fObjSel.options[a].selected!=1) {
04860
04861 localArray_V[c]=fObjSel.options[a].value;
04862 localArray_L[c]=fObjSel.options[a].text;
04863 localArray_S[c]=0;
04864 c++;
04865
04866
04867 if (tA.length > 0) {
04868 for (aa=0;aa<tA.length;aa++) {
04869 localArray_V[c]=fObjSel.options[tA[aa]].value;
04870 localArray_L[c]=fObjSel.options[tA[aa]].text;
04871 localArray_S[c]=1;
04872 c++;
04873 }
04874
04875 var tC = 0;
04876 var tA = new Array();
04877 }
04878 } else {
04879 tA[tC] = a;
04880 tC++;
04881 }
04882 }
04883
04884 if (tA.length > 0) {
04885 for (aa=0;aa<tA.length;aa++) {
04886 localArray_V[c]=fObjSel.options[tA[aa]].value;
04887 localArray_L[c]=fObjSel.options[tA[aa]].text;
04888 localArray_S[c]=1;
04889 c++;
04890 }
04891 }
04892 }
04893 if (type=="Up") {
04894 var tC = 0;
04895 var tA = new Array();
04896 var c = l-1;
04897
04898 for (a=l-1;a>=0;a--) {
04899 if (fObjSel.options[a].selected!=1) {
04900
04901
04902 localArray_V[c]=fObjSel.options[a].value;
04903 localArray_L[c]=fObjSel.options[a].text;
04904 localArray_S[c]=0;
04905 c--;
04906
04907
04908 if (tA.length > 0) {
04909 for (aa=0;aa<tA.length;aa++) {
04910 localArray_V[c]=fObjSel.options[tA[aa]].value;
04911 localArray_L[c]=fObjSel.options[tA[aa]].text;
04912 localArray_S[c]=1;
04913 c--;
04914 }
04915
04916 var tC = 0;
04917 var tA = new Array();
04918 }
04919 } else {
04920 tA[tC] = a;
04921 tC++;
04922 }
04923 }
04924
04925 if (tA.length > 0) {
04926 for (aa=0;aa<tA.length;aa++) {
04927 localArray_V[c]=fObjSel.options[tA[aa]].value;
04928 localArray_L[c]=fObjSel.options[tA[aa]].text;
04929 localArray_S[c]=1;
04930 c--;
04931 }
04932 }
04933 c=l;
04934 }
04935
04936
04937 fObjSel.length = c;
04938 for (a=0;a<c;a++) {
04939 fObjSel.options[a].value = localArray_V[a];
04940 fObjSel.options[a].text = localArray_L[a];
04941 fObjSel.options[a].selected = localArray_S[a];
04942 }
04943 setHiddenFromList(fObjSel,formObj[fName]);
04944
04945 '.$this->TBE_EDITOR_fieldChanged_func.'
04946 }
04947 }
04948 function setFormValue_getFObj(fName) {
04949 var formObj = '.$formObj.';
04950 if (formObj) {
04951 if (formObj[fName] && formObj[fName+"_list"] && formObj[fName+"_list"].type=="select-multiple") {
04952 return formObj;
04953 } else {
04954 alert("Formfields missing:\n fName: "+formObj[fName]+"\n fName_list:"+formObj[fName+"_list"]+"\n type:"+formObj[fName+"_list"].type+"\n fName:"+fName);
04955 }
04956 }
04957 return "";
04958 }
04959
04960
04961 ';
04962 return $str;
04963 }
04964
04970 function printNeededJSFunctions() {
04971
04972 $out = $this->JSbottom($this->formName);
04973
04974 if ($this->printNeededJS['dbFileIcons']) {
04975 $out.= '
04976
04977
04978
04979 <!--
04980 JavaScript after the form has been drawn:
04981 -->
04982
04983 <script type="text/javascript">
04984
04985 '.$this->dbFileCon('document.'.$this->formName).'
04986
04987 </script>';
04988 }
04989 return $out;
04990 }
04991
04997 function printNeededJSFunctions_top() {
04998
04999 $out = $this->JStop($this->formName);
05000 return $out;
05001 }
05002
05003
05004
05005
05006
05007
05008
05009
05010
05011
05012
05013
05014
05015
05016
05017
05018
05019
05020
05021
05022
05023
05024
05025
05026
05027
05028
05029
05030
05031
05032
05033
05034
05035
05036
05037
05045 function getDefaultRecord($table,$pid=0) {
05046 global $TCA;
05047 if ($TCA[$table]) {
05048 t3lib_div::loadTCA($table);
05049 $row = array();
05050
05051 if ($pid<0 && $TCA[$table]['ctrl']['useColumnsForDefaultValues']) {
05052
05053 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $table, 'uid='.abs($pid).t3lib_BEfunc::deleteClause($table));
05054 if ($drow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
05055
05056 $fArr = explode(',',$TCA[$table]['ctrl']['useColumnsForDefaultValues']);
05057 foreach($fArr as $theF) {
05058 if ($TCA[$table]['columns'][$theF]) {
05059 $row[$theF] = $drow[$theF];
05060 }
05061 }
05062 }
05063 $GLOBALS['TYPO3_DB']->sql_free_result($res);
05064 }
05065
05066 foreach($TCA[$table]['columns'] as $field => $info) {
05067 if (isset($info['config']['default'])) {
05068 $row[$field] = $info['config']['default'];
05069 }
05070 }
05071
05072 return $row;
05073 }
05074 }
05075
05084 function getRecordPath($table,$rec) {
05085 t3lib_BEfunc::fixVersioningPid($table,$rec);
05086 list($tscPID,$thePidValue)=$this->getTSCpid($table,$rec['uid'],$rec['pid']);
05087 if ($thePidValue>=0) {
05088 return t3lib_BEfunc::getRecordPath($tscPID,$this->readPerms(),15);
05089 }
05090 }
05091
05098 function readPerms() {
05099 if (!$this->perms_clause_set) {
05100 $this->perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
05101 $this->perms_clause_set=1;
05102 }
05103 return $this->perms_clause;
05104 }
05105
05112 function sL($str) {
05113 return $GLOBALS['LANG']->sL($str);
05114 }
05115
05125 function getLL($str) {
05126 $content = '';
05127
05128 switch(substr($str,0,2)) {
05129 case 'l_':
05130 $content = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.'.substr($str,2));
05131 break;
05132 case 'm_':
05133 $content = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:mess.'.substr($str,2));
05134 break;
05135 }
05136 return $content;
05137 }
05138
05146 function isPalettesCollapsed($table,$palette) {
05147 global $TCA;
05148
05149 if ($TCA[$table]['ctrl']['canNotCollapse']) return 0;
05150 if (is_array($TCA[$table]['palettes'][$palette]) && $TCA[$table]['palettes'][$palette]['canNotCollapse']) return 0;
05151 return $this->palettesCollapsed;
05152 }
05153
05162 function isDisplayCondition($displayCond,$row,$ffValueKey='') {
05163 $output = FALSE;
05164
05165 $parts = explode(':',$displayCond);
05166 switch((string)$parts[0]) {
05167 case 'FIELD':
05168 $theFieldValue = $ffValueKey ? $row[$parts[1]][$ffValueKey] : $row[$parts[1]];
05169
05170 switch((string)$parts[2]) {
05171 case 'REQ':
05172 if (strtolower($parts[3])=='true') {
05173 $output = $theFieldValue ? TRUE : FALSE;
05174 } elseif (strtolower($parts[3])=='false') {
05175 $output = !$theFieldValue ? TRUE : FALSE;
05176 }
05177 break;
05178 case '>':
05179 $output = $theFieldValue > $parts[3];
05180 break;
05181 case '<':
05182 $output = $theFieldValue < $parts[3];
05183 break;
05184 case '>=':
05185 $output = $theFieldValue >= $parts[3];
05186 break;
05187 case '<=':
05188 $output = $theFieldValue <= $parts[3];
05189 break;
05190 case '-':
05191 case '!-':
05192 $cmpParts = explode('-',$parts[3]);
05193 $output = $theFieldValue >= $cmpParts[0] && $theFieldValue <= $cmpParts[1];
05194 if ($parts[2]{0}=='!') $output = !$output;
05195 break;
05196 case 'IN':
05197 case '!IN':
05198 $output = t3lib_div::inList($parts[3],$theFieldValue);
05199 if ($parts[2]{0}=='!') $output = !$output;
05200 break;
05201 case '=':
05202 case '!=':
05203 $output = t3lib_div::inList($parts[3],$theFieldValue);
05204 if ($parts[2]{0}=='!') $output = !$output;
05205 break;
05206 }
05207 break;
05208 case 'EXT':
05209 switch((string)$parts[2]) {
05210 case 'LOADED':
05211 if (strtolower($parts[3])=='true') {
05212 $output = t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
05213 } elseif (strtolower($parts[3])=='false') {
05214 $output = !t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
05215 }
05216 break;
05217 }
05218 break;
05219 case 'REC':
05220 switch((string)$parts[1]) {
05221 case 'NEW':
05222 if (strtolower($parts[2])=='true') {
05223 $output = !(intval($row['uid']) > 0) ? TRUE : FALSE;
05224 } elseif (strtolower($parts[2])=='false') {
05225 $output = (intval($row['uid']) > 0) ? TRUE : FALSE;
05226 }
05227 break;
05228 }
05229 break;
05230 case 'HIDE_L10N_SIBLINGS':
05231 if ($ffValueKey==='vDEF') {
05232 $output = TRUE;
05233 } elseif ($parts[1]==='except_admin' && $GLOBALS['BE_USER']->isAdmin()) {
05234 $output = TRUE;
05235 }
05236 break;
05237 case 'HIDE_FOR_NON_ADMINS':
05238 $output = $GLOBALS['BE_USER']->isAdmin() ? TRUE : FALSE;
05239 break;
05240 case 'VERSION':
05241 switch((string)$parts[1]) {
05242 case 'IS':
05243 if (strtolower($parts[2])=='true') {
05244 $output = intval($row['pid'])==-1 ? TRUE : FALSE;
05245 } elseif (strtolower($parts[2])=='false') {
05246 $output = !(intval($row['pid'])==-1) ? TRUE : FALSE;
05247 }
05248 break;
05249 }
05250 break;
05251 }
05252
05253 return $output;
05254 }
05255
05266 function getTSCpid($table,$uid,$pid) {
05267 $key = $table.':'.$uid.':'.$pid;
05268 if (!isset($this->cache_getTSCpid[$key])) {
05269 $this->cache_getTSCpid[$key] = t3lib_BEfunc::getTSCpid($table,$uid,$pid);
05270 }
05271 return $this->cache_getTSCpid[$key];
05272 }
05273
05280 function doLoadTableDescr($table) {
05281 global $TCA;
05282 return $TCA[$table]['interface']['always_description'];
05283 }
05284
05292 function getAvailableLanguages($onlyIsoCoded=1,$setDefault=1) {
05293 $isL = t3lib_extMgm::isLoaded('static_info_tables');
05294
05295
05296 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('static_lang_isocode,title,uid', 'sys_language', 'pid=0 AND hidden=0'.t3lib_BEfunc::deleteClause('sys_language'), '', 'title');
05297
05298
05299 $output=array();
05300 if ($setDefault) {
05301 $output[0]=array(
05302 'uid' => 0,
05303 'title' => 'Default language',
05304 'ISOcode' => 'DEF'
05305 );
05306 }
05307 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
05308 $output[$row['uid']]=$row;
05309
05310 if ($isL && $row['static_lang_isocode']) {
05311 $rr = t3lib_BEfunc::getRecord('static_languages',$row['static_lang_isocode'],'lg_iso_2');
05312 if ($rr['lg_iso_2']) $output[$row['uid']]['ISOcode']=$rr['lg_iso_2'];
05313 }
05314
05315 if ($onlyIsoCoded && !$output[$row['uid']]['ISOcode']) unset($output[$row['uid']]);
05316 }
05317 return $output;
05318 }
05319
05328 function getLanguageIcon($table,$row,$sys_language_uid) {
05329 global $TCA,$LANG;
05330
05331 $mainKey = $table.':'.$row['uid'];
05332
05333 if (!isset($this->cachedLanguageFlag[$mainKey])) {
05334 t3lib_BEfunc::fixVersioningPid($table,$row);
05335 list($tscPID,$thePidValue) = $this->getTSCpid($table,$row['uid'],$row['pid']);
05336
05337 $t8Tools = t3lib_div::makeInstance('t3lib_transl8tools');
05338 $this->cachedLanguageFlag[$mainKey] = $t8Tools->getSystemLanguages($tscPID, $this->backPath);
05339 }
05340
05341
05342 if (!t3lib_div::testInt($sys_language_uid)) {
05343 foreach($this->cachedLanguageFlag[$mainKey] as $rUid => $cD) {
05344 if ('v'.$cD['ISOcode']===$sys_language_uid) {
05345 $sys_language_uid = $rUid;
05346 }
05347 }
05348 }
05349
05350 return ($this->cachedLanguageFlag[$mainKey][$sys_language_uid]['flagIcon'] ? '<img src="'.$this->cachedLanguageFlag[$mainKey][$sys_language_uid]['flagIcon'].'" class="absmiddle" alt="" />' : ($this->cachedLanguageFlag[$mainKey][$sys_language_uid]['title'] ? '['.$this->cachedLanguageFlag[$mainKey][$sys_language_uid]['title'].']' : '')).' ';
05351 }
05352
05360 function previewFieldValue($value, $config) {
05361 if ($config['config']['type']==='group' && $config['config']['internal_type'] === 'file') {
05362 $show_thumbs = TRUE;
05363 $table = 'tt_content';
05364
05365
05366 $itemArray = t3lib_div::trimExplode(',',$value,1);
05367
05368
05369 $thumbsnail = '';
05370 if ($show_thumbs) {
05371 $imgs = array();
05372 foreach($itemArray as $imgRead) {
05373 $imgP = explode('|',$imgRead);
05374 $imgPath = rawurldecode($imgP[0]);
05375
05376 $rowCopy = array();
05377 $rowCopy[$field] = $imgPath;
05378
05379
05380 $absFilePath = t3lib_div::getFileAbsFileName($config['config']['uploadfolder'].'/'.$imgPath);
05381
05382 $fI = pathinfo($imgPath);
05383 $fileIcon = t3lib_BEfunc::getFileIcon(strtolower($fI['extension']));
05384 $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="" />';
05385
05386 $imgs[] = '<span class="nobr">'.t3lib_BEfunc::thumbCode($rowCopy,$table,$field,$this->backPath,'thumbs.php',$config['config']['uploadfolder'],0,' align="middle"').
05387 ($absFilePath ? $this->getClickMenu($fileIcon, $absFilePath) : $fileIcon).
05388 $imgPath.
05389 '</span>';
05390 }
05391 $thumbsnail = implode('<br />',$imgs);
05392 }
05393
05394 return $thumbsnail;
05395 } else {
05396 return nl2br(htmlspecialchars($value));
05397 }
05398 }
05399
05405 function getAdditionalPreviewLanguages() {
05406 if (!isset($this->cachedAdditionalPreviewLanguages)) {
05407 if ($GLOBALS['BE_USER']->getTSConfigVal('options.additionalPreviewLanguages')) {
05408 $uids = t3lib_div::intExplode(',',$GLOBALS['BE_USER']->getTSConfigVal('options.additionalPreviewLanguages'));
05409 foreach($uids as $uid) {
05410 if ($sys_language_rec = t3lib_BEfunc::getRecord('sys_language',$uid)) {
05411 $this->cachedAdditionalPreviewLanguages[$uid] = array('uid' => $uid);
05412
05413 if ($sys_language_rec['static_lang_isocode'] && t3lib_extMgm::isLoaded('static_info_tables')) {
05414 $staticLangRow = t3lib_BEfunc::getRecord('static_languages',$sys_language_rec['static_lang_isocode'],'lg_iso_2');
05415 if ($staticLangRow['lg_iso_2']) {
05416 $this->cachedAdditionalPreviewLanguages[$uid]['uid'] = $uid;
05417 $this->cachedAdditionalPreviewLanguages[$uid]['ISOcode'] = $staticLangRow['lg_iso_2'];
05418 }
05419 }
05420 }
05421 }
05422 } else {
05423
05424 $this->cachedAdditionalPreviewLanguages = array();
05425 }
05426 }
05427 return $this->cachedAdditionalPreviewLanguages;
05428 }
05429
05437 function getDynTabLevelState($appendString = '') {
05438 $levels = array();
05439 foreach ($this->dynTabLevelStack as $tabIdent => $divId) {
05440 $levels[] = $tabIdent.'-'.$divId.$appendString;
05441 }
05442 return implode(',', $levels);
05443 }
05444 }
05445
05446
05447
05448
05449
05450
05451
05452
05453
05459 class t3lib_TCEforms_FE extends t3lib_TCEforms {
05460
05467 function wrapLabels($str) {
05468 return '<font face="verdana" size="1" color="black">'.$str.'</font>';
05469 }
05470
05477 function printPalette($palArr) {
05478 $out='';
05479 reset($palArr);
05480 $bgColor=' bgcolor="#D6DAD0"';
05481 while(list(,$content)=each($palArr)) {
05482 $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>';
05483 $iRow[]='<td valign="top">'.
05484 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" alt="" />'.
05485 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" alt="" />'.
05486 '</td><td nowrap="nowrap" valign="top">'.$content['ITEM'].$content['HELP_ICON'].'</td>';
05487 }
05488 $out='<table border="0" cellpadding="0" cellspacing="0">
05489 <tr><td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.implode('',$hRow).'</tr>
05490 <tr><td></td>'.implode('',$iRow).'</tr>
05491 </table>';
05492
05493 return $out;
05494 }
05495
05502 function setFancyDesign() {
05503 $this->fieldTemplate='
05504 <tr>
05505 <td nowrap="nowrap" bgcolor="#F6F2E6">###FIELD_HELP_ICON###<font face="verdana" size="1" color="black"><b>###FIELD_NAME###</b></font>###FIELD_HELP_TEXT###</td>
05506 </tr>
05507 <tr>
05508 <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>
05509 </tr> ';
05510
05511 $this->totalWrap='<table border="0" cellpadding="1" cellspacing="0" bgcolor="black"><tr><td><table border="0" cellpadding="2" cellspacing="0">|</table></td></tr></table>';
05512
05513 $this->palFieldTemplate='
05514 <tr>
05515 <td nowrap="nowrap" bgcolor="#ABBBB4"><font face="verdana" size="1" color="black">###FIELD_PALETTE###</font></td>
05516 </tr> ';
05517 $this->palFieldTemplateHeader='
05518 <tr>
05519 <td nowrap="nowrap" bgcolor="#F6F2E6"><font face="verdana" size="1" color="black"><b>###FIELD_HEADER###</b></font></td>
05520 </tr> ';
05521 }
05522 }
05523
05524 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']) {
05525 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']);
05526 }
05527 ?>