00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00183 require_once(PATH_t3lib.'class.t3lib_diff.php');
00184 require_once(PATH_t3lib.'class.t3lib_tceforms_inline.php');
00185
00186
00187
00196 class t3lib_TCEforms {
00197
00198
00199 var $palFieldArr = array();
00200 var $disableWizards = 0;
00201 var $isPalettedoc = 0;
00202 var $paletteMargin = 1;
00203 var $defStyle = '';
00204 var $cachedTSconfig = array();
00205 var $cachedTSconfig_fieldLevel = array();
00206 var $cachedLanguageFlag = array();
00207 var $cachedAdditionalPreviewLanguages = NULL;
00208 var $transformedRow = array();
00209 var $extJSCODE = '';
00210 var $printNeededJS = array();
00211 var $hiddenFieldAccum=array();
00212 var $TBE_EDITOR_fieldChanged_func='';
00213 var $loadMD5_JS=1;
00214 var $prevBorderStyle='[nothing here...]';
00215 var $allowUpload=0;
00216 var $titleLen=15;
00217 var $defaultLanguageData = array();
00218 var $defaultLanguageData_diff = array();
00219 var $additionalPreviewLanguageData = array();
00220
00221
00222
00223 var $backPath='';
00224 var $returnUrl='';
00225 var $doSaveFieldName='';
00226 var $palettesCollapsed=0;
00227 var $disableRTE=0;
00228 var $globalShowHelp=1;
00229 var $localizationMode='';
00230 var $fieldOrder='';
00231 var $doPrintPalette=1;
00232
00238 var $clipObj=FALSE;
00239 var $enableClickMenu=FALSE;
00240 var $enableTabMenu = FALSE;
00241 var $renderReadonly = FALSE;
00242
00243 var $form_rowsToStylewidth = 9.58;
00244 var $form_largeComp = 1.33;
00245 var $charsPerRow=40;
00246 var $maxTextareaWidth=48;
00247 var $maxInputWidth=48;
00248 var $defaultMultipleSelectorStyle='width:250px;';
00249
00250
00251
00252 var $prependFormFieldNames = 'data';
00253 var $prependCmdFieldNames = 'cmd';
00254 var $prependFormFieldNames_file = 'data_files';
00255 var $formName = 'editform';
00256 var $allowOverrideMatrix = array();
00257
00258
00259
00260
00261 var $perms_clause='';
00262 var $perms_clause_set=0;
00263 var $edit_showFieldHelp='';
00264 var $docLarge=0;
00265 var $clientInfo=array();
00266 var $RTEenabled=0;
00267 var $RTEenabled_notReasons='';
00268 var $RTEcounter = 0;
00269
00270 var $colorScheme;
00271 var $classScheme;
00272 var $defColorScheme;
00273 var $defClassScheme;
00274 var $fieldStyle;
00275 var $borderStyle;
00276
00277 var $commentMessages=array();
00278
00279
00280 var $totalWrap='<hr />|<hr />';
00281 var $fieldTemplate='<b>###FIELD_NAME###</b><br />###FIELD_ITEM###<hr />';
00282 var $sectionWrap='';
00283 var $palFieldTemplateHeader='';
00284 var $palFieldTemplate='';
00285
00286
00287 var $excludeElements='';
00288 var $palettesRendered=array();
00289 var $hiddenFieldListArr = array();
00290 var $requiredFields=array();
00291 var $requiredElements=array();
00292 var $renderDepth=0;
00293 var $savedSchemes=array();
00294 var $dynNestedStack = array();
00295
00296
00297 var $additionalCode_pre = array();
00298 var $additionalJS_pre = array();
00299 var $additionalJS_post = array();
00300 var $additionalJS_submit = array();
00301
00307 var $inline;
00308 var $hookObjectsMainFields = array();
00309 var $hookObjectsSingleField = array();
00310 var $extraFormHeaders = array();
00311
00312
00313
00314
00315
00321 function t3lib_TCEforms() {
00322 global $CLIENT, $TYPO3_CONF_VARS;
00323
00324 $this->clientInfo = t3lib_div::clientInfo();
00325
00326 $this->RTEenabled = $GLOBALS['BE_USER']->isRTE();
00327 if (!$this->RTEenabled) {
00328 $this->RTEenabled_notReasons = implode(chr(10),$GLOBALS['BE_USER']->RTE_errors);
00329 $this->commentMessages[] = 'RTE NOT ENABLED IN SYSTEM due to:'.chr(10).$this->RTEenabled_notReasons;
00330 }
00331
00332
00333 $this->defColorScheme = array(
00334 $GLOBALS['SOBE']->doc->bgColor,
00335 t3lib_div::modifyHTMLColorAll($GLOBALS['SOBE']->doc->bgColor,-20),
00336 t3lib_div::modifyHTMLColorAll($GLOBALS['SOBE']->doc->bgColor,-10),
00337 'black',
00338 '#666666'
00339 );
00340 $this->defColorScheme = array();
00341
00342
00343 $this->resetSchemes();
00344
00345
00346 $this->defColorScheme = $this->colorScheme;
00347 $this->defClassScheme = $this->classScheme;
00348
00349
00350 $this->allowOverrideMatrix = array(
00351 'input' => array('size', 'max'),
00352 'text' => array('cols', 'rows', 'wrap'),
00353 'check' => array('cols', 'showIfRTE'),
00354 'select' => array('size', 'autoSizeMax', 'maxitems', 'minitems'),
00355 'group' => array('size', 'autoSizeMax', 'max_size', 'show_thumbs', 'maxitems', 'minitems'),
00356 'inline' => array('appearance', 'foreign_label', 'foreign_selector', 'foreign_unique', 'maxitems', 'minitems', 'size', 'autoSizeMax', 'symmetric_label'),
00357 );
00358
00359 $this->inline = t3lib_div::makeInstance('t3lib_TCEforms_inline');
00360
00361
00362 $this->hookObjectsMainFields = array();
00363 if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getMainFieldsClass'])) {
00364 foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getMainFieldsClass'] as $classRef) {
00365 $this->hookObjectsMainFields[] = &t3lib_div::getUserObj($classRef);
00366 }
00367 }
00368 $this->hookObjectsSingleField = array();
00369 if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'])) {
00370 foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'] as $classRef) {
00371 $this->hookObjectsSingleField[] = &t3lib_div::getUserObj($classRef);
00372 }
00373 }
00374
00375 }
00376
00382 function initDefaultBEmode() {
00383 global $BE_USER;
00384 $this->prependFormFieldNames = 'data';
00385 $this->formName = 'editform';
00386 $this->setNewBEDesign();
00387 $this->docLarge = $BE_USER->uc['edit_wideDocument'] ? 1 : 0;
00388 $this->edit_showFieldHelp = $BE_USER->uc['edit_showFieldHelp'];
00389
00390 $this->edit_docModuleUpload = $BE_USER->uc['edit_docModuleUpload'];
00391 $this->titleLen = $BE_USER->uc['titleLen'];
00392
00393 $this->inline->init($this);
00394 }
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00429 function getSoloField($table,$row,$theFieldToReturn) {
00430 global $TCA;
00431
00432 if ($TCA[$table]) {
00433 t3lib_div::loadTCA($table);
00434 $typeNum = $this->getRTypeNum($table,$row);
00435 if ($TCA[$table]['types'][$typeNum]) {
00436 $itemList = $TCA[$table]['types'][$typeNum]['showitem'];
00437 if ($itemList) {
00438 $fields = t3lib_div::trimExplode(',',$itemList,1);
00439 $excludeElements = $this->excludeElements = $this->getExcludeElements($table,$row,$typeNum);
00440
00441 reset($fields);
00442 while(list(,$fieldInfo)=each($fields)) {
00443 $parts = explode(';',$fieldInfo);
00444
00445 $theField = trim($parts[0]);
00446 if (!in_array($theField,$excludeElements) && !strcmp($theField,$theFieldToReturn)) {
00447 if ($TCA[$table]['columns'][$theField]) {
00448 $sField = $this->getSingleField($table,$theField,$row,$parts[1],1,$parts[3],$parts[2]);
00449 return $sField['ITEM'];
00450 }
00451 }
00452 }
00453 }
00454 }
00455 }
00456 }
00457
00468 function getMainFields($table,$row,$depth=0) {
00469 global $TCA, $TYPO3_CONF_VARS;
00470
00471 $this->renderDepth=$depth;
00472
00473
00474 $out_array = array(array());
00475 $out_array_meta = array(array(
00476 'title' => $this->getLL('l_generalTab')
00477 ));
00478
00479 $out_pointer=0;
00480 $out_sheet=0;
00481 $this->palettesRendered=array();
00482 $this->palettesRendered[$this->renderDepth][$table]=array();
00483
00484
00485 foreach ($this->hookObjectsMainFields as $hookObj) {
00486 if (method_exists($hookObj,'getMainFields_preProcess')) {
00487 $hookObj->getMainFields_preProcess($table,$row,$this);
00488 }
00489 }
00490
00491 if ($TCA[$table]) {
00492
00493
00494 t3lib_div::loadTCA($table);
00495
00496
00497 if ($this->edit_showFieldHelp || $this->doLoadTableDescr($table)) {
00498 $GLOBALS['LANG']->loadSingleTableDescription($table);
00499 }
00500
00501 $typeNum = $this->getRTypeNum($table,$row);
00502
00503
00504 if ($TCA[$table]['types'][$typeNum]) {
00505 $itemList = $TCA[$table]['types'][$typeNum]['showitem'];
00506 if ($itemList) {
00507
00508 $fields = t3lib_div::trimExplode(',',$itemList,1);
00509 if ($this->fieldOrder) {
00510 $fields = $this->rearrange($fields);
00511 }
00512
00513
00514 $excludeElements = $this->excludeElements = $this->getExcludeElements($table,$row,$typeNum);
00515 $fields = $this->mergeFieldsWithAddedFields($fields,$this->getFieldsToAdd($table,$row,$typeNum));
00516
00517
00518 if (strstr($itemList, '--div--') !== false && $this->enableTabMenu && $TCA[$table]['ctrl']['dividers2tabs']) {
00519 $tabIdentString = 'TCEforms:'.$table.':'.$row['uid'];
00520 $tabIdentStringMD5 = $GLOBALS['TBE_TEMPLATE']->getDynTabMenuId('TCEforms:'.$table.':'.$row['uid']);
00521
00522 if (isset($fields[0]) && strpos($fields[0], '--div--') !== 0) {
00523 $this->pushToDynNestedStack('tab', $tabIdentStringMD5.'-1');
00524 }
00525 }
00526
00527
00528 $cc=0;
00529 foreach($fields as $fieldInfo) {
00530
00531 $parts = explode(';',$fieldInfo);
00532
00533
00534 $color_style_parts = t3lib_div::trimExplode('-',$parts[4]);
00535 if (strcmp($color_style_parts[0],'')) {
00536 $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][intval($color_style_parts[0])]);
00537 }
00538 if (strcmp($color_style_parts[1],'')) {
00539 $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][intval($color_style_parts[1])];
00540 if (!isset($this->fieldStyle)) $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
00541 }
00542 if (strcmp($color_style_parts[2],'')) {
00543 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00544 $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][intval($color_style_parts[2])];
00545 if (!isset($this->borderStyle)) $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
00546 }
00547
00548
00549 $theField = $parts[0];
00550 if (!in_array($theField,$excludeElements)) {
00551 if ($TCA[$table]['columns'][$theField]) {
00552 $sFieldPal='';
00553
00554 if ($parts[2] && !isset($this->palettesRendered[$this->renderDepth][$table][$parts[2]])) {
00555 $sFieldPal=$this->getPaletteFields($table,$row,$parts[2]);
00556 $this->palettesRendered[$this->renderDepth][$table][$parts[2]] = 1;
00557 }
00558 $sField = $this->getSingleField($table,$theField,$row,$parts[1],0,$parts[3],$parts[2]);
00559 if ($sField) { $sField.= $sFieldPal; }
00560
00561 $out_array[$out_sheet][$out_pointer].= $sField;
00562 } elseif ($theField=='--div--') {
00563 if ($cc>0) {
00564 $out_array[$out_sheet][$out_pointer].=$this->getDivider();
00565
00566 if ($this->enableTabMenu && $TCA[$table]['ctrl']['dividers2tabs']) {
00567 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00568
00569 $out_sheet++;
00570
00571 $this->popFromDynNestedStack('tab', $tabIdentStringMD5.'-'.($out_sheet));
00572
00573 $this->pushToDynNestedStack('tab', $tabIdentStringMD5.'-'.($out_sheet+1));
00574 $out_array[$out_sheet] = array();
00575 $out_array_meta[$out_sheet]['title'] = $this->sL($parts[1]);
00576 }
00577 } else {
00578 $out_array_meta[$out_sheet]['title'] = $this->sL($parts[1]);
00579
00580 if (strpos($itemList, '--div--', strlen($fieldInfo))) {
00581 $this->pushToDynNestedStack('tab', $tabIdentStringMD5.'-1');
00582 }
00583 }
00584 } elseif($theField=='--palette--') {
00585 if ($parts[2] && !isset($this->palettesRendered[$this->renderDepth][$table][$parts[2]])) {
00586
00587 if ($TCA[$table]['palettes'][$parts[2]]['canNotCollapse'] AND $parts[1]) {
00588 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$parts[2],$this->sL($parts[1]));
00589 } else {
00590 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$parts[2],'','',$this->sL($parts[1]));
00591 }
00592 $this->palettesRendered[$this->renderDepth][$table][$parts[2]] = 1;
00593 }
00594 }
00595 }
00596
00597 $cc++;
00598 }
00599 }
00600 }
00601 }
00602
00603
00604 foreach ($this->hookObjectsMainFields as $hookObj) {
00605 if (method_exists($hookObj,'getMainFields_postProcess')) {
00606 $hookObj->getMainFields_postProcess($table,$row,$this);
00607 }
00608 }
00609
00610
00611 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00612
00613
00614 $this->resetSchemes();
00615
00616
00617 $mParr = t3lib_div::trimExplode(',',$TCA[$table]['ctrl']['mainpalette']);
00618 $i = 0;
00619 if (count($mParr)) {
00620 foreach ($mParr as $mP) {
00621 if (!isset($this->palettesRendered[$this->renderDepth][$table][$mP])) {
00622 $temp_palettesCollapsed=$this->palettesCollapsed;
00623 $this->palettesCollapsed=0;
00624 $label = ($i==0?$this->getLL('l_generalOptions'):$this->getLL('l_generalOptions_more'));
00625 $out_array[$out_sheet][$out_pointer].=$this->getPaletteFields($table,$row,$mP,$label);
00626 $this->palettesCollapsed=$temp_palettesCollapsed;
00627 $this->palettesRendered[$this->renderDepth][$table][$mP] = 1;
00628 }
00629 $this->wrapBorder($out_array[$out_sheet],$out_pointer);
00630 $i++;
00631 if ($this->renderDepth) {
00632 $this->renderDepth--;
00633 }
00634 }
00635 }
00636
00637
00638 if ($out_sheet>0) {
00639
00640
00641 $parts = array();
00642 foreach ($out_array as $idx => $sheetContent) {
00643 $parts[] = array(
00644 'label' => $out_array_meta[$idx]['title'],
00645 'content' => '<table border="0" cellspacing="0" cellpadding="0" width="100%">'.
00646 implode('',$sheetContent).
00647 '</table>'
00648 );
00649 }
00650
00651
00652 $this->popFromDynNestedStack('tab', $tabIdentStringMD5.'-'.($out_sheet+1));
00653
00654 return '
00655 <tr>
00656 <td colspan="2">
00657 '.$this->getDynTabMenu($parts, $tabIdentString).'
00658 </td>
00659 </tr>';
00660 } else {
00661 return implode('',$out_array[$out_sheet]);
00662 }
00663 }
00664
00675 function getListedFields($table,$row,$list) {
00676 global $TCA;
00677
00678 t3lib_div::loadTCA($table);
00679 if ($this->edit_showFieldHelp || $this->doLoadTableDescr($table)) {
00680 $GLOBALS['LANG']->loadSingleTableDescription($table);
00681 }
00682
00683 $out = '';
00684 $types_fieldConfig = t3lib_BEfunc::getTCAtypes($table,$row,1);
00685
00686 $editFieldList=array_unique(t3lib_div::trimExplode(',',$list,1));
00687 foreach($editFieldList as $theFieldC) {
00688 list($theField,$palFields) = split('\[|\]',$theFieldC);
00689 $theField = trim($theField);
00690 $palFields = trim($palFields);
00691 if ($TCA[$table]['columns'][$theField]) {
00692 $parts = t3lib_div::trimExplode(';',$types_fieldConfig[$theField]['origString']);
00693 $sField = $this->getSingleField($table,$theField,$row,$parts[1],0,$parts[3],0);
00694 $out.= $sField;
00695 } elseif($theField=='--div--') {
00696 $out.= $this->getDivider();
00697 }
00698 if ($palFields) {
00699 $out.= $this->getPaletteFields($table,$row,'','',implode(',',t3lib_div::trimExplode('|',$palFields,1)));
00700 }
00701 }
00702
00703 return $out;
00704 }
00705
00717 function getPaletteFields($table,$row,$palette,$header='',$itemList='',$collapsedHeader='') {
00718 global $TCA;
00719 if (!$this->doPrintPalette) return '';
00720
00721 $out='';
00722 $palParts = array();
00723 t3lib_div::loadTCA($table);
00724
00725
00726 if (!is_array($this->excludeElements)) {
00727 $this->excludeElements = $this->getExcludeElements($table,$row,$this->getRTypeNum($table,$row));
00728 }
00729
00730
00731 if ($TCA[$table] && (is_array($TCA[$table]['palettes'][$palette]) || $itemList)) {
00732 $itemList = $itemList?$itemList:$TCA[$table]['palettes'][$palette]['showitem'];
00733 if ($itemList) {
00734 $fields = t3lib_div::trimExplode(',',$itemList,1);
00735 reset($fields);
00736 while(list(,$fieldInfo)=each($fields)) {
00737 $parts = t3lib_div::trimExplode(';',$fieldInfo);
00738 $theField = $parts[0];
00739
00740 if (!in_array($theField,$this->excludeElements) && $TCA[$table]['columns'][$theField]) {
00741 $this->palFieldArr[$palette][] = $theField;
00742 if ($this->isPalettesCollapsed($table,$palette)) {
00743 $this->hiddenFieldListArr[] = $theField;
00744 }
00745
00746 $part = $this->getSingleField($table,$theField,$row,$parts[1],1,'',$parts[2]);
00747 if (is_array($part)) {
00748 $palParts[] = $part;
00749 }
00750 }
00751 }
00752 }
00753 }
00754
00755 if (count($palParts)) {
00756 if ($header) {
00757 $out.= $this->intoTemplate(array(
00758 'HEADER' => htmlspecialchars($header)
00759 ),
00760 $this->palFieldTemplateHeader
00761 );
00762 }
00763 $out.= $this->intoTemplate(array(
00764 'PALETTE' => $this->printPalette($palParts)
00765 ),
00766 $this->palFieldTemplate
00767 );
00768 }
00769
00770 if ($this->isPalettesCollapsed($table,$palette) && $collapsedHeader) {
00771 $pC = $this->intoTemplate(array(
00772 '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),
00773 ),
00774 $this->palFieldTemplate
00775 );
00776 $out.= $pC;
00777 }
00778
00779 return $out;
00780 }
00781
00794 function getSingleField($table,$field,$row,$altName='',$palette=0,$extra='',$pal=0) {
00795 global $TCA,$BE_USER;
00796
00797
00798 foreach ($this->hookObjectsSingleField as $hookObj) {
00799 if (method_exists($hookObj,'getSingleField_preProcess')) {
00800 $hookObj->getSingleField_preProcess($table, $field, $row, $altName, $palette, $extra, $pal, $this);
00801 }
00802 }
00803
00804 $out = '';
00805 $PA = array();
00806 $PA['altName'] = $altName;
00807 $PA['palette'] = $palette;
00808 $PA['extra'] = $extra;
00809 $PA['pal'] = $pal;
00810
00811
00812 t3lib_div::loadTCA($table);
00813
00814
00815 $PA['fieldConf'] = $TCA[$table]['columns'][$field];
00816 $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00817
00818 $skipThisField = $this->inline->skipField($table, $field, $row, $PA['fieldConf']['config']);
00819
00820
00821 if ( is_array($PA['fieldConf']) &&
00822 !$skipThisField &&
00823 (!$PA['fieldConf']['exclude'] || $BE_USER->check('non_exclude_fields',$table.':'.$field)) &&
00824 $PA['fieldConf']['config']['form_type']!='passthrough' &&
00825 ($this->RTEenabled || !$PA['fieldConf']['config']['showIfRTE']) &&
00826 (!$PA['fieldConf']['displayCond'] || $this->isDisplayCondition($PA['fieldConf']['displayCond'],$row)) &&
00827 (!$TCA[$table]['ctrl']['languageField'] || $PA['fieldConf']['l10n_display'] || strcmp($PA['fieldConf']['l10n_mode'],'exclude') || $row[$TCA[$table]['ctrl']['languageField']]<=0) &&
00828 (!$TCA[$table]['ctrl']['languageField'] || !$this->localizationMode || $this->localizationMode===$PA['fieldConf']['l10n_cat'])
00829 ) {
00830
00831
00832
00833
00834 $PA['fieldTSConfig'] = $this->setTSconfig($table,$row,$field);
00835
00836
00837 if (!$PA['fieldTSConfig']['disabled']) {
00838
00839 $PA['fieldConf']['config'] = $this->overrideFieldConf($PA['fieldConf']['config'], $PA['fieldTSConfig']);
00840
00841
00842 $PA['itemFormElName']=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']';
00843 $PA['itemFormElName_file']=$this->prependFormFieldNames_file.'['.$table.']['.$row['uid'].']['.$field.']';
00844 $PA['itemFormElValue']=$row[$field];
00845 $PA['itemFormElID']=$this->prependFormFieldNames.'_'.$table.'_'.$row['uid'].'_'.$field;
00846
00847
00848 if ($PA['fieldConf']['l10n_display'] AND t3lib_div::inList($PA['fieldConf']['l10n_display'], 'defaultAsReadonly') AND $row[$TCA[$table]['ctrl']['languageField']]) {
00849 $PA['fieldConf']['config']['readOnly'] = true;
00850 $PA['itemFormElValue'] = $this->defaultLanguageData[$table.':'.$row['uid']][$field];
00851 }
00852
00853
00854 if (
00855 ($TCA[$table]['ctrl']['type'] && !strcmp($field,$TCA[$table]['ctrl']['type'])) ||
00856 ($TCA[$table]['ctrl']['requestUpdate'] && t3lib_div::inList($TCA[$table]['ctrl']['requestUpdate'],$field))) {
00857 if($GLOBALS['BE_USER']->jsConfirmation(1)) {
00858 $alertMsgOnChange = 'if (confirm(TBE_EDITOR.labels.onChangeAlert) && TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm() };';
00859 } else {
00860 $alertMsgOnChange = 'if (TBE_EDITOR.checkSubmit(-1)){ TBE_EDITOR.submitForm() };';
00861 }
00862 } else {
00863 $alertMsgOnChange = '';
00864 }
00865
00866
00867 if (in_array($field,$this->hiddenFieldListArr)) {
00868 $this->hiddenFieldAccum[]='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00869 } else {
00870
00871
00872 if (!$PA['palette']) {
00873 if ($PA['pal'] && $this->isPalettesCollapsed($table,$PA['pal'])) {
00874 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);
00875 } else {
00876 $thePalIcon = '';
00877 $palJSfunc = '';
00878 }
00879 }
00880
00881 $PA['onFocus'] = ($palJSfunc && !$BE_USER->uc['dontShowPalettesOnFocusInAB']) ? ' onfocus="'.htmlspecialchars($palJSfunc).'"' : '';
00882
00883
00884 $item='';
00885 $PA['label'] = $PA['altName'] ? $PA['altName'] : $PA['fieldConf']['label'];
00886 $PA['label'] = $this->sL($PA['label']);
00887
00888 $PA['fieldChangeFunc']=array();
00889 $PA['fieldChangeFunc']['TBE_EDITOR_fieldChanged'] = "TBE_EDITOR.fieldChanged('".$table."','".$row['uid']."','".$field."','".$PA['itemFormElName']."');";
00890 $PA['fieldChangeFunc']['alert']=$alertMsgOnChange;
00891
00892 if ($this->inline->isInlineChildAndLabelField($table, $field)) {
00893 $PA['fieldChangeFunc']['inline'] = "inline.handleChangedField('".$PA['itemFormElName']."','".$this->inline->inlineNames['object']."[$table][".$row['uid']."]');";
00894 }
00895
00896
00897 $item = $this->getSingleField_SW($table,$field,$row,$PA);
00898
00899
00900 if ($PA['fieldConf']['l10n_display'] && (t3lib_div::inList($PA['fieldConf']['l10n_display'], 'hideDiff') || t3lib_div::inList($PA['fieldConf']['l10n_display'], 'defaultAsReadonly'))) {
00901 $renderLanguageDiff = false;
00902 } else {
00903 $renderLanguageDiff = true;
00904 }
00905
00906 if ($renderLanguageDiff) {
00907 $item = $this->renderDefaultLanguageContent($table,$field,$row,$item);
00908 $item = $this->renderDefaultLanguageDiff($table,$field,$row,$item);
00909 }
00910
00911
00912 $PA['label'] = t3lib_div::deHSCentities(htmlspecialchars($PA['label']));
00913 if (t3lib_div::testInt($row['uid']) && $PA['fieldTSConfig']['linkTitleToSelf'] && !t3lib_div::_GP('columnsOnly')) {
00914 $lTTS_url = $this->backPath.'alt_doc.php?edit['.$table.']['.$row['uid'].']=edit&columnsOnly='.$field.'&returnUrl='.rawurlencode($this->thisReturnUrl());
00915 $PA['label'] = '<a href="'.htmlspecialchars($lTTS_url).'">'.$PA['label'].'</a>';
00916 }
00917
00918
00919 if ($PA['fieldConf']['config']['form_type']=='user' && $PA['fieldConf']['config']['noTableWrapping']) {
00920 $out = $item;
00921 } elseif ($PA['palette']) {
00922
00923 $out=array(
00924 'NAME'=>$PA['label'],
00925 'ID'=>$row['uid'],
00926 'FIELD'=>$field,
00927 'TABLE'=>$table,
00928 'ITEM'=>$item,
00929 'HELP_ICON' => $this->helpTextIcon($table,$field,1)
00930 );
00931 $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00932 } else {
00933
00934 $out=array(
00935 'NAME'=>$PA['label'],
00936 'ITEM'=>$item,
00937 'TABLE'=>$table,
00938 'ID'=>$row['uid'],
00939 'HELP_ICON'=>$this->helpTextIcon($table,$field),
00940 'HELP_TEXT'=>$this->helpText($table,$field),
00941 'PAL_LINK_ICON'=>$thePalIcon,
00942 'FIELD'=>$field
00943 );
00944 $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00945
00946 $out=$this->intoTemplate($out);
00947 }
00948 }
00949 } else $this->commentMessages[]=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']: Disabled by TSconfig';
00950 }
00951
00952 foreach ($this->hookObjectsSingleField as $hookObj) {
00953 if (method_exists($hookObj,'getSingleField_postProcess')) {
00954 $hookObj->getSingleField_postProcess($table, $field, $row, $out, $PA, $this);
00955 }
00956 }
00957
00958 return $out;
00959 }
00960
00972 function getSingleField_SW($table,$field,$row,&$PA) {
00973 $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00974
00975 switch($PA['fieldConf']['config']['form_type']) {
00976 case 'input':
00977 $item = $this->getSingleField_typeInput($table,$field,$row,$PA);
00978 break;
00979 case 'text':
00980 $item = $this->getSingleField_typeText($table,$field,$row,$PA);
00981 break;
00982 case 'check':
00983 $item = $this->getSingleField_typeCheck($table,$field,$row,$PA);
00984 break;
00985 case 'radio':
00986 $item = $this->getSingleField_typeRadio($table,$field,$row,$PA);
00987 break;
00988 case 'select':
00989 $item = $this->getSingleField_typeSelect($table,$field,$row,$PA);
00990 break;
00991 case 'group':
00992 $item = $this->getSingleField_typeGroup($table,$field,$row,$PA);
00993 break;
00994 case 'inline':
00995 $item = $this->inline->getSingleField_typeInline($table,$field,$row,$PA);
00996 break;
00997 case 'none':
00998 $item = $this->getSingleField_typeNone($table,$field,$row,$PA);
00999 break;
01000 case 'user':
01001 $item = $this->getSingleField_typeUser($table,$field,$row,$PA);
01002 break;
01003 case 'flex':
01004 $item = $this->getSingleField_typeFlex($table,$field,$row,$PA);
01005 break;
01006 default:
01007 $item = $this->getSingleField_typeUnknown($table,$field,$row,$PA);
01008 break;
01009 }
01010
01011 return $item;
01012 }
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01048 function getSingleField_typeInput($table,$field,$row,&$PA) {
01049
01050
01051
01052 $config = $PA['fieldConf']['config'];
01053
01054 # $specConf = $this->getSpecConfForField($table,$row,$field);
01055 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01056 $size = t3lib_div::intInRange($config['size']?$config['size']:30,5,$this->maxInputWidth);
01057 $evalList = t3lib_div::trimExplode(',',$config['eval'],1);
01058
01059
01060 if($this->renderReadonly || $config['readOnly']) {
01061 $itemFormElValue = $PA['itemFormElValue'];
01062 if (in_array('date',$evalList)) {
01063 $config['format'] = 'date';
01064 } elseif (in_array('date',$evalList)) {
01065 $config['format'] = 'date';
01066 } elseif (in_array('datetime',$evalList)) {
01067 $config['format'] = 'datetime';
01068 } elseif (in_array('time',$evalList)) {
01069 $config['format'] = 'time';
01070 }
01071 if (in_array('password',$evalList)) {
01072 $itemFormElValue = $itemFormElValue ? '*********' : '';
01073 }
01074 return $this->getSingleField_typeNone_render($config, $itemFormElValue);
01075 }
01076
01077 foreach ($evalList as $func) {
01078 switch ($func) {
01079 case 'required':
01080 $this->requiredFields[$table.'_'.$row['uid'].'_'.$field]=$PA['itemFormElName'];
01081 break;
01082 default:
01083 if (substr($func, 0, 3) == 'tx_') {
01084
01085 $evalObj = t3lib_div::getUserObj($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tce']['formevals'][$func].':&'.$func);
01086 if (is_object($evalObj) && method_exists($evalObj, 'deevaluateFieldValue')) {
01087 $_params = array(
01088 'value' => $PA['itemFormElValue']
01089 );
01090 $PA['itemFormElValue'] = $evalObj->deevaluateFieldValue($_params);
01091 }
01092 }
01093 break;
01094 }
01095 }
01096
01097 $paramsList = "'".$PA['itemFormElName']."','".implode(',',$evalList)."','".trim($config['is_in'])."',".(isset($config['checkbox'])?1:0).",'".$config['checkbox']."'";
01098 if (isset($config['checkbox'])) {
01099
01100 $thisMidnight = mktime(0,0,0);
01101 $checkSetValue = in_array('date',$evalList) ? $thisMidnight : '';
01102 $checkSetValue = in_array('datetime',$evalList) ? time() : $checkSetValue;
01103
01104 $cOnClick = 'typo3form.fieldGet('.$paramsList.',1,\''.$checkSetValue.'\');'.implode('',$PA['fieldChangeFunc']);
01105 $item.='<input type="checkbox"'.$this->insertDefStyle('check').' name="'.$PA['itemFormElName'].'_cb" onclick="'.htmlspecialchars($cOnClick).'" />';
01106 }
01107
01108 $PA['fieldChangeFunc'] = array_merge(array('typo3form.fieldGet'=>'typo3form.fieldGet('.$paramsList.');'), $PA['fieldChangeFunc']);
01109 $mLgd = ($config['max']?$config['max']:256);
01110 $iOnChange = implode('',$PA['fieldChangeFunc']);
01111 $item.='<input type="text" name="'.$PA['itemFormElName'].'_hr" value=""'.$this->formWidth($size).' maxlength="'.$mLgd.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].' />';
01112 $item.='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01113 $this->extJSCODE.='typo3form.fieldSet('.$paramsList.');';
01114
01115
01116 foreach ($evalList as $evalData) {
01117 if (substr($evalData, 0, 3) == 'tx_') {
01118 $evalObj = t3lib_div::getUserObj($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tce']['formevals'][$evalData].':&'.$evalData);
01119 if(is_object($evalObj) && method_exists($evalObj, 'returnFieldJS')) {
01120 $this->extJSCODE .= "\n\nfunction ".$evalData."(value) {\n".$evalObj->returnFieldJS()."\n}\n";
01121 }
01122 }
01123 }
01124
01125
01126 $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'_hr" value="" />';
01127 $altItem.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01128
01129
01130 $item= $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'].'_hr',$specConf);
01131
01132 return $item;
01133 }
01134
01145 function getSingleField_typeText($table,$field,$row,&$PA) {
01146
01147
01148 $config = $PA['fieldConf']['config'];
01149
01150 if($this->renderReadonly || $config['readOnly']) {
01151 return $this->getSingleField_typeNone_render($config, $PA['itemFormElValue']);
01152 }
01153
01154
01155 $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
01156
01157
01158 $origRows = $rows = t3lib_div::intInRange($config['rows'] ? $config['rows'] : 5, 1, 20);
01159 if (strlen($PA['itemFormElValue']) > $this->charsPerRow*2) {
01160 $cols = $this->maxTextareaWidth;
01161 $rows = t3lib_div::intInRange(round(strlen($PA['itemFormElValue'])/$this->charsPerRow), count(explode(chr(10),$PA['itemFormElValue'])), 20);
01162 if ($rows<$origRows) $rows = $origRows;
01163 }
01164
01165
01166 $RTEwasLoaded = 0;
01167 $RTEwouldHaveBeenLoaded = 0;
01168
01169
01170 $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
01171
01172
01173 $altItem = '<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="'.htmlspecialchars($PA['itemFormElValue