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
00185
00186
00195 class t3lib_TCEforms {
00196
00197
00198 var $palFieldArr = array();
00199 var $disableWizards = 0;
00200 var $isPalettedoc = 0;
00201 var $paletteMargin = 1;
00202 var $defStyle = '';
00203 var $cachedTSconfig = array();
00204 var $cachedTSconfig_fieldLevel = array();
00205 var $transformedRow = array();
00206 var $extJSCODE = '';
00207 var $printNeededJS = array();
00208 var $hiddenFieldAccum=array();
00209 var $TBE_EDITOR_fieldChanged_func='';
00210 var $loadMD5_JS=1;
00211 var $prevBorderStyle='[nothing here...]';
00212 var $allowUpload=0;
00213 var $titleLen=15;
00214 var $defaultLanguageData = array();
00215 var $defaultLanguageData_diff = array();
00216
00217
00218
00219 var $backPath='';
00220 var $returnUrl='';
00221 var $doSaveFieldName='';
00222 var $palettesCollapsed=0;
00223 var $disableRTE=0;
00224 var $globalShowHelp=1;
00225 var $localizationMode='';
00226 var $fieldOrder='';
00227 var $doPrintPalette=1;
00228 var $clipObj=FALSE;
00229 var $enableClickMenu=FALSE;
00230 var $enableTabMenu = FALSE;
00231 var $renderReadonly = FALSE;
00232
00233 var $form_rowsToStylewidth = 9.58;
00234 var $form_largeComp = 1.33;
00235 var $charsPerRow=40;
00236 var $maxTextareaWidth=48;
00237 var $maxInputWidth=48;
00238 var $defaultMultipleSelectorStyle='width:250px;';
00239
00240
00241
00242 var $prependFormFieldNames = 'data';
00243 var $prependFormFieldNames_file = 'data_files';
00244 var $formName = 'editform';
00245
00246
00247
00248
00249 var $perms_clause='';
00250 var $perms_clause_set=0;
00251 var $edit_showFieldHelp='';
00252 var $docLarge=0;
00253 var $clientInfo=array();
00254 var $RTEenabled=0;
00255 var $RTEenabled_notReasons='';
00256 var $RTEcounter = 0;
00257
00258 var $colorScheme;
00259 var $classScheme;
00260 var $defColorScheme;
00261 var $defClassScheme;
00262 var $fieldStyle;
00263 var $borderStyle;
00264
00265 var $commentMessages=array();
00266
00267
00268 var $totalWrap='<hr />|<hr />';
00269 var $fieldTemplate='<b>###FIELD_NAME###</b><br />###FIELD_ITEM###<hr />';
00270 var $sectionWrap='';
00271 var $palFieldTemplateHeader='';
00272 var $palFieldTemplate='';
00273
00274
00275 var $excludeElements='';
00276 var $palettesRendered=array();
00277 var $hiddenFieldListArr = array();
00278 var $requiredFields=array();
00279 var $requiredElements=array();
00280 var $renderDepth=0;
00281 var $savedSchemes=array();
00282
00283
00284 var $additionalCode_pre = array();
00285 var $additionalJS_pre = array();
00286 var $additionalJS_post = array();
00287 var $additionalJS_submit = array();
00288
00289
00290
00291
00292
00293
00294
00300 function t3lib_TCEforms() {
00301 global $CLIENT;
00302
00303 $this->clientInfo = t3lib_div::clientInfo();
00304
00305 $this->RTEenabled = $GLOBALS['BE_USER']->isRTE();
00306 if (!$this->RTEenabled) {
00307 $this->RTEenabled_notReasons = implode(chr(10),$GLOBALS['BE_USER']->RTE_errors);
00308 $this->commentMessages[] = 'RTE NOT ENABLED IN SYSTEM due to:'.chr(10).$this->RTEenabled_notReasons;
00309 }
00310
00311
00312 $this->defColorScheme = array(
00313 $GLOBALS['SOBE']->doc->bgColor,
00314 t3lib_div::modifyHTMLColorAll($GLOBALS['SOBE']->doc->bgColor,-20),
00315 t3lib_div::modifyHTMLColorAll($GLOBALS['SOBE']->doc->bgColor,-10),
00316 'black',
00317 '#666666'
00318 );
00319 $this->defColorScheme = array();
00320
00321
00322 $this->resetSchemes();
00323
00324
00325 $this->defColorScheme = $this->colorScheme;
00326 $this->defClassScheme = $this->classScheme;
00327 }
00328
00334 function initDefaultBEmode() {
00335 global $BE_USER;
00336 $this->prependFormFieldNames = 'data';
00337 $this->formName = 'editform';
00338 $this->setNewBEDesign();
00339 $this->docLarge = $BE_USER->uc['edit_wideDocument'] ? 1 : 0;
00340 $this->edit_showFieldHelp = $BE_USER->uc['edit_showFieldHelp'];
00341
00342 $this->edit_docModuleUpload = $BE_USER->uc['edit_docModuleUpload'];
00343 $this->titleLen = $BE_USER->uc['titleLen'];
00344 }
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00379 function getSoloField($table,$row,$theFieldToReturn) {
00380 global $TCA;
00381
00382 if ($TCA[$table]) {
00383 t3lib_div::loadTCA($table);
00384 $typeNum = $this->getRTypeNum($table,$row);
00385 if ($TCA[$table]['types'][$typeNum]) {
00386 $itemList = $TCA[$table]['types'][$typeNum]['showitem'];
00387 if ($itemList) {
00388 $fields = t3lib_div::trimExplode(',',$itemList,1);
00389 $excludeElements = $this->excludeElements = $this->getExcludeElements($table,$row,$typeNum);
00390
00391 reset($fields);
00392 while(list(,$fieldInfo)=each($fields)) {
00393 $parts = explode(';',$fieldInfo);
00394
00395 $theField = trim($parts[0]);
00396 if (!in_array($theField,$excludeElements) && !strcmp($theField,$theFieldToReturn)) {
00397 if ($TCA[$table]['columns'][$theField]) {
00398 $sField = $this->getSingleField($table,$theField,$row,$parts[1],1,$parts[3],$parts[2]);
00399 return $sField['ITEM'];
00400 }
00401 }
00402 }
00403 }
00404 }
00405 }
00406 }
00407
00418 function getMainFields($table,$row,$depth=0) {
00419 global $TCA, $TYPO3_CONF_VARS;
00420
00421 $this->renderDepth=$depth;
00422
00423
00424 $out_array = array(array());
00425 $out_array_meta = array(array(
00426 'title' => $this->getLL('l_generalTab')
00427 ));
00428
00429 $out_pointer=0;
00430 $out_sheet=0;
00431 $this->palettesRendered=array();
00432 $this->palettesRendered[$this->renderDepth][$table]=array();
00433
00434
00435 $hookObjectsArr = array();
00436 if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getMainFieldsClass'])) {
00437 foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getMainFieldsClass'] as $classRef) {
00438 $hookObjectsArr[] = &t3lib_div::getUserObj($classRef);
00439 }
00440 }
00441
00442
00443 foreach ($hookObjectsArr as $hookObj) {
00444 if (method_exists($hookObj,'getMainFields_preProcess')) {
00445 $hookObj->getMainFields_preProcess($table,$row,$this);
00446 }
00447 }
00448
00449 if ($TCA[$table]) {
00450
00451
00452 t3lib_div::loadTCA($table);
00453
00454
00455 if ($this->edit_showFieldHelp || $this->doLoadTableDescr($table)) {
00456 $GLOBALS['LANG']->loadSingleTableDescription($table);
00457 }
00458
00459 $typeNum = $this->getRTypeNum($table,$row);
00460
00461
00462 if ($TCA[$table]['types'][$typeNum]) {
00463 $itemList = $TCA[$table]['types'][$typeNum]['showitem'];
00464 if ($itemList) {
00465
00466
00467 $fields = t3lib_div::trimExplode(',',$itemList,1);
00468 if ($this->fieldOrder) {
00469 $fields = $this->rearrange($fields);
00470 }
00471
00472
00473 $excludeElements = $this->excludeElements = $this->getExcludeElements($table,$row,$typeNum);
00474 $fields = $this->mergeFieldsWithAddedFields($fields,$this->getFieldsToAdd($table,$row,$typeNum));
00475
00476
00477 $cc=0;
00478 foreach($fields as $fieldInfo) {
00479
00480 $parts = explode(';',$fieldInfo);
00481
00482
00483 $color_style_parts = t3lib_div::trimExplode('-',$parts[4]);
00484 if (strcmp($color_style_parts[0],'')) {
00485 $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][intval($color_style_parts[0])]);
00486 }
00487 if (strcmp($color_style_parts[1],'')) {
00488 $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][intval($color_style_parts[1])];
00489 if (!isset($this->fieldStyle)) $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
00490 }
00491 if (strcmp($color_style_parts[2],'')) {
00492 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00493 $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][intval($color_style_parts[2])];
00494 if (!isset($this->borderStyle)) $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
00495 }
00496
00497
00498 $theField = $parts[0];
00499 if (!in_array($theField,$excludeElements)) {
00500 if ($TCA[$table]['columns'][$theField]) {
00501 $sFieldPal='';
00502
00503 if ($parts[2] && !isset($this->palettesRendered[$this->renderDepth][$table][$parts[2]])) {
00504 $sFieldPal=$this->getPaletteFields($table,$row,$parts[2]);
00505 $this->palettesRendered[$this->renderDepth][$table][$parts[2]] = 1;
00506 }
00507 $sField = $this->getSingleField($table,$theField,$row,$parts[1],0,$parts[3],$parts[2]);
00508 if ($sField) $sField.=$sFieldPal;
00509
00510 $out_array[$out_sheet][$out_pointer].= $sField;
00511 } elseif ($theField=='--div--') {
00512 if ($cc>0) {
00513 $out_array[$out_sheet][$out_pointer].=$this->getDivider();
00514
00515 if ($this->enableTabMenu && $TCA[$table]['ctrl']['dividers2tabs']) {
00516 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00517 $out_sheet++;
00518 $out_array[$out_sheet] = array();
00519 $out_array_meta[$out_sheet]['title'] = $this->sL($parts[1]);
00520 }
00521 } else {
00522 $out_array_meta[$out_sheet]['title'] = $this->sL($parts[1]);
00523 }
00524 } elseif($theField=='--palette--') {
00525 if ($parts[2] && !isset($this->palettesRendered[$this->renderDepth][$table][$parts[2]])) {
00526
00527 if ($TCA[$table]['palettes'][$parts[2]]['canNotCollapse'] AND $parts[1]) {
00528 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$parts[2],$this->sL($parts[1]));
00529 } else {
00530 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$parts[2],'','',$this->sL($parts[1]));
00531 }
00532 $this->palettesRendered[$this->renderDepth][$table][$parts[2]] = 1;
00533 }
00534 }
00535 }
00536
00537 $cc++;
00538 }
00539 }
00540 }
00541 }
00542
00543
00544 foreach ($hookObjectsArr as $hookObj) {
00545 if (method_exists($hookObj,'getMainFields_postProcess')) {
00546 $hookObj->getMainFields_postProcess($table,$row,$this);
00547 }
00548 }
00549
00550
00551 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00552
00553
00554 $this->resetSchemes();
00555
00556
00557 $mParr = t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['mainpalette']);
00558 $i = 0;
00559 if (count($mParr)) {
00560 foreach ($mParr as $mP) {
00561 if (!isset($this->palettesRendered[$this->renderDepth][$table][$mP])) {
00562 $temp_palettesCollapsed=$this->palettesCollapsed;
00563 $this->palettesCollapsed=0;
00564 $label = ($i==0?$this->getLL('l_generalOptions'):$this->getLL('l_generalOptions_more'));
00565 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$mP,$label);
00566 $this->palettesCollapsed=$temp_palettesCollapsed;
00567 $this->palettesRendered[$this->renderDepth][$table][$mP] = 1;
00568 }
00569 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00570 $i++;
00571 if ($this->renderDepth) {
00572 $this->renderDepth--;
00573 }
00574 }
00575 }
00576
00577
00578
00579 if ($out_sheet>0) {
00580
00581
00582 $parts = array();
00583 foreach($out_array as $idx => $sheetContent) {
00584 $parts[] = array(
00585 'label' => $out_array_meta[$idx]['title'],
00586 'content' => '<table border="0" cellspacing="0" cellpadding="0" width="100%">'.
00587 implode('',$sheetContent).
00588 '</table>'
00589 );
00590 }
00591
00592 return '
00593 <tr>
00594 <td colspan="2">
00595 '.$this->getDynTabMenu($parts, 'TCEforms:'.$table.':'.$row['uid']).'
00596 </td>
00597 </tr>';
00598 } else {
00599 return implode('',$out_array[$out_sheet]);
00600 }
00601 }
00602
00613 function getListedFields($table,$row,$list) {
00614 global $TCA;
00615
00616 t3lib_div::loadTCA($table);
00617 if ($this->edit_showFieldHelp || $this->doLoadTableDescr($table)) {
00618 $GLOBALS['LANG']->loadSingleTableDescription($table);
00619 }
00620
00621 $out='';
00622 $types_fieldConfig=t3lib_BEfunc::getTCAtypes($table,$row,1);
00623
00624 $editFieldList=array_unique(t3lib_div::trimExplode(',',$list,1));
00625 foreach($editFieldList as $theFieldC) {
00626 list($theField,$palFields) = split('\[|\]',$theFieldC);
00627 $theField = trim($theField);
00628 $palFields = trim($palFields);
00629 if ($TCA[$table]['columns'][$theField]) {
00630 $parts = t3lib_div::trimExplode(';',$types_fieldConfig[$theField]['origString']);
00631 $sField= $this->getSingleField($table,$theField,$row,$parts[1],0,$parts[3],0);
00632 $out.= $sField;
00633 } elseif($theField=='--div--') {
00634 $out.=$this->getDivider();
00635 }
00636 if ($palFields) {
00637 $out.=$this->getPaletteFields($table,$row,'','',implode(',',t3lib_div::trimExplode('|',$palFields,1)));
00638 }
00639 }
00640 return $out;
00641 }
00642
00654 function getPaletteFields($table,$row,$palette,$header='',$itemList='',$collapsedHeader='') {
00655 global $TCA;
00656 if (!$this->doPrintPalette) return '';
00657
00658 $out='';
00659 $palParts=array();
00660 t3lib_div::loadTCA($table);
00661
00662
00663 if (!is_array($this->excludeElements)) {
00664 $this->excludeElements = $this->getExcludeElements($table,$row,$this->getRTypeNum($table,$row));
00665 }
00666
00667
00668 if ($TCA[$table] && (is_array($TCA[$table]['palettes'][$palette]) || $itemList)) {
00669 $itemList = $itemList?$itemList:$TCA[$table]['palettes'][$palette]['showitem'];
00670 if ($itemList) {
00671 $fields = t3lib_div::trimExplode(',',$itemList,1);
00672 reset($fields);
00673 while(list(,$fieldInfo)=each($fields)) {
00674 $parts = t3lib_div::trimExplode(';',$fieldInfo);
00675 $theField = $parts[0];
00676
00677 if (!in_array($theField,$this->excludeElements) && $TCA[$table]['columns'][$theField]) {
00678 $this->palFieldArr[$palette][] = $theField;
00679 if ($this->isPalettesCollapsed($table,$palette)) {
00680 $this->hiddenFieldListArr[] = $theField;
00681 }
00682
00683 $part=$this->getSingleField($table,$theField,$row,$parts[1],1,'',$parts[2]);
00684 if (is_array($part)) {
00685 $palParts[]=$part;
00686 }
00687 }
00688 }
00689 }
00690 }
00691
00692 if (count($palParts)) {
00693 if ($header) {
00694 $out.= $this->intoTemplate(array(
00695 'HEADER' => htmlspecialchars($header)
00696 ),
00697 $this->palFieldTemplateHeader
00698 );
00699 }
00700 $out.= $this->intoTemplate(array(
00701 'PALETTE' => $this->printPalette($palParts)
00702 ),
00703 $this->palFieldTemplate
00704 );
00705 }
00706
00707 if ($this->isPalettesCollapsed($table,$palette) && $collapsedHeader) {
00708 $pC= $this->intoTemplate(array(
00709 '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),
00710 ),
00711 $this->palFieldTemplate
00712 );
00713 $out.=$pC;
00714 }
00715 return $out;
00716 }
00717
00730 function getSingleField($table,$field,$row,$altName='',$palette=0,$extra='',$pal=0) {
00731 global $TCA,$BE_USER;
00732
00733 $out = '';
00734 $PA = array();
00735 $PA['altName'] = $altName;
00736 $PA['palette'] = $palette;
00737 $PA['extra'] = $extra;
00738 $PA['pal'] = $pal;
00739
00740
00741 t3lib_div::loadTCA($table);
00742
00743
00744 $PA['fieldConf'] = $TCA[$table]['columns'][$field];
00745 $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00746
00747
00748 if ( is_array($PA['fieldConf']) &&
00749 (!$PA['fieldConf']['exclude'] || $BE_USER->check('non_exclude_fields',$table.':'.$field)) &&
00750 $PA['fieldConf']['config']['form_type']!='passthrough' &&
00751 ($this->RTEenabled || !$PA['fieldConf']['config']['showIfRTE']) &&
00752 (!$PA['fieldConf']['displayCond'] || $this->isDisplayCondition($PA['fieldConf']['displayCond'],$row)) &&
00753 (!$TCA[$table]['ctrl']['languageField'] || $PA['fieldConf']['l10n_display'] || strcmp($PA['fieldConf']['l10n_mode'],'exclude') || $row[$TCA[$table]['ctrl']['languageField']]<=0) &&
00754 (!$TCA[$table]['ctrl']['languageField'] || !$this->localizationMode || $this->localizationMode===$PA['fieldConf']['l10n_cat'])
00755 ) {
00756
00757
00758
00759
00760 $PA['fieldTSConfig'] = $this->setTSconfig($table,$row,$field);
00761
00762
00763 if (!$PA['fieldTSConfig']['disabled']) {
00764
00765
00766 $PA['itemFormElName']=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']';
00767 $PA['itemFormElName_file']=$this->prependFormFieldNames_file.'['.$table.']['.$row['uid'].']['.$field.']';
00768 $PA['itemFormElValue']=$row[$field];
00769
00770
00771 if ($PA['fieldConf']['l10n_display'] AND t3lib_div::inList($PA['fieldConf']['l10n_display'], 'defaultAsReadonly') AND $row[$TCA[$table]['ctrl']['languageField']]) {
00772 $PA['fieldConf']['config']['readOnly'] = true;
00773 $PA['itemFormElValue'] = $this->defaultLanguageData[$table.':'.$row['uid']][$field];
00774 }
00775
00776
00777 if (
00778 ($TCA[$table]['ctrl']['type'] && !strcmp($field,$TCA[$table]['ctrl']['type'])) ||
00779 ($TCA[$table]['ctrl']['requestUpdate'] && t3lib_div::inList($TCA[$table]['ctrl']['requestUpdate'],$field))) {
00780 if($GLOBALS['BE_USER']->jsConfirmation(1)) {
00781 $alertMsgOnChange = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){ TBE_EDITOR_submitForm() };';
00782 } else {
00783 $alertMsgOnChange = 'if (TBE_EDITOR_checkSubmit(-1)){ TBE_EDITOR_submitForm() };';
00784 }
00785 } else {
00786 $alertMsgOnChange = '';
00787 }
00788
00789
00790 if (in_array($field,$this->hiddenFieldListArr)) {
00791 $this->hiddenFieldAccum[]='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00792 } else {
00793
00794
00795 if (!$PA['palette']) {
00796 if ($PA['pal'] && $this->isPalettesCollapsed($table,$PA['pal'])) {
00797 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);
00798 } else {
00799 $thePalIcon = '';
00800 $palJSfunc = '';
00801 }
00802 }
00803
00804 $PA['onFocus'] = ($palJSfunc && !$BE_USER->uc['dontShowPalettesOnFocusInAB']) ? ' onfocus="'.htmlspecialchars($palJSfunc).'"' : '';
00805
00806
00807 $item='';
00808 $PA['label'] = $PA['altName'] ? $PA['altName'] : $PA['fieldConf']['label'];
00809 $PA['label'] = $this->sL($PA['label']);
00810
00811 $PA['fieldChangeFunc']=array();
00812 $PA['fieldChangeFunc']['TBE_EDITOR_fieldChanged'] = "TBE_EDITOR_fieldChanged('".$table."','".$row['uid']."','".$field."','".$PA['itemFormElName']."');";
00813 $PA['fieldChangeFunc']['alert']=$alertMsgOnChange;
00814
00815
00816 $item = $this->getSingleField_SW($table,$field,$row,$PA);
00817
00818
00819
00820 if ($PA['fieldConf']['l10n_display'] && (t3lib_div::inList($PA['fieldConf']['l10n_display'], 'hideDiff') || t3lib_div::inList($PA['fieldConf']['l10n_display'], 'defaultAsReadonly'))) {
00821 $renderLanguageDiff = false;
00822 } else {
00823 $renderLanguageDiff = true;
00824 }
00825
00826 if ($renderLanguageDiff) {
00827 $item = $this->renderDefaultLanguageContent($table,$field,$row,$item);
00828 $item = $this->renderDefaultLanguageDiff($table,$field,$row,$item);
00829 }
00830
00831 $PA['label'] = t3lib_div::deHSCentities(htmlspecialchars($PA['label']));
00832 if (t3lib_div::testInt($row['uid']) && $PA['fieldTSConfig']['linkTitleToSelf']) {
00833 $lTTS_url = $this->backPath.'alt_doc.php?edit['.$table.']['.$row['uid'].']=edit&columnsOnly='.$field.
00834 ($PA['fieldTSConfig']['linkTitleToSelf.']['returnUrl']?'&returnUrl='.rawurlencode($this->thisReturnUrl()):'');
00835 $PA['label'] = '<a href="'.htmlspecialchars($lTTS_url).'">'.$PA['label'].'</a>';
00836 }
00837
00838
00839 if ($PA['fieldConf']['config']['form_type']=='user' && $PA['fieldConf']['config']['noTableWrapping']) {
00840 $out = $item;
00841 } elseif ($PA['palette']) {
00842
00843 $out=array(
00844 'NAME'=>$PA['label'],
00845 'ID'=>$row['uid'],
00846 'FIELD'=>$field,
00847 'TABLE'=>$table,
00848 'ITEM'=>$item,
00849 'HELP_ICON' => $this->helpTextIcon($table,$field,1)
00850 );
00851 $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00852 } else {
00853
00854 $out=array(
00855 'NAME'=>$PA['label'],
00856 'ITEM'=>$item,
00857 'TABLE'=>$table,
00858 'ID'=>$row['uid'],
00859 'HELP_ICON'=>$this->helpTextIcon($table,$field),
00860 'HELP_TEXT'=>$this->helpText($table,$field),
00861 'PAL_LINK_ICON'=>$thePalIcon,
00862 'FIELD'=>$field
00863 );
00864 $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00865
00866 $out=$this->intoTemplate($out);
00867 }
00868 }
00869 } else $this->commentMessages[]=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']: Disabled by TSconfig';
00870 }
00871
00872 return $out;
00873 }
00874
00886 function getSingleField_SW($table,$field,$row,&$PA) {
00887 $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00888
00889 switch($PA['fieldConf']['config']['form_type']) {
00890 case 'input':
00891 $item = $this->getSingleField_typeInput($table,$field,$row,$PA);
00892 break;
00893 case 'text':
00894 $item = $this->getSingleField_typeText($table,$field,$row,$PA);
00895 break;
00896 case 'check':
00897 $item = $this->getSingleField_typeCheck($table,$field,$row,$PA);
00898 break;
00899 case 'radio':
00900 $item = $this->getSingleField_typeRadio($table,$field,$row,$PA);
00901 break;
00902 case 'select':
00903 $item = $this->getSingleField_typeSelect($table,$field,$row,$PA);
00904 break;
00905 case 'group':
00906 $item = $this->getSingleField_typeGroup($table,$field,$row,$PA);
00907 break;
00908 case 'none':
00909 $item = $this->getSingleField_typeNone($table,$field,$row,$PA);
00910 break;
00911 case 'user':
00912 $item = $this->getSingleField_typeUser($table,$field,$row,$PA);
00913 break;
00914 case 'flex':
00915 $item = $this->getSingleField_typeFlex($table,$field,$row,$PA);
00916 break;
00917 default:
00918 $item = $this->getSingleField_typeUnknown($table,$field,$row,$PA);
00919 break;
00920 }
00921
00922 return $item;
00923 }
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00959 function getSingleField_typeInput($table,$field,$row,&$PA) {
00960
00961
00962
00963 $config = $PA['fieldConf']['config'];
00964
00965 # $specConf = $this->getSpecConfForField($table,$row,$field);
00966 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
00967 $size = t3lib_div::intInRange($config['size']?$config['size']:30,5,$this->maxInputWidth);
00968 $evalList = t3lib_div::trimExplode(',',$config['eval'],1);
00969
00970
00971 if($this->renderReadonly || $config['readOnly']) {
00972 $itemFormElValue = $PA['itemFormElValue'];
00973 if (in_array('date',$evalList)) {
00974 $config['format'] = 'date';
00975 } elseif (in_array('date',$evalList)) {
00976 $config['format'] = 'date';
00977 } elseif (in_array('datetime',$evalList)) {
00978 $config['format'] = 'datetime';
00979 } elseif (in_array('time',$evalList)) {
00980 $config['format'] = 'time';
00981 }
00982 if (in_array('password',$evalList)) {
00983 $itemFormElValue = $itemFormElValue ? '*********' : '';
00984 }
00985 return $this->getSingleField_typeNone_render($config, $itemFormElValue);
00986 }
00987
00988 if (in_array('required',$evalList)) {
00989 $this->requiredFields[$table.'_'.$row['uid'].'_'.$field]=$PA['itemFormElName'];
00990 }
00991
00992 $paramsList = "'".$PA['itemFormElName']."','".implode(',',$evalList)."','".trim($config['is_in'])."',".(isset($config['checkbox'])?1:0).",'".$config['checkbox']."'";
00993 if (isset($config['checkbox'])) {
00994
00995 $thisMidnight = mktime(0,0,0);
00996 $checkSetValue = in_array('date',$evalList) ? $thisMidnight : '';
00997 $checkSetValue = in_array('datetime',$evalList) ? time() : $checkSetValue;
00998
00999 $cOnClick = 'typo3FormFieldGet('.$paramsList.',1,\''.$checkSetValue.'\');'.implode('',$PA['fieldChangeFunc']);
01000 $item.='<input type="checkbox"'.$this->insertDefStyle('check').' name="'.$PA['itemFormElName'].'_cb" onclick="'.htmlspecialchars($cOnClick).'" />';
01001 }
01002
01003 $PA['fieldChangeFunc'] = array_merge(array('typo3FormFieldGet'=>'typo3FormFieldGet('.$paramsList.');'), $PA['fieldChangeFunc']);
01004 $mLgd = ($config['max']?$config['max']:256);
01005 $iOnChange = implode('',$PA['fieldChangeFunc']);
01006 $item.='<input type="text" name="'.$PA['itemFormElName'].'_hr" value=""'.$this->formWidth($size).' maxlength="'.$mLgd.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].' />';
01007 $item.='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01008 $this->extJSCODE.='typo3FormFieldSet('.$paramsList.');';
01009
01010
01011 foreach ($evalList as $evalData) {
01012 if (substr($evalData, 0, 3) == 'tx_') {
01013 $evalObj = t3lib_div::getUserObj($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tce']['formevals'][$evalData].':&'.$evalData);
01014 if(is_object($evalObj) && method_exists($evalObj, 'returnFieldJS')) {
01015 $this->extJSCODE .= "\n\nfunction ".$evalData."(value) {\n".$evalObj->returnFieldJS()."\n}\n";
01016 }
01017 }
01018 }
01019
01020
01021 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'_hr" value="" />';
01022 $altItem.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01023
01024
01025 $item= $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'].'_hr',$specConf);
01026
01027 return $item;
01028 }
01029
01040 function getSingleField_typeText($table,$field,$row,&$PA) {
01041
01042
01043 $config = $PA['fieldConf']['config'];
01044
01045 if($this->renderReadonly || $config['readOnly']) {
01046 return $this->getSingleField_typeNone_render($config, $PA['itemFormElValue']);
01047 }
01048
01049
01050 $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
01051
01052
01053 $origRows = $rows = t3lib_div::intInRange($config['rows'] ? $config['rows'] : 5, 1, 20);
01054 if (strlen($PA['itemFormElValue']) > $this->charsPerRow*2) {
01055 $cols = $this->maxTextareaWidth;
01056 $rows = t3lib_div::intInRange(round(strlen($PA['itemFormElValue'])/$this->charsPerRow), count(explode(chr(10),$PA['itemFormElValue'])), 20);
01057 if ($rows<$origRows) $rows = $origRows;
01058 }
01059
01060
01061 $RTEwasLoaded = 0;
01062 $RTEwouldHaveBeenLoaded = 0;
01063
01064
01065 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01066
01067
01068 $altItem = '<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01069
01070
01071 if ($this->RTEenabled) {
01072 $p = t3lib_BEfunc::getSpecConfParametersFromArray($specConf['rte_transform']['parameters']);
01073 if (isset($specConf['richtext']) && (!$p['flag'] || !$row[$p['flag']])) {
01074 t3lib_BEfunc::fixVersioningPid($table,$row);
01075 list($tscPID,$thePidValue) = $this->getTSCpid($table,$row['uid'],$row['pid']);
01076
01077
01078 if ($thePidValue >= 0) {
01079 $RTEsetup = $GLOBALS['BE_USER']->getTSConfig('RTE',t3lib_BEfunc::getPagesTSconfig($tscPID));
01080 $RTEtypeVal = t3lib_BEfunc::getTCAtypeValue($table,$row);
01081 $thisConfig = t3lib_BEfunc::RTEsetup($RTEsetup['properties'],$table,$field,$RTEtypeVal);
01082
01083 if (!$thisConfig['disabled']) {
01084 if (!$this->disableRTE) {
01085 $this->RTEcounter++;
01086
01087
01088 $eFile = t3lib_parsehtml_proc::evalWriteFile($specConf['static_write'], $row);
01089 $RTErelPath = is_array($eFile) ? dirname($eFile['relEditFile']) : '';
01090
01091
01092 $RTEobj = &t3lib_BEfunc::RTEgetObj();
01093 $item = $RTEobj->drawRTE($this,$table,$field,$row,$PA,$specConf,$thisConfig,$RTEtypeVal,$RTErelPath,$thePidValue);
01094
01095
01096 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf,1);
01097
01098 $RTEwasLoaded = 1;
01099 } else {
01100 $RTEwouldHaveBeenLoaded = 1;
01101 $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!)';
01102 }
01103 } else $this->commentMessages[] = $PA['itemFormElName'].': RTE is disabled by the Page TSconfig, "RTE"-key (eg. by RTE.default.disabled=0 or such)';
01104 } else $this->commentMessages[] = $PA['itemFormElName'].': PID value could NOT be fetched. Rare error, normally with new records.';
01105 } else {
01106 if (!isset($specConf['richtext'])) $this->commentMessages[] = $PA['itemFormElName'].': RTE was not configured for this field in TCA-types';
01107 if (!(!$p['flag'] || !$row[$p['flag']])) $this->commentMessages[] = $PA['itemFormElName'].': Field-flag ('.$PA['flag'].') has been set to disable RTE!';
01108 }
01109 }
01110
01111
01112 if (!$RTEwasLoaded) {
01113 if ($specConf['rte_only']) {
01114 $item = '<p><em>'.htmlspecialchars($this->getLL('l_noRTEfound')).'</em></p>';
01115 } else {
01116 if ($specConf['nowrap']) {
01117 $wrap = 'off';
01118 } else {
01119 $wrap = ($config['wrap'] ? $config['wrap'] : 'virtual');
01120 }
01121
01122 $classes = array();
01123 if ($specConf['fixed-font']) { $classes[] = 'fixed-font'; }
01124 if ($specConf['enable-tab']) { $classes[] = 'enable-tab'; }
01125
01126 if (count($classes)) {
01127 $class = ' class="'.implode(' ',$classes).'"';
01128 } else $class='';
01129
01130 $iOnChange = implode('',$PA['fieldChangeFunc']);
01131 $item.= '
01132 <textarea name="'.$PA['itemFormElName'].'"'.$this->formWidthText($cols,$wrap).$class.' rows="'.$rows.'" wrap="'.$wrap.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].'>'.
01133 t3lib_div::formatForTextarea($PA['itemFormElValue']).
01134 '</textarea>';
01135 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf,$RTEwouldHaveBeenLoaded);
01136 }
01137 }
01138
01139
01140 return $item;
01141 }
01142
01153 function getSingleField_typeCheck($table,$field,$row,&$PA) {
01154 $config = $PA['fieldConf']['config'];
01155
01156 $disabled = '';
01157 if($this->renderReadonly || $config['readOnly']) {
01158 $disabled = ' disabled="disabled"';
01159 }
01160
01161
01162 $selItems = $this->initItemArray($PA['fieldConf']);
01163 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01164
01165 if (!count($selItems)) {
01166 $selItems[]=array('','');
01167 }
01168 $thisValue = intval($PA['itemFormElValue']);
01169
01170 $cols = intval($config['cols']);
01171 if ($cols > 1) {
01172 $item.= '<table border="0" cellspacing="0" cellpadding="0" class="typo3-TCEforms-checkboxArray">';
01173 for ($c=0;$c<count($selItems);$c++) {
01174 $p = $selItems[$c];
01175 if(!($c%$cols)) { $item.='<tr>'; }
01176 $cBP = $this->checkBoxParams($PA['itemFormElName'],$thisValue,$c,count($selItems),implode('',$PA['fieldChangeFunc']));
01177 $cBName = $PA['itemFormElName'].'_'.$c;
01178 $item.= '<td nowrap="nowrap">'.
01179 '<input type="checkbox"'.$this->insertDefStyle('check').' value="1" name="'.$cBName.'"'.$cBP.$disabled.' />'.
01180 $this->wrapLabels(htmlspecialchars($p[0]).' ').
01181 '</td>';
01182 if(($c%$cols)+1==$cols) {$item.='</tr>';}
01183 }
01184 if ($c%$cols) {
01185 $rest=$cols-($c%$cols);
01186 for ($c=0;$c<$rest;$c++) {
01187 $item.= '<td></td>';
01188 }
01189 if ($c>0) { $item.= '</tr>'; }
01190 }
01191 $item.= '</table>';
01192 } else {
01193 for ($c=0;$c<count($selItems);$c++) {
01194 $p = $selItems[$c];
01195 $cBP = $this->checkBoxParams($PA['itemFormElName'],$thisValue,$c,count($selItems),implode('',$PA['fieldChangeFunc']));
01196 $cBName = $PA['itemFormElName'].'_'.$c;
01197 $item.= ($c>0?'<br />':'').
01198 '<input type="checkbox"'.$this->insertDefStyle('check').' value="1" name="'.$cBName.'"'.$cBP.$PA['onFocus'].$disabled.' />'.
01199 htmlspecialchars($p[0]);
01200 }
01201 }
01202 if (!$disabled) {
01203 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($thisValue).'" />';
01204 }
01205
01206 return $item;
01207 }
01208
01219 function getSingleField_typeRadio($table,$field,$row,&$PA) {
01220 $config = $PA['fieldConf']['config'];
01221
01222 $disabled = '';
01223 if($this->renderReadonly || $config['readOnly']) {
01224 $disabled = ' disabled="disabled"';
01225 }
01226
01227
01228 $selItems = $this->initItemArray($PA['fieldConf']);
01229 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01230
01231
01232 for ($c=0;$c<count($selItems);$c++) {
01233 $p = $selItems[$c];
01234 $rOnClick = implode('',$PA['fieldChangeFunc']);
01235 $rChecked = (!strcmp($p[1],$PA['itemFormElValue'])?' checked="checked"':'');
01236 $item.= '<input type="radio"'.$this->insertDefStyle('radio').' name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($p[1]).'" onclick="'.htmlspecialchars($rOnClick).'"'.$rChecked.$PA['onFocus'].$disabled.' />'.
01237 htmlspecialchars($p[0]).
01238 '<br />';
01239 }
01240
01241 return $item;
01242 }
01243
01254 function getSingleField_typeSelect($table,$field,$row,&$PA) {
01255 global $TCA;
01256
01257
01258 $config = $PA['fieldConf']['config'];
01259
01260 $disabled = '';
01261 if($this->renderReadonly || $config['readOnly']) {
01262 $disabled = ' disabled="disabled"';
01263 }
01264
01265
01266 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01267
01268
01269 $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($PA['fieldConf']),$PA['fieldConf'],$this->setTSconfig($table,$row),$field);
01270 $selItems = $this->addItems($selItems,$PA['fieldTSConfig']['addItems.']);
01271 if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01272
01273
01274 $removeItems = t3lib_div::trimExplode(',',$PA['fieldTSConfig']['removeItems'],1);
01275 foreach($selItems as $tk => $p) {
01276
01277
01278 $languageDeny = $TCA[$table]['ctrl']['languageField'] && !strcmp($TCA[$table]['ctrl']['languageField'], $field) && !$GLOBALS['BE_USER']->checkLanguageAccess($p[1]);
01279 $authModeDeny = $config['form_type']=='select' && $config['authMode'] && !$GLOBALS['BE_USER']->checkAuthMode($table,$field,$p[1],$config['authMode']);
01280 if (in_array($p[1],$removeItems) || $languageDeny || $authModeDeny) {
01281 unset($selItems[$tk]);
01282 } elseif (isset($PA['fieldTSConfig']['altLabels.'][$p[1]])) {
01283 $selItems[$tk][0]=$this->sL($PA['fieldTSConfig']['altLabels.'][$p[1]]);
01284 }
01285
01286
01287 if ($table.'.'.$field == 'pages.doktype') {
01288 if (!($GLOBALS['BE_USER']->isAdmin() || t3lib_div::inList($GLOBALS['BE_USER']->groupData['pagetypes_select'],$p[1]))) {
01289 unset($selItems[$tk]);
01290 }
01291 }
01292 }
01293
01294
01295 $nMV_label = isset($PA['fieldTSConfig']['noMatchingValue_label']) ? $this->sL($PA['fieldTSConfig']['noMatchingValue_label']) : '[ '.$this->getLL('l_noMatchingValue').' ]';
01296
01297
01298 $maxitems = intval($config['maxitems']);
01299
01300
01301 if ($maxitems<=1) {
01302 $item = $this->getSingleField_typeSelect_single($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01303 } elseif (!strcmp($config['renderMode'],'checkbox')) {
01304 $item = $this->getSingleField_typeSelect_checkbox($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01305 } elseif (!strcmp($config['renderMode'],'singlebox')) {
01306 $item = $this->getSingleField_typeSelect_singlebox($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01307 } else {
01308 $item = $this->getSingleField_typeSelect_multiple($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01309 }
01310
01311
01312 if (!$disabled) {
01313 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01314 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
01315 }
01316
01317 return $item;
01318 }
01319
01334 function getSingleField_typeSelect_single($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01335
01336
01337 $c = 0;
01338 $sI = 0;
01339 $noMatchingValue = 1;
01340 $opt = array();
01341 $selicons = array();
01342 $onlySelectedIconShown = 0;
01343 $size = intval($config['size']);
01344
01345 $disabled = '';
01346 if($this->renderReadonly || $config['readOnly']) {
01347 $disabled = ' disabled="disabled"';
01348 $onlySelectedIconShown = 1;
01349 }
01350
01351
01352 if ($config['suppress_icons']=='IF_VALUE_FALSE') {
01353 $suppressIcons = !$PA['itemFormElValue'] ? 1 : 0;
01354 } elseif ($config['suppress_icons']=='ONLY_SELECTED') {
01355 $suppressIcons=0;
01356 $onlySelectedIconShown=1;
01357 } elseif ($config['suppress_icons']) {
01358 $suppressIcons = 1;
01359 } else $suppressIcons = 0;
01360
01361
01362 foreach($selItems as $p) {
01363 $sM = (!strcmp($PA['itemFormElValue'],$p[1])?' selected="selected"':'');
01364 if ($sM) {
01365 $sI = $c;
01366 $noMatchingValue = 0;
01367 }
01368
01369
01370 if ($config['iconsInOptionTags']) {
01371 $styleAttrValue = $this->optionTagStyle($p[2]);
01372 }
01373
01374
01375 $opt[]= '<option value="'.htmlspecialchars($p[1]).'"'.
01376 $sM.
01377 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01378 (!strcmp($p[1],'--div--') ? ' class="c-divider"' : '').
01379 '>'.t3lib_div::deHSCentities(htmlspecialchars($p[0])).'</option>';
01380
01381
01382 if ($p[2] && !$suppressIcons && (!$onlySelectedIconShown || $sM)) {
01383 list($selIconFile,$selIconInfo)=$this->getIcon($p[2]);
01384 $iOnClick = $this->elName($PA['itemFormElName']).'.selectedIndex='.$c.'; '.implode('',$PA['fieldChangeFunc']).$this->blur().'return false;';
01385 $selicons[]=array(
01386 (!$onlySelectedIconShown ? '<a href="#" onclick="'.htmlspecialchars($iOnClick).'">' : '').
01387 '<img src="'.$selIconFile.'" '.$selIconInfo[3].' vspace="2" border="0" title="'.htmlspecialchars($p[0]).'" alt="'.htmlspecialchars($p[0]).'" />'.
01388 (!$onlySelectedIconShown ? '</a>' : ''),
01389 $c,$sM);
01390 }
01391 $c++;
01392 }
01393
01394
01395 if ($PA['itemFormElValue'] && $noMatchingValue && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01396 $nMV_label = @sprintf($nMV_label, $PA['itemFormElValue']);
01397 $opt[]= '<option value="'.htmlspecialchars($PA['itemFormElValue']).'" selected="selected">'.htmlspecialchars($nMV_label).'</option>';
01398 }
01399
01400
01401 $sOnChange = 'if (this.options[this.selectedIndex].value==\'--div--\') {this.selectedIndex='.$sI.';} '.implode('',$PA['fieldChangeFunc']);
01402 if(!$disabled) {
01403 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_selIconVal" value="'.htmlspecialchars($sI).'" />';
01404 }
01405 $item.= '<select name="'.$PA['itemFormElName'].'"'.
01406 $this->insertDefStyle('select').
01407 ($size?' size="'.$size.'"':'').
01408 ' onchange="'.htmlspecialchars($sOnChange).'"'.
01409 $PA['onFocus'].$disabled.'>';
01410 $item.= implode('',$opt);
01411 $item.= '</select>';
01412
01413
01414 if (count($selicons)) {
01415 $item.='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-selectIcons">';
01416 $selicon_cols = intval($config['selicon_cols']);
01417 if (!$selicon_cols) $selicon_cols=count($selicons);
01418 $sR = ceil(count($selicons)/$selicon_cols);
01419 $selicons = array_pad($selicons,$sR*$selicon_cols,'');
01420 for($sa=0;$sa<$sR;$sa++) {
01421 $item.='<tr>';
01422 for($sb=0;$sb<$selicon_cols;$sb++) {
01423 $sk=($sa*$selicon_cols+$sb);
01424 $imgN = 'selIcon_'.$table.'_'.$row['uid'].'_'.$field.'_'.$selicons[$sk][1];
01425 $imgS = ($selicons[$sk][2]?$this->backPath.'gfx/content_selected.gif':'clear.gif');
01426 $item.='<td><img name="'.htmlspecialchars($imgN).'" src="'.$imgS.'" width="7" height="10" alt="" /></td>';
01427 $item.='<td>'.$selicons[$sk][0].'</td>';
01428 }
01429 $item.='</tr>';
01430 }
01431 $item.='</table>';
01432 }
01433
01434 return $item;
01435 }
01436
01451 function getSingleField_typeSelect_checkbox($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01452
01453
01454 $itemArray = array_flip($this->extractValuesOnlyFromValueLabelList($PA['itemFormElValue']));
01455
01456 $disabled = '';
01457 if($this->renderReadonly || $config['readOnly']) {
01458 $disabled = ' disabled="disabled"';
01459 }
01460
01461
01462 $tRows = array();
01463 $c=0;
01464 if (!$disabled) {
01465 $sOnChange = implode('',$PA['fieldChangeFunc']);
01466 $setAll = array();
01467 foreach($selItems as $p) {
01468
01469 if (!strcmp($p[1],'--div--')) {
01470 if (count($setAll)) {
01471 $tRows[] = '
01472 <tr>
01473 <td colspan="2">'.
01474 '<a href="#" onclick="'.htmlspecialchars(implode('',$setAll).' return false;').'">'.
01475 htmlspecialchars($this->getLL('l_setAllCheckboxes')).
01476 '</a></td>
01477 </tr>';
01478 $setAll = array();
01479 }
01480
01481 $tRows[] = '
01482 <tr class="c-header">
01483 <td colspan="2">'.htmlspecialchars($p[0]).'</td>
01484 </tr>';
01485 } else {
01486
01487 $sM = '';
01488 if (isset($itemArray[$p[1]])) {
01489 $sM = ' checked="checked"';
01490 unset($itemArray[$p[1]]);
01491 }
01492
01493
01494 $selIconFile = '';
01495 if ($p[2]) {
01496 list($selIconFile,$selIconInfo) = $this->getIcon($p[2]);
01497 }
01498
01499
01500 $onClickCell = $this->elName($PA['itemFormElName'].'['.$c.']').'.checked=!'.$this->elName($PA['itemFormElName'].'['.$c.']').'.checked;';
01501 $onClick = 'this.attributes.getNamedItem("class").nodeValue = '.$this->elName($PA['itemFormElName'].'['.$c.']').'.checked ? "c-selectedItem" : "";';
01502 $setAll[] = $this->elName($PA['itemFormElName'].'['.$c.']').'.checked=1;';
01503 $tRows[] = '
01504 <tr class="'.($sM ? 'c-selectedItem' : '').'" onclick="'.htmlspecialchars($onClick).'" style="cursor: pointer;">
01505 <td><input type="checkbox"'.$this->insertDefStyle('check').' name="'.htmlspecialchars($PA['itemFormElName'].'['.$c.']').'" value="'.htmlspecialchars($p[1]).'"'.$sM.' onclick="'.htmlspecialchars($sOnChange).'"'.$PA['onFocus'].' /></td>
01506 <td class="c-labelCell" onclick="'.htmlspecialchars($onClickCell).'">'.
01507 ($selIconFile ? '<img src="'.$selIconFile.'" '.$selIconInfo[3].' vspace="2" border="0" class="absmiddle" style="margin-right: 4px;" alt="" />' : '').
01508 t3lib_div::deHSCentities(htmlspecialchars($p[0])).
01509 (strcmp($p[3],'') ? '<br/><p class="c-descr">'.nl2br(trim(htmlspecialchars($p[3]))).'</p>' : '').
01510 '</td>
01511 </tr>';
01512 $c++;
01513 }
01514 }
01515
01516
01517 if (count($setAll)) {
01518 $tRows[] = '
01519 <tr>
01520 <td colspan="2">'.
01521 '<a href="#" onclick="'.htmlspecialchars(implode('',$setAll).' return false;').'">'.
01522 htmlspecialchars($this->getLL('l_setAllCheckboxes')).
01523 '</a></td>
01524 </tr>';
01525 }
01526 }
01527
01528
01529 if (count($itemArray) && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01530 foreach($itemArray as $theNoMatchValue => $temp) {
01531
01532 array_unshift($tRows,'
01533 <tr class="c-invalidItem">
01534 <td><input type="checkbox"'.$this->insertDefStyle('check').' name="'.htmlspecialchars($PA['itemFormElName'].'['.$c.']').'" value="'.htmlspecialchars($theNoMatchValue).'" checked="checked" onclick="'.htmlspecialchars($sOnChange).'"'.$PA['onFocus'].$disabled.' /></td>
01535 <td class="c-labelCell">'.
01536 t3lib_div::deHSCentities(htmlspecialchars(@sprintf($nMV_label, $theNoMatchValue))).
01537 '</td>
01538 </tr>');
01539 $c++;
01540 }
01541 }
01542
01543
01544 $item.='<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="" />';
01545
01546
01547 $item.= '
01548 <table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-select-checkbox">'.
01549 implode('',$tRows).'
01550 </table>
01551 ';
01552
01553 return $item;
01554 }
01555
01570 function getSingleField_typeSelect_singlebox($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01571
01572
01573 $itemArray = array_flip($this->extractValuesOnlyFromValueLabelList($PA['itemFormElValue']));
01574
01575 $disabled = '';
01576 if($this->renderReadonly || $config['readOnly']) {
01577 $disabled = ' disabled="disabled"';
01578 }
01579
01580
01581 $opt = array();
01582 $restoreCmd = array();
01583 $c = 0;
01584 foreach($selItems as $p) {
01585
01586 $sM = '';
01587 if (isset($itemArray[$p[1]])) {
01588 $sM = ' selected="selected"';
01589 $restoreCmd[] = $this->elName($PA['itemFormElName'].'[]').'.options['.$c.'].selected=1;';
01590 unset($itemArray[$p[1]]);
01591 }
01592
01593
01594 $nonSel = '';
01595 if (!strcmp($p[1],'--div--')) {
01596 $nonSel = ' onclick="this.selected=0;" class="c-divider"';
01597 }
01598
01599
01600 if ($config['iconsInOptionTags']) {
01601 $styleAttrValue = $this->optionTagStyle($p[2]);
01602 }
01603
01604
01605 $opt[] = '<option value="'.htmlspecialchars($p[1]).'"'.
01606 $sM.
01607 $nonSel.
01608 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01609 '>'.t3lib_div::deHSCentities(htmlspecialchars($p[0])).'</option>';
01610 $c++;
01611 }
01612
01613
01614 if (count($itemArray) && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01615 foreach($itemArray as $theNoMatchValue => $temp) {
01616
01617 array_unshift($opt,'<option value="'.htmlspecialchars($theNoMatchValue).'" selected="selected">'.t3lib_div::deHSCentities(htmlspecialchars(@sprintf($nMV_label, $theNoMatchValue))).'</option>');
01618 }
01619 }
01620
01621
01622 $sOnChange = implode('',$PA['fieldChangeFunc']);
01623 $selector_itemListStyle = isset($config['itemListStyle']) ? ' style="'.htmlspecialchars($config['itemListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"';
01624 $size = intval($config['size']);
01625 $size = $config['autoSizeMax'] ? t3lib_div::intInRange(count($selItems)+1,t3lib_div::intInRange($size,1),$config['autoSizeMax']) : $size;
01626 $selectBox = '<select name="'.$PA['itemFormElName'].'[]"'.
01627 $this->insertDefStyle('select').
01628 ($size ? ' size="'.$size.'"' : '').
01629 ' multiple="multiple" onchange="'.htmlspecialchars($sOnChange).'"'.
01630 $PA['onFocus'].
01631 $selector_itemListStyle.
01632 $disabled.'>
01633 '.
01634 implode('
01635 ',$opt).'
01636 </select>';
01637
01638
01639 if (!$disabled) {
01640 $item.='<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="" />';
01641 }
01642
01643
01644 $item.= '
01645 <table border="0" cellspacing="0" cellpadding="0" width="1" class="typo3-TCEforms-select-singlebox">
01646 <tr>
01647 <td>
01648 '.$selectBox.'
01649 <br/>
01650 <em>'.
01651 htmlspecialchars($this->getLL('l_holdDownCTRL')).
01652 '</em>
01653 </td>
01654 <td valign="top">
01655 <a href="#" onclick="'.htmlspecialchars($this->elName($PA['itemFormElName'].'[]').'.selectedIndex=-1;'.implode('',$restoreCmd).' return false;').'">'.
01656 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/history.gif','width="13" height="12"').' title="'.htmlspecialchars($this->getLL('l_revertSelection')).'" alt="" />'.
01657 '</a>
01658 </td>
01659 </tr>
01660 </table>
01661 ';
01662
01663 return $item;
01664 }
01665
01680 function getSingleField_typeSelect_multiple($table,$field,$row,&$PA,$config,$selItems,$nMV_label) {
01681
01682 $disabled = '';
01683 if($this->renderReadonly || $config['readOnly']) {
01684 $disabled = ' disabled="disabled"';
01685 }
01686
01687
01688 if (!$disabled) {
01689 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'" />';
01690 }
01691
01692
01693 $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01694 if (!$maxitems) $maxitems=100000;
01695 $minitems = t3lib_div::intInRange($config['minitems'],0);
01696
01697
01698 $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01699
01700
01701 $removeItems = t3lib_div::trimExplode(',',$PA['fieldTSConfig']['removeItems'],1);
01702
01703
01704 $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01705 foreach($itemArray as $tk => $tv) {
01706 $tvP = explode('|',$tv,2);
01707 $evalValue = rawurldecode($tvP[0]);
01708 $isRemoved = in_array($evalValue,$removeItems) || ($config['form_type']=='select' && $config['authMode'] && !$GLOBALS['BE_USER']->checkAuthMode($table,$field,$evalValue,$config['authMode']));
01709 if ($isRemoved && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01710 $tvP[1] = rawurlencode(@sprintf($nMV_label, $evalValue));
01711 } elseif (isset($PA['fieldTSConfig']['altLabels.'][$evalValue])) {
01712 $tvP[1] = rawurlencode($this->sL($PA['fieldTSConfig']['altLabels.'][$evalValue]));
01713 }
01714 $itemArray[$tk] = implode('|',$tvP);
01715 }
01716 $itemsToSelect = '';
01717
01718 if(!$disabled) {
01719
01720 $opt = array();
01721 $styleAttrValue = '';
01722 foreach($selItems as $p) {
01723 if ($config['iconsInOptionTags']) {
01724 $styleAttrValue = $this->optionTagStyle($p[2]);
01725 }
01726 $opt[]= '<option value="'.htmlspecialchars($p[1]).'"'.
01727 ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01728 '>'.htmlspecialchars($p[0]).'</option>';
01729 }
01730
01731
01732 $selector_itemListStyle = isset($config['itemListStyle']) ? ' style="'.htmlspecialchars($config['itemListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"';
01733 $size = intval($config['size']);
01734 $size = $config['autoSizeMax'] ? t3lib_div::intInRange(count($itemArray)+1,t3lib_div::intInRange($size,1),$config['autoSizeMax']) : $size;
01735 $sOnChange = 'setFormValueFromBrowseWin(\''.$PA['itemFormElName'].'\',this.options[this.selectedIndex].value,this.options[this.selectedIndex].text); '.implode('',$PA['fieldChangeFunc']);
01736 $itemsToSelect = '
01737 <select name="'.$PA['itemFormElName'].'_sel"'.
01738 $this->insertDefStyle('select').
01739 ($size ? ' size="'.$size.'"' : '').
01740 ' onchange="'.htmlspecialchars($sOnChange).'"'.
01741 $PA['onFocus'].
01742 $selector_itemListStyle.'>
01743 '.implode('
01744 ',$opt).'
01745 </select>';
01746 }
01747
01748
01749 $params = array(
01750 'size' => $size,
01751 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01752 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01753 'dontShowMoveIcons' => ($maxitems<=1),
01754 'maxitems' => $maxitems,
01755 'info' => '',
01756 'headers' => array(
01757 'selector' => $this->getLL('l_selected').':<br />',
01758 'items' => $this->getLL('l_items').':<br />'
01759 ),
01760 'noBrowser' => 1,
01761 'thumbnails' => $itemsToSelect,
01762 'readOnly' => $disabled
01763 );
01764 $item.= $this->dbFileIcons($PA['itemFormElName'],'','',$itemArray,'',$params,$PA['onFocus']);
01765
01766 return $item;
01767 }
01768
01779 function getSingleField_typeGroup($table,$field,$row,&$PA) {
01780
01781 $config = $PA['fieldConf']['config'];
01782 $internal_type = $config['internal_type'];
01783 $show_thumbs = $config['show_thumbs'];
01784 $size = intval($config['size']);
01785 $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01786 if (!$maxitems) $maxitems=100000;
01787 $minitems = t3lib_div::intInRange($config['minitems'],0);
01788 $allowed = $config['allowed'];
01789 $disallowed = $config['disallowed'];
01790
01791 $disabled = '';
01792 if($this->renderReadonly || $config['readOnly']) {
01793 $disabled = ' disabled="disabled"';
01794 }
01795
01796 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'"'.$disabled.' />';
01797 $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01798 $info='';
01799
01800
01801 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01802
01803
01804 switch((string)$config['internal_type']) {
01805 case 'file':
01806
01807
01808 $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01809 if (!count($tempFT)) {$info.='*';}
01810 foreach($tempFT as $ext) {
01811 if ($ext) {
01812 $info.=strtoupper($ext).' ';
01813 }
01814 }
01815
01816 $tempFT_dis = t3lib_div::trimExplode(',',$disallowed,1);
01817 if (count($tempFT_dis)) {$info.='<br />';}
01818 foreach($tempFT_dis as $ext) {
01819 if ($ext) {
01820 $info.='-'.strtoupper($ext).' ';
01821 }
01822 }
01823
01824
01825 $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01826
01827
01828 $thumbsnail = '';
01829 if ($show_thumbs) {
01830 $imgs = array();
01831 foreach($itemArray as $imgRead) {
01832 $imgP = explode('|',$imgRead);
01833
01834 $rowCopy = array();
01835 $rowCopy[$field] = $imgP[0];
01836
01837
01838 $absFilePath = t3lib_div::getFileAbsFileName($config['uploadfolder'].'/'.$imgP[0]);
01839
01840 $fI = pathinfo($imgP[0]);
01841 $fileIcon = t3lib_BEfunc::getFileIcon(strtolower($fI['extension']));
01842 $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="" />';
01843
01844 $imgs[] = '<span class="nobr">'.t3lib_BEfunc::thumbCode($rowCopy,$table,$field,$this->backPath,'thumbs.php',$config['uploadfolder'],0,' align="middle"').
01845 ($absFilePath ? $this->getClickMenu($fileIcon, $absFilePath) : $fileIcon).
01846 $imgP[0].
01847 '</span>';
01848 }
01849 $thumbsnail = implode('<br />',$imgs);
01850 }
01851
01852
01853 $params = array(
01854 'size' => $size,
01855 'dontShowMoveIcons' => ($maxitems<=1),
01856 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01857 'maxitems' => $maxitems,
01858 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01859 'info' => $info,
01860 'thumbnails' => $thumbsnail,
01861 'readOnly' => $disabled
01862 );
01863 $item.= $this->dbFileIcons($PA['itemFormElName'],'file',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01864
01865 if(!$disabled) {
01866
01867 if ($this->edit_docModuleUpload) $item.='<input type="file" name="'.$PA['itemFormElName_file'].'"'.$this->formWidth().' size="60" />';
01868 }
01869 break;
01870 case 'db':
01871
01872
01873 $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01874 if (!strcmp(trim($tempFT[0]),'*')) {
01875 $info.='<span class="nobr"> '.
01876 htmlspecialchars($this->getLL('l_allTables')).
01877 '</span><br />';
01878 } else {
01879 while(list(,$theT)=each($tempFT)) {
01880 if ($theT) {
01881 $info.='<span class="nobr"> '.
01882 t3lib_iconWorks::getIconImage($theT,array(),$this->backPath,'align="top"').
01883 htmlspecialchars($this->sL($GLOBALS['TCA'][$theT]['ctrl']['title'])).
01884 '</span><br />';
01885 }
01886 }
01887 }
01888
01889 $perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
01890 $itemArray = array();
01891 $imgs = array();
01892
01893
01894 $temp_itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01895 foreach($temp_itemArray as $dbRead) {
01896 $recordParts = explode('|',$dbRead);
01897 list($this_table,$this_uid) = t3lib_BEfunc::splitTable_Uid($recordParts[0]);
01898 $itemArray[] = array('table'=>$this_table, 'id'=>$this_uid);
01899 if (!$disabled && $show_thumbs) {
01900 $rr = t3lib_BEfunc::getRecordWSOL($this_table,$this_uid);
01901 $imgs[] = '<span class="nobr">'.
01902 $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).
01903 ' '.
01904 htmlspecialchars(t3lib_div::fixed_lgd_cs($this->noTitle($rr[$GLOBALS['TCA'][$this_table]['ctrl']['label']],array('<em>','</em>')),$this->titleLen)).' <span class="typo3-dimmed"><em>['.$rr['uid'].']</em></span>'.
01905 '</span>';
01906 }
01907 }
01908 $thumbsnail='';
01909 if (!$disabled && $show_thumbs) {
01910 $thumbsnail = implode('<br />',$imgs);
01911 }
01912
01913
01914 $params = array(
01915 'size' => $size,
01916 'dontShowMoveIcons' => ($maxitems<=1),
01917 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01918 'maxitems' => $maxitems,
01919 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01920 'info' => $info,
01921 'thumbnails' => $thumbsnail,
01922 'readOnly' => $disabled
01923 );
01924 $item.= $this->dbFileIcons($PA['itemFormElName'],'db',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01925
01926 break;
01927 }
01928
01929
01930 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01931 if (!$disabled) {
01932 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
01933 }
01934
01935 return $item;
01936 }
01937
01948 function getSingleField_typeNone($table,$field,$row,&$PA) {
01949
01950 $config = $PA['fieldConf']['config'];
01951 $itemValue = $PA['itemFormElValue'];
01952
01953 return $this->getSingleField_typeNone_render($config,$itemValue);
01954 }
01955
01964 function getSingleField_typeNone_render($config,$itemValue) {
01965
01966
01967 $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;';
01968
01969 if ($config['format']) {
01970 $itemValue = $this->formatValue($config, $itemValue);
01971 }
01972
01973 $rows = intval($config['rows']);
01974 if ($rows > 1) {
01975 if(!$config['pass_content']) {
01976 $itemValue = nl2br(htmlspecialchars($itemValue));
01977 }
01978
01979 $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
01980 if (!$config['fixedRows']) {
01981 $origRows = $rows = t3lib_div::intInRange($rows, 1, 20);
01982 if (strlen($itemValue)>$this->charsPerRow*2) {
01983 $cols = $this->maxTextareaWidth;
01984 $rows = t3lib_div::intInRange(round(strlen($itemValue)/$this->charsPerRow),count(explode(chr(10),$itemValue)),20);
01985 if ($rows<$origRows) $rows=$origRows;
01986 }
01987 }
01988
01989 if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
01990 $width = ceil($cols*$this->form_rowsToStylewidth);
01991
01992 $height=$rows*12;
01993
01994 $item='
01995 <div style="'.htmlspecialchars($divStyle.' overflow:auto; height:'.$height.'px; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'">'.
01996 $itemValue.
01997 '</div>';
01998 } else {
01999 if(!$config['pass_content']) {
02000 $itemValue = htmlspecialchars($itemValue);
02001 }
02002
02003 $cols = $config['cols']?$config['cols']:($config['size']?$config['size']:$this->maxInputWidth);
02004 if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
02005 $width = ceil($cols*$this->form_rowsToStylewidth);
02006
02007
02008 $item = '
02009 <div style="'.htmlspecialchars($divStyle.' overflow:hidden; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'" title="'.$itemValue.'">'.
02010 '<span class="nobr">'.(strcmp($itemValue,'')?$itemValue:' ').'</span>'.
02011 '</div>';
02012 }
02013
02014 return $item;
02015 }
02016
02026 function getSingleField_typeFlex($table,$field,$row,&$PA) {
02027
02028
02029 $dataStructArray = t3lib_BEfunc::getFlexFormDS($PA['fieldConf']['config'],$row,$table);
02030 #debug($dataStructArray);
02031
02032 if (is_array($dataStructArray)) {
02033 #debug(array(str_replace(' ',chr(160),$PA['itemFormElValue'])));
02034
02035
02036 $xmlData = $PA['itemFormElValue'];
02037 $xmlHeaderAttributes = t3lib_div::xmlGetHeaderAttribs($xmlData);
02038 $storeInCharset = strtolower($xmlHeaderAttributes['encoding']);
02039 if ($storeInCharset) {
02040 $currentCharset=$GLOBALS['LANG']->charSet;
02041 $xmlData = $GLOBALS['LANG']->csConvObj->conv($xmlData,$storeInCharset,$currentCharset,1);
02042 }
02043 $editData=t3lib_div::xml2array($xmlData);
02044 if (!is_array($editData)) {
02045 #debug(array($editData,$xmlData));
02046 $editData=array();
02047 }
02048
02049
02050 $sheet = $editData['meta']['currentSheetId'] ? $editData['meta']['currentSheetId'] : 'sDEF';
02051 # $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'[meta][currentSheetId]" value="'.$sheet.'">';
02052
02053
02054 if (is_array($dataStructArray['sheets'])) {
02055 #$item.=$this->getSingleField_typeFlex_sheetMenu($dataStructArray['sheets'], $PA['itemFormElName'].'[meta][currentSheetId]', $sheet).'<br />';
02056 }
02057 #debug($editData);
02058
02059
02060 $langChildren = $dataStructArray['meta']['langChildren'] ? 1 : 0;
02061 $langDisabled = $dataStructArray['meta']['langDisable'] ? 1 : 0;
02062
02063 $editData['meta']['currentLangId']=array();
02064 $languages = $this->getAvailableLanguages();
02065
02066 foreach($languages as $lInfo) {
02067 if ($GLOBALS['BE_USER']->checkLanguageAccess($lInfo['uid'])) {
02068 $editData['meta']['currentLangId'][] = $lInfo['ISOcode'];
02069 }
02070 }
02071 if (!is_array($editData['meta']['currentLangId']) || !count($editData['meta']['currentLangId'])) {
02072 $editData['meta']['currentLangId']=array('DEF');
02073 }
02074
02075 $editData['meta']['currentLangId'] = array_unique($editData['meta']['currentLangId']);
02076
02077
02078
02079
02080
02081
02082 $PA['_noEditDEF'] = FALSE;
02083 if ($langChildren || $langDisabled) {
02084 $rotateLang = array('DEF');
02085 } else {
02086 if (!in_array('DEF',$editData['meta']['currentLangId'])) {
02087 array_unshift($editData['meta']['currentLangId'],'DEF');
02088 $PA['_noEditDEF'] = TRUE;
02089 }
02090 $rotateLang = $editData['meta']['currentLangId'];
02091 }
02092
02093
02094 if (is_array($dataStructArray['sheets'])) {
02095 $tabsToTraverse = array_keys($dataStructArray['sheets']);
02096 } else {
02097 $tabsToTraverse = array($sheet);
02098 }
02099
02100 foreach($rotateLang as $lKey) {
02101 if (!$langChildren && !$langDisabled) {
02102 $item.= '<b>'.$lKey.':</b>';
02103 }
02104
02105 $tabParts = array();
02106 foreach($tabsToTraverse as $sheet) {
02107 $sheetCfg = $dataStructArray['sheets'][$sheet];
02108 list ($dataStruct, $sheet) = t3lib_div::resolveSheetDefInDS($dataStructArray,$sheet);
02109
02110
02111 if (is_array($dataStruct['ROOT']) && is_array($dataStruct['ROOT']['el'])) {
02112 $cmdData = t3lib_div::_GP('flexFormsCmdData');
02113 $lang = 'l'.$lKey;
02114 $PA['_valLang'] = $langChildren && !$langDisabled ? $editData['meta']['currentLangId'] : 'DEF';
02115 $PA['_lang'] = $lang;
02116
02117
02118 $tRows = $this->getSingleField_typeFlex_draw(
02119 $dataStruct['ROOT']['el'],
02120 $editData['data'][$sheet][$lang],
02121 $cmdData['data'][$sheet][$lang],
02122 $table,
02123 $field,
02124 $row,
02125 $PA,
02126 '[data]['.$sheet.']['.$lang.']'
02127 );
02128 $sheetContent= '<table border="0" cellpadding="1" cellspacing="1" class="typo3-TCEforms-flexForm">'.implode('',$tRows).'</table>';
02129
02130 # $item = '<div style=" position:absolute;">'.$item.'</div>';
02131
02132 } else $sheetContent='Data Structure ERROR: No ROOT element found for sheet "'.$sheet.'".';
02133
02134
02135 $tabParts[] = array(
02136 'label' => ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sheet),
02137 'description' => ($sheetCfg['ROOT']['TCEforms']['sheetDescription'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetDescription']) : ''),
02138 'linkTitle' => ($sheetCfg['ROOT']['TCEforms']['sheetShortDescr'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetShortDescr']) : ''),
02139 'content' => $sheetContent
02140 );
02141 }
02142
02143 if (is_array($dataStructArray['sheets'])) {
02144 $item.= $this->getDynTabMenu($tabParts,'TCEFORMS:flexform:'.$PA['itemFormElName']);
02145 } else {
02146 $item.= $sheetContent;
02147 }
02148 }
02149 } else $item='Data Structure ERROR: '.$dataStructArray;
02150
02151 return $item;
02152 }
02153
02163 function getSingleField_typeFlex_langMenu($languages,$elName,$selectedLanguage,$multi=1) {
02164 $opt=array();
02165 foreach($languages as $lArr) {
02166 $opt[]='<option value="'.htmlspecialchars($lArr['ISOcode']).'"'.(in_array($lArr['ISOcode'],$selectedLanguage)?' selected="selected"':'').'>'.htmlspecialchars($lArr['title']).'</option>';
02167 }
02168
02169 $output = '<select name="'.$elName.'[]"'.($multi ? ' multiple="multiple" size="'.count($languages).'"' : '').'>'.implode('',$opt).'</select>';
02170
02171 return $output;
02172 }
02173
02182 function getSingleField_typeFlex_sheetMenu($sArr,$elName,$sheetKey) {
02183
02184 $tCells =array();
02185 $pct = round(100/count($sArr));
02186 foreach($sArr as $sKey => $sheetCfg) {
02187 if ($GLOBALS['BE_USER']->jsConfirmation(1)) {
02188 $onClick = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){'.$this->elName($elName).".value='".$sKey."'; TBE_EDITOR_submitForm()};";
02189 } else {
02190 $onClick = 'if(TBE_EDITOR_checkSubmit(-1)){ '.$this->elName($elName).".value='".$sKey."'; TBE_EDITOR_submitForm();}";
02191 }
02192
02193
02194 $tCells[]='<td width="'.$pct.'%" style="'.($sKey==$sheetKey ? 'background-color: #9999cc; font-weight: bold;' : 'background-color: #aaaaaa;').' cursor: hand;" onclick="'.htmlspecialchars($onClick).'" align="center">'.
02195 ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sKey).
02196 '</td>';
02197 }
02198
02199 return '<table border="0" cellpadding="0" cellspacing="2" class="typo3-TCEforms-flexForm-sheetMenu"><tr>'.implode('',$tCells).'</tr></table>';
02200 }
02201
02217 function getSingleField_typeFlex_draw($dataStruct,$editData,$cmdData,$table,$field,$row,&$PA,$formPrefix='',$level=0,$tRows=array()) {
02218
02219
02220 if (is_array($dataStruct)) {
02221 foreach($dataStruct as $key => $value) {
02222 if (is_array($value)) {
02223
02224
02225
02226
02227 $rowCells=array();
02228
02229
02230 $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>';;
02231
02232 $rowCells['formEl']='';
02233 if ($value['type']=='array') {
02234 if ($value['section']) {
02235
02236 if (is_array($value['el'])) {
02237 $opt=array();
02238 $opt[]='<option value=""></option>';
02239 foreach($value['el'] as $kk => $vv) {
02240 $opt[]='<option value="'.$kk.'">'.htmlspecialchars('NEW "'.$value['el'][$kk]['tx_templavoila']['title'].'"').'</option>';
02241 }
02242 $rowCells['formEl']='<select name="flexFormsCmdData'.$formPrefix.'['.$key.'][value]">'.implode('',$opt).'</select>';
02243 }
02244
02245
02246 $tRows[]='<tr class="bgColor2">
02247 <td nowrap="nowrap" valign="top">'.$rowCells['title'].'</td>
02248 <td>'.$rowCells['formEl'].'</td>
02249 </tr>';
02250
02251 $cc=0;
02252 if (is_array($editData[$key]['el'])) {
02253 foreach($editData[$key]['el'] as $k3 => $v3) {
02254 $cc=$k3;
02255 $theType = key($v3);
02256 $theDat = $v3[$theType];
02257 $newSectionEl = $value['el'][$theType];
02258 if (is_array($newSectionEl)) {
02259 $tRows = $this->getSingleField_typeFlex_draw(
02260 array($theType => $newSectionEl),
02261 array($theType => $theDat),
02262 $cmdData[$key]['el'][$cc],
02263 $table,
02264 $field,
02265 $row,
02266 $PA,
02267 $formPrefix.'['.$key.'][el]['.$cc.']',
02268 $level+1,
02269 $tRows
02270 );
02271 }
02272 }
02273 }
02274
02275
02276
02277
02278 if ($cmdData[$key]['value']) {
02279 $newSectionEl = $value['el'][$cmdData[$key]['value']];
02280 if (is_array($newSectionEl)) {
02281 $tRows = $this->getSingleField_typeFlex_draw(
02282 array($cmdData[$key]['value'] => $newSectionEl),
02283 array(),
02284 array(),
02285 $table,
02286 $field,
02287 $row,
02288 $PA,
02289 $formPrefix.'['.$key.'][el]['.($cc+1).']',
02290 $level+1,
02291 $tRows
02292 );
02293 }
02294 }
02295 } else {
02296 $idTagPrefix = uniqid('id',true);
02297
02298
02299 $tRows[]='<tr class="bgColor2">
02300 <td nowrap="nowrap" valign="top">'.
02301 '<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>'.
02302 '<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>'.
02303 '<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>'.
02304 $rowCells['title'].'</td>
02305 <td>'.$rowCells['formEl'].'</td>
02306 </tr>';
02307
02308 $tRows = $this->getSingleField_typeFlex_draw(
02309 $value['el'],
02310 $editData[$key]['el'],
02311 $cmdData[$key]['el'],
02312 $table,
02313 $field,
02314 $row,
02315 $PA,
02316 $formPrefix.'['.$key.'][el]',
02317 $level+1,
02318 $tRows
02319 );
02320 }
02321
02322 } elseif (is_array($value['TCEforms']['config'])) {
02323
02324 if (is_array($PA['_valLang'])) {
02325 $rotateLang = $PA['_valLang'];
02326 } else {
02327 $rotateLang = array($PA['_valLang']);
02328 }
02329
02330 foreach($rotateLang as $vDEFkey) {
02331 $vDEFkey = 'v'.$vDEFkey;
02332
02333 if (!$value['TCEforms']['displayCond'] || $this->isDisplayCondition($value['TCEforms']['displayCond'],$editData,$vDEFkey)) {
02334 $fakePA=array();
02335 $fakePA['fieldConf']=array(
02336 'label' => $this->sL(trim($value['TCEforms']['label'])),
02337 'config' => $value['TCEforms']['config'],
02338 'defaultExtras' => $value['TCEforms']['defaultExtras'],
02339 'onChange' => $value['TCEforms']['onChange']
02340 );
02341 if ($PA['_noEditDEF'] && $PA['_lang']==='lDEF') {
02342 $fakePA['fieldConf']['config'] = array(
02343 'type' => 'none',
02344 'rows' => 2
02345 );
02346 }
02347
02348 if (
02349 $fakePA['fieldConf']['onChange'] == 'reload' ||
02350 ($GLOBALS['TCA'][$table]['ctrl']['type'] && !strcmp($key,$GLOBALS['TCA'][$table]['ctrl']['type'])) ||
02351 ($GLOBALS['TCA'][$table]['ctrl']['requestUpdate'] && t3lib_div::inList($GLOBALS['TCA'][$table]['ctrl']['requestUpdate'],$key))) {
02352 if ($GLOBALS['BE_USER']->jsConfirmation(1)) {
02353 $alertMsgOnChange = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){ TBE_EDITOR_submitForm() };';
02354 } else {
02355 $alertMsgOnChange = 'if(TBE_EDITOR_checkSubmit(-1)){ TBE_EDITOR_submitForm();}';
02356 }
02357 } else {
02358 $alertMsgOnChange = '';
02359 }
02360
02361 $fakePA['fieldChangeFunc']=$PA['fieldChangeFunc'];
02362 if (strlen($alertMsgOnChange)) {
02363 $fakePA['fieldChangeFunc']['alert']=$alertMsgOnChange;
02364 }
02365 $fakePA['onFocus']=$PA['onFocus'];
02366 $fakePA['label']=$PA['label'];
02367
02368 $fakePA['itemFormElName']=$PA['itemFormElName'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02369 $fakePA['itemFormElName_file']=$PA['itemFormElName_file'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02370
02371 if(isset($editData[$key][$vDEFkey])) {
02372 $fakePA['itemFormElValue']=$editData[$key][$vDEFkey];
02373 } else {
02374 $fakePA['itemFormElValue']=$fakePA['fieldConf']['config']['default'];
02375 }
02376
02377 $rowCells['formEl']= $this->getSingleField_SW($table,$field,$row,$fakePA);
02378 $rowCells['title']= htmlspecialchars($fakePA['fieldConf']['label']);
02379
02380 if (!in_array('DEF',$rotateLang)) {
02381 $defInfo = '<div class="typo3-TCEforms-originalLanguageValue">'.nl2br(htmlspecialchars($editData[$key]['vDEF'])).' </div>';
02382 } else {
02383 $defInfo = '';
02384 }
02385
02386
02387 $tRows[]='<tr>
02388 <td nowrap="nowrap" valign="top" class="bgColor5">'.$rowCells['title'].($vDEFkey=='vDEF' ? '' : ' ('.$vDEFkey.')').'</td>
02389 <td class="bgColor4">'.$rowCells['formEl'].$defInfo.'</td>
02390 </tr>';
02391 }
02392 }
02393 }
02394 }
02395 }
02396 }
02397
02398 return $tRows;
02399 }
02400
02410 function getSingleField_typeUnknown($table,$field,$row,&$PA) {
02411 $item='Unknown type: '.$PA['fieldConf']['config']['form_type'].'<br />';
02412
02413 return $item;
02414 }
02415
02425 function getSingleField_typeUser($table,$field,$row,&$PA) {
02426 $PA['table']=$table;
02427 $PA['field']=$field;
02428 $PA['row']=$row;
02429
02430 $PA['pObj']=&$this;
02431
02432 return t3lib_div::callUserFunction($PA['fieldConf']['config']['userFunc'],$PA,$this);
02433 }
02434
02435
02436
02437
02438
02439
02440
02441
02442
02443
02444
02445
02454 function formatValue ($config, $itemValue) {
02455 $format = trim($config['format']);
02456 switch($format) {
02457 case 'date':
02458 $option = trim($config['format.']['option']);
02459 if ($option) {
02460 if ($config['format.']['strftime']) {
02461 $value = strftime($option,$itemValue);
02462 } else {
02463 $value = date($option,$itemValue);
02464 }
02465 } else {
02466 $value = date('d-m-Y',$itemValue);
02467 }
02468 if ($config['format.']['appendAge']) {
02469 $value .= ' ('.t3lib_BEfunc::calcAge((time()-$itemValue), $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')).')';
02470 }
02471 $itemValue = $value;
02472 break;
02473 case 'datetime':
02474 $itemValue = date('H:i d-m-Y',$itemValue);
02475 break;
02476 case 'time':
02477 $itemValue = date('H:i',$itemValue);
02478 break;
02479 case 'timesec':
02480 $itemValue = date('H:i:s',$itemValue);
02481 break;
02482 case 'year':
02483 $itemValue = date('Y',$itemValue);
02484 break;
02485 case 'int':
02486 $baseArr = array('dec'=>'d','hex'=>'x','HEX'=>'X','oct'=>'o','bin'=>'b');
02487 $base = trim($config['format.']['base']);
02488 $format = $baseArr[$base] ? $baseArr[$base] : 'd';
02489 $itemValue = sprintf('%'.$format,$itemValue);
02490 break;
02491 case 'float':
02492 $precision = t3lib_div::intInRange($config['format.']['precision'],1,10,2);
02493 $itemValue = sprintf('%.'.$precision.'f',$itemValue);
02494 break;
02495 case 'number':
02496 $format = trim($config['format.']['option']);
02497 $itemValue = sprintf('%'.$format,$itemValue);
02498 break;
02499 case 'md5':
02500 $itemValue = md5($itemValue);
02501 break;
02502 case 'filesize':
02503 $value = t3lib_div::formatSize(intval($itemValue));
02504 if ($config['format.']['appendByteSize']) {
02505 $value .= ' ('.$itemValue.')';
02506 }
02507 $itemValue = $value;
02508 break;
02509 case 'user':
02510 $func = trim($config['format.']['userFunc']);
02511 if ($func) {
02512 $params = array(
02513 'value' => $itemValue,
02514 'args' => $config['format.']['userFunc'],
02515 'config' => $config,
02516 'pObj' => &$this
02517 );
02518 $itemValue = t3lib_div::callUserFunction($func,$params,$this);
02519 }
02520 break;
02521 default:
02522 break;
02523 }
02524
02525 return $itemValue;
02526 }
02527
02528
02529
02530
02531
02532
02533
02534
02535
02536
02537
02538
02546 function getRTypeNum($table,$row) {
02547 global $TCA;
02548
02549 if ($TCA[$table]['ctrl']['type']) {
02550 $typeFieldName = $TCA[$table]['ctrl']['type'];
02551 $typeNum=$row[$typeFieldName];
02552 if (!strcmp($typeNum,'')) $typeNum=0;
02553 } else {
02554 $typeNum = 0;
02555 }
02556
02557 $typeNum = (string)$typeNum;
02558 if (!$TCA[$table]['types'][$typeNum]) {
02559 $typeNum = 1;
02560 }
02561
02562 return $typeNum;
02563 }
02564
02572 function rearrange($fields) {
02573 $fO = array_flip(t3lib_div::trimExplode(',',$this->fieldOrder,1));
02574 reset($fields);
02575 $newFields=array();
02576 while(list($cc,$content)=each($fields)) {
02577 $cP = t3lib_div::trimExplode(';',$content);
02578 if (isset($fO[$cP[0]])) {
02579 $newFields[$fO[$cP[0]]] = $content;
02580 unset($fields[$cc]);
02581 }
02582 }
02583 ksort($newFields);
02584 $fields=array_merge($newFields,$fields);
02585 return $fields;
02586 }
02587
02598 function getExcludeElements($table,$row,$typeNum) {
02599 global $TCA;
02600
02601
02602 $excludeElements=array();
02603
02604
02605 if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02606 $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02607 if (trim($TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]])) {
02608 $excludeElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]],1);
02609 }
02610 }
02611
02612
02613 if ($TCA[$table]['types'][$typeNum]['bitmask_value_field']) {
02614 $sTfield = $TCA[$table]['types'][$typeNum]['bitmask_value_field'];
02615 $sTValue = t3lib_div::intInRange($row[$sTfield],0);
02616 if (is_array($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02617 reset($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits']);
02618 while(list($bitKey,$eList)=each($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02619 $bit=substr($bitKey,1);
02620 if (t3lib_div::testInt($bit)) {
02621 $bit = t3lib_div::intInRange($bit,0,30);
02622 if (
02623 (substr($bitKey,0,1)=='-' && !($sTValue&pow(2,$bit))) ||
02624 (substr($bitKey,0,1)=='+' && ($sTValue&pow(2,$bit)))
02625 ) {
02626 $excludeElements = array_merge($excludeElements,t3lib_div::trimExplode(',',$eList,1));
02627 }
02628 }
02629 }
02630 }
02631 }
02632
02633
02634 return $excludeElements;
02635 }
02636
02646 function getFieldsToAdd($table,$row,$typeNum) {
02647 global $TCA;
02648
02649
02650 $addElements=array();
02651
02652
02653 if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02654 $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02655 if (trim($TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]])) {
02656 $addElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]],1);
02657 }
02658 }
02659
02660 return array($addElements,$sTfield);
02661 }
02662
02671 function mergeFieldsWithAddedFields($fields,$fieldsToAdd) {
02672 if (count($fieldsToAdd[0])) {
02673 reset($fields);
02674 $c=0;
02675 while(list(,$fieldInfo)=each($fields)) {
02676 $parts = explode(';',$fieldInfo);
02677 if (!strcmp(trim($parts[0]),$fieldsToAdd[1])) {
02678 array_splice(
02679 $fields,
02680 $c+1,
02681 0,
02682 $fieldsToAdd[0]
02683 );
02684 break;
02685 }
02686 $c++;
02687 }
02688 }
02689 return $fields;
02690 }
02691
02692
02703 function setTSconfig($table,$row,$field='') {
02704 $mainKey = $table.':'.$row['uid'];
02705 if (!isset($this->cachedTSconfig[$mainKey])) {
02706 $this->cachedTSconfig[$mainKey]=t3lib_BEfunc::getTCEFORM_TSconfig($table,$row);
02707 }
02708 if ($field) {
02709 return $this->cachedTSconfig[$mainKey][$field];
02710 } else {
02711 return $this->cachedTSconfig[$mainKey];
02712 }
02713 }
02714
02725 function getSpecConfForField($table,$row,$field) {
02726
02727 $types_fieldConfig = t3lib_BEfunc::getTCAtypes($table,$row);
02728
02729
02730 if (is_array($types_fieldConfig)) {
02731 foreach($types_fieldConfig as $vconf) {
02732
02733 if ($vconf['field']==$field) return $vconf['spec'];
02734 }
02735 }
02736 }
02737
02746 function getSpecConfFromString($extraString, $defaultExtras) {
02747 return t3lib_BEfunc::getSpecConfParts($extraString, $defaultExtras);
02748 }
02749
02750
02751
02752
02753
02754
02755
02756
02757
02758
02759
02760
02761
02762
02763
02764
02774 function registerDefaultLanguageData($table,$rec) {
02775 global $TCA;
02776
02777
02778 if ($TCA[$table]['ctrl']['languageField']
02779 && $rec[$TCA[$table]['ctrl']['languageField']] > 0
02780 && $TCA[$table]['ctrl']['transOrigPointerField']
02781 && intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]) > 0) {
02782
02783 $lookUpTable = $TCA[$table]['ctrl']['transOrigPointerTable'] ? $TCA[$table]['ctrl']['transOrigPointerTable'] : $table;
02784
02785
02786 $this->defaultLanguageData[$table.':'.$rec['uid']] = t3lib_BEfunc::getRecordWSOL($lookUpTable, intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]));
02787
02788
02789 if ($TCA[$table]['ctrl']['transOrigDiffSourceField']) {
02790 $this->defaultLanguageData_diff[$table.':'.$rec['uid']] = unserialize($rec[$TCA[$table]['ctrl']['transOrigDiffSourceField']]);
02791 }
02792 }
02793 }
02794
02806 function getLanguageOverlayRawValue($table, $row, $field, $fieldConf) {
02807 global $TCA;
02808
02809 $value = $row[$field];
02810
02811 if (is_array($this->defaultLanguageData[$table.':'.$row['uid']])) {
02812
02813 if ($fieldConf['l10n_mode']=='exclude'
02814 || ($fieldConf['l10n_mode']=='mergeIfNotBlank' && strcmp(trim($this->defaultLanguageData[$table.':'.$row['uid']][$field]),''))) {
02815 $value = $this->defaultLanguageData[$table.':'.$row['uid']][$field];
02816 }
02817
02818 }
02819
02820 return $value;
02821 }
02822
02834 function renderDefaultLanguageContent($table,$field,$row,$item) {
02835 if (is_array($this->defaultLanguageData[$table.':'.$row['uid']])) {
02836 $dLVal = t3lib_BEfunc::getProcessedValue($table,$field,$this->defaultLanguageData[$table.':'.$row['uid']][$field],0,1);
02837
02838 if (strcmp($dLVal,'')) {
02839 $item.='<div class="typo3-TCEforms-originalLanguageValue">'.nl2br(htmlspecialchars($dLVal)).' </div>';
02840 }
02841 }
02842
02843 return $item;
02844 }
02845
02857 function renderDefaultLanguageDiff($table,$field,$row,$item) {
02858 if (is_array($this->defaultLanguageData_diff[$table.':'.$row['uid']])) {
02859
02860
02861 $dLVal = array(
02862 'old' => $this->defaultLanguageData_diff[$table.':'.$row['uid']],
02863 'new' => $this->defaultLanguageData[$table.':'.$row['uid']],
02864 );
02865
02866 if (isset($dLVal['old'][$field])) {
02867 if (strcmp($dLVal['old'][$field],$dLVal['new'][$field])) {
02868
02869
02870 $t3lib_diff_Obj = t3lib_div::makeInstance('t3lib_diff');
02871 $diffres = $t3lib_diff_Obj->makeDiffDisplay(
02872 t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['old'][$field],0,1),
02873 t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['new'][$field],0,1)
02874 );
02875
02876 $item.='<div class="typo3-TCEforms-diffBox">'.
02877 '<div class="typo3-TCEforms-diffBox-header">'.htmlspecialchars($this->getLL('l_changeInOrig')).':</div>'.
02878 $diffres.
02879 '</div>';
02880 }
02881 }
02882 }
02883
02884 return $item;
02885 }
02886
02887
02888
02889
02890
02891
02892
02893
02894
02895
02896
02897
02898
02899
02900
02913 function dbFileIcons($fName,$mode,$allowed,$itemArray,$selector='',$params=array(),$onFocus='') {
02914
02915
02916 $disabled = '';
02917 if($this->renderReadonly || $params['readOnly']) {
02918 $disabled = ' disabled="disabled"';
02919 }
02920
02921
02922 $this->printNeededJS['dbFileIcons']=1;
02923
02924
02925 $uidList=array();
02926 $opt=array();
02927 $itemArrayC=0;
02928
02929
02930 if (is_array($itemArray)) {
02931 $itemArrayC=count($itemArray);
02932 reset($itemArray);
02933 switch($mode) {
02934 case 'db':
02935 while(list(,$pp)=each($itemArray)) {
02936 $pRec = t3lib_BEfunc::getRecordWSOL($pp['table'],$pp['id']);
02937 if (is_array($pRec)) {
02938 $pTitle = t3lib_div::fixed_lgd_cs($this->noTitle($pRec[$GLOBALS['TCA'][$pp['table']]['ctrl']['label']]),$this->titleLen);
02939 $pUid = $pp['table'].'_'.$pp['id'];
02940 $uidList[]=$pUid;
02941 $opt[]='<option value="'.htmlspecialchars($pUid).'">'.htmlspecialchars($pTitle).'</option>';
02942 }
02943 }
02944 break;
02945 case 'file':
02946 while(list(,$pp)=each($itemArray)) {
02947 $pParts = explode('|',$pp);
02948 $uidList[]=$pUid=$pTitle = $pParts[0];
02949 $opt[]='<option value="'.htmlspecialchars(rawurldecode($pParts[0])).'">'.htmlspecialchars(rawurldecode($pParts[0])).'</option>';
02950 }
02951 break;
02952 default:
02953 while(list(,$pp)=each($itemArray)) {
02954 $pParts = explode('|',$pp, 2);
02955 $uidList[]=$pUid=$pParts[0];
02956 $pTitle = $pParts[1];
02957 $opt[]='<option value="'.htmlspecialchars(rawurldecode($pUid)).'">'.htmlspecialchars(rawurldecode($pTitle)).'</option>';
02958 }
02959 break;
02960 }
02961 }
02962
02963
02964 $sSize = $params['autoSizeMax'] ? t3lib_div::intInRange($itemArrayC+1,t3lib_div::intInRange($params['size'],1),$params['autoSizeMax']) : $params['size'];
02965 if (!$selector) {
02966 $selector = '<select size="'.$sSize.'"'.$this->insertDefStyle('group').' multiple="multiple" name="'.$fName.'_list" '.$onFocus.$params['style'].$disabled.'>'.implode('',$opt).'</select>';
02967 }
02968
02969
02970 $icons = array(
02971 'L' => array(),
02972 'R' => array(),
02973 );
02974 if (!$params['readOnly']) {
02975 if (!$params['noBrowser']) {
02976 $aOnClick='setFormValueOpenBrowser(\''.$mode.'\',\''.($fName.'|||'.$allowed.'|').'\'); return false;';
02977 $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
02978 '<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'))).' />'.
02979 '</a>';
02980 }
02981 if (!$params['dontShowMoveIcons']) {
02982 if ($sSize>=5) {
02983 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Top\'); return false;">'.
02984 '<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')).' />'.
02985 '</a>';
02986 }
02987 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Up\'); return false;">'.
02988 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/up.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_up')).' />'.
02989 '</a>';
02990 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Down\'); return false;">'.
02991 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/down.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_down')).' />'.
02992 '</a>';
02993 if ($sSize>=5) {
02994 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Bottom\'); return false;">'.
02995 '<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')).' />'.
02996 '</a>';
02997 }
02998 }
02999
03000 $clipElements = $this->getClipboardElements($allowed,$mode);
03001 if (count($clipElements)) {
03002 $aOnClick = '';
03003 # $counter = 0;
03004 foreach($clipElements as $elValue) {
03005 if ($mode=='file') {
03006 $itemTitle = 'unescape(\''.rawurlencode(basename($elValue)).'\')';
03007 } else {
03008 list($itemTable,$itemUid) = explode('|', $elValue);
03009 $itemTitle = $GLOBALS['LANG']->JScharCode(t3lib_BEfunc::getRecordTitle($itemTable, t3lib_BEfunc::getRecordWSOL($itemTable,$itemUid)));
03010 $elValue = $itemTable.'_'.$itemUid;
03011 }
03012 $aOnClick.= 'setFormValueFromBrowseWin(\''.$fName.'\',unescape(\''.rawurlencode(str_replace('%20',' ',$elValue)).'\'),'.$itemTitle.');';
03013
03014 # $counter++;
03015 # if ($params['maxitems'] && $counter >= $params['maxitems']) { break; } // Makes sure that no more than the max items are inserted... for convenience.
03016 }
03017 $aOnClick.= 'return false;';
03018 $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
03019 '<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))).' />'.
03020 '</a>';
03021 }
03022 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Remove\'); return false;">'.
03023 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/group_clear.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_remove_selected')).' />'.
03024 '</a>';
03025 }
03026
03027 $str='<table border="0" cellpadding="0" cellspacing="0" width="1">
03028 '.($params['headers']?'
03029 <tr>
03030 <td>'.$this->wrapLabels($params['headers']['selector']).'</td>
03031 <td></td>
03032 <td></td>
03033 <td></td>
03034 <td>'.($params['thumbnails'] ? $this->wrapLabels($params['headers']['items']) : '').'</td>
03035 </tr>':'').
03036 '
03037 <tr>
03038 <td valign="top">'.
03039 $selector.'<br />'.
03040 $this->wrapLabels($params['info']).
03041 '</td>
03042 <td valign="top">'.
03043 implode('<br />',$icons['L']).'</td>
03044 <td valign="top">'.
03045 implode('<br />',$icons['R']).'</td>
03046 <td><img src="clear.gif" width="5" height="1" alt="" /></td>
03047 <td valign="top">'.
03048 $this->wrapLabels($params['thumbnails']).
03049 '</td>
03050 </tr>
03051 </table>';
03052
03053
03054 $str.='<input type="hidden" name="'.$fName.'" value="'.htmlspecialchars(implode(',',$uidList)).'" />';
03055
03056 return $str;
03057 }
03058
03066 function getClipboardElements($allowed,$mode) {
03067
03068 $output = array();
03069
03070 if (is_object($this->clipObj)) {
03071 switch($mode) {
03072 case 'file':
03073 $elFromTable = $this->clipObj->elFromTable('_FILE');
03074 $allowedExts = t3lib_div::trimExplode(',', $allowed, 1);
03075
03076 if ($allowedExts) {
03077 foreach($elFromTable as $elValue) {
03078 $pI = pathinfo($elValue);
03079 $ext = strtolower($pI['extension']);
03080 if (in_array($ext, $allowedExts)) {
03081 $output[] = $elValue;
03082 }
03083 }
03084 } else {
03085 $output = $elFromTable;
03086 }
03087 break;
03088 case 'db':
03089 $allowedTables = t3lib_div::trimExplode(',', $allowed, 1);
03090 if (!strcmp(trim($allowedTables[0]),'*')) {
03091 $output = $this->clipObj->elFromTable('');
03092 } else {
03093 foreach($allowedTables as $tablename) {
03094 $elFromTable = $this->clipObj->elFromTable($tablename);
03095 $output = array_merge($output,$elFromTable);
03096 }
03097 }
03098 $output = array_keys($output);
03099 break;
03100 }
03101 }
03102
03103 return $output;
03104 }
03105
03115 function getClickMenu($str,$table,$uid='') {
03116 if ($this->enableClickMenu) {
03117 $onClick = $GLOBALS['SOBE']->doc->wrapClickMenuOnIcon($str,$table,$uid,1,'','+copy,info,edit,view', TRUE);
03118 return '<a href="#" onclick="'.htmlspecialchars($onClick).'">'.$str.'</a>';
03119 }
03120 }
03121
03136 function renderWizards($itemKinds,$wizConf,$table,$row,$field,&$PA,$itemName,$specConf,$RTE=0) {
03137
03138
03139 $fieldChangeFunc = $PA['fieldChangeFunc'];
03140 $item = $itemKinds[0];
03141 $outArr = array();
03142 $colorBoxLinks = array();
03143 $fName = '['.$table.']['.$row['uid'].']['.$field.']';
03144 $md5ID = 'ID'.t3lib_div::shortmd5($itemName);
03145 $listFlag = '_list';
03146
03147
03148 if ($PA['fieldConf']['config']['form_type']=='select') {
03149 if ($PA['fieldConf']['config']['maxitems']<=1) {
03150 $listFlag = '';
03151 } elseif ($PA['fieldConf']['config']['renderMode']=='singlebox') {
03152 $itemName.='[]';
03153 $listFlag = '';
03154 }
03155 }
03156
03157
03158 if (is_array($wizConf) && !$this->disableWizards) {
03159 foreach($wizConf as $wid => $wConf) {
03160 if (substr($wid,0,1)!='_'
03161 && (!$wConf['enableByTypeConfig'] || @in_array($wid,$specConf['wizards']['parameters']))
03162 && ($RTE || !$wConf['RTEonly'])
03163 ) {
03164
03165
03166 $iTitle = htmlspecialchars($this->sL($wConf['title']));
03167 if ($wConf['icon']) {
03168 $iDat = $this->getIcon($wConf['icon']);
03169 $icon = '<img src="'.$iDat[0].'" '.$iDat[1][3].' border="0"'.t3lib_BEfunc::titleAltAttrib($iTitle).' />';
03170 } else {
03171 $icon = $iTitle;
03172 }
03173
03174
03175 switch((string)$wConf['type']) {
03176 case 'userFunc':
03177 case 'script':
03178 case 'popup':
03179 case 'colorbox':
03180 if (!$wConf['notNewRecords'] || t3lib_div::testInt($row['uid'])) {
03181
03182
03183 $params = array();
03184 $params['params'] = $wConf['params'];
03185 $params['exampleImg'] = $wConf['exampleImg'];
03186 $params['table'] = $table;
03187 $params['uid'] = $row['uid'];
03188 $params['pid'] = $row['pid'];
03189 $params['field'] = $field;
03190 $params['md5ID'] = $md5ID;
03191 $params['returnUrl'] = $this->thisReturnUrl();
03192
03193
03194 if (!strcmp(substr($wConf['script'],0,4), 'EXT:')) {
03195 $wScript = t3lib_div::getFileAbsFileName($wConf['script']);
03196 if ($wScript) {
03197 $wScript = '../'.substr($wScript,strlen(PATH_site));
03198 } else break;
03199 } else {
03200 $wScript = $wConf['script'];
03201 }
03202 $url = $this->backPath.$wScript.(strstr($wScript,'?') ? '' : '?');
03203
03204
03205 if ((string)$wConf['type']=='colorbox' && !$wConf['script']) { break; }
03206
03207
03208 if ((string)$wConf['type']=='script') {
03209 $aUrl = $url.t3lib_div::implodeArrayForUrl('',array('P'=>$params));
03210 $outArr[]='<a href="'.htmlspecialchars($aUrl).'" onclick="'.$this->blur().'return !TBE_EDITOR_isFormChanged();">'.
03211 $icon.
03212 '</a>';
03213 } else {
03214
03215
03216 $params['formName'] = $this->formName;
03217 $params['itemName'] = $itemName;
03218 $params['fieldChangeFunc'] = $fieldChangeFunc;
03219
03220 switch((string)$wConf['type']) {
03221 case 'popup':
03222 case 'colorbox':
03223
03224 $addJS = $wConf['popup_onlyOpenIfSelected']?'if (!TBE_EDITOR_curSelected(\''.$itemName.$listFlag.'\')){alert('.$GLOBALS['LANG']->JScharCode($this->getLL('m_noSelItemForEdit')).'); return false;}':'';
03225 $curSelectedValues='+\'&P[currentSelectedValues]=\'+TBE_EDITOR_curSelected(\''.$itemName.$listFlag.'\')';
03226 $aOnClick= $this->blur().
03227 $addJS.
03228 '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'].'\');'.
03229 'vHWin.focus();return false;';
03230
03231 $colorBoxLinks = Array('<a href="#" onclick="'.htmlspecialchars($aOnClick).'">','</a>');
03232 if ((string)$wConf['type']=='popup') {
03233 $outArr[] = $colorBoxLinks[0].$icon.$colorBoxLinks[1];
03234 }
03235 break;
03236 case 'userFunc':
03237 $params['item'] = &$item;
03238 $params['icon'] = $icon;
03239 $params['iTitle'] = $iTitle;
03240 $params['wConf'] = $wConf;
03241 $params['row'] = $row;
03242 $outArr[] = t3lib_div::callUserFunction($wConf['userFunc'],$params,$this);
03243 break;
03244 }
03245 }
03246
03247
03248 if (is_array($wConf['hideParent']) || $wConf['hideParent']) {
03249 $item = $itemKinds[1];
03250 if (is_array($wConf['hideParent'])) {
03251 $item.= $this->getSingleField_typeNone_render($wConf['hideParent'], $PA['itemFormElValue']);
03252 }
03253 }
03254 }
03255 break;
03256 case 'select':
03257 $fieldValue = array('config' => $wConf);
03258 $TSconfig = $this->setTSconfig($table, $row);
03259 $TSconfig[$field] = $TSconfig[$field]['wizards.'][$wid.'.'];
03260 $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($fieldValue), $fieldValue, $TSconfig, $field);
03261
03262 $opt = array();
03263 $opt[] = '<option>'.$iTitle.'</option>';
03264 foreach($selItems as $p) {
03265 $opt[] = '<option value="'.htmlspecialchars($p[1]).'">'.htmlspecialchars($p[0]).'</option>';
03266 }
03267 if ($wConf['mode']=='append') {
03268 $assignValue = $this->elName($itemName).'.value=\'\'+this.options[this.selectedIndex].value+'.$this->elName($itemName).'.value';
03269 } elseif ($wConf['mode']=='prepend') {
03270 $assignValue = $this->elName($itemName).'.value+=\'\'+this.options[this.selectedIndex].value';
03271 } else {
03272 $assignValue = $this->elName($itemName).'.value=this.options[this.selectedIndex].value';
03273 }
03274 $sOnChange = $assignValue.';this.selectedIndex=0;'.implode('',$fieldChangeFunc);
03275 $outArr[] = '<select name="_WIZARD'.$fName.'" onchange="'.htmlspecialchars($sOnChange).'">'.implode('',$opt).'</select>';
03276 break;
03277 }
03278
03279
03280 if ((string)$wConf['type']=='colorbox') {
03281 $dim = t3lib_div::intExplode('x',$wConf['dim']);
03282 $dX = t3lib_div::intInRange($dim[0],1,200,20);
03283 $dY = t3lib_div::intInRange($dim[1],1,200,20);
03284 $color = $row[$field] ? ' bgcolor="'.htmlspecialchars($row[$field]).'"' : '';
03285 $outArr[] = '<table border="0" cellpadding="0" cellspacing="0" id="'.$md5ID.'"'.$color.' style="'.htmlspecialchars($wConf['tableStyle']).'">
03286 <tr>
03287 <td>'.
03288 $colorBoxLinks[0].
03289 '<img src="clear.gif" width="'.$dX.'" height="'.$dY.'"'.t3lib_BEfunc::titleAltAttrib(trim($iTitle.' '.$row[$field])).' border="0" />'.
03290 $colorBoxLinks[1].
03291 '</td>
03292 </tr>
03293 </table>';
03294 }
03295 }
03296 }
03297
03298
03299 if (count($outArr)) {
03300 if ($wizConf['_HIDDENFIELD']) $item = $itemKinds[1];
03301
03302 $outStr = '';
03303 $vAlign = $wizConf['_VALIGN'] ? ' valign="'.$wizConf['_VALIGN'].'"' : '';
03304 if (count($outArr)>1 || $wizConf['_PADDING']) {
03305 $dist = intval($wizConf['_DISTANCE']);
03306 if ($wizConf['_VERTICAL']) {
03307 $dist = $dist ? '<tr><td><img src="clear.gif" width="1" height="'.$dist.'" alt="" /></td></tr>' : '';
03308 $outStr = '<tr><td>'.implode('</td></tr>'.$dist.'<tr><td>',$outArr).'</td></tr>';
03309 } else {
03310 $dist = $dist ? '<td><img src="clear.gif" height="1" width="'.$dist.'" alt="" /></td>' : '';
03311 $outStr = '<tr><td'.$vAlign.'>'.implode('</td>'.$dist.'<td'.$vAlign.'>',$outArr).'</td></tr>';
03312 }
03313 $outStr = '<table border="0" cellpadding="'.intval($wizConf['_PADDING']).'" cellspacing="0">'.$outStr.'</table>';
03314 } else {
03315 $outStr = implode('',$outArr);
03316 }
03317
03318 if (!strcmp($wizConf['_POSITION'],'left')) {
03319 $outStr = '<tr><td'.$vAlign.'>'.$outStr.'</td><td'.$vAlign.'>'.$item.'</td></tr>';
03320 } elseif (!strcmp($wizConf['_POSITION'],'top')) {
03321 $outStr = '<tr><td>'.$outStr.'</td></tr><tr><td>'.$item.'</td></tr>';
03322 } elseif (!strcmp($wizConf['_POSITION'],'bottom')) {
03323 $outStr = '<tr><td>'.$item.'</td></tr><tr><td>'.$outStr.'</td></tr>';
03324 } else {
03325 $outStr = '<tr><td'.$vAlign.'>'.$item.'</td><td'.$vAlign.'>'.$outStr.'</td></tr>';
03326 }
03327
03328 $item = '<table border="0" cellpadding="0" cellspacing="0">'.$outStr.'</table>';
03329 }
03330 }
03331 return $item;
03332 }
03333
03340 function getIcon($icon) {
03341 if (substr($icon,0,4)=='EXT:') {
03342 $file = t3lib_div::getFileAbsFileName($icon);
03343 if ($file) {
03344 $file = substr($file,strlen(PATH_site));
03345 $selIconFile = $this->backPath.'../'.$file;
03346 $selIconInfo = @getimagesize(PATH_site.$file);
03347 }
03348 } elseif (substr($icon,0,3)=='../') {
03349 $selIconFile = $this->backPath.t3lib_div::resolveBackPath($icon);
03350 $selIconInfo = @getimagesize(PATH_site.t3lib_div::resolveBackPath(substr($icon,3)));
03351 } elseif (substr($icon,0,4)=='ext/' || substr($icon,0,7)=='sysext/') {
03352 $selIconFile = $this->backPath.$icon;
03353 $selIconInfo = @getimagesize(PATH_typo3.$icon);
03354 } else {
03355 $selIconFile = $this->backPath.'gfx/'.$icon;
03356 $selIconInfo = @getimagesize(PATH_t3lib.'gfx/'.$icon);
03357 }
03358 return array($selIconFile,$selIconInfo);
03359 }
03360
03367 function optionTagStyle($iconString) {
03368 if ($iconString) {
03369 list($selIconFile,$selIconInfo) = $this->getIcon($iconString);
03370 $padTop = t3lib_div::intInRange(($selIconInfo[1]-12)/2,0);
03371 $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;';
03372 return $styleAttr;
03373 }
03374 }
03375
03383 function extractValuesOnlyFromValueLabelList($itemFormElValue) {
03384
03385 $itemArray = t3lib_div::trimExplode(',',$itemFormElValue,1);
03386 foreach($itemArray as $tk => $tv) {
03387 $tvP = explode('|',$tv,2);
03388 $tvP[0] = rawurldecode($tvP[0]);
03389
03390 $itemArray[$tk] = $tvP[0];
03391 }
03392 return $itemArray;
03393 }
03394
03405 function wrapOpenPalette($header,$table,$row,$palette,$retFunc=0) {
03406 $fieldL=array();
03407 if (!is_array($this->palFieldArr[$palette])) {$this->palFieldArr[$palette]=array();}
03408 $palFieldN = is_array($this->palFieldArr[$palette]) ? count($this->palFieldArr[$palette]) : 0;
03409 $palJSFunc = 'TBE_EDITOR_palUrl(\''.($table.':'.$row['uid'].':'.$palette).'\',\''.implode(',',$this->palFieldArr[$palette]).'\','.$palFieldN.',\''.$table.'\',\''.$row['uid'].'\',1);';
03410
03411 $aOnClick = $this->blur().substr($palJSFunc,0,-3).'0);return false;';
03412
03413 $iconCode = '<a href="#" onclick="'.htmlspecialchars($aOnClick).'" title="'.htmlspecialchars($table).'">'.
03414 $header.
03415 '</a>';
03416 return $retFunc ? array($iconCode,$palJSFunc) : $iconCode;
03417 }
03418
03429 function checkBoxParams($itemName,$thisValue,$c,$iCount,$addFunc='') {
03430 $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)).');'.
03431 $addFunc;
03432 $str = ' onclick="'.htmlspecialchars($onClick).'"'.
03433 (($thisValue&pow(2,$c))?' checked="checked"':'');
03434 return $str;
03435 }
03436
03443 function elName($itemName) {
03444 return 'document.'.$this->formName."['".$itemName."']";
03445 }
03446
03454 function noTitle($str,$wrapParts=array()) {
03455 return strcmp($str,'') ? $str : $wrapParts[0].'['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title').']'.$wrapParts[1];
03456 }
03457
03463 function blur() {
03464 return $GLOBALS['CLIENT']['FORMSTYLE'] ? 'this.blur();':'';
03465 }
03466
03472 function thisReturnUrl() {
03473 return $this->returnUrl ? $this->returnUrl : t3lib_div::linkThisScript();
03474 }
03475
03485 function getSingleHiddenField($table,$field,$row) {
03486 global $TCA;
03487 $out='';
03488 t3lib_div::loadTCA($table);
03489 if ($TCA[$table]['columns'][$field]) {
03490
03491 $uid=$row['uid'];
03492 $itemName=$this->prependFormFieldNames.'['.$table.']['.$uid.']['.$field.']';
03493 $itemValue=$row[$field];
03494 $item.='<input type="hidden" name="'.$itemName.'" value="'.htmlspecialchars($itemValue).'" />';
03495 $out = $item;
03496 }
03497 return $out;
03498 }
03499
03507 function formWidth($size=48,$textarea=0) {
03508
03509 if ($this->docLarge) $size = round($size*$this->form_largeComp);
03510 $wAttrib = $textarea?'cols':'size';
03511 if (!$GLOBALS['CLIENT']['FORMSTYLE']) {
03512 $retVal = ' '.$wAttrib.'="'.$size.'"';
03513 } else {
03514 $pixels = ceil($size*$this->form_rowsToStylewidth);
03515 $theStyle = 'width:'.$pixels.'px;'.$this->defStyle.$this->formElStyle($textarea?'text':'input');
03516 $retVal = ' style="'.htmlspecialchars($theStyle).'"';
03517
03518 $class = $this->formElClass($textarea?'text':'input');
03519 if ($class) {
03520 $retVal.= ' class="'.htmlspecialchars($class).'"';
03521 }
03522 }
03523 return $retVal;
03524 }
03525
03534 function formWidthText($size=48,$wrap='') {
03535 $wTags = $this->formWidth($size,1);
03536
03537 if (strtolower(trim($wrap))!='off' && $GLOBALS['CLIENT']['BROWSER']=='net' && $GLOBALS['CLIENT']['VERSION']>=5) {
03538 $wTags.=' cols="'.$size.'"';
03539 }
03540 return $wTags;
03541 }
03542
03550 function formElStyle($type) {
03551 return $this->formElStyleClassValue($type);
03552 }
03553
03561 function formElClass($type) {
03562 return $this->formElStyleClassValue($type, TRUE);
03563 }
03564
03572 function formElStyleClassValue($type, $class=FALSE) {
03573
03574 if (isset($this->fieldStyle[$type])) {
03575 $style = trim($this->fieldStyle[$type]);
03576 } else {
03577 $style = trim($this->fieldStyle['all']);
03578 }
03579
03580
03581 if (substr($style,0,6)=='CLASS:') {
03582 return $class ? trim(substr($style,6)) : '';
03583 } else {
03584 return !$class ? $style : '';
03585 }
03586 }
03587
03594 function insertDefStyle($type) {
03595 $out = '';
03596
03597 $style = trim($this->defStyle.$this->formElStyle($type));
03598 $out.= $style?' style="'.htmlspecialchars($style).'"':'';
03599
03600 $class = $this->formElClass($type);
03601 $out.= $class?' class="'.htmlspecialchars($class).'"':'';
03602
03603 return $out;
03604 }
03605
03613 function getDynTabMenu($parts, $idString) {
03614 if (is_object($GLOBALS['TBE_TEMPLATE'])) {
03615 return $GLOBALS['TBE_TEMPLATE']->getDynTabMenu($parts, $idString);
03616 } else {
03617 $output = '';
03618 foreach($parts as $singlePad) {
03619 $output.='
03620 <h3>'.htmlspecialchars($singlePad['label']).'</h3>
03621 '.($singlePad['description'] ? '<p class="c-descr">'.nl2br(htmlspecialchars($singlePad['description'])).'</p>' : '').'
03622 '.$singlePad['content'];
03623 }
03624
03625 return '<div class="typo3-dyntabmenu-divs">'.$output.'</div>';
03626 }
03627 }
03628
03629
03630
03631
03632
03633
03634
03635
03636
03637
03638
03639
03640
03641
03642
03643
03644
03652 function initItemArray($fieldValue) {
03653 $items = array();
03654 if (is_array($fieldValue['config']['items'])) {
03655 reset ($fieldValue['config']['items']);
03656 while (list($itemName,$itemValue) = each($fieldValue['config']['items'])) {
03657 $items[] = array($this->sL($itemValue[0]), $itemValue[1], $itemValue[2]);
03658 }
03659 }
03660 return $items;
03661 }
03662
03670 function addItems($items,$iArray) {
03671 global $TCA;
03672 if (is_array($iArray)) {
03673 reset($iArray);
03674 while(list($value,$label)=each($iArray)) {
03675 $items[]=array($this->sl($label),$value);
03676 }
03677 }
03678 return $items;
03679 }
03680
03692 function procItems($items,$iArray,$config,$table,$row,$field) {
03693 global $TCA;
03694
03695 $params=array();
03696 $params['items'] = &$items;
03697 $params['config'] = $config;
03698 $params['TSconfig'] = $iArray;
03699 $params['table'] = $table;
03700 $params['row'] = $row;
03701 $params['field'] = $field;
03702
03703 t3lib_div::callUserFunction($config['itemsProcFunc'],$params,$this);
03704 return $items;
03705 }
03706
03716 function addSelectOptionsToItemArray($items,$fieldValue,$TSconfig,$field) {
03717 global $TCA;
03718
03719
03720 if ($fieldValue['config']['foreign_table']) {
03721 $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field);
03722 if ($fieldValue['config']['neg_foreign_table']) {
03723 $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field,1);
03724 }
03725 }
03726
03727
03728 if ($fieldValue['config']['fileFolder']) {
03729 $fileFolder = t3lib_div::getFileAbsFileName($fieldValue['config']['fileFolder']);
03730 if (@is_dir($fileFolder)) {
03731
03732
03733 $extList = $fieldValue['config']['fileFolder_extList'];
03734 $recursivityLevels = isset($fieldValue['config']['fileFolder_recursions']) ? t3lib_div::intInRange($fieldValue['config']['fileFolder_recursions'],0,99) : 99;
03735
03736
03737 $fileFolder = ereg_replace('\/$','',$fileFolder).'/';
03738 $fileArr = t3lib_div::getAllFilesAndFoldersInPath(array(),$fileFolder,$extList,0,$recursivityLevels);
03739 $fileArr = t3lib_div::removePrefixPathFromList($fileArr, $fileFolder);
03740
03741 foreach($fileArr as $fileRef) {
03742 $fI = pathinfo($fileRef);
03743 $icon = t3lib_div::inList('gif,png,jpeg,jpg', strtolower($fI['extension'])) ? '../'.substr($fileFolder,strlen(PATH_site)).$fileRef : '';
03744 $items[] = array(
03745 $fileRef,
03746 $fileRef,
03747 $icon
03748 );
03749 }
03750 }
03751 }
03752
03753
03754 if ($fieldValue['config']['special']) {
03755 switch ($fieldValue['config']['special']) {
03756 case 'tables':
03757 $temp_tc = array_keys($TCA);
03758 $descr = '';
03759
03760 foreach($temp_tc as $theTableNames) {
03761 if (!$TCA[$theTableNames]['ctrl']['adminOnly']) {
03762
03763
03764 $icon = '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($theTableNames, array()),'',1);
03765
03766
03767 if ($this->edit_showFieldHelp) {
03768 $GLOBALS['LANG']->loadSingleTableDescription($theTableNames);
03769 $fDat = $GLOBALS['TCA_DESCR'][$theTableNames]['columns'][''];
03770 $descr = $fDat['description'];
03771 }
03772
03773
03774 $items[] = array(
03775 $this->sL($TCA[$theTableNames]['ctrl']['title']),
03776 $theTableNames,
03777 $icon,
03778 $descr
03779 );
03780 }
03781 }
03782 break;
03783 case 'pagetypes':
03784 $theTypes = $TCA['pages']['columns']['doktype']['config']['items'];
03785
03786 foreach($theTypes as $theTypeArrays) {
03787
03788 $icon = $theTypeArrays[1]!='--div--' ? '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon('pages', array('doktype' => $theTypeArrays[1])),'',1) : '';
03789
03790
03791 $items[] = array(
03792 $this->sL($theTypeArrays[0]),
03793 $theTypeArrays[1],
03794 $icon
03795 );
03796 }
03797 break;
03798 case 'exclude':
03799 $theTypes = t3lib_BEfunc::getExcludeFields();
03800 $descr = '';
03801
03802 foreach($theTypes as $theTypeArrays) {
03803 list($theTable, $theField) = explode(':', $theTypeArrays[1]);
03804
03805
03806 if ($this->edit_showFieldHelp) {
03807 $GLOBALS['LANG']->loadSingleTableDescription($theTable);
03808 $fDat = $GLOBALS['TCA_DESCR'][$theTable]['columns'][$theField];
03809 $descr = $fDat['description'];
03810 }
03811
03812
03813 $items[] = array(
03814 ereg_replace(':$','',$theTypeArrays[0]),
03815 $theTypeArrays[1],
03816 '',
03817 $descr
03818 );
03819 }
03820 break;
03821 case 'explicitValues':
03822 $theTypes = t3lib_BEfunc::getExplicitAuthFieldValues();
03823
03824
03825 $icons = array(
03826 'ALLOW' => '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_ok2.gif','',1),
03827 'DENY' => '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_fatalerror.gif','',1),
03828 );
03829
03830
03831 foreach($theTypes as $tableFieldKey => $theTypeArrays) {
03832
03833 if (is_array($theTypeArrays['items'])) {
03834
03835 $items[] = array(
03836 $theTypeArrays['tableFieldLabel'],
03837 '--div--',
03838 );
03839
03840
03841 foreach($theTypeArrays['items'] as $itemValue => $itemContent) {
03842
03843 $items[] = array(
03844 '['.$itemContent[2].'] '.$itemContent[1],
03845 $tableFieldKey.':'.ereg_replace('[:|,]','',$itemValue).':'.$itemContent[0],
03846 $icons[$itemContent[0]]
03847 );
03848 }
03849 }
03850 }
03851 break;
03852 case 'languages':
03853 $items = array_merge($items,t3lib_BEfunc::getSystemLanguages());
03854 break;
03855 case 'custom':
03856
03857 $customOptions = $GLOBALS['TYPO3_CONF_VARS']['BE']['customPermOptions'];
03858 if (is_array($customOptions)) {
03859 foreach($customOptions as $coKey => $coValue) {
03860 if (is_array($coValue['items'])) {
03861
03862 $items[] = array(
03863 $GLOBALS['LANG']->sl($coValue['header']),
03864 '--div--',
03865 );
03866
03867
03868 foreach($coValue['items'] as $itemKey => $itemCfg) {
03869
03870 if ($itemCfg[1]) {
03871 list($icon) = $this->getIcon($itemCfg[1]);
03872 if ($icon) $icon = '../'.TYPO3_mainDir.$icon;
03873 } else $icon = '';
03874
03875
03876 $items[] = array(
03877 $GLOBALS['LANG']->sl($itemCfg[0]),
03878 $coKey.':'.ereg_replace('[:|,]','',$itemKey),
03879 $icon,
03880 $GLOBALS['LANG']->sl($itemCfg[2]),
03881 );
03882 }
03883 }
03884 }
03885 }
03886 break;
03887 case 'modListGroup':
03888 case 'modListUser':
03889 $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
03890 $loadModules->load($GLOBALS['TBE_MODULES']);
03891
03892 $modList = $fieldValue['config']['special']=='modListUser' ? $loadModules->modListUser : $loadModules->modListGroup;
03893 if (is_array($modList)) {
03894 $descr = '';
03895
03896 foreach($modList as $theMod) {
03897
03898
03899 $icon = $GLOBALS['LANG']->moduleLabels['tabs_images'][$theMod.'_tab'];
03900 if ($icon) {
03901 $icon = '../'.substr($icon,strlen(PATH_site));
03902 }
03903
03904
03905 if ($this->edit_showFieldHelp) {
03906 $descr = $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tablabel'].
03907 chr(10).
03908 $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tabdescr'];
03909 }
03910
03911
03912 $items[] = array(
03913 $this->addSelectOptionsToItemArray_makeModuleData($theMod),
03914 $theMod,
03915 $icon,
03916 $descr
03917 );
03918 }
03919 }
03920 break;
03921 }
03922 }
03923
03924
03925 return $items;
03926 }
03927
03936 function addSelectOptionsToItemArray_makeModuleData($value) {
03937 $label = '';
03938
03939 $pp = explode('_',$value);
03940 if (count($pp)>1) $label.=$GLOBALS['LANG']->moduleLabels['tabs'][$pp[0].'_tab'].'>';
03941
03942 $label.= $GLOBALS['LANG']->moduleLabels['tabs'][$value.'_tab'];
03943
03944 return $label;
03945 }
03946
03958 function foreignTable($items,$fieldValue,$TSconfig,$field,$pFFlag=0) {
03959 global $TCA;
03960
03961
03962 $pF=$pFFlag?'neg_':'';
03963 $f_table = $fieldValue['config'][$pF.'foreign_table'];
03964 $uidPre = $pFFlag?'-':'';
03965
03966
03967 $res = t3lib_BEfunc::exec_foreign_table_where_query($fieldValue,$field,$TSconfig,$pF);
03968
03969
03970 if ($GLOBALS['TYPO3_DB']->sql_error()) {
03971 echo($GLOBALS['TYPO3_DB']->sql_error()."\n\nThis may indicate a table defined in tables.php is not existing in the database!");
03972 return array();
03973 }
03974
03975
03976 $lPrefix = $this->sL($fieldValue['config'][$pF.'foreign_table_prefix']);
03977
03978
03979 $iField = $TCA[$f_table]['ctrl']['selicon_field'];
03980 $iPath = trim($TCA[$f_table]['ctrl']['selicon_field_path']);
03981
03982
03983 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
03984 t3lib_BEfunc::workspaceOL($f_table, $row);
03985
03986 if ($iField && $iPath && $row[$iField]) {
03987 $iParts = t3lib_div::trimExplode(',',$row[$iField],1);
03988 $icon = '../'.$iPath.'/'.trim($iParts[0]);
03989 } elseif (t3lib_div::inList('singlebox,checkbox',$fieldValue['config']['renderMode'])) {
03990 $icon = '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($f_table, $row),'',1);
03991 } else $icon = '';
03992
03993
03994 $items[] = array(
03995 t3lib_div::fixed_lgd_cs($lPrefix.strip_tags(t3lib_BEfunc::getRecordTitle($f_table,$row)),$this->titleLen),
03996 $uidPre.$row['uid'],
03997 $icon
03998 );
03999 }
04000 return $items;
04001 }
04002
04003
04004
04005
04006
04007
04008
04009
04010
04011
04012
04013
04014
04015
04016
04017
04018
04019
04020
04021
04022
04023
04024
04025
04026
04027
04028
04029
04030
04031
04032
04039 function setNewBEDesign() {
04040
04041
04042 $this->totalWrap='
04043 <table border="0" cellspacing="0" cellpadding="0" width="'.($this->docLarge ? 440+150 : 440).'" class="typo3-TCEforms">'.
04044 '<tr class="bgColor2">
04045 <td> </td>
04046 <td>###RECORD_ICON### <span class="typo3-TCEforms-recHeader">###TABLE_TITLE###</span> ###ID_NEW_INDICATOR### - ###RECORD_LABEL###</td>
04047 </tr>'.
04048 '|'.
04049 '<tr>
04050 <td> </td>
04051 <td><img src="clear.gif" width="'.($this->docLarge ? 440+150 : 440).'" height="1" alt="" /></td>
04052 </tr>
04053 </table>';
04054
04055
04056 $this->fieldTemplate='
04057 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
04058 <td>###FIELD_HELP_ICON###</td>
04059 <td width="99%"><span style="color:###FONTCOLOR_HEAD###;"###CLASSATTR_4###><b>###FIELD_NAME###</b></span>###FIELD_HELP_TEXT###</td>
04060 </tr>
04061 <tr ###BGCOLOR######CLASSATTR_1###>
04062 <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>
04063 <td valign="top">###FIELD_ITEM######FIELD_PAL_LINK_ICON###</td>
04064 </tr>';
04065
04066 $this->palFieldTemplate='
04067 <tr ###BGCOLOR######CLASSATTR_1###>
04068 <td> </td>
04069 <td nowrap="nowrap" valign="top">###FIELD_PALETTE###</td>
04070 </tr>';
04071 $this->palFieldTemplateHeader='
04072 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
04073 <td> </td>
04074 <td nowrap="nowrap" valign="top"><strong>###FIELD_HEADER###</strong></td>
04075 </tr>';
04076
04077 $this->sectionWrap='
04078 <tr>
04079 <td colspan="2"><img src="clear.gif" width="1" height="###SPACE_BEFORE###" alt="" /></td>
04080 </tr>
04081 <tr>
04082 <td colspan="2"><table ###TABLE_ATTRIBS###>###CONTENT###</table></td>
04083 </tr>
04084 ';
04085 }
04086
04094 function intoTemplate($inArr,$altTemplate='') {
04095
04096 $fieldTemplateParts = explode('###FIELD_',$this->rplColorScheme($altTemplate?$altTemplate:$this->fieldTemplate));
04097 reset($fieldTemplateParts);
04098 $out=current($fieldTemplateParts);
04099 while(list(,$part)=each($fieldTemplateParts)) {
04100 list($key,$val)=explode('###',$part,2);
04101 $out.=$inArr[$key];
04102 $out.=$val;
04103 }
04104 return $out;
04105 }
04106
04118 function addUserTemplateMarkers($marker,$table,$field,$row,&$PA) {
04119 return $marker;
04120 }
04121
04129 function wrapLabels($str) {
04130 return $str;
04131 }
04132
04142 function wrapTotal($c,$rec,$table) {
04143 $parts = $this->replaceTableWrap(explode('|',$this->totalWrap,2),$rec,$table);
04144 return $parts[0].$c.$parts[1].implode('',$this->hiddenFieldAccum);
04145 }
04146
04155 function replaceTableWrap($arr,$rec,$table) {
04156 global $TCA;
04157 reset($arr);
04158 while(list($k,$v)=each($arr)) {
04159
04160
04161 if (strstr($rec['uid'],'NEW')) {
04162 $newLabel = ' <span class="typo3-TCEforms-newToken">'.
04163 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.new',1).
04164 '</span>';
04165
04166 #t3lib_BEfunc::fixVersioningPid($table,$rec); // Kasper: Should not be used here because NEW records are not offline workspace versions...
04167 $truePid = t3lib_BEfunc::getTSconfig_pidValue($table,$rec['uid'],$rec['pid']);
04168 $prec = t3lib_BEfunc::getRecordWSOL('pages',$truePid,'title');
04169 $rLabel = '<em>[PID: '.$truePid.'] '.htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle('pages',$prec),40))).'</em>';
04170 } else {
04171 $newLabel = ' <span class="typo3-TCEforms-recUid">['.$rec['uid'].']</span>';
04172 $rLabel = htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle($table,$rec),40)));
04173 }
04174
04175
04176 $arr[$k] = str_replace('###ID_NEW_INDICATOR###', $newLabel, $arr[$k]);
04177 $arr[$k] = str_replace('###RECORD_LABEL###',$rLabel,$arr[$k]);
04178 $arr[$k] = str_replace('###TABLE_TITLE###',htmlspecialchars($this->sL($TCA[$table]['ctrl']['title'])),$arr[$k]);
04179
04180 $titleA=t3lib_BEfunc::titleAltAttrib($this->getRecordPath($table,$rec));
04181 $arr[$k]=str_replace('###RECORD_ICON###',t3lib_iconWorks::getIconImage($table,$rec,$this->backPath,'class="absmiddle"'.$titleA),$arr[$k]);
04182 }
04183 return $arr;
04184 }
04185
04193 function wrapBorder(&$out_array,&$out_pointer) {
04194 if ($this->sectionWrap && $out_array[$out_pointer]) {
04195 $tableAttribs='';
04196 $tableAttribs.= $this->borderStyle[0] ? ' style="'.htmlspecialchars($this->borderStyle[0]).'"':'';
04197 $tableAttribs.= $this->borderStyle[2] ? ' background="'.htmlspecialchars($this->backPath.$this->borderStyle[2]).'"':'';
04198 $tableAttribs.= $this->borderStyle[3] ? ' class="'.htmlspecialchars($this->borderStyle[3]).'"':'';
04199 if ($tableAttribs) {
04200 $tableAttribs='border="0" cellspacing="0" cellpadding="0" width="100%"'.$tableAttribs;
04201 $out_array[$out_pointer] = str_replace('###CONTENT###',$out_array[$out_pointer],
04202 str_replace('###TABLE_ATTRIBS###',$tableAttribs,
04203 str_replace('###SPACE_BEFORE###',intval($this->borderStyle[1]),$this->sectionWrap)));
04204 }
04205 $out_pointer++;
04206 }
04207 }
04208
04215 function rplColorScheme($inTemplate) {
04216
04217 $inTemplate = str_replace('###BGCOLOR###',$this->colorScheme[0]?' bgcolor="'.$this->colorScheme[0].'"':'',$inTemplate);
04218 $inTemplate = str_replace('###BGCOLOR_HEAD###',$this->colorScheme[1]?' bgcolor="'.$this->colorScheme[1].'"':'',$inTemplate);
04219 $inTemplate = str_replace('###FONTCOLOR_HEAD###',$this->colorScheme[3],$inTemplate);
04220
04221
04222 $inTemplate = str_replace('###CLASSATTR_1###',$this->classScheme[0]?' class="'.$this->classScheme[0].'"':'',$inTemplate);
04223 $inTemplate = str_replace('###CLASSATTR_2###',$this->classScheme[1]?' class="'.$this->classScheme[1].'"':'',$inTemplate);
04224 $inTemplate = str_replace('###CLASSATTR_4###',$this->classScheme[3]?' class="'.$this->classScheme[3].'"':'',$inTemplate);
04225
04226 return $inTemplate;
04227 }
04228
04235 function getDivider() {
04236
04237 }
04238
04245 function printPalette($palArr) {
04246
04247
04248 $ccAttr2 = $this->colorScheme[2] ? ' bgcolor="'.$this->colorScheme[2].'"' : '';
04249 $ccAttr2.= $this->classScheme[2] ? ' class="'.$this->classScheme[2].'"' : '';
04250 $ccAttr4 = $this->colorScheme[4] ? ' style="color:'.$this->colorScheme[4].'"' : '';
04251 $ccAttr4.= $this->classScheme[4] ? ' class="'.$this->classScheme[4].'"' : '';
04252
04253
04254 foreach($palArr as $content) {
04255 $hRow[]='<td'.$ccAttr2.'> </td>
04256 <td nowrap="nowrap"'.$ccAttr2.'>'.
04257 '<span'.$ccAttr4.'>'.
04258 $content['NAME'].
04259 '</span>'.
04260 '</td>';
04261 $iRow[]='<td valign="top">'.
04262 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" vspace="4" alt="" />'.
04263 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" vspace="4" alt="" />'.
04264 '</td>
04265 <td nowrap="nowrap" valign="top">'.
04266 $content['ITEM'].
04267 $content['HELP_ICON'].
04268 '</td>';
04269 }
04270
04271
04272 $out='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-palette">
04273 <tr>
04274 <td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.
04275 implode('
04276 ',$hRow).'
04277 </tr>
04278 <tr>
04279 <td></td>'.
04280 implode('
04281 ',$iRow).'
04282 </tr>
04283 </table>';
04284
04285 return $out;
04286 }
04287
04296 function helpTextIcon($table,$field,$force=0) {
04297 if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && (($this->edit_showFieldHelp=='icon'&&!$this->doLoadTableDescr($table)) || $force)) {
04298 $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;';
04299 return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
04300 '<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="" />'.
04301 '</a>';
04302 } else {
04303
04304 #debug(array("'".$field.".description' => '[FILL IN] ".$table."->".$field."',"),$table);
04305 return ' ';
04306 }
04307 }
04308
04316 function helpText($table,$field) {
04317 if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && ($this->edit_showFieldHelp=='text' || $this->doLoadTableDescr($table))) {
04318 $fDat = $GLOBALS['TCA_DESCR'][$table]['columns'][$field];
04319 return '<table border="0" cellpadding="2" cellspacing="0" width="90%"><tr><td valign="top" width="14">'.
04320 $this->helpTextIcon(
04321 $table,
04322 $field,
04323 $fDat['details']||$fDat['syntax']||$fDat['image_descr']||$fDat['image']||$fDat['seeAlso']
04324 ).
04325 '</td><td valign="top"><span class="typo3-TCEforms-helpText">'.
04326 $GLOBALS['LANG']->hscAndCharConv(strip_tags($fDat['description']),1).
04327 '</span></td></tr></table>';
04328 }
04329 }
04330
04337 function setColorScheme($scheme) {
04338 $this->colorScheme = $this->defColorScheme;
04339 $this->classScheme = $this->defClassScheme;
04340
04341 $parts = t3lib_div::trimExplode(',',$scheme);
04342 foreach($parts as $key => $col) {
04343
04344 list($color,$class) = t3lib_div::trimExplode('|',$col);
04345
04346
04347 if ($color) $this->colorScheme[$key] = $color;
04348 if ($color=='-') $this->colorScheme[$key] = '';
04349
04350
04351 if ($class) $this->classScheme[$key] = $class;
04352 if ($class=='-') $this->classScheme[$key] = '';
04353 }
04354 }
04355
04361 function resetSchemes() {
04362 $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][0]);
04363 $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
04364 $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
04365 }
04366
04372 function storeSchemes() {
04373 $this->savedSchemes['classScheme'] = $this->classScheme;
04374 $this->savedSchemes['colorScheme'] = $this->colorScheme;
04375 $this->savedSchemes['fieldStyle'] = $this->fieldStyle;
04376 $this->savedSchemes['borderStyle'] = $this->borderStyle;
04377 }
04378
04384 function restoreSchemes() {
04385 $this->classScheme = $this->savedSchemes['classScheme'];
04386 $this->colorScheme = $this->savedSchemes['colorScheme'];
04387 $this->fieldStyle = $this->savedSchemes['fieldStyle'];
04388 $this->borderStyle = $this->savedSchemes['borderStyle'];
04389 }
04390
04391
04392
04393
04394
04395
04396
04397
04398
04399
04400
04401
04402
04403
04404
04405
04406
04407
04408
04414 function JStop() {
04415
04416 $out = '';
04417
04418
04419 if (count($this->additionalCode_pre)) {
04420 $out.= implode('
04421
04422 <!-- NEXT: -->
04423 ',$this->additionalCode_pre);
04424 }
04425
04426
04427 if (count($this->additionalJS_pre)) {
04428 $out.='
04429
04430
04431 <!--
04432 JavaScript in top of page (before form):
04433 -->
04434
04435 <script type="text/javascript">
04436
04437
04438 '.implode('
04439
04440
04441 ',$this->additionalJS_pre).'
04442
04443
04444 </script>
04445 ';
04446 }
04447
04448
04449 return $out;
04450 }
04451
04465 function JSbottom($formname='forms[0]') {
04466
04467
04468 $reqLines=array();
04469 $reqLinesCheck=array();
04470 $reqLinesSet=array();
04471 reset($this->requiredFields);
04472 while(list($itemImgName,$itemName)=each($this->requiredFields)) {
04473 $reqLines[]=" TBE_REQUIRED['".$itemName."']=1;";
04474 $reqLinesCheck[]=" if (!document.".$formname."['".$itemName."'].value) {OK=0;}";
04475 $reqLinesSet[]=" if (!document.".$formname."['".$itemName."'].value) {TBE_EDITOR_setImage('req_".$itemImgName."','TBE_EDITOR_req');}";
04476 }
04477
04478 $reqRange=array();
04479 $reqRangeCheck=array();
04480 $reqRangeSet=array();
04481 reset($this->requiredElements);
04482 while(list($itemName,$range)=each($this->requiredElements)) {
04483 $reqRange[]=" TBE_RANGE['".$itemName."']=1;";
04484 $reqRange[]=" TBE_RANGE_lower['".$itemName."']=".$range[0].";";
04485 $reqRange[]=" TBE_RANGE_upper['".$itemName."']=".$range[1].";";
04486 $reqRangeCheck[]=" if (!TBE_EDITOR_checkRange(document.".$formname."['".$itemName."_list'],".$range[0].",".$range[1].")) {OK=0;}";
04487 $reqRangeSet[]=" if (!TBE_EDITOR_checkRange(document.".$formname."['".$itemName."_list'],".$range[0].",".$range[1].")) {TBE_EDITOR_setImage('req_".$range['imgName']."','TBE_EDITOR_req');}";
04488 }
04489
04490 $this->TBE_EDITOR_fieldChanged_func='TBE_EDITOR_fieldChanged_fName(fName,formObj[fName+"_list"]);';
04491
04492 if ($this->loadMD5_JS) {
04493 $out.='
04494 <script type="text/javascript" src="'.$this->backPath.'md5.js"></script>';
04495 }
04496 $out.='
04497 <script type="text/javascript" src="'.$this->backPath.'../t3lib/jsfunc.evalfield.js"></script>
04498 <script type="text/javascript">
04499
04500
04501 var TBE_EDITOR_req=new Image(); TBE_EDITOR_req.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/required_h.gif','',1).'";
04502 var TBE_EDITOR_cm=new Image(); TBE_EDITOR_cm.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_client.gif','',1).'";
04503 var TBE_EDITOR_sel=new Image(); TBE_EDITOR_sel.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_selected.gif','',1).'";
04504 var TBE_EDITOR_clear=new Image(); TBE_EDITOR_clear.src = "'.$this->backPath.'clear.gif";
04505 var TBE_REQUIRED=new Array();
04506 '.implode(chr(10),$reqLines).'
04507
04508 var TBE_RANGE=new Array();
04509 var TBE_RANGE_lower=new Array();
04510 var TBE_RANGE_upper=new Array();
04511 '.implode(chr(10),$reqRange).'
04512
04513
04514 '.implode(chr(10),$this->additionalJS_post).'
04515
04516 var TBE_EDITOR_loadTime = 0;
04517 var TBE_EDITOR_isChanged = 0;
04518
04519 function TBE_EDITOR_loginRefreshed() {
04520 var date = new Date();
04521 TBE_EDITOR_loadTime = Math.floor(date.getTime()/1000);
04522 if (top.busy && top.busy.loginRefreshed) {top.busy.loginRefreshed();}
04523 }
04524 function TBE_EDITOR_checkLoginTimeout() {
04525 var date = new Date();
04526 var theTime = Math.floor(date.getTime()/1000);
04527 if (theTime > TBE_EDITOR_loadTime+'.intval($GLOBALS['BE_USER']->auth_timeout_field).'-10) {
04528 return true;
04529 }
04530 }
04531 function TBE_EDITOR_setHiddenContent(RTEcontent,theField) {
04532 document.'.$formname.'[theField].value = RTEcontent;
04533 alert(document.'.$formname.'[theField].value);
04534 }
04535 function TBE_EDITOR_fieldChanged_fName(fName,el) {
04536 var idx='.(2+substr_count($this->prependFormFieldNames,'[')).';
04537 var table = TBE_EDITOR_split(fName, "[", idx);
04538 var uid = TBE_EDITOR_split(fName, "[", idx+1);
04539 var field = TBE_EDITOR_split(fName, "[", idx+2);
04540
04541 table = table.substr(0,table.length-1);
04542 uid = uid.substr(0,uid.length-1);
04543 field = field.substr(0,field.length-1);
04544 TBE_EDITOR_fieldChanged(table,uid,field,el);
04545 }
04546 function TBE_EDITOR_fieldChanged(table,uid,field,el) {
04547 var theField = "'.$this->prependFormFieldNames.'["+table+"]["+uid+"]["+field+"]";
04548 TBE_EDITOR_isChanged = 1;
04549
04550
04551 var imgObjName = "cm_"+table+"_"+uid+"_"+field;
04552 TBE_EDITOR_setImage(imgObjName,"TBE_EDITOR_cm");
04553
04554
04555 if (document.'.$formname.'[theField] && document.'.$formname.'[theField].type=="select-one" && document.'.$formname.'[theField+"_selIconVal"]) {
04556 var imgObjName = "selIcon_"+table+"_"+uid+"_"+field+"_";
04557 TBE_EDITOR_setImage(imgObjName+document.'.$formname.'[theField+"_selIconVal"].value,"TBE_EDITOR_clear");
04558 document.'.$formname.'[theField+"_selIconVal"].value = document.'.$formname.'[theField].selectedIndex;
04559 TBE_EDITOR_setImage(imgObjName+document.'.$formname.'[theField+"_selIconVal"].value,"TBE_EDITOR_sel");
04560 }
04561
04562
04563 var imgReqObjName = "req_"+table+"_"+uid+"_"+field;
04564 if (TBE_REQUIRED[theField] && document.'.$formname.'[theField]) {
04565 if (document.'.$formname.'[theField].value) {
04566 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_clear");
04567 } else {
04568 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_req");
04569 }
04570 }
04571 if (TBE_RANGE[theField] && document.'.$formname.'[theField]) {
04572 if (TBE_EDITOR_checkRange(document.'.$formname.'[theField+"_list"],TBE_RANGE_lower[theField],TBE_RANGE_upper[theField])) {
04573 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_clear");
04574 } else {
04575 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_req");
04576 }
04577 }
04578 '.(!$this->isPalettedoc?'':'
04579 TBE_EDITOR_setOriginalFormFieldValue(theField);
04580 ').'
04581 }
04582 '.($this->isPalettedoc?'
04583 function TBE_EDITOR_setOriginalFormFieldValue(theField) {
04584 if ('.$this->isPalettedoc.' && '.$this->isPalettedoc.'.document.'.$formname.' && '.$this->isPalettedoc.'.document.'.$formname.'[theField]) {
04585 '.$this->isPalettedoc.'.document.'.$formname.'[theField].value = document.'.$formname.'[theField].value;
04586 }
04587 }
04588 ':'').'
04589 function TBE_EDITOR_isFormChanged(noAlert) {
04590 if (TBE_EDITOR_isChanged && !noAlert && confirm('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsChanged')).')) {
04591 return 0;
04592 }
04593 return TBE_EDITOR_isChanged;
04594 }
04595 function TBE_EDITOR_checkAndDoSubmit(sendAlert) {
04596 if (TBE_EDITOR_checkSubmit(sendAlert)) {
04597 TBE_EDITOR_submitForm();
04598 }
04599 }
04600
04607 function TBE_EDITOR_checkSubmit(sendAlert) {
04608 if (TBE_EDITOR_checkLoginTimeout() && confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_refresh_login')).')) {
04609 vHWin=window.open(\''.$this->backPath.'login_frameset.php?\',\'relogin\',\'height=300,width=400,status=0,menubar=0\');
04610 vHWin.focus();
04611 return false;
04612 }
04613 var OK=1;
04614
04615
04616 '.implode(chr(10),$this->additionalJS_submit).'
04617
04618 if(!OK) {
04619 if (!confirm(unescape("SYSTEM ERROR: One or more Rich Text Editors on the page could not be contacted. This IS an error, although it should not be regular.\nYou can save the form now by pressing OK, but you will loose the Rich Text Editor content if you do.\n\nPlease report the error to your administrator if it persists."))) {
04620 return false;
04621 } else {
04622 OK = 1;
04623 }
04624 }
04625
04626 '.implode(chr(10),$reqLinesCheck).'
04627 '.implode(chr(10),$reqRangeCheck).'
04628
04629 if (OK || sendAlert==-1) {
04630 return true;
04631 } else {
04632 if(sendAlert) alert('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsMissing')).');
04633 return false;
04634 }
04635 }
04636 function TBE_EDITOR_checkRange(el,lower,upper) {
04637 if (el && el.length>=lower && el.length<=upper) {
04638 return true;
04639 } else {
04640 return false;
04641 }
04642 }
04643 function TBE_EDITOR_initRequired() {
04644 '.implode(chr(10),$reqLinesSet).'
04645 '.implode(chr(10),$reqRangeSet).'
04646 }
04647 function TBE_EDITOR_setImage(name,imgName) {
04648 if (document[name]) {document[name].src = eval(imgName+".src");}
04649 }
04650 function TBE_EDITOR_submitForm() {
04651 '.($this->doSaveFieldName?'document.'.$this->formName."['".$this->doSaveFieldName."'].value=1;":'').'
04652 document.'.$this->formName.'.submit();
04653 }
04654 function typoSetup () {
04655 this.passwordDummy = "********";
04656 this.decimalSign = ".";
04657 }
04658 var TS = new typoSetup();
04659 var evalFunc = new evalFunc();
04660 evalFunc.USmode = '.($GLOBALS['TYPO3_CONF_VARS']['SYS']['USdateFormat']?'1':'0').';
04661
04662 function typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue) {
04663 if (document.'.$formname.'[theField]) {
04664 var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
04665 var theValue = document.'.$formname.'[theField].value;
04666 if (checkbox && theValue==checkboxValue) {
04667 document.'.$formname.'[theField+"_hr"].value="";
04668 if (document.'.$formname.'[theField+"_cb"]) document.'.$formname.'[theField+"_cb"].checked = "";
04669 } else {
04670 document.'.$formname.'[theField+"_hr"].value = evalFunc.outputObjValue(theFObj, theValue);
04671 if (document.'.$formname.'[theField+"_cb"]) document.'.$formname.'[theField+"_cb"].checked = "on";
04672 }
04673 }
04674 }
04675 function typo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off, checkSetValue) {
04676 if (document.'.$formname.'[theField]) {
04677 var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
04678 if (checkbox_off) {
04679 if (document.'.$formname.'[theField+"_cb"].checked) {
04680 document.'.$formname.'[theField].value=checkSetValue;
04681 } else {
04682 document.'.$formname.'[theField].value=checkboxValue;
04683 }
04684 }else{
04685 document.'.$formname.'[theField].value = evalFunc.evalObjValue(theFObj, document.'.$formname.'[theField+"_hr"].value);
04686 }
04687 typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue);
04688 }
04689 }
04690 function TBE_EDITOR_split(theStr1, delim, index) {
04691 var theStr = ""+theStr1;
04692 var lengthOfDelim = delim.length;
04693 sPos = -lengthOfDelim;
04694 if (index<1) {index=1;}
04695 for (var a=1; a<index; a++) {
04696 sPos = theStr.indexOf(delim, sPos+lengthOfDelim);
04697 if (sPos==-1) {return null;}
04698 }
04699 ePos = theStr.indexOf(delim, sPos+lengthOfDelim);
04700 if(ePos == -1) {ePos = theStr.length;}
04701 return (theStr.substring(sPos+lengthOfDelim,ePos));
04702 }
04703 function TBE_EDITOR_palUrl(inData,fieldList,fieldNum,table,uid,isOnFocus) {
04704 var url = "'.$this->backPath.'alt_palette.php?inData="+inData+"&formName='.rawurlencode($this->formName).'"+"&prependFormFieldNames='.rawurlencode($this->prependFormFieldNames).'";
04705 var field = "";
04706 var theField="";
04707 for (var a=0; a<fieldNum;a++) {
04708 field = TBE_EDITOR_split(fieldList, ",", a+1);
04709 theField = "'.$this->prependFormFieldNames.'["+table+"]["+uid+"]["+field+"]";
04710 if (document.'.$formname.'[theField]) url+="&rec["+field+"]="+TBE_EDITOR_rawurlencode(document.'.$formname.'[theField].value);
04711 }
04712 if (top.topmenuFrame) {
04713 top.topmenuFrame.location.href = url+"&backRef="+(top.content.list_frame ? (top.content.list_frame.view_frame ? "top.content.list_frame.view_frame" : "top.content.list_frame") : "top.content");
04714 } else if (!isOnFocus) {
04715 var vHWin=window.open(url,"palette","height=300,width=200,status=0,menubar=0,scrollbars=1");
04716 vHWin.focus();
04717 }
04718 }
04719 function TBE_EDITOR_curSelected(theField) {
04720 var fObjSel = document.'.$formname.'[theField];
04721 var retVal="";
04722 if (fObjSel) {
04723 if (fObjSel.type=="select-multiple" || fObjSel.type=="select-one") {
04724 var l=fObjSel.length;
04725 for (a=0;a<l;a++) {
04726 if (fObjSel.options[a].selected==1) {
04727 retVal+=fObjSel.options[a].value+",";
04728 }
04729 }
04730 }
04731 }
04732 return retVal;
04733 }
04734 function TBE_EDITOR_rawurlencode(str,maxlen) {
04735 var output = str;
04736 if (maxlen) output = output.substr(0,200);
04737 output = escape(output);
04738 output = TBE_EDITOR_str_replace("*","%2A", output);
04739 output = TBE_EDITOR_str_replace("+","%2B", output);
04740 output = TBE_EDITOR_str_replace("/","%2F", output);
04741 output = TBE_EDITOR_str_replace("@","%40", output);
04742 return output;
04743 }
04744 function TBE_EDITOR_str_replace(match,replace,string) {
04745 var input = ""+string;
04746 var matchStr = ""+match;
04747 if (!matchStr) {return string;}
04748 var output = "";
04749 var pointer=0;
04750 var pos = input.indexOf(matchStr);
04751 while (pos!=-1) {
04752 output+=""+input.substr(pointer, pos-pointer)+replace;
04753 pointer=pos+matchStr.length;
04754 pos = input.indexOf(match,pos+1);
04755 }
04756 output+=""+input.substr(pointer);
04757 return output;
04758 }
04759
04760 </script>
04761 <script type="text/javascript">
04762
04763
04764 '.$this->extJSCODE.'
04765
04766 TBE_EDITOR_initRequired();
04767 TBE_EDITOR_loginRefreshed();
04768
04769 </script>';
04770 return $out;
04771 }
04772
04779 function dbFileCon($formObj='document.forms[0]') {
04780 $str='
04781
04782
04783
04784
04785
04786 var browserWin="";
04787
04788 function setFormValueOpenBrowser(mode,params) {
04789 var url = "'.$this->backPath.'browser.php?mode="+mode+"&bparams="+params;
04790
04791 browserWin = window.open(url,"Typo3WinBrowser","height=350,width="+(mode=="db"?650:600)+",status=0,menubar=0,resizable=1,scrollbars=1");
04792 browserWin.focus();
04793 }
04794 function setFormValueFromBrowseWin(fName,value,label) {
04795 var formObj = setFormValue_getFObj(fName)
04796 if (formObj && value!="--div--") {
04797 fObj = formObj[fName+"_list"];
04798
04799 var l=fObj.length;
04800 var setOK=1;
04801 if (!formObj[fName+"_mul"] || formObj[fName+"_mul"].value==0) {
04802 for (a=0;a<l;a++) {
04803 if (fObj.options[a].value==value) {
04804 setOK=0;
04805 }
04806 }
04807 }
04808 if (setOK) {
04809 fObj.length++;
04810 fObj.options[l].value=value;
04811 fObj.options[l].text=unescape(label);
04812
04813
04814 setHiddenFromList(fObj,formObj[fName]);
04815 '.$this->TBE_EDITOR_fieldChanged_func.'
04816 }
04817 }
04818 }
04819 function setHiddenFromList(fObjSel,fObjHid) {
04820 l=fObjSel.length;
04821 fObjHid.value="";
04822 for (a=0;a<l;a++) {
04823 fObjHid.value+=fObjSel.options[a].value+",";
04824 }
04825 }
04826 function setFormValueManipulate(fName,type) {
04827 var formObj = setFormValue_getFObj(fName)
04828 if (formObj) {
04829 var localArray_V = new Array();
04830 var localArray_L = new Array();
04831 var localArray_S = new Array();
04832 var fObjSel = formObj[fName+"_list"];
04833 var l=fObjSel.length;
04834 var c=0;
04835 if (type=="Remove" || type=="Top" || type=="Bottom") {
04836 if (type=="Top") {
04837 for (a=0;a<l;a++) {
04838 if (fObjSel.options[a].selected==1) {
04839 localArray_V[c]=fObjSel.options[a].value;
04840 localArray_L[c]=fObjSel.options[a].text;
04841 localArray_S[c]=1;
04842 c++;
04843 }
04844 }
04845 }
04846 for (a=0;a<l;a++) {
04847 if (fObjSel.options[a].selected!=1) {
04848 localArray_V[c]=fObjSel.options[a].value;
04849 localArray_L[c]=fObjSel.options[a].text;
04850 localArray_S[c]=0;
04851 c++;
04852 }
04853 }
04854 if (type=="Bottom") {
04855 for (a=0;a<l;a++) {
04856 if (fObjSel.options[a].selected==1) {
04857 localArray_V[c]=fObjSel.options[a].value;
04858 localArray_L[c]=fObjSel.options[a].text;
04859 localArray_S[c]=1;
04860 c++;
04861 }
04862 }
04863 }
04864 }
04865 if (type=="Down") {
04866 var tC = 0;
04867 var tA = new Array();
04868
04869 for (a=0;a<l;a++) {
04870 if (fObjSel.options[a].selected!=1) {
04871
04872 localArray_V[c]=fObjSel.options[a].value;
04873 localArray_L[c]=fObjSel.options[a].text;
04874 localArray_S[c]=0;
04875 c++;
04876
04877
04878 if (tA.length > 0) {
04879 for (aa=0;aa<tA.length;aa++) {
04880 localArray_V[c]=fObjSel.options[tA[aa]].value;
04881 localArray_L[c]=fObjSel.options[tA[aa]].text;
04882 localArray_S[c]=1;
04883 c++;
04884 }
04885
04886 var tC = 0;
04887 var tA = new Array();
04888 }
04889 } else {
04890 tA[tC] = a;
04891 tC++;
04892 }
04893 }
04894
04895 if (tA.length > 0) {
04896 for (aa=0;aa<tA.length;aa++) {
04897 localArray_V[c]=fObjSel.options[tA[aa]].value;
04898 localArray_L[c]=fObjSel.options[tA[aa]].text;
04899 localArray_S[c]=1;
04900 c++;
04901 }
04902 }
04903 }
04904 if (type=="Up") {
04905 var tC = 0;
04906 var tA = new Array();
04907 var c = l-1;
04908
04909 for (a=l-1;a>=0;a--) {
04910 if (fObjSel.options[a].selected!=1) {
04911
04912
04913 localArray_V[c]=fObjSel.options[a].value;
04914 localArray_L[c]=fObjSel.options[a].text;
04915 localArray_S[c]=0;
04916 c--;
04917
04918
04919 if (tA.length > 0) {
04920 for (aa=0;aa<tA.length;aa++) {
04921 localArray_V[c]=fObjSel.options[tA[aa]].value;
04922 localArray_L[c]=fObjSel.options[tA[aa]].text;
04923 localArray_S[c]=1;
04924 c--;
04925 }
04926
04927 var tC = 0;
04928 var tA = new Array();
04929 }
04930 } else {
04931 tA[tC] = a;
04932 tC++;
04933 }
04934 }
04935
04936 if (tA.length > 0) {
04937 for (aa=0;aa<tA.length;aa++) {
04938 localArray_V[c]=fObjSel.options[tA[aa]].value;
04939 localArray_L[c]=fObjSel.options[tA[aa]].text;
04940 localArray_S[c]=1;
04941 c--;
04942 }
04943 }
04944 c=l;
04945 }
04946
04947
04948 fObjSel.length = c;
04949 for (a=0;a<c;a++) {
04950 fObjSel.options[a].value = localArray_V[a];
04951 fObjSel.options[a].text = localArray_L[a];
04952 fObjSel.options[a].selected = localArray_S[a];
04953 }
04954 setHiddenFromList(fObjSel,formObj[fName]);
04955
04956 '.$this->TBE_EDITOR_fieldChanged_func.'
04957 }
04958 }
04959 function setFormValue_getFObj(fName) {
04960 var formObj = '.$formObj.';
04961 if (formObj) {
04962 if (formObj[fName] && formObj[fName+"_list"] && formObj[fName+"_list"].type=="select-multiple") {
04963 return formObj;
04964 } else {
04965 alert("Formfields missing:\n fName: "+formObj[fName]+"\n fName_list:"+formObj[fName+"_list"]+"\n type:"+formObj[fName+"_list"].type+"\n fName:"+fName);
04966 }
04967 }
04968 return "";
04969 }
04970
04971
04972 ';
04973 return $str;
04974 }
04975
04981 function printNeededJSFunctions() {
04982
04983 $out = $this->JSbottom($this->formName);
04984
04985 if ($this->printNeededJS['dbFileIcons']) {
04986 $out.= '
04987
04988
04989
04990 <!--
04991 JavaScript after the form has been drawn:
04992 -->
04993
04994 <script type="text/javascript">
04995
04996 '.$this->dbFileCon('document.'.$this->formName).'
04997
04998 </script>';
04999 }
05000 return $out;
05001 }
05002
05008 function printNeededJSFunctions_top() {
05009
05010 $out = $this->JStop($this->formName);
05011 return $out;
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
05038
05039
05040
05041
05042
05043
05044
05045
05046
05047
05048
05056 function getDefaultRecord($table,$pid=0) {
05057 global $TCA;
05058 if ($TCA[$table]) {
05059 t3lib_div::loadTCA($table);
05060 $row = array();
05061
05062 if ($pid<0 && $TCA[$table]['ctrl']['useColumnsForDefaultValues']) {
05063
05064 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $table, 'uid='.abs($pid).t3lib_BEfunc::deleteClause($table));
05065 if ($drow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
05066
05067 $fArr = explode(',',$TCA[$table]['ctrl']['useColumnsForDefaultValues']);
05068 foreach($fArr as $theF) {
05069 if ($TCA[$table]['columns'][$theF]) {
05070 $row[$theF] = $drow[$theF];
05071 }
05072 }
05073 }
05074 $GLOBALS['TYPO3_DB']->sql_free_result($res);
05075 }
05076
05077 foreach($TCA[$table]['columns'] as $field => $info) {
05078 if (isset($info['config']['default'])) {
05079 $row[$field] = $info['config']['default'];
05080 }
05081 }
05082
05083 return $row;
05084 }
05085 }
05086
05095 function getRecordPath($table,$rec) {
05096 t3lib_BEfunc::fixVersioningPid($table,$rec);
05097 list($tscPID,$thePidValue)=$this->getTSCpid($table,$rec['uid'],$rec['pid']);
05098 if ($thePidValue>=0) {
05099 return t3lib_BEfunc::getRecordPath($tscPID,$this->readPerms(),15);
05100 }
05101 }
05102
05109 function readPerms() {
05110 if (!$this->perms_clause_set) {
05111 $this->perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
05112 $this->perms_clause_set=1;
05113 }
05114 return $this->perms_clause;
05115 }
05116
05123 function sL($str) {
05124 return $GLOBALS['LANG']->sL($str);
05125 }
05126
05136 function getLL($str) {
05137 $content = '';
05138
05139 switch(substr($str,0,2)) {
05140 case 'l_':
05141 $content = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.'.substr($str,2));
05142 break;
05143 case 'm_':
05144 $content = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:mess.'.substr($str,2));
05145 break;
05146 }
05147 return $content;
05148 }
05149
05157 function isPalettesCollapsed($table,$palette) {
05158 global $TCA;
05159
05160 if ($TCA[$table]['ctrl']['canNotCollapse']) return 0;
05161 if (is_array($TCA[$table]['palettes'][$palette]) && $TCA[$table]['palettes'][$palette]['canNotCollapse']) return 0;
05162 return $this->palettesCollapsed;
05163 }
05164
05173 function isDisplayCondition($displayCond,$row,$ffValueKey='') {
05174 $output = FALSE;
05175
05176 $parts = explode(':',$displayCond);
05177 switch((string)$parts[0]) {
05178 case 'FIELD':
05179 $theFieldValue = $ffValueKey ? $row[$parts[1]][$ffValueKey] : $row[$parts[1]];
05180
05181 switch((string)$parts[2]) {
05182 case 'REQ':
05183 if (strtolower($parts[3])=='true') {
05184 $output = $theFieldValue ? TRUE : FALSE;
05185 } elseif (strtolower($parts[3])=='false') {
05186 $output = !$theFieldValue ? TRUE : FALSE;
05187 }
05188 break;
05189 case '>':
05190 $output = $theFieldValue > $parts[3];
05191 break;
05192 case '<':
05193 $output = $theFieldValue < $parts[3];
05194 break;
05195 case '>=':
05196 $output = $theFieldValue >= $parts[3];
05197 break;
05198 case '<=':
05199 $output = $theFieldValue <= $parts[3];
05200 break;
05201 case '-':
05202 case '!-':
05203 $cmpParts = explode('-',$parts[3]);
05204 $output = $theFieldValue >= $cmpParts[0] && $theFieldValue <= $cmpParts[1];
05205 if ($parts[2]{0}=='!') $output = !$output;
05206 break;
05207 case 'IN':
05208 case '!IN':
05209 $output = t3lib_div::inList($parts[3],$theFieldValue);
05210 if ($parts[2]{0}=='!') $output = !$output;
05211 break;
05212 case '=':
05213 case '!=':
05214 $output = t3lib_div::inList($parts[3],$theFieldValue);
05215 if ($parts[2]{0}=='!') $output = !$output;
05216 break;
05217 }
05218 break;
05219 case 'EXT':
05220 switch((string)$parts[2]) {
05221 case 'LOADED':
05222 if (strtolower($parts[3])=='true') {
05223 $output = t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
05224 } elseif (strtolower($parts[3])=='false') {
05225 $output = !t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
05226 }
05227 break;
05228 }
05229 break;
05230 case 'REC':
05231 switch((string)$parts[1]) {
05232 case 'NEW':
05233 if (strtolower($parts[2])=='true') {
05234 $output = !(intval($row['uid']) > 0) ? TRUE : FALSE;
05235 } elseif (strtolower($parts[2])=='false') {
05236 $output = (intval($row['uid']) > 0) ? TRUE : FALSE;
05237 }
05238 break;
05239 }
05240 break;
05241 case 'HIDE_L10N_SIBLINGS':
05242 if ($ffValueKey==='vDEF') {
05243 $output = TRUE;
05244 } elseif ($parts[1]==='except_admin' && $GLOBALS['BE_USER']->isAdmin()) {
05245 $output = TRUE;
05246 }
05247 break;
05248 case 'HIDE_FOR_NON_ADMINS':
05249 $output = $GLOBALS['BE_USER']->isAdmin() ? TRUE : FALSE;
05250 break;
05251 case 'VERSION':
05252 switch((string)$parts[1]) {
05253 case 'IS':
05254 if (strtolower($parts[2])=='true') {
05255 $output = intval($row['pid'])==-1 ? TRUE : FALSE;
05256 } elseif (strtolower($parts[2])=='false') {
05257 $output = !(intval($row['pid'])==-1) ? TRUE : FALSE;
05258 }
05259 break;
05260 }
05261 break;
05262 }
05263
05264 return $output;
05265 }
05266
05277 function getTSCpid($table,$uid,$pid) {
05278 $key = $table.':'.$uid.':'.$pid;
05279 if (!isset($this->cache_getTSCpid[$key])) {
05280 $this->cache_getTSCpid[$key] = t3lib_BEfunc::getTSCpid($table,$uid,$pid);
05281 }
05282 return $this->cache_getTSCpid[$key];
05283 }
05284
05291 function doLoadTableDescr($table) {
05292 global $TCA;
05293 return $TCA[$table]['interface']['always_description'];
05294 }
05295
05303 function getAvailableLanguages($onlyIsoCoded=1,$setDefault=1) {
05304 $isL = t3lib_extMgm::isLoaded('static_info_tables');
05305
05306
05307 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('static_lang_isocode,title,uid', 'sys_language', 'pid=0 AND hidden=0'.t3lib_BEfunc::deleteClause('sys_language'), '', 'title');
05308
05309
05310 $output=array();
05311 if ($setDefault) {
05312 $output[0]=array(
05313 'uid' => 0,
05314 'title' => 'Default language',
05315 'ISOcode' => 'DEF'
05316 );
05317 }
05318 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
05319 $output[$row['uid']]=$row;
05320
05321 if ($isL && $row['static_lang_isocode']) {
05322 $rr = t3lib_BEfunc::getRecord('static_languages',$row['static_lang_isocode'],'lg_iso_2');
05323 if ($rr['lg_iso_2']) $output[$row['uid']]['ISOcode']=$rr['lg_iso_2'];
05324 }
05325
05326 if ($onlyIsoCoded && !$output[$row['uid']]['ISOcode']) unset($output[$row['uid']]);
05327 }
05328 return $output;
05329 }
05330 }
05331
05332
05333
05334
05335
05336
05337
05338
05339
05345 class t3lib_TCEforms_FE extends t3lib_TCEforms {
05346
05353 function wrapLabels($str) {
05354 return '<font face="verdana" size="1" color="black">'.$str.'</font>';
05355 }
05356
05363 function printPalette($palArr) {
05364 $out='';
05365 reset($palArr);
05366 $bgColor=' bgcolor="#D6DAD0"';
05367 while(list(,$content)=each($palArr)) {
05368 $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>';
05369 $iRow[]='<td valign="top">'.
05370 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" alt="" />'.
05371 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" alt="" />'.
05372 '</td><td nowrap="nowrap" valign="top">'.$content['ITEM'].$content['HELP_ICON'].'</td>';
05373 }
05374 $out='<table border="0" cellpadding="0" cellspacing="0">
05375 <tr><td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.implode('',$hRow).'</tr>
05376 <tr><td></td>'.implode('',$iRow).'</tr>
05377 </table>';
05378
05379 return $out;
05380 }
05381
05388 function setFancyDesign() {
05389 $this->fieldTemplate='
05390 <tr>
05391 <td nowrap="nowrap" bgcolor="#F6F2E6">###FIELD_HELP_ICON###<font face="verdana" size="1" color="black"><b>###FIELD_NAME###</b></font>###FIELD_HELP_TEXT###</td>
05392 </tr>
05393 <tr>
05394 <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>
05395 </tr> ';
05396
05397 $this->totalWrap='<table border="0" cellpadding="1" cellspacing="0" bgcolor="black"><tr><td><table border="0" cellpadding="2" cellspacing="0">|</table></td></tr></table>';
05398
05399 $this->palFieldTemplate='
05400 <tr>
05401 <td nowrap="nowrap" bgcolor="#ABBBB4"><font face="verdana" size="1" color="black">###FIELD_PALETTE###</font></td>
05402 </tr> ';
05403 $this->palFieldTemplateHeader='
05404 <tr>
05405 <td nowrap="nowrap" bgcolor="#F6F2E6"><font face="verdana" size="1" color="black"><b>###FIELD_HEADER###</b></font></td>
05406 </tr> ';
05407 }
05408 }
05409
05410 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']) {
05411 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']);
05412 }
05413 ?>