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 if ($config['exclusiveKeys']) {
01736 $sOnChange = 'setFormValueFromBrowseWin(\''.$PA['itemFormElName'].'\',this.options[this.selectedIndex].value,this.options[this.selectedIndex].text,\''.$config['exclusiveKeys'].'\'); ';
01737 } else {
01738 $sOnChange = 'setFormValueFromBrowseWin(\''.$PA['itemFormElName'].'\',this.options[this.selectedIndex].value,this.options[this.selectedIndex].text); ';
01739 }
01740 $sOnChange .= implode('',$PA['fieldChangeFunc']);
01741 $itemsToSelect = '
01742 <select name="'.$PA['itemFormElName'].'_sel"'.
01743 $this->insertDefStyle('select').
01744 ($size ? ' size="'.$size.'"' : '').
01745 ' onchange="'.htmlspecialchars($sOnChange).'"'.
01746 $PA['onFocus'].
01747 $selector_itemListStyle.'>
01748 '.implode('
01749 ',$opt).'
01750 </select>';
01751 }
01752
01753
01754 $params = array(
01755 'size' => $size,
01756 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01757 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01758 'dontShowMoveIcons' => ($maxitems<=1),
01759 'maxitems' => $maxitems,
01760 'info' => '',
01761 'headers' => array(
01762 'selector' => $this->getLL('l_selected').':<br />',
01763 'items' => $this->getLL('l_items').':<br />'
01764 ),
01765 'noBrowser' => 1,
01766 'thumbnails' => $itemsToSelect,
01767 'readOnly' => $disabled
01768 );
01769 $item.= $this->dbFileIcons($PA['itemFormElName'],'','',$itemArray,'',$params,$PA['onFocus']);
01770
01771 return $item;
01772 }
01773
01784 function getSingleField_typeGroup($table,$field,$row,&$PA) {
01785
01786 $config = $PA['fieldConf']['config'];
01787 $internal_type = $config['internal_type'];
01788 $show_thumbs = $config['show_thumbs'];
01789 $size = intval($config['size']);
01790 $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01791 if (!$maxitems) $maxitems=100000;
01792 $minitems = t3lib_div::intInRange($config['minitems'],0);
01793 $allowed = $config['allowed'];
01794 $disallowed = $config['disallowed'];
01795
01796 $disabled = '';
01797 if($this->renderReadonly || $config['readOnly']) {
01798 $disabled = ' disabled="disabled"';
01799 }
01800
01801 $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'"'.$disabled.' />';
01802 $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01803 $info='';
01804
01805
01806 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01807
01808
01809 switch((string)$config['internal_type']) {
01810 case 'file':
01811
01812
01813 $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01814 if (!count($tempFT)) {$info.='*';}
01815 foreach($tempFT as $ext) {
01816 if ($ext) {
01817 $info.=strtoupper($ext).' ';
01818 }
01819 }
01820
01821 $tempFT_dis = t3lib_div::trimExplode(',',$disallowed,1);
01822 if (count($tempFT_dis)) {$info.='<br />';}
01823 foreach($tempFT_dis as $ext) {
01824 if ($ext) {
01825 $info.='-'.strtoupper($ext).' ';
01826 }
01827 }
01828
01829
01830 $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01831
01832
01833 $thumbsnail = '';
01834 if ($show_thumbs) {
01835 $imgs = array();
01836 foreach($itemArray as $imgRead) {
01837 $imgP = explode('|',$imgRead);
01838
01839 $rowCopy = array();
01840 $rowCopy[$field] = $imgP[0];
01841
01842
01843 $absFilePath = t3lib_div::getFileAbsFileName($config['uploadfolder'].'/'.$imgP[0]);
01844
01845 $fI = pathinfo($imgP[0]);
01846 $fileIcon = t3lib_BEfunc::getFileIcon(strtolower($fI['extension']));
01847 $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="" />';
01848
01849 $imgs[] = '<span class="nobr">'.t3lib_BEfunc::thumbCode($rowCopy,$table,$field,$this->backPath,'thumbs.php',$config['uploadfolder'],0,' align="middle"').
01850 ($absFilePath ? $this->getClickMenu($fileIcon, $absFilePath) : $fileIcon).
01851 $imgP[0].
01852 '</span>';
01853 }
01854 $thumbsnail = implode('<br />',$imgs);
01855 }
01856
01857
01858 $params = array(
01859 'size' => $size,
01860 'dontShowMoveIcons' => ($maxitems<=1),
01861 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01862 'maxitems' => $maxitems,
01863 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01864 'info' => $info,
01865 'thumbnails' => $thumbsnail,
01866 'readOnly' => $disabled
01867 );
01868 $item.= $this->dbFileIcons($PA['itemFormElName'],'file',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01869
01870 if(!$disabled) {
01871
01872 if ($this->edit_docModuleUpload) $item.='<input type="file" name="'.$PA['itemFormElName_file'].'"'.$this->formWidth().' size="60" />';
01873 }
01874 break;
01875 case 'db':
01876
01877
01878 $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01879 if (!strcmp(trim($tempFT[0]),'*')) {
01880 $info.='<span class="nobr"> '.
01881 htmlspecialchars($this->getLL('l_allTables')).
01882 '</span><br />';
01883 } else {
01884 while(list(,$theT)=each($tempFT)) {
01885 if ($theT) {
01886 $info.='<span class="nobr"> '.
01887 t3lib_iconWorks::getIconImage($theT,array(),$this->backPath,'align="top"').
01888 htmlspecialchars($this->sL($GLOBALS['TCA'][$theT]['ctrl']['title'])).
01889 '</span><br />';
01890 }
01891 }
01892 }
01893
01894 $perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
01895 $itemArray = array();
01896 $imgs = array();
01897
01898
01899 $temp_itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01900 foreach($temp_itemArray as $dbRead) {
01901 $recordParts = explode('|',$dbRead);
01902 list($this_table,$this_uid) = t3lib_BEfunc::splitTable_Uid($recordParts[0]);
01903 $itemArray[] = array('table'=>$this_table, 'id'=>$this_uid);
01904 if (!$disabled && $show_thumbs) {
01905 $rr = t3lib_BEfunc::getRecordWSOL($this_table,$this_uid);
01906 $imgs[] = '<span class="nobr">'.
01907 $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).
01908 ' '.
01909 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>'.
01910 '</span>';
01911 }
01912 }
01913 $thumbsnail='';
01914 if (!$disabled && $show_thumbs) {
01915 $thumbsnail = implode('<br />',$imgs);
01916 }
01917
01918
01919 $params = array(
01920 'size' => $size,
01921 'dontShowMoveIcons' => ($maxitems<=1),
01922 'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01923 'maxitems' => $maxitems,
01924 'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01925 'info' => $info,
01926 'thumbnails' => $thumbsnail,
01927 'readOnly' => $disabled
01928 );
01929 $item.= $this->dbFileIcons($PA['itemFormElName'],'db',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01930
01931 break;
01932 }
01933
01934
01935 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01936 if (!$disabled) {
01937 $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
01938 }
01939
01940 return $item;
01941 }
01942
01953 function getSingleField_typeNone($table,$field,$row,&$PA) {
01954
01955 $config = $PA['fieldConf']['config'];
01956 $itemValue = $PA['itemFormElValue'];
01957
01958 return $this->getSingleField_typeNone_render($config,$itemValue);
01959 }
01960
01969 function getSingleField_typeNone_render($config,$itemValue) {
01970
01971
01972 $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;';
01973
01974 if ($config['format']) {
01975 $itemValue = $this->formatValue($config, $itemValue);
01976 }
01977
01978 $rows = intval($config['rows']);
01979 if ($rows > 1) {
01980 if(!$config['pass_content']) {
01981 $itemValue = nl2br(htmlspecialchars($itemValue));
01982 }
01983
01984 $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
01985 if (!$config['fixedRows']) {
01986 $origRows = $rows = t3lib_div::intInRange($rows, 1, 20);
01987 if (strlen($itemValue)>$this->charsPerRow*2) {
01988 $cols = $this->maxTextareaWidth;
01989 $rows = t3lib_div::intInRange(round(strlen($itemValue)/$this->charsPerRow),count(explode(chr(10),$itemValue)),20);
01990 if ($rows<$origRows) $rows=$origRows;
01991 }
01992 }
01993
01994 if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
01995 $width = ceil($cols*$this->form_rowsToStylewidth);
01996
01997 $height=$rows*12;
01998
01999 $item='
02000 <div style="'.htmlspecialchars($divStyle.' overflow:auto; height:'.$height.'px; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'">'.
02001 $itemValue.
02002 '</div>';
02003 } else {
02004 if(!$config['pass_content']) {
02005 $itemValue = htmlspecialchars($itemValue);
02006 }
02007
02008 $cols = $config['cols']?$config['cols']:($config['size']?$config['size']:$this->maxInputWidth);
02009 if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
02010 $width = ceil($cols*$this->form_rowsToStylewidth);
02011
02012
02013 $item = '
02014 <div style="'.htmlspecialchars($divStyle.' overflow:hidden; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'" title="'.$itemValue.'">'.
02015 '<span class="nobr">'.(strcmp($itemValue,'')?$itemValue:' ').'</span>'.
02016 '</div>';
02017 }
02018
02019 return $item;
02020 }
02021
02031 function getSingleField_typeFlex($table,$field,$row,&$PA) {
02032
02033
02034 $dataStructArray = t3lib_BEfunc::getFlexFormDS($PA['fieldConf']['config'],$row,$table);
02035
02036
02037 if (is_array($dataStructArray)) {
02038
02039
02040 $xmlData = $PA['itemFormElValue'];
02041 $xmlHeaderAttributes = t3lib_div::xmlGetHeaderAttribs($xmlData);
02042 $storeInCharset = strtolower($xmlHeaderAttributes['encoding']);
02043 if ($storeInCharset) {
02044 $currentCharset=$GLOBALS['LANG']->charSet;
02045 $xmlData = $GLOBALS['LANG']->csConvObj->conv($xmlData,$storeInCharset,$currentCharset,1);
02046 }
02047 $editData=t3lib_div::xml2array($xmlData);
02048 if (!is_array($editData)) {
02049 $editData=array();
02050 } elseif (isset($editData['meta']) && !is_array($editData['meta'])) {
02051 $editData['meta'] = array();
02052 }
02053
02054
02055 $sheet = $editData['meta']['currentSheetId'] ? $editData['meta']['currentSheetId'] : 'sDEF';
02056
02057
02058
02059
02060
02061
02062
02063 $langChildren = $dataStructArray['meta']['langChildren'] ? 1 : 0;
02064 $langDisabled = $dataStructArray['meta']['langDisable'] ? 1 : 0;
02065
02066 $editData['meta']['currentLangId']=array();
02067 $languages = $this->getAvailableLanguages();
02068
02069 foreach($languages as $lInfo) {
02070 if ($GLOBALS['BE_USER']->checkLanguageAccess($lInfo['uid'])) {
02071 $editData['meta']['currentLangId'][] = $lInfo['ISOcode'];
02072 }
02073 }
02074 if (!is_array($editData['meta']['currentLangId']) || !count($editData['meta']['currentLangId'])) {
02075 $editData['meta']['currentLangId']=array('DEF');
02076 }
02077
02078 $editData['meta']['currentLangId'] = array_unique($editData['meta']['currentLangId']);
02079
02080
02081
02082
02083
02084
02085 $PA['_noEditDEF'] = FALSE;
02086 if ($langChildren || $langDisabled) {
02087 $rotateLang = array('DEF');
02088 } else {
02089 if (!in_array('DEF',$editData['meta']['currentLangId'])) {
02090 array_unshift($editData['meta']['currentLangId'],'DEF');
02091 $PA['_noEditDEF'] = TRUE;
02092 }
02093 $rotateLang = $editData['meta']['currentLangId'];
02094 }
02095
02096
02097 if (is_array($dataStructArray['sheets'])) {
02098 $tabsToTraverse = array_keys($dataStructArray['sheets']);
02099 } else {
02100 $tabsToTraverse = array($sheet);
02101 }
02102
02103 foreach($rotateLang as $lKey) {
02104 if (!$langChildren && !$langDisabled) {
02105 $item.= '<b>'.$lKey.':</b>';
02106 }
02107
02108 $tabParts = array();
02109 foreach($tabsToTraverse as $sheet) {
02110 $sheetCfg = $dataStructArray['sheets'][$sheet];
02111 list ($dataStruct, $sheet) = t3lib_div::resolveSheetDefInDS($dataStructArray,$sheet);
02112
02113
02114 if (is_array($dataStruct['ROOT']) && is_array($dataStruct['ROOT']['el'])) {
02115 $cmdData = t3lib_div::_GP('flexFormsCmdData');
02116 $lang = 'l'.$lKey;
02117 $PA['_valLang'] = $langChildren && !$langDisabled ? $editData['meta']['currentLangId'] : 'DEF';
02118 $PA['_lang'] = $lang;
02119
02120
02121 $tRows = $this->getSingleField_typeFlex_draw(
02122 $dataStruct['ROOT']['el'],
02123 $editData['data'][$sheet][$lang],
02124 $cmdData['data'][$sheet][$lang],
02125 $table,
02126 $field,
02127 $row,
02128 $PA,
02129 '[data]['.$sheet.']['.$lang.']'
02130 );
02131 $sheetContent= '<table border="0" cellpadding="1" cellspacing="1" class="typo3-TCEforms-flexForm">'.implode('',$tRows).'</table>';
02132
02133 # $item = '<div style=" position:absolute;">'.$item.'</div>';
02134
02135 } else $sheetContent='Data Structure ERROR: No ROOT element found for sheet "'.$sheet.'".';
02136
02137
02138 $tabParts[] = array(
02139 'label' => ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sheet),
02140 'description' => ($sheetCfg['ROOT']['TCEforms']['sheetDescription'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetDescription']) : ''),
02141 'linkTitle' => ($sheetCfg['ROOT']['TCEforms']['sheetShortDescr'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetShortDescr']) : ''),
02142 'content' => $sheetContent
02143 );
02144 }
02145
02146 if (is_array($dataStructArray['sheets'])) {
02147 $item.= $this->getDynTabMenu($tabParts,'TCEFORMS:flexform:'.$PA['itemFormElName'].$PA['_lang']);
02148 } else {
02149 $item.= $sheetContent;
02150 }
02151 }
02152 } else $item='Data Structure ERROR: '.$dataStructArray;
02153
02154 return $item;
02155 }
02156
02166 function getSingleField_typeFlex_langMenu($languages,$elName,$selectedLanguage,$multi=1) {
02167 $opt=array();
02168 foreach($languages as $lArr) {
02169 $opt[]='<option value="'.htmlspecialchars($lArr['ISOcode']).'"'.(in_array($lArr['ISOcode'],$selectedLanguage)?' selected="selected"':'').'>'.htmlspecialchars($lArr['title']).'</option>';
02170 }
02171
02172 $output = '<select name="'.$elName.'[]"'.($multi ? ' multiple="multiple" size="'.count($languages).'"' : '').'>'.implode('',$opt).'</select>';
02173
02174 return $output;
02175 }
02176
02185 function getSingleField_typeFlex_sheetMenu($sArr,$elName,$sheetKey) {
02186
02187 $tCells =array();
02188 $pct = round(100/count($sArr));
02189 foreach($sArr as $sKey => $sheetCfg) {
02190 if ($GLOBALS['BE_USER']->jsConfirmation(1)) {
02191 $onClick = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){'.$this->elName($elName).".value='".$sKey."'; TBE_EDITOR_submitForm()};";
02192 } else {
02193 $onClick = 'if(TBE_EDITOR_checkSubmit(-1)){ '.$this->elName($elName).".value='".$sKey."'; TBE_EDITOR_submitForm();}";
02194 }
02195
02196
02197 $tCells[]='<td width="'.$pct.'%" style="'.($sKey==$sheetKey ? 'background-color: #9999cc; font-weight: bold;' : 'background-color: #aaaaaa;').' cursor: hand;" onclick="'.htmlspecialchars($onClick).'" align="center">'.
02198 ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sKey).
02199 '</td>';
02200 }
02201
02202 return '<table border="0" cellpadding="0" cellspacing="2" class="typo3-TCEforms-flexForm-sheetMenu"><tr>'.implode('',$tCells).'</tr></table>';
02203 }
02204
02220 function getSingleField_typeFlex_draw($dataStruct,$editData,$cmdData,$table,$field,$row,&$PA,$formPrefix='',$level=0,$tRows=array()) {
02221
02222
02223 if (is_array($dataStruct)) {
02224 foreach($dataStruct as $key => $value) {
02225 if (is_array($value)) {
02226
02227
02228
02229
02230 $rowCells=array();
02231
02232
02233 $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>';;
02234
02235 $rowCells['formEl']='';
02236 if ($value['type']=='array') {
02237 if ($value['section']) {
02238
02239 if (is_array($value['el'])) {
02240 $opt=array();
02241 $opt[]='<option value=""></option>';
02242 foreach($value['el'] as $kk => $vv) {
02243 $opt[]='<option value="'.$kk.'">'.htmlspecialchars($this->getLL('l_new') . ' "'.$this->sL($value['el'][$kk]['tx_templavoila']['title']).'"').'</option>';
02244 }
02245 $rowCells['formEl']='<select name="flexFormsCmdData'.$formPrefix.'['.$key.'][value]">'.implode('',$opt).'</select>';
02246 }
02247
02248
02249 $tRows[]='<tr class="bgColor2">
02250 <td nowrap="nowrap" valign="top">'.$rowCells['title'].'</td>
02251 <td>'.$rowCells['formEl'].'</td>
02252 </tr>';
02253
02254 $cc=0;
02255 if (is_array($editData[$key]['el'])) {
02256 foreach($editData[$key]['el'] as $k3 => $v3) {
02257 $cc=$k3;
02258 $theType = key($v3);
02259 $theDat = $v3[$theType];
02260 $newSectionEl = $value['el'][$theType];
02261 if (is_array($newSectionEl)) {
02262 $tRows = $this->getSingleField_typeFlex_draw(
02263 array($theType => $newSectionEl),
02264 array($theType => $theDat),
02265 $cmdData[$key]['el'][$cc],
02266 $table,
02267 $field,
02268 $row,
02269 $PA,
02270 $formPrefix.'['.$key.'][el]['.$cc.']',
02271 $level+1,
02272 $tRows
02273 );
02274 }
02275 }
02276 }
02277
02278
02279
02280
02281 if ($cmdData[$key]['value']) {
02282 $newSectionEl = $value['el'][$cmdData[$key]['value']];
02283 if (is_array($newSectionEl)) {
02284 $tRows = $this->getSingleField_typeFlex_draw(
02285 array($cmdData[$key]['value'] => $newSectionEl),
02286 array(),
02287 array(),
02288 $table,
02289 $field,
02290 $row,
02291 $PA,
02292 $formPrefix.'['.$key.'][el]['.($cc+1).']',
02293 $level+1,
02294 $tRows
02295 );
02296 }
02297 }
02298 } else {
02299 $idTagPrefix = uniqid('id',true);
02300
02301
02302 $tRows[]='<tr class="bgColor2">
02303 <td nowrap="nowrap" valign="top">'.
02304 '<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>'.
02305 '<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>'.
02306 '<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>'.
02307 $rowCells['title'].'</td>
02308 <td>'.$rowCells['formEl'].'</td>
02309 </tr>';
02310
02311 $tRows = $this->getSingleField_typeFlex_draw(
02312 $value['el'],
02313 $editData[$key]['el'],
02314 $cmdData[$key]['el'],
02315 $table,
02316 $field,
02317 $row,
02318 $PA,
02319 $formPrefix.'['.$key.'][el]',
02320 $level+1,
02321 $tRows
02322 );
02323 }
02324
02325 } elseif (is_array($value['TCEforms']['config'])) {
02326
02327 if (is_array($PA['_valLang'])) {
02328 $rotateLang = $PA['_valLang'];
02329 } else {
02330 $rotateLang = array($PA['_valLang']);
02331 }
02332
02333 foreach($rotateLang as $vDEFkey) {
02334 $vDEFkey = 'v'.$vDEFkey;
02335
02336 if (!$value['TCEforms']['displayCond'] || $this->isDisplayCondition($value['TCEforms']['displayCond'],$editData,$vDEFkey)) {
02337 $fakePA=array();
02338 $fakePA['fieldConf']=array(
02339 'label' => $this->sL(trim($value['TCEforms']['label'])),
02340 'config' => $value['TCEforms']['config'],
02341 'defaultExtras' => $value['TCEforms']['defaultExtras'],
02342 'onChange' => $value['TCEforms']['onChange']
02343 );
02344 if ($PA['_noEditDEF'] && $PA['_lang']==='lDEF') {
02345 $fakePA['fieldConf']['config'] = array(
02346 'type' => 'none',
02347 'rows' => 2
02348 );
02349 }
02350
02351 if (
02352 $fakePA['fieldConf']['onChange'] == 'reload' ||
02353 ($GLOBALS['TCA'][$table]['ctrl']['type'] && !strcmp($key,$GLOBALS['TCA'][$table]['ctrl']['type'])) ||
02354 ($GLOBALS['TCA'][$table]['ctrl']['requestUpdate'] && t3lib_div::inList($GLOBALS['TCA'][$table]['ctrl']['requestUpdate'],$key))) {
02355 if ($GLOBALS['BE_USER']->jsConfirmation(1)) {
02356 $alertMsgOnChange = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){ TBE_EDITOR_submitForm() };';
02357 } else {
02358 $alertMsgOnChange = 'if(TBE_EDITOR_checkSubmit(-1)){ TBE_EDITOR_submitForm();}';
02359 }
02360 } else {
02361 $alertMsgOnChange = '';
02362 }
02363
02364 $fakePA['fieldChangeFunc']=$PA['fieldChangeFunc'];
02365 if (strlen($alertMsgOnChange)) {
02366 $fakePA['fieldChangeFunc']['alert']=$alertMsgOnChange;
02367 }
02368 $fakePA['onFocus']=$PA['onFocus'];
02369 $fakePA['label']=$PA['label'];
02370
02371 $fakePA['itemFormElName']=$PA['itemFormElName'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02372 $fakePA['itemFormElName_file']=$PA['itemFormElName_file'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02373
02374 if(isset($editData[$key][$vDEFkey])) {
02375 $fakePA['itemFormElValue']=$editData[$key][$vDEFkey];
02376 } else {
02377 $fakePA['itemFormElValue']=$fakePA['fieldConf']['config']['default'];
02378 }
02379
02380 $rowCells['formEl']= $this->getSingleField_SW($table,$field,$row,$fakePA);
02381 $rowCells['title']= htmlspecialchars($fakePA['fieldConf']['label']);
02382
02383 if (!in_array('DEF',$rotateLang)) {
02384 $defInfo = '<div class="typo3-TCEforms-originalLanguageValue">'.nl2br(htmlspecialchars($editData[$key]['vDEF'])).' </div>';
02385 } else {
02386 $defInfo = '';
02387 }
02388
02389
02390 $tRows[]='<tr>
02391 <td nowrap="nowrap" valign="top" class="bgColor5">'.$rowCells['title'].($vDEFkey=='vDEF' ? '' : ' ('.$vDEFkey.')').'</td>
02392 <td class="bgColor4">'.$rowCells['formEl'].$defInfo.'</td>
02393 </tr>';
02394 }
02395 }
02396 }
02397 }
02398 }
02399 }
02400
02401 return $tRows;
02402 }
02403
02413 function getSingleField_typeUnknown($table,$field,$row,&$PA) {
02414 $item='Unknown type: '.$PA['fieldConf']['config']['form_type'].'<br />';
02415
02416 return $item;
02417 }
02418
02428 function getSingleField_typeUser($table,$field,$row,&$PA) {
02429 $PA['table']=$table;
02430 $PA['field']=$field;
02431 $PA['row']=$row;
02432
02433 $PA['pObj']=&$this;
02434
02435 return t3lib_div::callUserFunction($PA['fieldConf']['config']['userFunc'],$PA,$this);
02436 }
02437
02438
02439
02440
02441
02442
02443
02444
02445
02446
02447
02448
02457 function formatValue ($config, $itemValue) {
02458 $format = trim($config['format']);
02459 switch($format) {
02460 case 'date':
02461 $option = trim($config['format.']['option']);
02462 if ($option) {
02463 if ($config['format.']['strftime']) {
02464 $value = strftime($option,$itemValue);
02465 } else {
02466 $value = date($option,$itemValue);
02467 }
02468 } else {
02469 $value = date('d-m-Y',$itemValue);
02470 }
02471 if ($config['format.']['appendAge']) {
02472 $value .= ' ('.t3lib_BEfunc::calcAge((time()-$itemValue), $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')).')';
02473 }
02474 $itemValue = $value;
02475 break;
02476 case 'datetime':
02477 $itemValue = date('H:i d-m-Y',$itemValue);
02478 break;
02479 case 'time':
02480 $itemValue = date('H:i',$itemValue);
02481 break;
02482 case 'timesec':
02483 $itemValue = date('H:i:s',$itemValue);
02484 break;
02485 case 'year':
02486 $itemValue = date('Y',$itemValue);
02487 break;
02488 case 'int':
02489 $baseArr = array('dec'=>'d','hex'=>'x','HEX'=>'X','oct'=>'o','bin'=>'b');
02490 $base = trim($config['format.']['base']);
02491 $format = $baseArr[$base] ? $baseArr[$base] : 'd';
02492 $itemValue = sprintf('%'.$format,$itemValue);
02493 break;
02494 case 'float':
02495 $precision = t3lib_div::intInRange($config['format.']['precision'],1,10,2);
02496 $itemValue = sprintf('%.'.$precision.'f',$itemValue);
02497 break;
02498 case 'number':
02499 $format = trim($config['format.']['option']);
02500 $itemValue = sprintf('%'.$format,$itemValue);
02501 break;
02502 case 'md5':
02503 $itemValue = md5($itemValue);
02504 break;
02505 case 'filesize':
02506 $value = t3lib_div::formatSize(intval($itemValue));
02507 if ($config['format.']['appendByteSize']) {
02508 $value .= ' ('.$itemValue.')';
02509 }
02510 $itemValue = $value;
02511 break;
02512 case 'user':
02513 $func = trim($config['format.']['userFunc']);
02514 if ($func) {
02515 $params = array(
02516 'value' => $itemValue,
02517 'args' => $config['format.']['userFunc'],
02518 'config' => $config,
02519 'pObj' => &$this
02520 );
02521 $itemValue = t3lib_div::callUserFunction($func,$params,$this);
02522 }
02523 break;
02524 default:
02525 break;
02526 }
02527
02528 return $itemValue;
02529 }
02530
02531
02532
02533
02534
02535
02536
02537
02538
02539
02540
02541
02549 function getRTypeNum($table,$row) {
02550 global $TCA;
02551
02552 if ($TCA[$table]['ctrl']['type']) {
02553 $typeFieldName = $TCA[$table]['ctrl']['type'];
02554 $typeNum=$row[$typeFieldName];
02555 if (!strcmp($typeNum,'')) $typeNum=0;
02556 } else {
02557 $typeNum = 0;
02558 }
02559
02560 $typeNum = (string)$typeNum;
02561 if (!$TCA[$table]['types'][$typeNum]) {
02562 $typeNum = 1;
02563 }
02564
02565 return $typeNum;
02566 }
02567
02575 function rearrange($fields) {
02576 $fO = array_flip(t3lib_div::trimExplode(',',$this->fieldOrder,1));
02577 reset($fields);
02578 $newFields=array();
02579 while(list($cc,$content)=each($fields)) {
02580 $cP = t3lib_div::trimExplode(';',$content);
02581 if (isset($fO[$cP[0]])) {
02582 $newFields[$fO[$cP[0]]] = $content;
02583 unset($fields[$cc]);
02584 }
02585 }
02586 ksort($newFields);
02587 $fields=array_merge($newFields,$fields);
02588 return $fields;
02589 }
02590
02601 function getExcludeElements($table,$row,$typeNum) {
02602 global $TCA;
02603
02604
02605 $excludeElements=array();
02606
02607
02608 if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02609 $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02610 if (trim($TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]])) {
02611 $excludeElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]],1);
02612 }
02613 }
02614
02615
02616 if ($TCA[$table]['types'][$typeNum]['bitmask_value_field']) {
02617 $sTfield = $TCA[$table]['types'][$typeNum]['bitmask_value_field'];
02618 $sTValue = t3lib_div::intInRange($row[$sTfield],0);
02619 if (is_array($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02620 reset($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits']);
02621 while(list($bitKey,$eList)=each($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02622 $bit=substr($bitKey,1);
02623 if (t3lib_div::testInt($bit)) {
02624 $bit = t3lib_div::intInRange($bit,0,30);
02625 if (
02626 (substr($bitKey,0,1)=='-' && !($sTValue&pow(2,$bit))) ||
02627 (substr($bitKey,0,1)=='+' && ($sTValue&pow(2,$bit)))
02628 ) {
02629 $excludeElements = array_merge($excludeElements,t3lib_div::trimExplode(',',$eList,1));
02630 }
02631 }
02632 }
02633 }
02634 }
02635
02636
02637 return $excludeElements;
02638 }
02639
02649 function getFieldsToAdd($table,$row,$typeNum) {
02650 global $TCA;
02651
02652
02653 $addElements=array();
02654
02655
02656 if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02657 $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02658 if (trim($TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]])) {
02659 $addElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]],1);
02660 }
02661 }
02662
02663 return array($addElements,$sTfield);
02664 }
02665
02674 function mergeFieldsWithAddedFields($fields,$fieldsToAdd) {
02675 if (count($fieldsToAdd[0])) {
02676 reset($fields);
02677 $c=0;
02678 while(list(,$fieldInfo)=each($fields)) {
02679 $parts = explode(';',$fieldInfo);
02680 if (!strcmp(trim($parts[0]),$fieldsToAdd[1])) {
02681 array_splice(
02682 $fields,
02683 $c+1,
02684 0,
02685 $fieldsToAdd[0]
02686 );
02687 break;
02688 }
02689 $c++;
02690 }
02691 }
02692 return $fields;
02693 }
02694
02695
02706 function setTSconfig($table,$row,$field='') {
02707 $mainKey = $table.':'.$row['uid'];
02708 if (!isset($this->cachedTSconfig[$mainKey])) {
02709 $this->cachedTSconfig[$mainKey]=t3lib_BEfunc::getTCEFORM_TSconfig($table,$row);
02710 }
02711 if ($field) {
02712 return $this->cachedTSconfig[$mainKey][$field];
02713 } else {
02714 return $this->cachedTSconfig[$mainKey];
02715 }
02716 }
02717
02728 function getSpecConfForField($table,$row,$field) {
02729
02730 $types_fieldConfig = t3lib_BEfunc::getTCAtypes($table,$row);
02731
02732
02733 if (is_array($types_fieldConfig)) {
02734 foreach($types_fieldConfig as $vconf) {
02735
02736 if ($vconf['field']==$field) return $vconf['spec'];
02737 }
02738 }
02739 }
02740
02749 function getSpecConfFromString($extraString, $defaultExtras) {
02750 return t3lib_BEfunc::getSpecConfParts($extraString, $defaultExtras);
02751 }
02752
02753
02754
02755
02756
02757
02758
02759
02760
02761
02762
02763
02764
02765
02766
02767
02777 function registerDefaultLanguageData($table,$rec) {
02778 global $TCA;
02779
02780
02781 if ($TCA[$table]['ctrl']['languageField']
02782 && $rec[$TCA[$table]['ctrl']['languageField']] > 0
02783 && $TCA[$table]['ctrl']['transOrigPointerField']
02784 && intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]) > 0) {
02785
02786 $lookUpTable = $TCA[$table]['ctrl']['transOrigPointerTable'] ? $TCA[$table]['ctrl']['transOrigPointerTable'] : $table;
02787
02788
02789 $this->defaultLanguageData[$table.':'.$rec['uid']] = t3lib_BEfunc::getRecordWSOL($lookUpTable, intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]));
02790
02791
02792 if ($TCA[$table]['ctrl']['transOrigDiffSourceField']) {
02793 $this->defaultLanguageData_diff[$table.':'.$rec['uid']] = unserialize($rec[$TCA[$table]['ctrl']['transOrigDiffSourceField']]);
02794 }
02795 }
02796 }
02797
02809 function getLanguageOverlayRawValue($table, $row, $field, $fieldConf) {
02810 global $TCA;
02811
02812 $value = $row[$field];
02813
02814 if (is_array($this->defaultLanguageData[$table.':'.$row['uid']])) {
02815
02816 if ($fieldConf['l10n_mode']=='exclude'
02817 || ($fieldConf['l10n_mode']=='mergeIfNotBlank' && strcmp(trim($this->defaultLanguageData[$table.':'.$row['uid']][$field]),''))) {
02818 $value = $this->defaultLanguageData[$table.':'.$row['uid']][$field];
02819 }
02820
02821 }
02822
02823 return $value;
02824 }
02825
02837 function renderDefaultLanguageContent($table,$field,$row,$item) {
02838 if (is_array($this->defaultLanguageData[$table.':'.$row['uid']])) {
02839 $dLVal = t3lib_BEfunc::getProcessedValue($table,$field,$this->defaultLanguageData[$table.':'.$row['uid']][$field],0,1);
02840
02841 if (strcmp($dLVal,'')) {
02842 $item.='<div class="typo3-TCEforms-originalLanguageValue">'.nl2br(htmlspecialchars($dLVal)).' </div>';
02843 }
02844 }
02845
02846 return $item;
02847 }
02848
02860 function renderDefaultLanguageDiff($table,$field,$row,$item) {
02861 if (is_array($this->defaultLanguageData_diff[$table.':'.$row['uid']])) {
02862
02863
02864 $dLVal = array(
02865 'old' => $this->defaultLanguageData_diff[$table.':'.$row['uid']],
02866 'new' => $this->defaultLanguageData[$table.':'.$row['uid']],
02867 );
02868
02869 if (isset($dLVal['old'][$field])) {
02870 if (strcmp($dLVal['old'][$field],$dLVal['new'][$field])) {
02871
02872
02873 $t3lib_diff_Obj = t3lib_div::makeInstance('t3lib_diff');
02874 $diffres = $t3lib_diff_Obj->makeDiffDisplay(
02875 t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['old'][$field],0,1),
02876 t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['new'][$field],0,1)
02877 );
02878
02879 $item.='<div class="typo3-TCEforms-diffBox">'.
02880 '<div class="typo3-TCEforms-diffBox-header">'.htmlspecialchars($this->getLL('l_changeInOrig')).':</div>'.
02881 $diffres.
02882 '</div>';
02883 }
02884 }
02885 }
02886
02887 return $item;
02888 }
02889
02890
02891
02892
02893
02894
02895
02896
02897
02898
02899
02900
02901
02902
02903
02916 function dbFileIcons($fName,$mode,$allowed,$itemArray,$selector='',$params=array(),$onFocus='') {
02917
02918
02919 $disabled = '';
02920 if($this->renderReadonly || $params['readOnly']) {
02921 $disabled = ' disabled="disabled"';
02922 }
02923
02924
02925 $this->printNeededJS['dbFileIcons']=1;
02926
02927
02928 $uidList=array();
02929 $opt=array();
02930 $itemArrayC=0;
02931
02932
02933 if (is_array($itemArray)) {
02934 $itemArrayC=count($itemArray);
02935 reset($itemArray);
02936 switch($mode) {
02937 case 'db':
02938 while(list(,$pp)=each($itemArray)) {
02939 $pRec = t3lib_BEfunc::getRecordWSOL($pp['table'],$pp['id']);
02940 if (is_array($pRec)) {
02941 $pTitle = t3lib_div::fixed_lgd_cs($this->noTitle($pRec[$GLOBALS['TCA'][$pp['table']]['ctrl']['label']]),$this->titleLen);
02942 $pUid = $pp['table'].'_'.$pp['id'];
02943 $uidList[]=$pUid;
02944 $opt[]='<option value="'.htmlspecialchars($pUid).'">'.htmlspecialchars($pTitle).'</option>';
02945 }
02946 }
02947 break;
02948 case 'file':
02949 while(list(,$pp)=each($itemArray)) {
02950 $pParts = explode('|',$pp);
02951 $uidList[]=$pUid=$pTitle = $pParts[0];
02952 $opt[]='<option value="'.htmlspecialchars(rawurldecode($pParts[0])).'">'.htmlspecialchars(rawurldecode($pParts[0])).'</option>';
02953 }
02954 break;
02955 default:
02956 while(list(,$pp)=each($itemArray)) {
02957 $pParts = explode('|',$pp, 2);
02958 $uidList[]=$pUid=$pParts[0];
02959 $pTitle = $pParts[1];
02960 $opt[]='<option value="'.htmlspecialchars(rawurldecode($pUid)).'">'.htmlspecialchars(rawurldecode($pTitle)).'</option>';
02961 }
02962 break;
02963 }
02964 }
02965
02966
02967 $sSize = $params['autoSizeMax'] ? t3lib_div::intInRange($itemArrayC+1,t3lib_div::intInRange($params['size'],1),$params['autoSizeMax']) : $params['size'];
02968 if (!$selector) {
02969 $selector = '<select size="'.$sSize.'"'.$this->insertDefStyle('group').' multiple="multiple" name="'.$fName.'_list" '.$onFocus.$params['style'].$disabled.'>'.implode('',$opt).'</select>';
02970 }
02971
02972
02973 $icons = array(
02974 'L' => array(),
02975 'R' => array(),
02976 );
02977 if (!$params['readOnly']) {
02978 if (!$params['noBrowser']) {
02979 $aOnClick='setFormValueOpenBrowser(\''.$mode.'\',\''.($fName.'|||'.$allowed.'|').'\'); return false;';
02980 $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
02981 '<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'))).' />'.
02982 '</a>';
02983 }
02984 if (!$params['dontShowMoveIcons']) {
02985 if ($sSize>=5) {
02986 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Top\'); return false;">'.
02987 '<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')).' />'.
02988 '</a>';
02989 }
02990 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Up\'); return false;">'.
02991 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/up.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_up')).' />'.
02992 '</a>';
02993 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Down\'); return false;">'.
02994 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/down.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_move_down')).' />'.
02995 '</a>';
02996 if ($sSize>=5) {
02997 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Bottom\'); return false;">'.
02998 '<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')).' />'.
02999 '</a>';
03000 }
03001 }
03002
03003 $clipElements = $this->getClipboardElements($allowed,$mode);
03004 if (count($clipElements)) {
03005 $aOnClick = '';
03006 # $counter = 0;
03007 foreach($clipElements as $elValue) {
03008 if ($mode=='file') {
03009 $itemTitle = 'unescape(\''.rawurlencode(basename($elValue)).'\')';
03010 } else {
03011 list($itemTable,$itemUid) = explode('|', $elValue);
03012 $itemTitle = $GLOBALS['LANG']->JScharCode(t3lib_BEfunc::getRecordTitle($itemTable, t3lib_BEfunc::getRecordWSOL($itemTable,$itemUid)));
03013 $elValue = $itemTable.'_'.$itemUid;
03014 }
03015 $aOnClick.= 'setFormValueFromBrowseWin(\''.$fName.'\',unescape(\''.rawurlencode(str_replace('%20',' ',$elValue)).'\'),'.$itemTitle.');';
03016
03017 # $counter++;
03018 # if ($params['maxitems'] && $counter >= $params['maxitems']) { break; } // Makes sure that no more than the max items are inserted... for convenience.
03019 }
03020 $aOnClick.= 'return false;';
03021 $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
03022 '<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))).' />'.
03023 '</a>';
03024 }
03025 $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Remove\'); return false;">'.
03026 '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/group_clear.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_remove_selected')).' />'.
03027 '</a>';
03028 }
03029
03030 $str='<table border="0" cellpadding="0" cellspacing="0" width="1">
03031 '.($params['headers']?'
03032 <tr>
03033 <td>'.$this->wrapLabels($params['headers']['selector']).'</td>
03034 <td></td>
03035 <td></td>
03036 <td></td>
03037 <td>'.($params['thumbnails'] ? $this->wrapLabels($params['headers']['items']) : '').'</td>
03038 </tr>':'').
03039 '
03040 <tr>
03041 <td valign="top">'.
03042 $selector.'<br />'.
03043 $this->wrapLabels($params['info']).
03044 '</td>
03045 <td valign="top">'.
03046 implode('<br />',$icons['L']).'</td>
03047 <td valign="top">'.
03048 implode('<br />',$icons['R']).'</td>
03049 <td><img src="clear.gif" width="5" height="1" alt="" /></td>
03050 <td valign="top">'.
03051 $this->wrapLabels($params['thumbnails']).
03052 '</td>
03053 </tr>
03054 </table>';
03055
03056
03057 $str.='<input type="hidden" name="'.$fName.'" value="'.htmlspecialchars(implode(',',$uidList)).'" />';
03058
03059 return $str;
03060 }
03061
03069 function getClipboardElements($allowed,$mode) {
03070
03071 $output = array();
03072
03073 if (is_object($this->clipObj)) {
03074 switch($mode) {
03075 case 'file':
03076 $elFromTable = $this->clipObj->elFromTable('_FILE');
03077 $allowedExts = t3lib_div::trimExplode(',', $allowed, 1);
03078
03079 if ($allowedExts) {
03080 foreach($elFromTable as $elValue) {
03081 $pI = pathinfo($elValue);
03082 $ext = strtolower($pI['extension']);
03083 if (in_array($ext, $allowedExts)) {
03084 $output[] = $elValue;
03085 }
03086 }
03087 } else {
03088 $output = $elFromTable;
03089 }
03090 break;
03091 case 'db':
03092 $allowedTables = t3lib_div::trimExplode(',', $allowed, 1);
03093 if (!strcmp(trim($allowedTables[0]),'*')) {
03094 $output = $this->clipObj->elFromTable('');
03095 } else {
03096 foreach($allowedTables as $tablename) {
03097 $elFromTable = $this->clipObj->elFromTable($tablename);
03098 $output = array_merge($output,$elFromTable);
03099 }
03100 }
03101 $output = array_keys($output);
03102 break;
03103 }
03104 }
03105
03106 return $output;
03107 }
03108
03118 function getClickMenu($str,$table,$uid='') {
03119 if ($this->enableClickMenu) {
03120 $onClick = $GLOBALS['SOBE']->doc->wrapClickMenuOnIcon($str,$table,$uid,1,'','+copy,info,edit,view', TRUE);
03121 return '<a href="#" onclick="'.htmlspecialchars($onClick).'">'.$str.'</a>';
03122 }
03123 }
03124
03139 function renderWizards($itemKinds,$wizConf,$table,$row,$field,&$PA,$itemName,$specConf,$RTE=0) {
03140
03141
03142 $fieldChangeFunc = $PA['fieldChangeFunc'];
03143 $item = $itemKinds[0];
03144 $outArr = array();
03145 $colorBoxLinks = array();
03146 $fName = '['.$table.']['.$row['uid'].']['.$field.']';
03147 $md5ID = 'ID'.t3lib_div::shortmd5($itemName);
03148 $listFlag = '_list';
03149
03150
03151 if ($PA['fieldConf']['config']['form_type']=='select') {
03152 if ($PA['fieldConf']['config']['maxitems']<=1) {
03153 $listFlag = '';
03154 } elseif ($PA['fieldConf']['config']['renderMode']=='singlebox') {
03155 $itemName.='[]';
03156 $listFlag = '';
03157 }
03158 }
03159
03160
03161 if (is_array($wizConf) && !$this->disableWizards) {
03162 foreach($wizConf as $wid => $wConf) {
03163 if (substr($wid,0,1)!='_'
03164 && (!$wConf['enableByTypeConfig'] || @in_array($wid,$specConf['wizards']['parameters']))
03165 && ($RTE || !$wConf['RTEonly'])
03166 ) {
03167
03168
03169 $iTitle = htmlspecialchars($this->sL($wConf['title']));
03170 if ($wConf['icon']) {
03171 $iDat = $this->getIcon($wConf['icon']);
03172 $icon = '<img src="'.$iDat[0].'" '.$iDat[1][3].' border="0"'.t3lib_BEfunc::titleAltAttrib($iTitle).' />';
03173 } else {
03174 $icon = $iTitle;
03175 }
03176
03177
03178 switch((string)$wConf['type']) {
03179 case 'userFunc':
03180 case 'script':
03181 case 'popup':
03182 case 'colorbox':
03183 if (!$wConf['notNewRecords'] || t3lib_div::testInt($row['uid'])) {
03184
03185
03186 $params = array();
03187 $params['params'] = $wConf['params'];
03188 $params['exampleImg'] = $wConf['exampleImg'];
03189 $params['table'] = $table;
03190 $params['uid'] = $row['uid'];
03191 $params['pid'] = $row['pid'];
03192 $params['field'] = $field;
03193 $params['md5ID'] = $md5ID;
03194 $params['returnUrl'] = $this->thisReturnUrl();
03195
03196
03197 if (!strcmp(substr($wConf['script'],0,4), 'EXT:')) {
03198 $wScript = t3lib_div::getFileAbsFileName($wConf['script']);
03199 if ($wScript) {
03200 $wScript = '../'.substr($wScript,strlen(PATH_site));
03201 } else break;
03202 } else {
03203 $wScript = $wConf['script'];
03204 }
03205 $url = $this->backPath.$wScript.(strstr($wScript,'?') ? '' : '?');
03206
03207
03208 if ((string)$wConf['type']=='colorbox' && !$wConf['script']) { break; }
03209
03210
03211 if ((string)$wConf['type']=='script') {
03212 $aUrl = $url.t3lib_div::implodeArrayForUrl('',array('P'=>$params));
03213 $outArr[]='<a href="'.htmlspecialchars($aUrl).'" onclick="'.$this->blur().'return !TBE_EDITOR_isFormChanged();">'.
03214 $icon.
03215 '</a>';
03216 } else {
03217
03218
03219 $params['formName'] = $this->formName;
03220 $params['itemName'] = $itemName;
03221 $params['fieldChangeFunc'] = $fieldChangeFunc;
03222
03223 switch((string)$wConf['type']) {
03224 case 'popup':
03225 case 'colorbox':
03226
03227 $addJS = $wConf['popup_onlyOpenIfSelected']?'if (!TBE_EDITOR_curSelected(\''.$itemName.$listFlag.'\')){alert('.$GLOBALS['LANG']->JScharCode($this->getLL('m_noSelItemForEdit')).'); return false;}':'';
03228 $curSelectedValues='+\'&P[currentSelectedValues]=\'+TBE_EDITOR_curSelected(\''.$itemName.$listFlag.'\')';
03229 $aOnClick= $this->blur().
03230 $addJS.
03231 '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'].'\');'.
03232 'vHWin.focus();return false;';
03233
03234 $colorBoxLinks = Array('<a href="#" onclick="'.htmlspecialchars($aOnClick).'">','</a>');
03235 if ((string)$wConf['type']=='popup') {
03236 $outArr[] = $colorBoxLinks[0].$icon.$colorBoxLinks[1];
03237 }
03238 break;
03239 case 'userFunc':
03240 $params['item'] = &$item;
03241 $params['icon'] = $icon;
03242 $params['iTitle'] = $iTitle;
03243 $params['wConf'] = $wConf;
03244 $params['row'] = $row;
03245 $outArr[] = t3lib_div::callUserFunction($wConf['userFunc'],$params,$this);
03246 break;
03247 }
03248 }
03249
03250
03251 if (is_array($wConf['hideParent']) || $wConf['hideParent']) {
03252 $item = $itemKinds[1];
03253 if (is_array($wConf['hideParent'])) {
03254 $item.= $this->getSingleField_typeNone_render($wConf['hideParent'], $PA['itemFormElValue']);
03255 }
03256 }
03257 }
03258 break;
03259 case 'select':
03260 $fieldValue = array('config' => $wConf);
03261 $TSconfig = $this->setTSconfig($table, $row);
03262 $TSconfig[$field] = $TSconfig[$field]['wizards.'][$wid.'.'];
03263 $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($fieldValue), $fieldValue, $TSconfig, $field);
03264
03265 $opt = array();
03266 $opt[] = '<option>'.$iTitle.'</option>';
03267 foreach($selItems as $p) {
03268 $opt[] = '<option value="'.htmlspecialchars($p[1]).'">'.htmlspecialchars($p[0]).'</option>';
03269 }
03270 if ($wConf['mode']=='append') {
03271 $assignValue = $this->elName($itemName).'.value=\'\'+this.options[this.selectedIndex].value+'.$this->elName($itemName).'.value';
03272 } elseif ($wConf['mode']=='prepend') {
03273 $assignValue = $this->elName($itemName).'.value+=\'\'+this.options[this.selectedIndex].value';
03274 } else {
03275 $assignValue = $this->elName($itemName).'.value=this.options[this.selectedIndex].value';
03276 }
03277 $sOnChange = $assignValue.';this.selectedIndex=0;'.implode('',$fieldChangeFunc);
03278 $outArr[] = '<select name="_WIZARD'.$fName.'" onchange="'.htmlspecialchars($sOnChange).'">'.implode('',$opt).'</select>';
03279 break;
03280 }
03281
03282
03283 if ((string)$wConf['type']=='colorbox') {
03284 $dim = t3lib_div::intExplode('x',$wConf['dim']);
03285 $dX = t3lib_div::intInRange($dim[0],1,200,20);
03286 $dY = t3lib_div::intInRange($dim[1],1,200,20);
03287 $color = $row[$field] ? ' bgcolor="'.htmlspecialchars($row[$field]).'"' : '';
03288 $outArr[] = '<table border="0" cellpadding="0" cellspacing="0" id="'.$md5ID.'"'.$color.' style="'.htmlspecialchars($wConf['tableStyle']).'">
03289 <tr>
03290 <td>'.
03291 $colorBoxLinks[0].
03292 '<img src="clear.gif" width="'.$dX.'" height="'.$dY.'"'.t3lib_BEfunc::titleAltAttrib(trim($iTitle.' '.$row[$field])).' border="0" />'.
03293 $colorBoxLinks[1].
03294 '</td>
03295 </tr>
03296 </table>';
03297 }
03298 }
03299 }
03300
03301
03302 if (count($outArr)) {
03303 if ($wizConf['_HIDDENFIELD']) $item = $itemKinds[1];
03304
03305 $outStr = '';
03306 $vAlign = $wizConf['_VALIGN'] ? ' valign="'.$wizConf['_VALIGN'].'"' : '';
03307 if (count($outArr)>1 || $wizConf['_PADDING']) {
03308 $dist = intval($wizConf['_DISTANCE']);
03309 if ($wizConf['_VERTICAL']) {
03310 $dist = $dist ? '<tr><td><img src="clear.gif" width="1" height="'.$dist.'" alt="" /></td></tr>' : '';
03311 $outStr = '<tr><td>'.implode('</td></tr>'.$dist.'<tr><td>',$outArr).'</td></tr>';
03312 } else {
03313 $dist = $dist ? '<td><img src="clear.gif" height="1" width="'.$dist.'" alt="" /></td>' : '';
03314 $outStr = '<tr><td'.$vAlign.'>'.implode('</td>'.$dist.'<td'.$vAlign.'>',$outArr).'</td></tr>';
03315 }
03316 $outStr = '<table border="0" cellpadding="'.intval($wizConf['_PADDING']).'" cellspacing="0">'.$outStr.'</table>';
03317 } else {
03318 $outStr = implode('',$outArr);
03319 }
03320
03321 if (!strcmp($wizConf['_POSITION'],'left')) {
03322 $outStr = '<tr><td'.$vAlign.'>'.$outStr.'</td><td'.$vAlign.'>'.$item.'</td></tr>';
03323 } elseif (!strcmp($wizConf['_POSITION'],'top')) {
03324 $outStr = '<tr><td>'.$outStr.'</td></tr><tr><td>'.$item.'</td></tr>';
03325 } elseif (!strcmp($wizConf['_POSITION'],'bottom')) {
03326 $outStr = '<tr><td>'.$item.'</td></tr><tr><td>'.$outStr.'</td></tr>';
03327 } else {
03328 $outStr = '<tr><td'.$vAlign.'>'.$item.'</td><td'.$vAlign.'>'.$outStr.'</td></tr>';
03329 }
03330
03331 $item = '<table border="0" cellpadding="0" cellspacing="0">'.$outStr.'</table>';
03332 }
03333 }
03334 return $item;
03335 }
03336
03343 function getIcon($icon) {
03344 if (substr($icon,0,4)=='EXT:') {
03345 $file = t3lib_div::getFileAbsFileName($icon);
03346 if ($file) {
03347 $file = substr($file,strlen(PATH_site));
03348 $selIconFile = $this->backPath.'../'.$file;
03349 $selIconInfo = @getimagesize(PATH_site.$file);
03350 }
03351 } elseif (substr($icon,0,3)=='../') {
03352 $selIconFile = $this->backPath.t3lib_div::resolveBackPath($icon);
03353 $selIconInfo = @getimagesize(PATH_site.t3lib_div::resolveBackPath(substr($icon,3)));
03354 } elseif (substr($icon,0,4)=='ext/' || substr($icon,0,7)=='sysext/') {
03355 $selIconFile = $this->backPath.$icon;
03356 $selIconInfo = @getimagesize(PATH_typo3.$icon);
03357 } else {
03358 $selIconFile = t3lib_iconWorks::skinImg($this->backPath,'gfx/'.$icon,'',1);
03359 $selIconInfo = @getimagesize(PATH_typo3.$selIconFile);
03360 }
03361 return array($selIconFile,$selIconInfo);
03362 }
03363
03370 function optionTagStyle($iconString) {
03371 if ($iconString) {
03372 list($selIconFile,$selIconInfo) = $this->getIcon($iconString);
03373 $padTop = t3lib_div::intInRange(($selIconInfo[1]-12)/2,0);
03374 $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;';
03375 return $styleAttr;
03376 }
03377 }
03378
03386 function extractValuesOnlyFromValueLabelList($itemFormElValue) {
03387
03388 $itemArray = t3lib_div::trimExplode(',',$itemFormElValue,1);
03389 foreach($itemArray as $tk => $tv) {
03390 $tvP = explode('|',$tv,2);
03391 $tvP[0] = rawurldecode($tvP[0]);
03392
03393 $itemArray[$tk] = $tvP[0];
03394 }
03395 return $itemArray;
03396 }
03397
03408 function wrapOpenPalette($header,$table,$row,$palette,$retFunc=0) {
03409 $fieldL=array();
03410 if (!is_array($this->palFieldArr[$palette])) {$this->palFieldArr[$palette]=array();}
03411 $palFieldN = is_array($this->palFieldArr[$palette]) ? count($this->palFieldArr[$palette]) : 0;
03412 $palJSFunc = 'TBE_EDITOR_palUrl(\''.($table.':'.$row['uid'].':'.$palette).'\',\''.implode(',',$this->palFieldArr[$palette]).'\','.$palFieldN.',\''.$table.'\',\''.$row['uid'].'\',1);';
03413
03414 $aOnClick = $this->blur().substr($palJSFunc,0,-3).'0);return false;';
03415
03416 $iconCode = '<a href="#" onclick="'.htmlspecialchars($aOnClick).'" title="'.htmlspecialchars($table).'">'.
03417 $header.
03418 '</a>';
03419 return $retFunc ? array($iconCode,$palJSFunc) : $iconCode;
03420 }
03421
03432 function checkBoxParams($itemName,$thisValue,$c,$iCount,$addFunc='') {
03433 $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)).');'.
03434 $addFunc;
03435 $str = ' onclick="'.htmlspecialchars($onClick).'"'.
03436 (($thisValue&pow(2,$c))?' checked="checked"':'');
03437 return $str;
03438 }
03439
03446 function elName($itemName) {
03447 return 'document.'.$this->formName."['".$itemName."']";
03448 }
03449
03457 function noTitle($str,$wrapParts=array()) {
03458 return strcmp($str,'') ? $str : $wrapParts[0].'['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title').']'.$wrapParts[1];
03459 }
03460
03466 function blur() {
03467 return $GLOBALS['CLIENT']['FORMSTYLE'] ? 'this.blur();':'';
03468 }
03469
03475 function thisReturnUrl() {
03476 return $this->returnUrl ? $this->returnUrl : t3lib_div::linkThisScript();
03477 }
03478
03488 function getSingleHiddenField($table,$field,$row) {
03489 global $TCA;
03490 $out='';
03491 t3lib_div::loadTCA($table);
03492 if ($TCA[$table]['columns'][$field]) {
03493
03494 $uid=$row['uid'];
03495 $itemName=$this->prependFormFieldNames.'['.$table.']['.$uid.']['.$field.']';
03496 $itemValue=$row[$field];
03497 $item.='<input type="hidden" name="'.$itemName.'" value="'.htmlspecialchars($itemValue).'" />';
03498 $out = $item;
03499 }
03500 return $out;
03501 }
03502
03510 function formWidth($size=48,$textarea=0) {
03511
03512 if ($this->docLarge) $size = round($size*$this->form_largeComp);
03513 $wAttrib = $textarea?'cols':'size';
03514 if (!$GLOBALS['CLIENT']['FORMSTYLE']) {
03515 $retVal = ' '.$wAttrib.'="'.$size.'"';
03516 } else {
03517 $pixels = ceil($size*$this->form_rowsToStylewidth);
03518 $theStyle = 'width:'.$pixels.'px;'.$this->defStyle.$this->formElStyle($textarea?'text':'input');
03519 $retVal = ' style="'.htmlspecialchars($theStyle).'"';
03520
03521 $class = $this->formElClass($textarea?'text':'input');
03522 if ($class) {
03523 $retVal.= ' class="'.htmlspecialchars($class).'"';
03524 }
03525 }
03526 return $retVal;
03527 }
03528
03537 function formWidthText($size=48,$wrap='') {
03538 $wTags = $this->formWidth($size,1);
03539
03540 if (strtolower(trim($wrap))!='off' && $GLOBALS['CLIENT']['BROWSER']=='net' && $GLOBALS['CLIENT']['VERSION']>=5) {
03541 $wTags.=' cols="'.$size.'"';
03542 }
03543 return $wTags;
03544 }
03545
03553 function formElStyle($type) {
03554 return $this->formElStyleClassValue($type);
03555 }
03556
03564 function formElClass($type) {
03565 return $this->formElStyleClassValue($type, TRUE);
03566 }
03567
03575 function formElStyleClassValue($type, $class=FALSE) {
03576
03577 if (isset($this->fieldStyle[$type])) {
03578 $style = trim($this->fieldStyle[$type]);
03579 } else {
03580 $style = trim($this->fieldStyle['all']);
03581 }
03582
03583
03584 if (substr($style,0,6)=='CLASS:') {
03585 return $class ? trim(substr($style,6)) : '';
03586 } else {
03587 return !$class ? $style : '';
03588 }
03589 }
03590
03597 function insertDefStyle($type) {
03598 $out = '';
03599
03600 $style = trim($this->defStyle.$this->formElStyle($type));
03601 $out.= $style?' style="'.htmlspecialchars($style).'"':'';
03602
03603 $class = $this->formElClass($type);
03604 $out.= $class?' class="'.htmlspecialchars($class).'"':'';
03605
03606 return $out;
03607 }
03608
03616 function getDynTabMenu($parts, $idString) {
03617 if (is_object($GLOBALS['TBE_TEMPLATE'])) {
03618 return $GLOBALS['TBE_TEMPLATE']->getDynTabMenu($parts, $idString);
03619 } else {
03620 $output = '';
03621 foreach($parts as $singlePad) {
03622 $output.='
03623 <h3>'.htmlspecialchars($singlePad['label']).'</h3>
03624 '.($singlePad['description'] ? '<p class="c-descr">'.nl2br(htmlspecialchars($singlePad['description'])).'</p>' : '').'
03625 '.$singlePad['content'];
03626 }
03627
03628 return '<div class="typo3-dyntabmenu-divs">'.$output.'</div>';
03629 }
03630 }
03631
03632
03633
03634
03635
03636
03637
03638
03639
03640
03641
03642
03643
03644
03645
03646
03647
03655 function initItemArray($fieldValue) {
03656 $items = array();
03657 if (is_array($fieldValue['config']['items'])) {
03658 reset ($fieldValue['config']['items']);
03659 while (list($itemName,$itemValue) = each($fieldValue['config']['items'])) {
03660 $items[] = array($this->sL($itemValue[0]), $itemValue[1], $itemValue[2]);
03661 }
03662 }
03663 return $items;
03664 }
03665
03673 function addItems($items,$iArray) {
03674 global $TCA;
03675 if (is_array($iArray)) {
03676 reset($iArray);
03677 while(list($value,$label)=each($iArray)) {
03678 $items[]=array($this->sl($label),$value);
03679 }
03680 }
03681 return $items;
03682 }
03683
03695 function procItems($items,$iArray,$config,$table,$row,$field) {
03696 global $TCA;
03697
03698 $params=array();
03699 $params['items'] = &$items;
03700 $params['config'] = $config;
03701 $params['TSconfig'] = $iArray;
03702 $params['table'] = $table;
03703 $params['row'] = $row;
03704 $params['field'] = $field;
03705
03706 t3lib_div::callUserFunction($config['itemsProcFunc'],$params,$this);
03707 return $items;
03708 }
03709
03719 function addSelectOptionsToItemArray($items,$fieldValue,$TSconfig,$field) {
03720 global $TCA;
03721
03722
03723 if ($fieldValue['config']['foreign_table']) {
03724 $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field);
03725 if ($fieldValue['config']['neg_foreign_table']) {
03726 $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field,1);
03727 }
03728 }
03729
03730
03731 if ($fieldValue['config']['fileFolder']) {
03732 $fileFolder = t3lib_div::getFileAbsFileName($fieldValue['config']['fileFolder']);
03733 if (@is_dir($fileFolder)) {
03734
03735
03736 $extList = $fieldValue['config']['fileFolder_extList'];
03737 $recursivityLevels = isset($fieldValue['config']['fileFolder_recursions']) ? t3lib_div::intInRange($fieldValue['config']['fileFolder_recursions'],0,99) : 99;
03738
03739
03740 $fileFolder = ereg_replace('\/$','',$fileFolder).'/';
03741 $fileArr = t3lib_div::getAllFilesAndFoldersInPath(array(),$fileFolder,$extList,0,$recursivityLevels);
03742 $fileArr = t3lib_div::removePrefixPathFromList($fileArr, $fileFolder);
03743
03744 foreach($fileArr as $fileRef) {
03745 $fI = pathinfo($fileRef);
03746 $icon = t3lib_div::inList('gif,png,jpeg,jpg', strtolower($fI['extension'])) ? '../'.substr($fileFolder,strlen(PATH_site)).$fileRef : '';
03747 $items[] = array(
03748 $fileRef,
03749 $fileRef,
03750 $icon
03751 );
03752 }
03753 }
03754 }
03755
03756
03757 if ($fieldValue['config']['special']) {
03758 switch ($fieldValue['config']['special']) {
03759 case 'tables':
03760 $temp_tc = array_keys($TCA);
03761 $descr = '';
03762
03763 foreach($temp_tc as $theTableNames) {
03764 if (!$TCA[$theTableNames]['ctrl']['adminOnly']) {
03765
03766
03767 $icon = '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($theTableNames, array()),'',1);
03768
03769
03770 if ($this->edit_showFieldHelp) {
03771 $GLOBALS['LANG']->loadSingleTableDescription($theTableNames);
03772 $fDat = $GLOBALS['TCA_DESCR'][$theTableNames]['columns'][''];
03773 $descr = $fDat['description'];
03774 }
03775
03776
03777 $items[] = array(
03778 $this->sL($TCA[$theTableNames]['ctrl']['title']),
03779 $theTableNames,
03780 $icon,
03781 $descr
03782 );
03783 }
03784 }
03785 break;
03786 case 'pagetypes':
03787 $theTypes = $TCA['pages']['columns']['doktype']['config']['items'];
03788
03789 foreach($theTypes as $theTypeArrays) {
03790
03791 $icon = $theTypeArrays[1]!='--div--' ? '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon('pages', array('doktype' => $theTypeArrays[1])),'',1) : '';
03792
03793
03794 $items[] = array(
03795 $this->sL($theTypeArrays[0]),
03796 $theTypeArrays[1],
03797 $icon
03798 );
03799 }
03800 break;
03801 case 'exclude':
03802 $theTypes = t3lib_BEfunc::getExcludeFields();
03803 $descr = '';
03804
03805 foreach($theTypes as $theTypeArrays) {
03806 list($theTable, $theField) = explode(':', $theTypeArrays[1]);
03807
03808
03809 if ($this->edit_showFieldHelp) {
03810 $GLOBALS['LANG']->loadSingleTableDescription($theTable);
03811 $fDat = $GLOBALS['TCA_DESCR'][$theTable]['columns'][$theField];
03812 $descr = $fDat['description'];
03813 }
03814
03815
03816 $items[] = array(
03817 ereg_replace(':$','',$theTypeArrays[0]),
03818 $theTypeArrays[1],
03819 '',
03820 $descr
03821 );
03822 }
03823 break;
03824 case 'explicitValues':
03825 $theTypes = t3lib_BEfunc::getExplicitAuthFieldValues();
03826
03827
03828 $icons = array(
03829 'ALLOW' => '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_ok2.gif','',1),
03830 'DENY' => '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_fatalerror.gif','',1),
03831 );
03832
03833
03834 foreach($theTypes as $tableFieldKey => $theTypeArrays) {
03835
03836 if (is_array($theTypeArrays['items'])) {
03837
03838 $items[] = array(
03839 $theTypeArrays['tableFieldLabel'],
03840 '--div--',
03841 );
03842
03843
03844 foreach($theTypeArrays['items'] as $itemValue => $itemContent) {
03845
03846 $items[] = array(
03847 '['.$itemContent[2].'] '.$itemContent[1],
03848 $tableFieldKey.':'.ereg_replace('[:|,]','',$itemValue).':'.$itemContent[0],
03849 $icons[$itemContent[0]]
03850 );
03851 }
03852 }
03853 }
03854 break;
03855 case 'languages':
03856 $items = array_merge($items,t3lib_BEfunc::getSystemLanguages());
03857 break;
03858 case 'custom':
03859
03860 $customOptions = $GLOBALS['TYPO3_CONF_VARS']['BE']['customPermOptions'];
03861 if (is_array($customOptions)) {
03862 foreach($customOptions as $coKey => $coValue) {
03863 if (is_array($coValue['items'])) {
03864
03865 $items[] = array(
03866 $GLOBALS['LANG']->sl($coValue['header']),
03867 '--div--',
03868 );
03869
03870
03871 foreach($coValue['items'] as $itemKey => $itemCfg) {
03872
03873 if ($itemCfg[1]) {
03874 list($icon) = $this->getIcon($itemCfg[1]);
03875 if ($icon) $icon = '../'.TYPO3_mainDir.$icon;
03876 } else $icon = '';
03877
03878
03879 $items[] = array(
03880 $GLOBALS['LANG']->sl($itemCfg[0]),
03881 $coKey.':'.ereg_replace('[:|,]','',$itemKey),
03882 $icon,
03883 $GLOBALS['LANG']->sl($itemCfg[2]),
03884 );
03885 }
03886 }
03887 }
03888 }
03889 break;
03890 case 'modListGroup':
03891 case 'modListUser':
03892 $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
03893 $loadModules->load($GLOBALS['TBE_MODULES']);
03894
03895 $modList = $fieldValue['config']['special']=='modListUser' ? $loadModules->modListUser : $loadModules->modListGroup;
03896 if (is_array($modList)) {
03897 $descr = '';
03898
03899 foreach($modList as $theMod) {
03900
03901
03902 $icon = $GLOBALS['LANG']->moduleLabels['tabs_images'][$theMod.'_tab'];
03903 if ($icon) {
03904 $icon = '../'.substr($icon,strlen(PATH_site));
03905 }
03906
03907
03908 if ($this->edit_showFieldHelp) {
03909 $descr = $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tablabel'].
03910 chr(10).
03911 $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tabdescr'];
03912 }
03913
03914
03915 $items[] = array(
03916 $this->addSelectOptionsToItemArray_makeModuleData($theMod),
03917 $theMod,
03918 $icon,
03919 $descr
03920 );
03921 }
03922 }
03923 break;
03924 }
03925 }
03926
03927
03928 return $items;
03929 }
03930
03939 function addSelectOptionsToItemArray_makeModuleData($value) {
03940 $label = '';
03941
03942 $pp = explode('_',$value);
03943 if (count($pp)>1) $label.=$GLOBALS['LANG']->moduleLabels['tabs'][$pp[0].'_tab'].'>';
03944
03945 $label.= $GLOBALS['LANG']->moduleLabels['tabs'][$value.'_tab'];
03946
03947 return $label;
03948 }
03949
03961 function foreignTable($items,$fieldValue,$TSconfig,$field,$pFFlag=0) {
03962 global $TCA;
03963
03964
03965 $pF=$pFFlag?'neg_':'';
03966 $f_table = $fieldValue['config'][$pF.'foreign_table'];
03967 $uidPre = $pFFlag?'-':'';
03968
03969
03970 $res = t3lib_BEfunc::exec_foreign_table_where_query($fieldValue,$field,$TSconfig,$pF);
03971
03972
03973 if ($GLOBALS['TYPO3_DB']->sql_error()) {
03974 echo($GLOBALS['TYPO3_DB']->sql_error()."\n\nThis may indicate a table defined in tables.php is not existing in the database!");
03975 return array();
03976 }
03977
03978
03979 $lPrefix = $this->sL($fieldValue['config'][$pF.'foreign_table_prefix']);
03980
03981
03982 $iField = $TCA[$f_table]['ctrl']['selicon_field'];
03983 $iPath = trim($TCA[$f_table]['ctrl']['selicon_field_path']);
03984
03985
03986 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
03987 t3lib_BEfunc::workspaceOL($f_table, $row);
03988
03989 if ($iField && $iPath && $row[$iField]) {
03990 $iParts = t3lib_div::trimExplode(',',$row[$iField],1);
03991 $icon = '../'.$iPath.'/'.trim($iParts[0]);
03992 } elseif (t3lib_div::inList('singlebox,checkbox',$fieldValue['config']['renderMode'])) {
03993 $icon = '../'.TYPO3_mainDir.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($f_table, $row),'',1);
03994 } else $icon = '';
03995
03996
03997 $items[] = array(
03998 t3lib_div::fixed_lgd_cs($lPrefix.strip_tags(t3lib_BEfunc::getRecordTitle($f_table,$row)),$this->titleLen),
03999 $uidPre.$row['uid'],
04000 $icon
04001 );
04002 }
04003 return $items;
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
04033
04034
04035
04042 function setNewBEDesign() {
04043
04044
04045 $this->totalWrap='
04046 <table border="0" cellspacing="0" cellpadding="0" width="'.($this->docLarge ? 440+150 : 440).'" class="typo3-TCEforms">'.
04047 '<tr class="bgColor2">
04048 <td> </td>
04049 <td>###RECORD_ICON### <span class="typo3-TCEforms-recHeader">###TABLE_TITLE###</span> ###ID_NEW_INDICATOR### - ###RECORD_LABEL###</td>
04050 </tr>'.
04051 '|'.
04052 '<tr>
04053 <td> </td>
04054 <td><img src="clear.gif" width="'.($this->docLarge ? 440+150 : 440).'" height="1" alt="" /></td>
04055 </tr>
04056 </table>';
04057
04058
04059 $this->fieldTemplate='
04060 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
04061 <td>###FIELD_HELP_ICON###</td>
04062 <td width="99%"><span style="color:###FONTCOLOR_HEAD###;"###CLASSATTR_4###><b>###FIELD_NAME###</b></span>###FIELD_HELP_TEXT###</td>
04063 </tr>
04064 <tr ###BGCOLOR######CLASSATTR_1###>
04065 <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>
04066 <td valign="top">###FIELD_ITEM######FIELD_PAL_LINK_ICON###</td>
04067 </tr>';
04068
04069 $this->palFieldTemplate='
04070 <tr ###BGCOLOR######CLASSATTR_1###>
04071 <td> </td>
04072 <td nowrap="nowrap" valign="top">###FIELD_PALETTE###</td>
04073 </tr>';
04074 $this->palFieldTemplateHeader='
04075 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
04076 <td> </td>
04077 <td nowrap="nowrap" valign="top"><strong>###FIELD_HEADER###</strong></td>
04078 </tr>';
04079
04080 $this->sectionWrap='
04081 <tr>
04082 <td colspan="2"><img src="clear.gif" width="1" height="###SPACE_BEFORE###" alt="" /></td>
04083 </tr>
04084 <tr>
04085 <td colspan="2"><table ###TABLE_ATTRIBS###>###CONTENT###</table></td>
04086 </tr>
04087 ';
04088 }
04089
04097 function intoTemplate($inArr,$altTemplate='') {
04098
04099 $fieldTemplateParts = explode('###FIELD_',$this->rplColorScheme($altTemplate?$altTemplate:$this->fieldTemplate));
04100 reset($fieldTemplateParts);
04101 $out=current($fieldTemplateParts);
04102 while(list(,$part)=each($fieldTemplateParts)) {
04103 list($key,$val)=explode('###',$part,2);
04104 $out.=$inArr[$key];
04105 $out.=$val;
04106 }
04107 return $out;
04108 }
04109
04121 function addUserTemplateMarkers($marker,$table,$field,$row,&$PA) {
04122 return $marker;
04123 }
04124
04132 function wrapLabels($str) {
04133 return $str;
04134 }
04135
04145 function wrapTotal($c,$rec,$table) {
04146 $parts = $this->replaceTableWrap(explode('|',$this->totalWrap,2),$rec,$table);
04147 return $parts[0].$c.$parts[1].implode('',$this->hiddenFieldAccum);
04148 }
04149
04158 function replaceTableWrap($arr,$rec,$table) {
04159 global $TCA;
04160 reset($arr);
04161 while(list($k,$v)=each($arr)) {
04162
04163
04164 if (strstr($rec['uid'],'NEW')) {
04165 $newLabel = ' <span class="typo3-TCEforms-newToken">'.
04166 $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.new',1).
04167 '</span>';
04168
04169 #t3lib_BEfunc::fixVersioningPid($table,$rec); // Kasper: Should not be used here because NEW records are not offline workspace versions...
04170 $truePid = t3lib_BEfunc::getTSconfig_pidValue($table,$rec['uid'],$rec['pid']);
04171 $prec = t3lib_BEfunc::getRecordWSOL('pages',$truePid,'title');
04172 $rLabel = '<em>[PID: '.$truePid.'] '.htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle('pages',$prec),40))).'</em>';
04173 } else {
04174 $newLabel = ' <span class="typo3-TCEforms-recUid">['.$rec['uid'].']</span>';
04175 $rLabel = htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle($table,$rec),40)));
04176 }
04177
04178
04179 $arr[$k] = str_replace('###ID_NEW_INDICATOR###', $newLabel, $arr[$k]);
04180 $arr[$k] = str_replace('###RECORD_LABEL###',$rLabel,$arr[$k]);
04181 $arr[$k] = str_replace('###TABLE_TITLE###',htmlspecialchars($this->sL($TCA[$table]['ctrl']['title'])),$arr[$k]);
04182
04183 $titleA=t3lib_BEfunc::titleAltAttrib($this->getRecordPath($table,$rec));
04184 $arr[$k]=str_replace('###RECORD_ICON###',t3lib_iconWorks::getIconImage($table,$rec,$this->backPath,'class="absmiddle"'.$titleA),$arr[$k]);
04185 }
04186 return $arr;
04187 }
04188
04196 function wrapBorder(&$out_array,&$out_pointer) {
04197 if ($this->sectionWrap && $out_array[$out_pointer]) {
04198 $tableAttribs='';
04199 $tableAttribs.= $this->borderStyle[0] ? ' style="'.htmlspecialchars($this->borderStyle[0]).'"':'';
04200 $tableAttribs.= $this->borderStyle[2] ? ' background="'.htmlspecialchars($this->backPath.$this->borderStyle[2]).'"':'';
04201 $tableAttribs.= $this->borderStyle[3] ? ' class="'.htmlspecialchars($this->borderStyle[3]).'"':'';
04202 if ($tableAttribs) {
04203 $tableAttribs='border="0" cellspacing="0" cellpadding="0" width="100%"'.$tableAttribs;
04204 $out_array[$out_pointer] = str_replace('###CONTENT###',$out_array[$out_pointer],
04205 str_replace('###TABLE_ATTRIBS###',$tableAttribs,
04206 str_replace('###SPACE_BEFORE###',intval($this->borderStyle[1]),$this->sectionWrap)));
04207 }
04208 $out_pointer++;
04209 }
04210 }
04211
04218 function rplColorScheme($inTemplate) {
04219
04220 $inTemplate = str_replace('###BGCOLOR###',$this->colorScheme[0]?' bgcolor="'.$this->colorScheme[0].'"':'',$inTemplate);
04221 $inTemplate = str_replace('###BGCOLOR_HEAD###',$this->colorScheme[1]?' bgcolor="'.$this->colorScheme[1].'"':'',$inTemplate);
04222 $inTemplate = str_replace('###FONTCOLOR_HEAD###',$this->colorScheme[3],$inTemplate);
04223
04224
04225 $inTemplate = str_replace('###CLASSATTR_1###',$this->classScheme[0]?' class="'.$this->classScheme[0].'"':'',$inTemplate);
04226 $inTemplate = str_replace('###CLASSATTR_2###',$this->classScheme[1]?' class="'.$this->classScheme[1].'"':'',$inTemplate);
04227 $inTemplate = str_replace('###CLASSATTR_4###',$this->classScheme[3]?' class="'.$this->classScheme[3].'"':'',$inTemplate);
04228
04229 return $inTemplate;
04230 }
04231
04238 function getDivider() {
04239
04240 }
04241
04248 function printPalette($palArr) {
04249
04250
04251 $ccAttr2 = $this->colorScheme[2] ? ' bgcolor="'.$this->colorScheme[2].'"' : '';
04252 $ccAttr2.= $this->classScheme[2] ? ' class="'.$this->classScheme[2].'"' : '';
04253 $ccAttr4 = $this->colorScheme[4] ? ' style="color:'.$this->colorScheme[4].'"' : '';
04254 $ccAttr4.= $this->classScheme[4] ? ' class="'.$this->classScheme[4].'"' : '';
04255
04256
04257 foreach($palArr as $content) {
04258 $hRow[]='<td'.$ccAttr2.'> </td>
04259 <td nowrap="nowrap"'.$ccAttr2.'>'.
04260 '<span'.$ccAttr4.'>'.
04261 $content['NAME'].
04262 '</span>'.
04263 '</td>';
04264 $iRow[]='<td valign="top">'.
04265 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" vspace="4" alt="" />'.
04266 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" vspace="4" alt="" />'.
04267 '</td>
04268 <td nowrap="nowrap" valign="top">'.
04269 $content['ITEM'].
04270 $content['HELP_ICON'].
04271 '</td>';
04272 }
04273
04274
04275 $out='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-palette">
04276 <tr>
04277 <td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.
04278 implode('
04279 ',$hRow).'
04280 </tr>
04281 <tr>
04282 <td></td>'.
04283 implode('
04284 ',$iRow).'
04285 </tr>
04286 </table>';
04287
04288 return $out;
04289 }
04290
04299 function helpTextIcon($table,$field,$force=0) {
04300 if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && (($this->edit_showFieldHelp=='icon'&&!$this->doLoadTableDescr($table)) || $force)) {
04301 $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;';
04302 return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
04303 '<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="" />'.
04304 '</a>';
04305 } else {
04306
04307 #debug(array("'".$field.".description' => '[FILL IN] ".$table."->".$field."',"),$table);
04308 return '<span class="nbsp"> </span>';
04309 }
04310 }
04311
04319 function helpText($table,$field) {
04320 if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && ($this->edit_showFieldHelp=='text' || $this->doLoadTableDescr($table))) {
04321 $fDat = $GLOBALS['TCA_DESCR'][$table]['columns'][$field];
04322 return '<table border="0" cellpadding="2" cellspacing="0" width="90%"><tr><td valign="top" width="14">'.
04323 $this->helpTextIcon(
04324 $table,
04325 $field,
04326 $fDat['details']||$fDat['syntax']||$fDat['image_descr']||$fDat['image']||$fDat['seeAlso']
04327 ).
04328 '</td><td valign="top"><span class="typo3-TCEforms-helpText">'.
04329 $GLOBALS['LANG']->hscAndCharConv(strip_tags($fDat['description']),1).
04330 '</span></td></tr></table>';
04331 }
04332 }
04333
04340 function setColorScheme($scheme) {
04341 $this->colorScheme = $this->defColorScheme;
04342 $this->classScheme = $this->defClassScheme;
04343
04344 $parts = t3lib_div::trimExplode(',',$scheme);
04345 foreach($parts as $key => $col) {
04346
04347 list($color,$class) = t3lib_div::trimExplode('|',$col);
04348
04349
04350 if ($color) $this->colorScheme[$key] = $color;
04351 if ($color=='-') $this->colorScheme[$key] = '';
04352
04353
04354 if ($class) $this->classScheme[$key] = $class;
04355 if ($class=='-') $this->classScheme[$key] = '';
04356 }
04357 }
04358
04364 function resetSchemes() {
04365 $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][0]);
04366 $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
04367 $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
04368 }
04369
04375 function storeSchemes() {
04376 $this->savedSchemes['classScheme'] = $this->classScheme;
04377 $this->savedSchemes['colorScheme'] = $this->colorScheme;
04378 $this->savedSchemes['fieldStyle'] = $this->fieldStyle;
04379 $this->savedSchemes['borderStyle'] = $this->borderStyle;
04380 }
04381
04387 function restoreSchemes() {
04388 $this->classScheme = $this->savedSchemes['classScheme'];
04389 $this->colorScheme = $this->savedSchemes['colorScheme'];
04390 $this->fieldStyle = $this->savedSchemes['fieldStyle'];
04391 $this->borderStyle = $this->savedSchemes['borderStyle'];
04392 }
04393
04394
04395
04396
04397
04398
04399
04400
04401
04402
04403
04404
04405
04406
04407
04408
04409
04410
04411
04417 function JStop() {
04418
04419 $out = '';
04420
04421
04422 if (count($this->additionalCode_pre)) {
04423 $out.= implode('
04424
04425 <!-- NEXT: -->
04426 ',$this->additionalCode_pre);
04427 }
04428
04429
04430 if (count($this->additionalJS_pre)) {
04431 $out.='
04432
04433
04434 <!--
04435 JavaScript in top of page (before form):
04436 -->
04437
04438 <script type="text/javascript">
04439
04440
04441 '.implode('
04442
04443
04444 ',$this->additionalJS_pre).'
04445
04446
04447 </script>
04448 ';
04449 }
04450
04451
04452 return $out;
04453 }
04454
04468 function JSbottom($formname='forms[0]') {
04469
04470
04471 $reqLines=array();
04472 $reqLinesCheck=array();
04473 $reqLinesSet=array();
04474 reset($this->requiredFields);
04475 while(list($itemImgName,$itemName)=each($this->requiredFields)) {
04476 $reqLines[]=" TBE_REQUIRED['".$itemName."']=1;";
04477 $reqLinesCheck[]=" if (!document.".$formname."['".$itemName."'].value) {OK=0;}";
04478 $reqLinesSet[]=" if (!document.".$formname."['".$itemName."'].value) {TBE_EDITOR_setImage('req_".$itemImgName."','TBE_EDITOR_req');}";
04479 }
04480
04481 $reqRange=array();
04482 $reqRangeCheck=array();
04483 $reqRangeSet=array();
04484 reset($this->requiredElements);
04485 while(list($itemName,$range)=each($this->requiredElements)) {
04486 $reqRange[]=" TBE_RANGE['".$itemName."']=1;";
04487 $reqRange[]=" TBE_RANGE_lower['".$itemName."']=".$range[0].";";
04488 $reqRange[]=" TBE_RANGE_upper['".$itemName."']=".$range[1].";";
04489 $reqRangeCheck[]=" if (!TBE_EDITOR_checkRange(document.".$formname."['".$itemName."_list'],".$range[0].",".$range[1].")) {OK=0;}";
04490 $reqRangeSet[]=" if (!TBE_EDITOR_checkRange(document.".$formname."['".$itemName."_list'],".$range[0].",".$range[1].")) {TBE_EDITOR_setImage('req_".$range['imgName']."','TBE_EDITOR_req');}";
04491 }
04492
04493 $this->TBE_EDITOR_fieldChanged_func='TBE_EDITOR_fieldChanged_fName(fName,formObj[fName+"_list"]);';
04494
04495 if ($this->loadMD5_JS) {
04496 $out.='
04497 <script type="text/javascript" src="'.$this->backPath.'md5.js"></script>';
04498 }
04499 $out.='
04500 <script type="text/javascript" src="'.$this->backPath.'../t3lib/jsfunc.evalfield.js"></script>
04501 <script type="text/javascript">
04502
04503
04504 var TBE_EDITOR_req=new Image(); TBE_EDITOR_req.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/required_h.gif','',1).'";
04505 var TBE_EDITOR_cm=new Image(); TBE_EDITOR_cm.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_client.gif','',1).'";
04506 var TBE_EDITOR_sel=new Image(); TBE_EDITOR_sel.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_selected.gif','',1).'";
04507 var TBE_EDITOR_clear=new Image(); TBE_EDITOR_clear.src = "'.$this->backPath.'clear.gif";
04508 var TBE_REQUIRED=new Array();
04509 '.implode(chr(10),$reqLines).'
04510
04511 var TBE_RANGE=new Array();
04512 var TBE_RANGE_lower=new Array();
04513 var TBE_RANGE_upper=new Array();
04514 '.implode(chr(10),$reqRange).'
04515
04516
04517 '.implode(chr(10),$this->additionalJS_post).'
04518
04519 var TBE_EDITOR_loadTime = 0;
04520 var TBE_EDITOR_isChanged = 0;
04521
04522 function TBE_EDITOR_loginRefreshed() {
04523 var date = new Date();
04524 TBE_EDITOR_loadTime = Math.floor(date.getTime()/1000);
04525 if (top.busy && top.busy.loginRefreshed) {top.busy.loginRefreshed();}
04526 }
04527 function TBE_EDITOR_checkLoginTimeout() {
04528 var date = new Date();
04529 var theTime = Math.floor(date.getTime()/1000);
04530 if (theTime > TBE_EDITOR_loadTime+'.intval($GLOBALS['BE_USER']->auth_timeout_field).'-10) {
04531 return true;
04532 }
04533 }
04534 function TBE_EDITOR_setHiddenContent(RTEcontent,theField) {
04535 document.'.$formname.'[theField].value = RTEcontent;
04536 alert(document.'.$formname.'[theField].value);
04537 }
04538 function TBE_EDITOR_fieldChanged_fName(fName,el) {
04539 var idx='.(2+substr_count($this->prependFormFieldNames,'[')).';
04540 var table = TBE_EDITOR_split(fName, "[", idx);
04541 var uid = TBE_EDITOR_split(fName, "[", idx+1);
04542 var field = TBE_EDITOR_split(fName, "[", idx+2);
04543
04544 table = table.substr(0,table.length-1);
04545 uid = uid.substr(0,uid.length-1);
04546 field = field.substr(0,field.length-1);
04547 TBE_EDITOR_fieldChanged(table,uid,field,el);
04548 }
04549 function TBE_EDITOR_fieldChanged(table,uid,field,el) {
04550 var theField = "'.$this->prependFormFieldNames.'["+table+"]["+uid+"]["+field+"]";
04551 TBE_EDITOR_isChanged = 1;
04552
04553
04554 var imgObjName = "cm_"+table+"_"+uid+"_"+field;
04555 TBE_EDITOR_setImage(imgObjName,"TBE_EDITOR_cm");
04556
04557
04558 if (document.'.$formname.'[theField] && document.'.$formname.'[theField].type=="select-one" && document.'.$formname.'[theField+"_selIconVal"]) {
04559 var imgObjName = "selIcon_"+table+"_"+uid+"_"+field+"_";
04560 TBE_EDITOR_setImage(imgObjName+document.'.$formname.'[theField+"_selIconVal"].value,"TBE_EDITOR_clear");
04561 document.'.$formname.'[theField+"_selIconVal"].value = document.'.$formname.'[theField].selectedIndex;
04562 TBE_EDITOR_setImage(imgObjName+document.'.$formname.'[theField+"_selIconVal"].value,"TBE_EDITOR_sel");
04563 }
04564
04565
04566 var imgReqObjName = "req_"+table+"_"+uid+"_"+field;
04567 if (TBE_REQUIRED[theField] && document.'.$formname.'[theField]) {
04568 if (document.'.$formname.'[theField].value) {
04569 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_clear");
04570 } else {
04571 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_req");
04572 }
04573 }
04574 if (TBE_RANGE[theField] && document.'.$formname.'[theField]) {
04575 if (TBE_EDITOR_checkRange(document.'.$formname.'[theField+"_list"],TBE_RANGE_lower[theField],TBE_RANGE_upper[theField])) {
04576 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_clear");
04577 } else {
04578 TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_req");
04579 }
04580 }
04581 '.(!$this->isPalettedoc?'':'
04582 TBE_EDITOR_setOriginalFormFieldValue(theField);
04583 ').'
04584 }
04585 '.($this->isPalettedoc?'
04586 function TBE_EDITOR_setOriginalFormFieldValue(theField) {
04587 if ('.$this->isPalettedoc.' && '.$this->isPalettedoc.'.document.'.$formname.' && '.$this->isPalettedoc.'.document.'.$formname.'[theField]) {
04588 '.$this->isPalettedoc.'.document.'.$formname.'[theField].value = document.'.$formname.'[theField].value;
04589 }
04590 }
04591 ':'').'
04592 function TBE_EDITOR_isFormChanged(noAlert) {
04593 if (TBE_EDITOR_isChanged && !noAlert && confirm('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsChanged')).')) {
04594 return 0;
04595 }
04596 return TBE_EDITOR_isChanged;
04597 }
04598 function TBE_EDITOR_checkAndDoSubmit(sendAlert) {
04599 if (TBE_EDITOR_checkSubmit(sendAlert)) {
04600 TBE_EDITOR_submitForm();
04601 }
04602 }
04603
04610 function TBE_EDITOR_checkSubmit(sendAlert) {
04611 if (TBE_EDITOR_checkLoginTimeout() && confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_refresh_login')).')) {
04612 vHWin=window.open(\''.$this->backPath.'login_frameset.php?\',\'relogin\',\'height=300,width=400,status=0,menubar=0\');
04613 vHWin.focus();
04614 return false;
04615 }
04616 var OK=1;
04617
04618
04619 '.implode(chr(10),$this->additionalJS_submit).'
04620
04621 if(!OK) {
04622 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."))) {
04623 return false;
04624 } else {
04625 OK = 1;
04626 }
04627 }
04628
04629 '.implode(chr(10),$reqLinesCheck).'
04630 '.implode(chr(10),$reqRangeCheck).'
04631
04632 if (OK || sendAlert==-1) {
04633 return true;
04634 } else {
04635 if(sendAlert) alert('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsMissing')).');
04636 return false;
04637 }
04638 }
04639 function TBE_EDITOR_checkRange(el,lower,upper) {
04640 if (el && el.length>=lower && el.length<=upper) {
04641 return true;
04642 } else {
04643 return false;
04644 }
04645 }
04646 function TBE_EDITOR_initRequired() {
04647 '.implode(chr(10),$reqLinesSet).'
04648 '.implode(chr(10),$reqRangeSet).'
04649 }
04650 function TBE_EDITOR_setImage(name,imgName) {
04651 if (document[name]) {document[name].src = eval(imgName+".src");}
04652 }
04653 function TBE_EDITOR_submitForm() {
04654 '.($this->doSaveFieldName?'document.'.$this->formName."['".$this->doSaveFieldName."'].value=1;":'').'
04655 document.'.$this->formName.'.submit();
04656 }
04657 function typoSetup () {
04658 this.passwordDummy = "********";
04659 this.decimalSign = ".";
04660 }
04661 var TS = new typoSetup();
04662 var evalFunc = new evalFunc();
04663 evalFunc.USmode = '.($GLOBALS['TYPO3_CONF_VARS']['SYS']['USdateFormat']?'1':'0').';
04664
04665 function typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue) {
04666 if (document.'.$formname.'[theField]) {
04667 var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
04668 var theValue = document.'.$formname.'[theField].value;
04669 if (checkbox && theValue==checkboxValue) {
04670 document.'.$formname.'[theField+"_hr"].value="";
04671 if (document.'.$formname.'[theField+"_cb"]) document.'.$formname.'[theField+"_cb"].checked = "";
04672 } else {
04673 document.'.$formname.'[theField+"_hr"].value = evalFunc.outputObjValue(theFObj, theValue);
04674 if (document.'.$formname.'[theField+"_cb"]) document.'.$formname.'[theField+"_cb"].checked = "on";
04675 }
04676 }
04677 }
04678 function typo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off, checkSetValue) {
04679 if (document.'.$formname.'[theField]) {
04680 var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
04681 if (checkbox_off) {
04682 if (document.'.$formname.'[theField+"_cb"].checked) {
04683 document.'.$formname.'[theField].value=checkSetValue;
04684 } else {
04685 document.'.$formname.'[theField].value=checkboxValue;
04686 }
04687 }else{
04688 document.'.$formname.'[theField].value = evalFunc.evalObjValue(theFObj, document.'.$formname.'[theField+"_hr"].value);
04689 }
04690 typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue);
04691 }
04692 }
04693 function TBE_EDITOR_split(theStr1, delim, index) {
04694 var theStr = ""+theStr1;
04695 var lengthOfDelim = delim.length;
04696 sPos = -lengthOfDelim;
04697 if (index<1) {index=1;}
04698 for (var a=1; a<index; a++) {
04699 sPos = theStr.indexOf(delim, sPos+lengthOfDelim);
04700 if (sPos==-1) {return null;}
04701 }
04702 ePos = theStr.indexOf(delim, sPos+lengthOfDelim);
04703 if(ePos == -1) {ePos = theStr.length;}
04704 return (theStr.substring(sPos+lengthOfDelim,ePos));
04705 }
04706 function TBE_EDITOR_palUrl(inData,fieldList,fieldNum,table,uid,isOnFocus) {
04707 var url = "'.$this->backPath.'alt_palette.php?inData="+inData+"&formName='.rawurlencode($this->formName).'"+"&prependFormFieldNames='.rawurlencode($this->prependFormFieldNames).'";
04708 var field = "";
04709 var theField="";
04710 for (var a=0; a<fieldNum;a++) {
04711 field = TBE_EDITOR_split(fieldList, ",", a+1);
04712 theField = "'.$this->prependFormFieldNames.'["+table+"]["+uid+"]["+field+"]";
04713 if (document.'.$formname.'[theField]) url+="&rec["+field+"]="+TBE_EDITOR_rawurlencode(document.'.$formname.'[theField].value);
04714 }
04715 if (top.topmenuFrame) {
04716 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");
04717 } else if (!isOnFocus) {
04718 var vHWin=window.open(url,"palette","height=300,width=200,status=0,menubar=0,scrollbars=1");
04719 vHWin.focus();
04720 }
04721 }
04722 function TBE_EDITOR_curSelected(theField) {
04723 var fObjSel = document.'.$formname.'[theField];
04724 var retVal="";
04725 if (fObjSel) {
04726 if (fObjSel.type=="select-multiple" || fObjSel.type=="select-one") {
04727 var l=fObjSel.length;
04728 for (a=0;a<l;a++) {
04729 if (fObjSel.options[a].selected==1) {
04730 retVal+=fObjSel.options[a].value+",";
04731 }
04732 }
04733 }
04734 }
04735 return retVal;
04736 }
04737 function TBE_EDITOR_rawurlencode(str,maxlen) {
04738 var output = str;
04739 if (maxlen) output = output.substr(0,200);
04740 output = escape(output);
04741 output = TBE_EDITOR_str_replace("*","%2A", output);
04742 output = TBE_EDITOR_str_replace("+","%2B", output);
04743 output = TBE_EDITOR_str_replace("/","%2F", output);
04744 output = TBE_EDITOR_str_replace("@","%40", output);
04745 return output;
04746 }
04747 function TBE_EDITOR_str_replace(match,replace,string) {
04748 var input = ""+string;
04749 var matchStr = ""+match;
04750 if (!matchStr) {return string;}
04751 var output = "";
04752 var pointer=0;
04753 var pos = input.indexOf(matchStr);
04754 while (pos!=-1) {
04755 output+=""+input.substr(pointer, pos-pointer)+replace;
04756 pointer=pos+matchStr.length;
04757 pos = input.indexOf(match,pos+1);
04758 }
04759 output+=""+input.substr(pointer);
04760 return output;
04761 }
04762
04763 </script>
04764 <script type="text/javascript">
04765
04766
04767 '.$this->extJSCODE.'
04768
04769 TBE_EDITOR_initRequired();
04770 TBE_EDITOR_loginRefreshed();
04771
04772 </script>';
04773 return $out;
04774 }
04775
04782 function dbFileCon($formObj='document.forms[0]') {
04783 $str='
04784
04785
04786
04787
04788
04789 var browserWin="";
04790
04791 function setFormValueOpenBrowser(mode,params) {
04792 var url = "'.$this->backPath.'browser.php?mode="+mode+"&bparams="+params;
04793
04794 browserWin = window.open(url,"Typo3WinBrowser","height=350,width="+(mode=="db"?650:600)+",status=0,menubar=0,resizable=1,scrollbars=1");
04795 browserWin.focus();
04796 }
04797 function setFormValueFromBrowseWin(fName,value,label,exclusiveValues) {
04798 var formObj = setFormValue_getFObj(fName)
04799 if (formObj && value!="--div--") {
04800 fObj = formObj[fName+"_list"];
04801 var len = fObj.length;
04802
04803 if (exclusiveValues) {
04804 var m = new RegExp("(^|,)"+value+"($|,)");
04805 if (exclusiveValues.match(m)) {
04806
04807 for (a=len-1;a>=0;a--) fObj[a] = null;
04808 len = 0;
04809 } else if (len == 1) {
04810 m = new RegExp("(^|,)"+fObj.options[0].value+"($|,)");
04811 if (exclusiveValues.match(m)) {
04812
04813 fObj[0] = null;
04814 len = 0;
04815 }
04816 }
04817 }
04818
04819 var setOK = 1;
04820 if (!formObj[fName+"_mul"] || formObj[fName+"_mul"].value==0) {
04821 for (a=0;a<len;a++) {
04822 if (fObj.options[a].value==value) {
04823 setOK = 0;
04824 }
04825 }
04826 }
04827 if (setOK) {
04828 fObj.length++;
04829 fObj.options[len].value = value;
04830 fObj.options[len].text = unescape(label);
04831
04832
04833 setHiddenFromList(fObj,formObj[fName]);
04834 '.$this->TBE_EDITOR_fieldChanged_func.'
04835 }
04836 }
04837 }
04838 function setHiddenFromList(fObjSel,fObjHid) {
04839 l=fObjSel.length;
04840 fObjHid.value="";
04841 for (a=0;a<l;a++) {
04842 fObjHid.value+=fObjSel.options[a].value+",";
04843 }
04844 }
04845 function setFormValueManipulate(fName,type) {
04846 var formObj = setFormValue_getFObj(fName)
04847 if (formObj) {
04848 var localArray_V = new Array();
04849 var localArray_L = new Array();
04850 var localArray_S = new Array();
04851 var fObjSel = formObj[fName+"_list"];
04852 var l=fObjSel.length;
04853 var c=0;
04854 if (type=="Remove" || type=="Top" || type=="Bottom") {
04855 if (type=="Top") {
04856 for (a=0;a<l;a++) {
04857 if (fObjSel.options[a].selected==1) {
04858 localArray_V[c]=fObjSel.options[a].value;
04859 localArray_L[c]=fObjSel.options[a].text;
04860 localArray_S[c]=1;
04861 c++;
04862 }
04863 }
04864 }
04865 for (a=0;a<l;a++) {
04866 if (fObjSel.options[a].selected!=1) {
04867 localArray_V[c]=fObjSel.options[a].value;
04868 localArray_L[c]=fObjSel.options[a].text;
04869 localArray_S[c]=0;
04870 c++;
04871 }
04872 }
04873 if (type=="Bottom") {
04874 for (a=0;a<l;a++) {
04875 if (fObjSel.options[a].selected==1) {
04876 localArray_V[c]=fObjSel.options[a].value;
04877 localArray_L[c]=fObjSel.options[a].text;
04878 localArray_S[c]=1;
04879 c++;
04880 }
04881 }
04882 }
04883 }
04884 if (type=="Down") {
04885 var tC = 0;
04886 var tA = new Array();
04887
04888 for (a=0;a<l;a++) {
04889 if (fObjSel.options[a].selected!=1) {
04890
04891 localArray_V[c]=fObjSel.options[a].value;
04892 localArray_L[c]=fObjSel.options[a].text;
04893 localArray_S[c]=0;
04894 c++;
04895
04896
04897 if (tA.length > 0) {
04898 for (aa=0;aa<tA.length;aa++) {
04899 localArray_V[c]=fObjSel.options[tA[aa]].value;
04900 localArray_L[c]=fObjSel.options[tA[aa]].text;
04901 localArray_S[c]=1;
04902 c++;
04903 }
04904
04905 var tC = 0;
04906 var tA = new Array();
04907 }
04908 } else {
04909 tA[tC] = a;
04910 tC++;
04911 }
04912 }
04913
04914 if (tA.length > 0) {
04915 for (aa=0;aa<tA.length;aa++) {
04916 localArray_V[c]=fObjSel.options[tA[aa]].value;
04917 localArray_L[c]=fObjSel.options[tA[aa]].text;
04918 localArray_S[c]=1;
04919 c++;
04920 }
04921 }
04922 }
04923 if (type=="Up") {
04924 var tC = 0;
04925 var tA = new Array();
04926 var c = l-1;
04927
04928 for (a=l-1;a>=0;a--) {
04929 if (fObjSel.options[a].selected!=1) {
04930
04931
04932 localArray_V[c]=fObjSel.options[a].value;
04933 localArray_L[c]=fObjSel.options[a].text;
04934 localArray_S[c]=0;
04935 c--;
04936
04937
04938 if (tA.length > 0) {
04939 for (aa=0;aa<tA.length;aa++) {
04940 localArray_V[c]=fObjSel.options[tA[aa]].value;
04941 localArray_L[c]=fObjSel.options[tA[aa]].text;
04942 localArray_S[c]=1;
04943 c--;
04944 }
04945
04946 var tC = 0;
04947 var tA = new Array();
04948 }
04949 } else {
04950 tA[tC] = a;
04951 tC++;
04952 }
04953 }
04954
04955 if (tA.length > 0) {
04956 for (aa=0;aa<tA.length;aa++) {
04957 localArray_V[c]=fObjSel.options[tA[aa]].value;
04958 localArray_L[c]=fObjSel.options[tA[aa]].text;
04959 localArray_S[c]=1;
04960 c--;
04961 }
04962 }
04963 c=l;
04964 }
04965
04966
04967 fObjSel.length = c;
04968 for (a=0;a<c;a++) {
04969 fObjSel.options[a].value = localArray_V[a];
04970 fObjSel.options[a].text = localArray_L[a];
04971 fObjSel.options[a].selected = localArray_S[a];
04972 }
04973 setHiddenFromList(fObjSel,formObj[fName]);
04974
04975 '.$this->TBE_EDITOR_fieldChanged_func.'
04976 }
04977 }
04978 function setFormValue_getFObj(fName) {
04979 var formObj = '.$formObj.';
04980 if (formObj) {
04981 if (formObj[fName] && formObj[fName+"_list"] && formObj[fName+"_list"].type=="select-multiple") {
04982 return formObj;
04983 } else {
04984 alert("Formfields missing:\n fName: "+formObj[fName]+"\n fName_list:"+formObj[fName+"_list"]+"\n type:"+formObj[fName+"_list"].type+"\n fName:"+fName);
04985 }
04986 }
04987 return "";
04988 }
04989
04990
04991 ';
04992 return $str;
04993 }
04994
05000 function printNeededJSFunctions() {
05001
05002 $out = $this->JSbottom($this->formName);
05003
05004 if ($this->printNeededJS['dbFileIcons']) {
05005 $out.= '
05006
05007
05008
05009 <!--
05010 JavaScript after the form has been drawn:
05011 -->
05012
05013 <script type="text/javascript">
05014
05015 '.$this->dbFileCon('document.'.$this->formName).'
05016
05017 </script>';
05018 }
05019 return $out;
05020 }
05021
05027 function printNeededJSFunctions_top() {
05028
05029 $out = $this->JStop($this->formName);
05030 return $out;
05031 }
05032
05033
05034
05035
05036
05037
05038
05039
05040
05041
05042
05043
05044
05045
05046
05047
05048
05049
05050
05051
05052
05053
05054
05055
05056
05057
05058
05059
05060
05061
05062
05063
05064
05065
05066
05067
05075 function getDefaultRecord($table,$pid=0) {
05076 global $TCA;
05077 if ($TCA[$table]) {
05078 t3lib_div::loadTCA($table);
05079 $row = array();
05080
05081 if ($pid<0 && $TCA[$table]['ctrl']['useColumnsForDefaultValues']) {
05082
05083 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $table, 'uid='.abs($pid).t3lib_BEfunc::deleteClause($table));
05084 if ($drow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
05085
05086 $fArr = explode(',',$TCA[$table]['ctrl']['useColumnsForDefaultValues']);
05087 foreach($fArr as $theF) {
05088 if ($TCA[$table]['columns'][$theF]) {
05089 $row[$theF] = $drow[$theF];
05090 }
05091 }
05092 }
05093 $GLOBALS['TYPO3_DB']->sql_free_result($res);
05094 }
05095
05096 foreach($TCA[$table]['columns'] as $field => $info) {
05097 if (isset($info['config']['default'])) {
05098 $row[$field] = $info['config']['default'];
05099 }
05100 }
05101
05102 return $row;
05103 }
05104 }
05105
05114 function getRecordPath($table,$rec) {
05115 t3lib_BEfunc::fixVersioningPid($table,$rec);
05116 list($tscPID,$thePidValue)=$this->getTSCpid($table,$rec['uid'],$rec['pid']);
05117 if ($thePidValue>=0) {
05118 return t3lib_BEfunc::getRecordPath($tscPID,$this->readPerms(),15);
05119 }
05120 }
05121
05128 function readPerms() {
05129 if (!$this->perms_clause_set) {
05130 $this->perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
05131 $this->perms_clause_set=1;
05132 }
05133 return $this->perms_clause;
05134 }
05135
05142 function sL($str) {
05143 return $GLOBALS['LANG']->sL($str);
05144 }
05145
05155 function getLL($str) {
05156 $content = '';
05157
05158 switch(substr($str,0,2)) {
05159 case 'l_':
05160 $content = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.'.substr($str,2));
05161 break;
05162 case 'm_':
05163 $content = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:mess.'.substr($str,2));
05164 break;
05165 }
05166 return $content;
05167 }
05168
05176 function isPalettesCollapsed($table,$palette) {
05177 global $TCA;
05178
05179 if ($TCA[$table]['ctrl']['canNotCollapse']) return 0;
05180 if (is_array($TCA[$table]['palettes'][$palette]) && $TCA[$table]['palettes'][$palette]['canNotCollapse']) return 0;
05181 return $this->palettesCollapsed;
05182 }
05183
05192 function isDisplayCondition($displayCond,$row,$ffValueKey='') {
05193 $output = FALSE;
05194
05195 $parts = explode(':',$displayCond);
05196 switch((string)$parts[0]) {
05197 case 'FIELD':
05198 $theFieldValue = $ffValueKey ? $row[$parts[1]][$ffValueKey] : $row[$parts[1]];
05199
05200 switch((string)$parts[2]) {
05201 case 'REQ':
05202 if (strtolower($parts[3])=='true') {
05203 $output = $theFieldValue ? TRUE : FALSE;
05204 } elseif (strtolower($parts[3])=='false') {
05205 $output = !$theFieldValue ? TRUE : FALSE;
05206 }
05207 break;
05208 case '>':
05209 $output = $theFieldValue > $parts[3];
05210 break;
05211 case '<':
05212 $output = $theFieldValue < $parts[3];
05213 break;
05214 case '>=':
05215 $output = $theFieldValue >= $parts[3];
05216 break;
05217 case '<=':
05218 $output = $theFieldValue <= $parts[3];
05219 break;
05220 case '-':
05221 case '!-':
05222 $cmpParts = explode('-',$parts[3]);
05223 $output = $theFieldValue >= $cmpParts[0] && $theFieldValue <= $cmpParts[1];
05224 if ($parts[2]{0}=='!') $output = !$output;
05225 break;
05226 case 'IN':
05227 case '!IN':
05228 $output = t3lib_div::inList($parts[3],$theFieldValue);
05229 if ($parts[2]{0}=='!') $output = !$output;
05230 break;
05231 case '=':
05232 case '!=':
05233 $output = t3lib_div::inList($parts[3],$theFieldValue);
05234 if ($parts[2]{0}=='!') $output = !$output;
05235 break;
05236 }
05237 break;
05238 case 'EXT':
05239 switch((string)$parts[2]) {
05240 case 'LOADED':
05241 if (strtolower($parts[3])=='true') {
05242 $output = t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
05243 } elseif (strtolower($parts[3])=='false') {
05244 $output = !t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
05245 }
05246 break;
05247 }
05248 break;
05249 case 'REC':
05250 switch((string)$parts[1]) {
05251 case 'NEW':
05252 if (strtolower($parts[2])=='true') {
05253 $output = !(intval($row['uid']) > 0) ? TRUE : FALSE;
05254 } elseif (strtolower($parts[2])=='false') {
05255 $output = (intval($row['uid']) > 0) ? TRUE : FALSE;
05256 }
05257 break;
05258 }
05259 break;
05260 case 'HIDE_L10N_SIBLINGS':
05261 if ($ffValueKey==='vDEF') {
05262 $output = TRUE;
05263 } elseif ($parts[1]==='except_admin' && $GLOBALS['BE_USER']->isAdmin()) {
05264 $output = TRUE;
05265 }
05266 break;
05267 case 'HIDE_FOR_NON_ADMINS':
05268 $output = $GLOBALS['BE_USER']->isAdmin() ? TRUE : FALSE;
05269 break;
05270 case 'VERSION':
05271 switch((string)$parts[1]) {
05272 case 'IS':
05273 if (strtolower($parts[2])=='true') {
05274 $output = intval($row['pid'])==-1 ? TRUE : FALSE;
05275 } elseif (strtolower($parts[2])=='false') {
05276 $output = !(intval($row['pid'])==-1) ? TRUE : FALSE;
05277 }
05278 break;
05279 }
05280 break;
05281 }
05282
05283 return $output;
05284 }
05285
05296 function getTSCpid($table,$uid,$pid) {
05297 $key = $table.':'.$uid.':'.$pid;
05298 if (!isset($this->cache_getTSCpid[$key])) {
05299 $this->cache_getTSCpid[$key] = t3lib_BEfunc::getTSCpid($table,$uid,$pid);
05300 }
05301 return $this->cache_getTSCpid[$key];
05302 }
05303
05310 function doLoadTableDescr($table) {
05311 global $TCA;
05312 return $TCA[$table]['interface']['always_description'];
05313 }
05314
05322 function getAvailableLanguages($onlyIsoCoded=1,$setDefault=1) {
05323 $isL = t3lib_extMgm::isLoaded('static_info_tables');
05324
05325
05326 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('static_lang_isocode,title,uid', 'sys_language', 'pid=0 AND hidden=0'.t3lib_BEfunc::deleteClause('sys_language'), '', 'title');
05327
05328
05329 $output=array();
05330 if ($setDefault) {
05331 $output[0]=array(
05332 'uid' => 0,
05333 'title' => 'Default language',
05334 'ISOcode' => 'DEF'
05335 );
05336 }
05337 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
05338 $output[$row['uid']]=$row;
05339
05340 if ($isL && $row['static_lang_isocode']) {
05341 $rr = t3lib_BEfunc::getRecord('static_languages',$row['static_lang_isocode'],'lg_iso_2');
05342 if ($rr['lg_iso_2']) $output[$row['uid']]['ISOcode']=$rr['lg_iso_2'];
05343 }
05344
05345 if ($onlyIsoCoded && !$output[$row['uid']]['ISOcode']) unset($output[$row['uid']]);
05346 }
05347 return $output;
05348 }
05349 }
05350
05351
05352
05353
05354
05355
05356
05357
05358
05364 class t3lib_TCEforms_FE extends t3lib_TCEforms {
05365
05372 function wrapLabels($str) {
05373 return '<font face="verdana" size="1" color="black">'.$str.'</font>';
05374 }
05375
05382 function printPalette($palArr) {
05383 $out='';
05384 reset($palArr);
05385 $bgColor=' bgcolor="#D6DAD0"';
05386 while(list(,$content)=each($palArr)) {
05387 $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>';
05388 $iRow[]='<td valign="top">'.
05389 '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" alt="" />'.
05390 '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" alt="" />'.
05391 '</td><td nowrap="nowrap" valign="top">'.$content['ITEM'].$content['HELP_ICON'].'</td>';
05392 }
05393 $out='<table border="0" cellpadding="0" cellspacing="0">
05394 <tr><td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.implode('',$hRow).'</tr>
05395 <tr><td></td>'.implode('',$iRow).'</tr>
05396 </table>';
05397
05398 return $out;
05399 }
05400
05407 function setFancyDesign() {
05408 $this->fieldTemplate='
05409 <tr>
05410 <td nowrap="nowrap" bgcolor="#F6F2E6">###FIELD_HELP_ICON###<font face="verdana" size="1" color="black"><b>###FIELD_NAME###</b></font>###FIELD_HELP_TEXT###</td>
05411 </tr>
05412 <tr>
05413 <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>
05414 </tr> ';
05415
05416 $this->totalWrap='<table border="0" cellpadding="1" cellspacing="0" bgcolor="black"><tr><td><table border="0" cellpadding="2" cellspacing="0">|</table></td></tr></table>';
05417
05418 $this->palFieldTemplate='
05419 <tr>
05420 <td nowrap="nowrap" bgcolor="#ABBBB4"><font face="verdana" size="1" color="black">###FIELD_PALETTE###</font></td>
05421 </tr> ';
05422 $this->palFieldTemplateHeader='
05423 <tr>
05424 <td nowrap="nowrap" bgcolor="#F6F2E6"><font face="verdana" size="1" color="black"><b>###FIELD_HEADER###</b></font></td>
05425 </tr> ';
05426 }
05427 }
05428
05429 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']) {
05430 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']);
05431 }
05432 ?>