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