Main Page | Directories | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages | Examples

class.t3lib_tceforms.php File Reference

Go to the source code of this file.

Namespaces

namespace  TYPO3

Classes

class  t3lib_TCEforms
class  t3lib_TCEforms_FE
 Extension class for the rendering of TCEforms in the frontend. More...

Functions

 getPaletteFields ($table, $row, $palette, $header='', $itemList='', $collapsedHeader='')
 Creates a palette (collection of secondary options).
 getSingleField ($table, $field, $row, $altName='', $palette=0, $extra='', $pal=0)
 Returns the form HTML code for a database table field.
 getSingleField_SW ($table, $field, $row, &$PA)
 Rendering a single item for the form.
 getSingleField_typeInput ($table, $field, $row, &$PA)
 Generation of TCEform elements of the type "input" This will render a single-line input form field, possibly with various control/validation features.
 getSingleField_typeText ($table, $field, $row, &$PA)
 Generation of TCEform elements of the type "text" This will render a <textarea> OR RTE area form field, possibly with various control/validation features.
 getSingleField_typeCheck ($table, $field, $row, &$PA)
 Generation of TCEform elements of the type "check" This will render a check-box OR an array of checkboxes.
 getSingleField_typeRadio ($table, $field, $row, &$PA)
 Generation of TCEform elements of the type "radio" This will render a series of radio buttons.
 getSingleField_typeSelect ($table, $field, $row, &$PA)
 Generation of TCEform elements of the type "select" This will render a selector box element, or possibly a special construction with two selector boxes.
 getSingleField_typeSelect_single ($table, $field, $row, &$PA, $config, $selItems, $nMV_label)
 Creates a single-selector box (Render function for getSingleField_typeSelect()).
 getSingleField_typeSelect_checkbox ($table, $field, $row, &$PA, $config, $selItems, $nMV_label)
 Creates a checkbox list (renderMode = "checkbox") (Render function for getSingleField_typeSelect()).
 getSingleField_typeSelect_singlebox ($table, $field, $row, &$PA, $config, $selItems, $nMV_label)
 Creates a selectorbox list (renderMode = "singlebox") (Render function for getSingleField_typeSelect()).
 getSingleField_typeSelect_multiple ($table, $field, $row, &$PA, $config, $selItems, $nMV_label)
 Creates a multiple-selector box (two boxes, side-by-side) (Render function for getSingleField_typeSelect()).
 getSingleField_typeGroup ($table, $field, $row, &$PA)
 Generation of TCEform elements of the type "group" This will render a selectorbox into which elements from either the file system or database can be inserted.
 getSingleField_typeNone ($table, $field, $row, &$PA)
 Generation of TCEform elements of the type "none" This will render a non-editable display of the content of the field.
 getSingleField_typeNone_render ($config, $itemValue)
 HTML rendering of a value which is not editable.
 getSingleField_typeFlex ($table, $field, $row, &$PA)
 Handler for Flex Forms.
 getSingleField_typeFlex_langMenu ($languages, $elName, $selectedLanguage, $multi=1)
 Creates the language menu for FlexForms:.
 getSingleField_typeFlex_sheetMenu ($sArr, $elName, $sheetKey)
 Creates the menu for selection of the sheets:.

Variables

return $out


Function Documentation

getPaletteFields table,
row,
palette,
header = '',
itemList = '',
collapsedHeader = ''
 

Creates a palette (collection of secondary options).

Parameters:
string The table name
array The row array
string The palette number/pointer
string Header string for the palette (used when in-form). If not set, no header item is made.
string Optional alternative list of fields for the palette
string Optional Link text for activating a palette (when palettes does not have another form element to belong to).
Returns:
string HTML code.

Definition at line 620 of file class.t3lib_tceforms.php.

References $out, $TCA, getSingleField(), header(), and table().

Referenced by t3lib_TCEforms::getListedFields(), and t3lib_TCEforms::getMainFields().

00620                                                                                                 {
00621       global $TCA;
00622       if (!$this->doPrintPalette)   return '';
00623 
00624       $out='';
00625       $palParts=array();
00626       t3lib_div::loadTCA($table);
00627 
00628          // Getting excludeElements, if any.
00629       if (!is_array($this->excludeElements)) {
00630          $this->excludeElements = $this->getExcludeElements($table,$row,$this->getRTypeNum($table,$row));
00631       }
00632 
00633          // Render the palette TCEform elements.
00634       if ($TCA[$table] && (is_array($TCA[$table]['palettes'][$palette]) || $itemList)) {
00635          $itemList = $itemList?$itemList:$TCA[$table]['palettes'][$palette]['showitem'];
00636          if ($itemList) {
00637             $fields = t3lib_div::trimExplode(',',$itemList,1);
00638             reset($fields);
00639             while(list(,$fieldInfo)=each($fields)) {
00640                $parts = t3lib_div::trimExplode(';',$fieldInfo);
00641                $theField = $parts[0];
00642 
00643                if (!in_array($theField,$this->excludeElements) && $TCA[$table]['columns'][$theField]) {
00644                   $this->palFieldArr[$palette][] = $theField;
00645                   if ($this->isPalettesCollapsed($table,$palette))   {
00646                      $this->hiddenFieldListArr[] = $theField;
00647                   }
00648 
00649                   $part=$this->getSingleField($table,$theField,$row,$parts[1],1,'',$parts[2]);
00650                   if (is_array($part)) {
00651                      $palParts[]=$part;
00652                   }
00653                }
00654             }
00655          }
00656       }
00657          // Put palette together if there are fields in it:
00658       if (count($palParts))   {
00659          if ($header)   {
00660             $out.=   $this->intoTemplate(array(
00661                         'HEADER' => htmlspecialchars($header)
00662                      ),
00663                      $this->palFieldTemplateHeader
00664                   );
00665          }
00666          $out.=   $this->intoTemplate(array(
00667                      'PALETTE' => $this->printPalette($palParts)
00668                   ),
00669                   $this->palFieldTemplate
00670                );
00671       }
00672          // If a palette is collapsed (not shown in form, but in top frame instead) AND a collapse header string is given, then make that string a link to activate the palette.
00673       if ($this->isPalettesCollapsed($table,$palette) && $collapsedHeader) {
00674          $pC=  $this->intoTemplate(array(
00675                      '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),
00676                   ),
00677                   $this->palFieldTemplate
00678                );
00679          $out.=$pC;
00680       }
00681       return $out;
00682    }

getSingleField table,
field,
row,
altName = '',
palette = 0,
extra = '',
pal = 0
 

Returns the form HTML code for a database table field.

Parameters:
string The table name
string The field name
array The record to edit from the database table.
string Alternative field name label to show.
boolean Set this if the field is on a palette (in top frame), otherwise not. (if set, field will render as a hidden field).
string The "extra" options from "Part 4" of the field configurations found in the "types" "showitem" list. Typically parsed by $this->getSpecConfFromString() in order to get the options as an associative array.
integer The palette pointer.
Returns:
mixed String (normal) or array (palettes)

Definition at line 696 of file class.t3lib_tceforms.php.

References $out, $TCA, getSingleField_SW(), and table().

Referenced by t3lib_TCEforms::getListedFields(), t3lib_TCEforms::getMainFields(), getPaletteFields(), and t3lib_TCEforms::getSoloField().

00696                                                                                        {
00697       global $TCA,$BE_USER;
00698 
00699       $out = '';
00700       $PA = array();
00701       $PA['altName'] = $altName;
00702       $PA['palette'] = $palette;
00703       $PA['extra'] = $extra;
00704       $PA['pal'] = $pal;
00705 
00706          // Make sure to load full $TCA array for the table:
00707       t3lib_div::loadTCA($table);
00708 
00709          // Get the TCA configuration for the current field:
00710       $PA['fieldConf'] = $TCA[$table]['columns'][$field];
00711       $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00712 
00713          // Now, check if this field is configured and editable (according to excludefields + other configuration)
00714       if (  is_array($PA['fieldConf']) &&
00715             (!$PA['fieldConf']['exclude'] || $BE_USER->check('non_exclude_fields',$table.':'.$field)) &&
00716             $PA['fieldConf']['config']['form_type']!='passthrough' &&
00717             ($this->RTEenabled || !$PA['fieldConf']['config']['showIfRTE']) &&
00718             (!$PA['fieldConf']['displayCond'] || $this->isDisplayCondition($PA['fieldConf']['displayCond'],$row)) &&
00719             (!$TCA[$table]['ctrl']['languageField'] || strcmp($PA['fieldConf']['l10n_mode'],'exclude') || $row[$TCA[$table]['ctrl']['languageField']]<=0)
00720          )  {
00721 
00722             // Fetching the TSconfig for the current table/field. This includes the $row which means that
00723          $PA['fieldTSConfig'] = $this->setTSconfig($table,$row,$field);
00724 
00725             // If the field is NOT disabled from TSconfig (which it could have been) then render it
00726          if (!$PA['fieldTSConfig']['disabled']) {
00727 
00728                // Init variables:
00729             $PA['itemFormElName']=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']';    // Form field name
00730             $PA['itemFormElName_file']=$this->prependFormFieldNames_file.'['.$table.']['.$row['uid'].']['.$field.']';   // Form field name, in case of file uploads
00731             $PA['itemFormElValue']=$row[$field];      // The value to show in the form field.
00732 
00733                // Create a JavaScript code line which will ask the user to save/update the form due to changing the element. This is used for eg. "type" fields and others configured with "requestUpdate"
00734             if (
00735                   (($TCA[$table]['ctrl']['type'] && !strcmp($field,$TCA[$table]['ctrl']['type'])) ||
00736                   ($TCA[$table]['ctrl']['requestUpdate'] && t3lib_div::inList($TCA[$table]['ctrl']['requestUpdate'],$field)))
00737                   && !$BE_USER->uc['noOnChangeAlertInTypeFields'])   {
00738                $alertMsgOnChange = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){ TBE_EDITOR_submitForm() };';
00739             } else {$alertMsgOnChange='';}
00740 
00741                // Render as a hidden field?
00742             if (in_array($field,$this->hiddenFieldListArr)) {
00743                $this->hiddenFieldAccum[]='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00744             } else { // Render as a normal field:
00745 
00746                   // If the field is NOT a palette field, then we might create an icon which links to a palette for the field, if one exists.
00747                if (!$PA['palette']) {
00748                   if ($PA['pal'] && $this->isPalettesCollapsed($table,$PA['pal']))  {
00749                      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);
00750                   } else {
00751                      $thePalIcon = '';
00752                      $palJSfunc = '';
00753                   }
00754                }
00755                   // onFocus attribute to add to the field:
00756                $PA['onFocus'] = ($palJSfunc && !$BE_USER->uc['dontShowPalettesOnFocusInAB']) ? ' onfocus="'.htmlspecialchars($palJSfunc).'"' : '';
00757 
00758                   // Find item
00759                $item='';
00760                $PA['label'] = $PA['altName'] ? $PA['altName'] : $PA['fieldConf']['label'];
00761                $PA['label'] = $this->sL($PA['label']);
00762                   // JavaScript code for event handlers:
00763                $PA['fieldChangeFunc']=array();
00764                $PA['fieldChangeFunc']['TBE_EDITOR_fieldChanged'] = "TBE_EDITOR_fieldChanged('".$table."','".$row['uid']."','".$field."','".$PA['itemFormElName']."');";
00765                $PA['fieldChangeFunc']['alert']=$alertMsgOnChange;
00766 
00767                   // Based on the type of the item, call a render function:
00768                $item = $this->getSingleField_SW($table,$field,$row,$PA);
00769 
00770                   // Add language + diff
00771                $item = $this->renderDefaultLanguageContent($table,$field,$row,$item);
00772                $item = $this->renderDefaultLanguageDiff($table,$field,$row,$item);
00773 
00774                   // If the record has been saved and the "linkTitleToSelf" is set, we make the field name into a link, which will load ONLY this field in alt_doc.php
00775                $PA['label'] = t3lib_div::deHSCentities(htmlspecialchars($PA['label']));
00776                if (t3lib_div::testInt($row['uid']) && $PA['fieldTSConfig']['linkTitleToSelf'])  {
00777                   $lTTS_url = $this->backPath.'alt_doc.php?edit['.$table.']['.$row['uid'].']=edit&columnsOnly='.$field.
00778                            ($PA['fieldTSConfig']['linkTitleToSelf.']['returnUrl']?'&returnUrl='.rawurlencode($this->thisReturnUrl()):'');
00779                   $PA['label'] = '<a href="'.htmlspecialchars($lTTS_url).'">'.$PA['label'].'</a>';
00780                }
00781 
00782                   // Create output value:
00783                if ($PA['fieldConf']['config']['form_type']=='user' && $PA['fieldConf']['config']['noTableWrapping']) {
00784                   $out = $item;
00785                } elseif ($PA['palette'])  {
00786                      // Array:
00787                   $out=array(
00788                      'NAME'=>$PA['label'],
00789                      'ID'=>$row['uid'],
00790                      'FIELD'=>$field,
00791                      'TABLE'=>$table,
00792                      'ITEM'=>$item,
00793                      'HELP_ICON' => $this->helpTextIcon($table,$field,1)
00794                   );
00795                   $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00796                } else {
00797                      // String:
00798                   $out=array(
00799                      'NAME'=>$PA['label'],
00800                      'ITEM'=>$item,
00801                      'TABLE'=>$table,
00802                      'ID'=>$row['uid'],
00803                      'HELP_ICON'=>$this->helpTextIcon($table,$field),
00804                      'HELP_TEXT'=>$this->helpText($table,$field),
00805                      'PAL_LINK_ICON'=>$thePalIcon,
00806                      'FIELD'=>$field
00807                   );
00808                   $out = $this->addUserTemplateMarkers($out,$table,$field,$row,$PA);
00809                      // String:
00810                   $out=$this->intoTemplate($out);
00811                }
00812             }
00813          } else $this->commentMessages[]=$this->prependFormFieldNames.'['.$table.']['.$row['uid'].']['.$field.']: Disabled by TSconfig';
00814       }
00815          // Return value (string or array)
00816       return $out;
00817    }

getSingleField_SW table,
field,
row,
&$  PA
 

Rendering a single item for the form.

Parameters:
string Table name of record
string Fieldname to render
array The record
array parameters array containing a lot of stuff. Value by Reference!
Returns:
string Returns the item as HTML code to insert private
See also:
getSingleField(), getSingleField_typeFlex_draw()

Definition at line 830 of file class.t3lib_tceforms.php.

References getSingleField_typeCheck(), getSingleField_typeFlex(), getSingleField_typeGroup(), getSingleField_typeInput(), getSingleField_typeNone(), getSingleField_typeRadio(), getSingleField_typeSelect(), getSingleField_typeText(), and table().

Referenced by getSingleField(), and getSingleField_typeFlex_sheetMenu().

00830                                                          {
00831       $PA['fieldConf']['config']['form_type'] = $PA['fieldConf']['config']['form_type'] ? $PA['fieldConf']['config']['form_type'] : $PA['fieldConf']['config']['type'];
00832 
00833       switch($PA['fieldConf']['config']['form_type']) {
00834          case 'input':
00835             $item = $this->getSingleField_typeInput($table,$field,$row,$PA);
00836          break;
00837          case 'text':
00838             $item = $this->getSingleField_typeText($table,$field,$row,$PA);
00839          break;
00840          case 'check':
00841             $item = $this->getSingleField_typeCheck($table,$field,$row,$PA);
00842          break;
00843          case 'radio':
00844             $item = $this->getSingleField_typeRadio($table,$field,$row,$PA);
00845          break;
00846          case 'select':
00847             $item = $this->getSingleField_typeSelect($table,$field,$row,$PA);
00848          break;
00849          case 'group':
00850             $item = $this->getSingleField_typeGroup($table,$field,$row,$PA);
00851          break;
00852          case 'none':
00853             $item = $this->getSingleField_typeNone($table,$field,$row,$PA);
00854          break;
00855          case 'user':
00856             $item = $this->getSingleField_typeUser($table,$field,$row,$PA);
00857          break;
00858          case 'flex':
00859             $item = $this->getSingleField_typeFlex($table,$field,$row,$PA);
00860          break;
00861          default:
00862             $item = $this->getSingleField_typeUnknown($table,$field,$row,$PA);
00863          break;
00864       }
00865 
00866       return $item;
00867    }

getSingleField_typeCheck table,
field,
row,
&$  PA
 

Generation of TCEform elements of the type "check" This will render a check-box OR an array of checkboxes.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Definition at line 1054 of file class.t3lib_tceforms.php.

References table().

Referenced by getSingleField_SW().

01054                                                                {
01055       $config = $PA['fieldConf']['config'];
01056 
01057          // Traversing the array of items:
01058       $selItems = $this->initItemArray($PA['fieldConf']);
01059       if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01060 
01061       if (!count($selItems))  {
01062          $selItems[]=array('','');
01063       }
01064       $thisValue = intval($PA['itemFormElValue']);
01065 
01066       $cols = intval($config['cols']);
01067       if ($cols > 1) {
01068          $item.= '<table border="0" cellspacing="0" cellpadding="0" class="typo3-TCEforms-checkboxArray">';
01069          for ($c=0;$c<count($selItems);$c++) {
01070             $p = $selItems[$c];
01071             if(!($c%$cols))   { $item.='<tr>'; }
01072             $cBP = $this->checkBoxParams($PA['itemFormElName'],$thisValue,$c,count($selItems),implode('',$PA['fieldChangeFunc']));
01073             $cBName = $PA['itemFormElName'].'_'.$c;
01074             $item.= '<td nowrap="nowrap">'.
01075                   '<input type="checkbox"'.$this->insertDefStyle('check').' value="1" name="'.$cBName.'"'.$cBP.' />'.
01076                   $this->wrapLabels(htmlspecialchars($p[0]).'&nbsp;').
01077                   '</td>';
01078             if(($c%$cols)+1==$cols) {$item.='</tr>';}
01079          }
01080          if ($c%$cols)  {
01081             $rest=$cols-($c%$cols);
01082             for ($c=0;$c<$rest;$c++) {
01083                $item.= '<td></td>';
01084             }
01085             if ($c>0)   { $item.= '</tr>'; }
01086          }
01087          $item.= '</table>';
01088       } else {
01089          for ($c=0;$c<count($selItems);$c++) {
01090             $p = $selItems[$c];
01091             $cBP = $this->checkBoxParams($PA['itemFormElName'],$thisValue,$c,count($selItems),implode('',$PA['fieldChangeFunc']));
01092             $cBName = $PA['itemFormElName'].'_'.$c;
01093             $item.= ($c>0?'<br />':'').
01094                   '<input type="checkbox"'.$this->insertDefStyle('check').' value="1" name="'.$cBName.'"'.$cBP.$PA['onFocus'].' />'.
01095                   htmlspecialchars($p[0]);
01096          }
01097       }
01098       $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($thisValue).'" />';
01099 
01100       return $item;
01101    }

getSingleField_typeFlex table,
field,
row,
&$  PA
 

Handler for Flex Forms.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Definition at line 1856 of file class.t3lib_tceforms.php.

References $tRows, getDynTabMenu(), t3lib_BEfunc::getFlexFormDS(), getSingleField_typeFlex_langMenu(), and table().

Referenced by getSingleField_SW().

01856                                                                {
01857 
01858          // Data Structure:
01859       $dataStructArray = t3lib_BEfunc::getFlexFormDS($PA['fieldConf']['config'],$row,$table);
01860 #debug($dataStructArray);
01861 
01862          // Get data structure:
01863       if (is_array($dataStructArray))  {
01864 #debug(array(str_replace(' ',chr(160),$PA['itemFormElValue'])));
01865 
01866             // Get data:
01867          $xmlData = $PA['itemFormElValue'];
01868          $xmlHeaderAttributes = t3lib_div::xmlGetHeaderAttribs($xmlData);
01869          $storeInCharset = strtolower($xmlHeaderAttributes['encoding']);
01870          if ($storeInCharset) {
01871             $currentCharset=$GLOBALS['LANG']->charSet;
01872             $xmlData = $GLOBALS['LANG']->csConvObj->conv($xmlData,$storeInCharset,$currentCharset,1);
01873          }
01874          $editData=t3lib_div::xml2array($xmlData);
01875          if (!is_array($editData))  {  // Must be XML parsing error...
01876 #debug(array($editData,$xmlData));
01877             $editData=array();
01878          }
01879 
01880             // Find the data structure if sheets are found:
01881          $sheet = $editData['meta']['currentSheetId'] ? $editData['meta']['currentSheetId'] : 'sDEF'; // Sheet to display
01882 #        $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'[meta][currentSheetId]" value="'.$sheet.'">';
01883 
01884             // Create sheet menu:
01885          if (is_array($dataStructArray['sheets'])) {
01886             #$item.=$this->getSingleField_typeFlex_sheetMenu($dataStructArray['sheets'], $PA['itemFormElName'].'[meta][currentSheetId]', $sheet).'<br />';
01887          }
01888 #debug($editData);
01889 
01890             // Create language menu:
01891          $langChildren = $dataStructArray['meta']['langChildren'] ? 1 : 0;
01892          $langDisabled = $dataStructArray['meta']['langDisable'] ? 1 : 0;
01893 
01894          $languages = $this->getAvailableLanguages();
01895 
01896          if (!is_array($editData['meta']['currentLangId']) || !count($editData['meta']['currentLangId']))   {
01897             $editData['meta']['currentLangId']=array('DEF');
01898          }
01899          $editData['meta']['currentLangId'] = array_unique($editData['meta']['currentLangId']);
01900 
01901          if (!$langDisabled && count($languages) > 1) {
01902             $item.=$this->getSingleField_typeFlex_langMenu($languages, $PA['itemFormElName'].'[meta][currentLangId]', $editData['meta']['currentLangId']).'<br />';
01903          }
01904 
01905          if ($langChildren || $langDisabled) {
01906             $rotateLang = array('DEF');
01907          } else {
01908             $rotateLang = $editData['meta']['currentLangId'];
01909          }
01910 
01911             // Tabs sheets
01912          if (is_array($dataStructArray['sheets'])) {
01913             $tabsToTraverse = array_keys($dataStructArray['sheets']);
01914          } else {
01915             $tabsToTraverse = array($sheet);
01916          }
01917 
01918          foreach($rotateLang as $lKey) {
01919             if (!$langChildren && !$langDisabled)  {
01920                $item.= '<b>'.$lKey.':</b>';
01921             }
01922 
01923             $tabParts = array();
01924             foreach($tabsToTraverse as $sheet)  {
01925                $sheetCfg = $dataStructArray['sheets'][$sheet];
01926                list ($dataStruct, $sheet) = t3lib_div::resolveSheetDefInDS($dataStructArray,$sheet);
01927 
01928                   // Render sheet:
01929                if (is_array($dataStruct['ROOT']) && is_array($dataStruct['ROOT']['el']))     {
01930                   $cmdData = t3lib_div::_GP('flexFormsCmdData');
01931                   $lang = 'l'.$lKey;   // Default language, other options are "lUK" or whatever country code (independant of system!!!)
01932                   $PA['_valLang'] = $langChildren && !$langDisabled ? $editData['meta']['currentLangId'] : 'DEF'; // Default language, other options are "lUK" or whatever country code (independant of system!!!)
01933 
01934                      // Render flexform:
01935                   $tRows = $this->getSingleField_typeFlex_draw(
01936                            $dataStruct['ROOT']['el'],
01937                            $editData['data'][$sheet][$lang],
01938                            $cmdData['data'][$sheet][$lang],
01939                            $table,
01940                            $field,
01941                            $row,
01942                            $PA,
01943                            '[data]['.$sheet.']['.$lang.']'
01944                         );
01945                   $sheetContent= '<table border="0" cellpadding="1" cellspacing="1" class="typo3-TCEforms-flexForm">'.implode('',$tRows).'</table>';
01946 
01947          #        $item = '<div style=" position:absolute;">'.$item.'</div>';
01948                   //visibility:hidden;
01949                } else $sheetContent='Data Structure ERROR: No ROOT element found for sheet "'.$sheet.'".';
01950 
01951                   // Add to tab:
01952                $tabParts[] = array(
01953                   'label' => ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sheet),
01954                   'description' => ($sheetCfg['ROOT']['TCEforms']['sheetDescription'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetDescription']) : ''),
01955                   'linkTitle' => ($sheetCfg['ROOT']['TCEforms']['sheetShortDescr'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetShortDescr']) : ''),
01956                   'content' => $sheetContent
01957                );
01958             }
01959 
01960             if (is_array($dataStructArray['sheets'])) {
01961                $item.= $this->getDynTabMenu($tabParts,'TCEFORMS:flexform:'.$PA['itemFormElName']);
01962             } else {
01963                $item.= $sheetContent;
01964             }
01965          }
01966       } else $item='Data Structure ERROR: '.$dataStructArray;
01967 
01968       return $item;
01969    }

getSingleField_typeFlex_langMenu languages,
elName,
selectedLanguage,
multi = 1
 

Creates the language menu for FlexForms:.

Parameters:
[type] $languages: ...
[type] $elName: ...
[type] $selectedLanguage: ...
[type] $multi: ...
Returns:
string HTML for menu

Definition at line 1980 of file class.t3lib_tceforms.php.

Referenced by getSingleField_typeFlex().

01980                                                                                              {
01981       $opt=array();
01982       foreach($languages as $lArr)  {
01983          $opt[]='<option value="'.htmlspecialchars($lArr['ISOcode']).'"'.(in_array($lArr['ISOcode'],$selectedLanguage)?' selected="selected"':'').'>'.htmlspecialchars($lArr['title']).'</option>';
01984       }
01985 
01986       $output = '<select name="'.$elName.'[]"'.($multi ? ' multiple="multiple" size="'.count($languages).'"' : '').'>'.implode('',$opt).'</select>';
01987 
01988       return $output;
01989    }

getSingleField_typeFlex_sheetMenu sArr,
elName,
sheetKey
 

Creates the menu for selection of the sheets:.

Parameters:
array Sheet array for which to render the menu
string Form element name of the field containing the sheet pointer
string Current sheet key
Returns:
string HTML for menu

[Describe function...]

Parameters:
[type] $dataStruct: ...
[type] $editData: ...
[type] $cmdData: ...
[type] $table: ...
[type] $field: ...
[type] $row: ...
[type] $PA: ...
[type] $formPrefix: ...
[type] $level: ...
[type] $tRows: ...
Returns:
[type] ...

Handler for unknown types.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

User defined field type

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Calculate and return the current "types" pointer value for a record

Parameters:
string The table name. MUST be in $TCA
array The row from the table, should contain at least the "type" field, if applicable.
Returns:
string Return the "type" value for this record, ready to pick a "types" configuration from the $TCA array.

Used to adhoc-rearrange the field order normally set in the [types][showitem] list

Parameters:
array A [types][showitem] list of fields, exploded by ","
Returns:
array Returns rearranged version (keys are changed around as well.)
See also:
getMainFields()

Producing an array of field names NOT to display in the form, based on settings from subtype_value_field, bitmask_excludelist_bits etc. Notice, this list is in NO way related to the "excludeField" flag

Parameters:
string Table name, MUST be in $TCA
array A record from table.
string A "type" pointer value, probably the one calculated based on the record array.
Returns:
array Array with fieldnames as values. The fieldnames are those which should NOT be displayed "anyways"
See also:
getMainFields()

Finds possible field to add to the form, based on subtype fields.

Parameters:
string Table name, MUST be in $TCA
array A record from table.
string A "type" pointer value, probably the one calculated based on the record array.
Returns:
array An array containing two values: 1) Another array containing fieldnames to add and 2) the subtype value field.
See also:
getMainFields()

Merges the current [types][showitem] array with the array of fields to add for the current subtype field of the "type" value.

Parameters:
array A [types][showitem] list of fields, exploded by ","
array The output from getFieldsToAdd()
Returns:
array Return the modified $fields array.
See also:
getMainFields(),getFieldsToAdd()

Returns TSconfig for table/row Multiple requests to this function will return cached content so there is no performance loss in calling this many times since the information is looked up only once.

Parameters:
string The table name
array The table row (Should at least contain the "uid" value, even if "NEW..." string. The "pid" field is important as well, and negative values will be intepreted as pointing to a record from the same table.)
string Optionally you can specify the field name as well. In that case the TSconfig for the field is returned.
Returns:
mixed The TSconfig values (probably in an array)
See also:
t3lib_BEfunc::getTCEFORM_TSconfig()

Returns the "special" configuration (from the "types" "showitem" list) for a fieldname based on input table/record (Not used anywhere...?)

Parameters:
string The table name
array The table row (Should at least contain the "uid" value, even if "NEW..." string. The "pid" field is important as well, and negative values will be intepreted as pointing to a record from the same table.)
string Specify the field name.
Returns:
array
See also:
getSpecConfFromString(), t3lib_BEfunc::getTCAtypes()

Returns the "special" configuration of an "extra" string (non-parsed)

Parameters:
string The "Part 4" of the fields configuration in "types" "showitem" lists.
string The ['defaultExtras'] value from field configuration
Returns:
array An array with the special options in.
See also:
getSpecConfForField(), t3lib_BEfunc::getSpecConfParts()

Will register data from original language records if the current record is a translation of another. The original data is shown with the edited record in the form. The information also includes possibly diff-views of what changed in the original record. Function called from outside (see alt_doc.php + quick edit) before rendering a form for a record

Parameters:
string Table name of the record being edited
array Record array of the record being edited
Returns:
void

Renders the display of default language record content around current field. Will render content if any is found in the internal array, $this->defaultLanguageData, depending on registerDefaultLanguageData() being called prior to this.

Parameters:
string Table name of the record being edited
string Field name represented by $item
array Record array of the record being edited
string HTML of the form field. This is what we add the content to.
Returns:
string Item string returned again, possibly with the original value added to.
See also:
getSingleField(), registerDefaultLanguageData()

Renders the diff-view of default language record content compared with what the record was originally translated from. Will render content if any is found in the internal array, $this->defaultLanguageData, depending on registerDefaultLanguageData() being called prior to this.

Parameters:
string Table name of the record being edited
string Field name represented by $item
array Record array of the record being edited
string HTML of the form field. This is what we add the content to.
Returns:
string Item string returned again, possibly with the original value added to.
See also:
getSingleField(), registerDefaultLanguageData()

Prints the selector box form-field for the db/file/select elements (multiple)

Parameters:
string Form element name
string Mode "db", "file" (internal_type for the "group" type) OR blank (then for the "select" type)
string Commalist of "allowed"
array The array of items. For "select" and "group"/"file" this is just a set of value. For "db" its an array of arrays with table/uid pairs.
string Alternative selector box.
array An array of additional parameters, eg: "size", "info", "headers" (array with "selector" and "items"), "noBrowser", "thumbnails"
string On focus attribute string
Returns:
string The form fields for the selection.

Returns array of elements from clipboard to insert into GROUP element box.

Parameters:
string Allowed elements, Eg "pages,tt_content", "gif,jpg,jpeg,png"
string Mode of relations: "db" or "file"
Returns:
array Array of elements in values (keys are insignificant), if none found, empty array.

Wraps the icon of a relation item (database record or file) in a link opening the context menu for the item. Icons will be wrapped only if $this->enableClickMenu is set. This must be done only if a global SOBE object exists and if the necessary JavaScript for displaying the context menus has been added to the page header.

Parameters:
string The icon HTML to wrap
string Table name (eg. "pages" or "tt_content") OR the absolute path to the file
integer The uid of the record OR if file, just blank value.
Returns:
string HTML

Rendering wizards for form fields.

Parameters:
array Array with the real item in the first value, and an alternative item in the second value.
array The "wizard" key from the config array for the field (from TCA)
string Table name
array The record array
string The field name
array Additional configuration array. (passed by reference!)
string The field name
array Special configuration if available.
boolean Whether the RTE could have been loaded.
Returns:
string The new item value.

Get icon (for example for selector boxes)

Parameters:
string Icon reference
Returns:
array Array with two values; the icon file reference (relative to PATH_typo3 minus backPath), the icon file information array (getimagesize())

Creates style attribute content for option tags in a selector box, primarily setting it up to show the icon of an element as background image (works in mozilla)

Parameters:
string Icon string for option item
Returns:
string Style attribute content, if any

Extracting values from a value/label list (as made by transferData class)

Parameters:
string Value string where values are comma separated, intermixed with labels and rawurlencoded (this is what is delivered to TCEforms normally!)
array Values in an array
Returns:
[type] ...

Wraps a string with a link to the palette.

Parameters:
string The string to wrap in an A-tag
string The table name for which to open the palette.
array The record array
integer The palette pointer.
boolean Determines the output type of the function.
Returns:
mixed If $retFunc is set, then returns an array with icon code and palette JavaScript function. Otherwise just the icon code.

Creates checkbox parameters

Parameters:
string Form element name
integer The value of the checkbox (representing checkboxes with the bits)
integer Checkbox # (0-9?)
integer Total number of checkboxes in the array.
string Additional JavaScript for the onclick handler.
Returns:
string The onclick attribute + possibly the checked-option set.

Returns element reference for form element name

Parameters:
string Form element name
Returns:
string Form element reference (JS)

Returns the "No title" string if the input $str is empty.

Parameters:
string The string which - if empty - will become the no-title string.
array Array with wrappin parts for the no-title output (in keys [0]/[1])
Returns:
string

Returns 'this.blur();' string, if supported.

Returns:
string If the current browser supports styles, the string 'this.blur();' is returned.

Returns the "returnUrl" of the form. Can be set externally or will be taken from "t3lib_div::linkThisScript()"

Returns:
string Return URL of current script

Returns the form field for a single HIDDEN field. (Not used anywhere...?)

Parameters:
string Table name
string Field name
array The row
Returns:
string The hidden-field <input> tag.

Returns parameters to set the width for a <input>/<textarea>-element

Parameters:
integer The abstract size value (1-48)
boolean If this is for a text area.
Returns:
string Either a "style" attribute string or "cols"/"size" attribute string.

Returns parameters to set with for a textarea field

Parameters:
integer The abstract width (1-48)
string Empty or "off" (text wrapping in the field or not)
Returns:
string The "cols" attribute string (or style from formWidth())
See also:
formWidth()

Get style CSS values for the current field type.

Parameters:
string Field type (eg. "check", "radio", "select")
Returns:
string CSS attributes
See also:
formElStyleClassValue()

Get class attribute value for the current field type.

Parameters:
string Field type (eg. "check", "radio", "select")
Returns:
string CSS attributes
See also:
formElStyleClassValue()

Get style CSS values for the current field type.

Parameters:
string Field type (eg. "check", "radio", "select")
boolean If set, will return value only if prefixed with CLASS, otherwise must not be prefixed "CLASS"
Returns:
string CSS attributes

Return default "style" / "class" attribute line.

Parameters:
string Field type (eg. "check", "radio", "select")
Returns:
string CSS attributes

Create tab menu

Parameters:
array Parts for the tab menu, fed to template::getDynTabMenu()
string ID string for the tab menu
Returns:
string HTML for the menu

Initialize item array (for checkbox, selectorbox, radio buttons) Will resolve the label value.

Parameters:
array The "columns" array for the field (from TCA)
Returns:
array An array of arrays with three elements; label, value, icon

Merges items into an item-array

Parameters:
array The existing item array
array An array of items to add. NOTICE: The keys are mapped to values, and the values and mapped to be labels. No possibility of adding an icon.
Returns:
array The updated $item array

Perform user processing of the items arrays of checkboxes, selectorboxes and radio buttons.

Parameters:
array The array of items (label,value,icon)
array The "itemsProcFunc." from fieldTSconfig of the field.
array The config array for the field.
string Table name
array Record row
string Field name
Returns:
array The modified $items array

Add selector box items of more exotic kinds.

Parameters:
array The array of items (label,value,icon)
array The "columns" array for the field (from TCA)
array TSconfig for the table/row
string The fieldname
Returns:
array The $items array modified.

Creates value/label pair for a backend module (main and sub)

Parameters:
string The module key
Returns:
string The rawurlencoded 2-part string to transfer to interface private
See also:
addSelectOptionsToItemArray()

Adds records from a foreign table (for selector boxes)

Parameters:
array The array of items (label,value,icon)
array The 'columns' array for the field (from TCA)
array TSconfig for the table/row
string The fieldname
boolean If set, then we are fetching the 'neg_' foreign tables.
Returns:
array The $items array modified.
See also:
addSelectOptionsToItemArray(), t3lib_BEfunc::exec_foreign_table_where_query()

Sets the design to the backend design. Backend

Returns:
void

This inserts the content of $inArr into the field-template

Parameters:
array Array with key/value pairs to insert in the template.
string Alternative template to use instead of the default.
Returns:
string

Overwrite this function in own extended class to add own markers for output

Parameters:
array Array with key/value pairs to insert in the template.
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
array marker array for template output
See also:
function intoTemplate()

Wrapping labels Currently not implemented - just returns input value.

Parameters:
string Input string.
Returns:
string Output string.

Wraps all the table rows into a single table. Used externally from scripts like alt_doc.php and db_layout.php (which uses TCEforms...)

Parameters:
string Code to output between table-parts; table rows
array The record
string The table name
Returns:
string

This replaces markers in the total wrap

Parameters:
array An array of template parts containing some markers.
array The record
string The table name
Returns:
string

Wraps an element in the $out_array with the template row for a "section" ($this->sectionWrap)

Parameters:
array The array with form elements stored in (passed by reference and changed!)
integer The pointer to the entry in the $out_array (passed by reference and incremented!)
Returns:
void

Replaces colorscheme markers in the template string

Parameters:
string Template string with markers to be substituted.
Returns:
string

Returns divider. Currently not implemented and returns only blank value.

Returns:
string

Creates HTML output for a palette

Parameters:
array The palette array to print
Returns:
string HTML output

Returns help-text ICON if configured for.

Parameters:
string The table name
string The field name
boolean Force the return of the help-text icon.
Returns:
string HTML, -tag with

Returns help text DESCRIPTION, if configured for.

Parameters:
string The table name
string The field name
Returns:
string

Setting the current color scheme ($this->colorScheme) based on $this->defColorScheme plus input string.

Parameters:
string A color scheme string.
Returns:
void

Reset color schemes.

Returns:
void

Store current color scheme

Returns:
void

Restore the saved color scheme

Returns:
void

JavaScript code added BEFORE the form is drawn:

Returns:
string A <script></script> section with JavaScript.

JavaScript code used for input-field evaluation.

Example use:

$msg.='Distribution time (hh:mm dd-mm-yy):<br /><input type="text" name="send_mail_datetime_hr" onchange="typo3FormFieldGet(\'send_mail_datetime\', \'datetime\', \'\', 0,0);"'.$GLOBALS['TBE_TEMPLATE']->formWidth(20).' /><input type="hidden" value="'.time().'" name="send_mail_datetime" /><br />'; $this->extJSCODE.='typo3FormFieldSet("send_mail_datetime", "datetime", "", 0,0);';

... and then include the result of this function after the form

Parameters:
string The identification of the form on the page.
Returns:
string A <script></script> section with JavaScript.

Checks if the form can be submitted according to any possible restrains like required values, item numbers etc. Returns true if the form can be submitted, otherwise false (and might issue an alert message, if "sendAlert" is 1) If "sendAlert" is false, no error message will be shown upon false return value (if "1" then it will). If "sendAlert" is "-1" then the function will ALWAYS return true regardless of constraints (except if login has expired) - this is used in the case where a form field change requests a form update and where it is accepted that constraints are not observed (form layout might change so other fields are shown...)

Used to connect the db/file browser with this document and the formfields on it!

Parameters:
string Form object reference (including "document.")
Returns:
string JavaScript functions/code (NOT contained in a <script>-element)

Prints necessary JavaScript for TCEforms (after the form HTML).

Returns:
void

Returns necessary JavaScript for the top

Returns:
void

Gets default record. Maybe not used anymore. FE-editor?

Parameters:
string Database Tablename
integer PID value (positive / negative)
Returns:
array "default" row.

Return record path (visually formatted, using t3lib_BEfunc::getRecordPath() )

Parameters:
string Table name
array Record array
Returns:
string The record path.
See also:
t3lib_BEfunc::getRecordPath()

Returns the select-page read-access SQL clause. Returns cached string, so you can call this function as much as you like without performance loss.

Returns:
string

Fetches language label for key

Parameters:
string Language label reference, eg. 'LLL:EXT:lang/locallang_core.php:labels.blablabla'
Returns:
string The value of the label, fetched for the current backend language.

Returns language label from locallang_core.php Labels must be prefixed with either "l_" or "m_". The prefix "l_" maps to the prefix "labels." inside locallang_core.php The prefix "m_" maps to the prefix "mess." inside locallang_core.php

Parameters:
string The label key
Returns:
string The value of the label, fetched for the current backend language.

Returns true, if the palette, $palette, is collapsed (not shown, but found in top-frame) for the table.

Parameters:
string The table name
integer The palette pointer/number
Returns:
boolean

Returns true, if the evaluation of the required-field code is OK.

Parameters:
string The required-field code
array The record to evaluate
Returns:
boolean

Return TSCpid (cached) Using t3lib_BEfunc::getTSCpid()

Parameters:
string Tablename
string UID value
string PID value
Returns:
integer Returns the REAL pid of the record, if possible. If both $uid and $pid is strings, then pid=-1 is returned as an error indication.
See also:
t3lib_BEfunc::getTSCpid()

Returns true if descriptions should be loaded always

Parameters:
string Table for which to check
Returns:
boolean

Returns an array of available languages (to use for FlexForms)

Parameters:
boolean If set, only languages which are paired with a static_info_table / static_language record will be returned.
boolean If set, an array entry for a default language is set.
Returns:
array

Definition at line 1999 of file class.t3lib_tceforms.php.

References $content, $key, $out, $pid, $TCA, $tRows, t3lib_BEfunc::exec_foreign_table_where_query(), t3lib_BEfunc::fixVersioningPid(), formWidth(), formWidthText(), getDynTabMenu(), t3lib_BEfunc::getExcludeFields(), t3lib_BEfunc::getExplicitAuthFieldValues(), t3lib_BEfunc::getProcessedValue(), t3lib_BEfunc::getRecord(), t3lib_BEfunc::getRecordPath(), getSingleField_SW(), getSingleField_typeNone_render(), t3lib_BEfunc::getSpecConfParts(), t3lib_BEfunc::getTCAtypes(), getTCEFORM_TSconfig(), getTSconfig_pidValue(), getTSCpid(), header(), icons(), t3lib_extMgm::isLoaded(), PATH_site, PATH_t3lib, section(), table(), and t3lib_BEfunc::titleAltAttrib().

01999                                                                         {
02000 
02001       $tCells =array();
02002       $pct = round(100/count($sArr));
02003       foreach($sArr as $sKey => $sheetCfg)   {
02004          $onClick = 'if (confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_onChangeAlert')).') && TBE_EDITOR_checkSubmit(-1)){'.$this->elName($elName).".value='".$sKey."'; TBE_EDITOR_submitForm()};";
02005 
02006          $tCells[]='<td width="'.$pct.'%" style="'.($sKey==$sheetKey ? 'background-color: #9999cc; font-weight: bold;' : 'background-color: #aaaaaa;').' cursor: hand;" onclick="'.htmlspecialchars($onClick).'" align="center">'.
02007                ($sheetCfg['ROOT']['TCEforms']['sheetTitle'] ? $this->sL($sheetCfg['ROOT']['TCEforms']['sheetTitle']) : $sKey).
02008                '</td>';
02009       }
02010 
02011       return '<table border="0" cellpadding="0" cellspacing="2" class="typo3-TCEforms-flexForm-sheetMenu"><tr>'.implode('',$tCells).'</tr></table>';
02012    }
02013 
02029    function getSingleField_typeFlex_draw($dataStruct,$editData,$cmdData,$table,$field,$row,&$PA,$formPrefix='',$level=0,$tRows=array())   {
02030 
02031          // Data Structure array must be ... and array of course...
02032       if (is_array($dataStruct)) {
02033          foreach($dataStruct as $key => $value) {
02034             if (is_array($value))   {  // The value of each entry must be an array.
02035 
02036                   // ********************
02037                   // Making the row:
02038                   // ********************
02039                $rowCells=array();
02040 
02041                   // Icon:
02042                $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>';;
02043 
02044                $rowCells['formEl']='';
02045                if ($value['type']=='array')  {
02046                   if ($value['section'])  {
02047                      if (is_array($value['el']))   {
02048                         $opt=array();
02049                         $opt[]='<option value=""></option>';
02050                         foreach($value['el'] as $kk => $vv) {
02051                            $opt[]='<option value="'.$kk.'">'.htmlspecialchars('NEW "'.$value['el'][$kk]['tx_templavoila']['title'].'"').'</option>';
02052                         }
02053                         $rowCells['formEl']='<select name="flexFormsCmdData'.$formPrefix.'['.$key.'][value]">'.implode('',$opt).'</select>';
02054                      }
02055 
02056                         // Put row together
02057                      $tRows[]='<tr class="bgColor2">
02058                         <td nowrap="nowrap" valign="top">'.$rowCells['title'].'</td>
02059                         <td>'.$rowCells['formEl'].'</td>
02060                      </tr>';
02061 
02062                      $cc=0;
02063                      if (is_array($editData[$key]['el']))   {
02064                         foreach($editData[$key]['el'] as $k3 => $v3) {
02065                            $cc=$k3;
02066                            $theType = key($v3);
02067                            $theDat = $v3[$theType];
02068                            $newSectionEl = $value['el'][$theType];
02069                            if (is_array($newSectionEl))  {
02070                               $tRows = $this->getSingleField_typeFlex_draw(
02071                                  array($theType => $newSectionEl),
02072                                  array($theType => $theDat),
02073                                  $cmdData[$key]['el'][$cc],
02074                                  $table,
02075                                  $field,
02076                                  $row,
02077                                  $PA,
02078                                  $formPrefix.'['.$key.'][el]['.$cc.']',
02079                                  $level+1,
02080                                  $tRows
02081                               );
02082                            }
02083                         }
02084                      }
02085 
02086 
02087 
02088                         // New form?
02089                      if ($cmdData[$key]['value'])  {
02090                         $newSectionEl = $value['el'][$cmdData[$key]['value']];
02091                         if (is_array($newSectionEl))  {
02092                            $tRows = $this->getSingleField_typeFlex_draw(
02093                               array($cmdData[$key]['value'] => $newSectionEl),
02094                               array(),
02095                               array(),
02096                               $table,
02097                               $field,
02098                               $row,
02099                               $PA,
02100                               $formPrefix.'['.$key.'][el]['.($cc+1).']',
02101                               $level+1,
02102                               $tRows
02103                            );
02104                         }
02105                      }
02106                   } else {
02107                         // Put row together
02108                      $tRows[]='<tr class="bgColor2">
02109                         <td nowrap="nowrap" valign="top">'.
02110                         '<input name="_DELETE_FLEX_FORM'.$PA['itemFormElName'].$formPrefix.'" type="checkbox" value="1" /><img src="'.$this->backPath.'gfx/garbage.gif" border="0" alt="" />'.
02111                         $rowCells['title'].'</td>
02112                         <td>'.$rowCells['formEl'].'</td>
02113                      </tr>';
02114 
02115                      $tRows = $this->getSingleField_typeFlex_draw(
02116                         $value['el'],
02117                         $editData[$key]['el'],
02118                         $cmdData[$key]['el'],
02119                         $table,
02120                         $field,
02121                         $row,
02122                         $PA,
02123                         $formPrefix.'['.$key.'][el]',
02124                         $level+1,
02125                         $tRows
02126                      );
02127                   }
02128 
02129                } elseif (is_array($value['TCEforms']['config'])) {   // Rendering a single form element:
02130 
02131                   if (is_array($PA['_valLang']))   {
02132                      $rotateLang = $PA['_valLang'];
02133                   } else {
02134                      $rotateLang = array($PA['_valLang']);
02135                   }
02136 
02137                   foreach($rotateLang as $vDEFkey) {
02138                      $vDEFkey = 'v'.$vDEFkey;
02139 
02140                      $fakePA=array();
02141                      $fakePA['fieldConf']=array(
02142                         'label' => $this->sL($value['TCEforms']['label']),
02143                         'config' => $value['TCEforms']['config'],
02144                         'defaultExtras' => $value['TCEforms']['defaultExtras'],
02145                         'displayCond' => $value['TCEforms']['displayCond'],   // Haven't tested this...
02146                      );
02147                      $fakePA['fieldChangeFunc']=$PA['fieldChangeFunc'];
02148                      $fakePA['onFocus']=$PA['onFocus'];
02149                      $fakePA['label']==$PA['label'];
02150 
02151                      $fakePA['itemFormElName']=$PA['itemFormElName'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02152                      $fakePA['itemFormElName_file']=$PA['itemFormElName_file'].$formPrefix.'['.$key.']['.$vDEFkey.']';
02153                      $fakePA['itemFormElValue']=$editData[$key][$vDEFkey];
02154 
02155                      $rowCells['formEl']= $this->getSingleField_SW($table,$field,$row,$fakePA);
02156                      $rowCells['title']= htmlspecialchars($fakePA['fieldConf']['label']);
02157 
02158                         // Put row together
02159                      $tRows[]='<tr>
02160                         <td nowrap="nowrap" valign="top" class="bgColor5">'.$rowCells['title'].($vDEFkey=='vDEF' ? '' : ' ('.$vDEFkey.')').'</td>
02161                         <td class="bgColor4">'.$rowCells['formEl'].'</td>
02162                      </tr>';
02163                   }
02164                }
02165             }
02166          }
02167       }
02168 
02169       return $tRows;
02170    }
02171 
02181    function getSingleField_typeUnknown($table,$field,$row,&$PA)   {
02182       $item='Unknown type: '.$PA['fieldConf']['config']['form_type'].'<br />';
02183 
02184       return $item;
02185    }
02186 
02196    function getSingleField_typeUser($table,$field,$row,&$PA)   {
02197       $PA['table']=$table;
02198       $PA['field']=$field;
02199       $PA['row']=$row;
02200 
02201       $PA['pObj']=&$this;
02202 
02203       return t3lib_div::callUserFunction($PA['fieldConf']['config']['userFunc'],$PA,$this);
02204    }
02205 
02206 
02207 
02208 
02209 
02210 
02211 
02212 
02213 
02214 
02215 
02216 
02217    /************************************************************
02218     *
02219     * "Configuration" fetching/processing functions
02220     *
02221     ************************************************************/
02222 
02230    function getRTypeNum($table,$row)   {
02231       global $TCA;
02232          // If there is a "type" field configured...
02233       if ($TCA[$table]['ctrl']['type'])   {
02234          $typeFieldName = $TCA[$table]['ctrl']['type'];
02235          $typeNum=$row[$typeFieldName];   // Get value of the row from the record which contains the type value.
02236          if (!strcmp($typeNum,''))  $typeNum=0;       // If that value is an empty string, set it to "0" (zero)
02237       } else {
02238          $typeNum = 0;  // If no "type" field, then set to "0" (zero)
02239       }
02240 
02241       $typeNum = (string)$typeNum;     // Force to string. Necessary for eg '-1' to be recognized as a type value.
02242       if (!$TCA[$table]['types'][$typeNum])  {  // However, if the type "0" is not found in the "types" array, then default to "1" (for historical reasons)
02243          $typeNum = 1;
02244       }
02245 
02246       return $typeNum;
02247    }
02248 
02256    function rearrange($fields)   {
02257       $fO = array_flip(t3lib_div::trimExplode(',',$this->fieldOrder,1));
02258       reset($fields);
02259       $newFields=array();
02260       while(list($cc,$content)=each($fields))   {
02261          $cP = t3lib_div::trimExplode(';',$content);
02262          if (isset($fO[$cP[0]])) {
02263             $newFields[$fO[$cP[0]]] = $content;
02264             unset($fields[$cc]);
02265          }
02266       }
02267       ksort($newFields);
02268       $fields=array_merge($newFields,$fields);     // Candidate for t3lib_div::array_merge() if integer-keys will some day make trouble...
02269       return $fields;
02270    }
02271 
02282    function getExcludeElements($table,$row,$typeNum)  {
02283       global $TCA;
02284 
02285          // Init:
02286       $excludeElements=array();
02287 
02288          // If a subtype field is defined for the type
02289       if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02290          $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02291          if (trim($TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]]))  {
02292             $excludeElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_excludelist'][$row[$sTfield]],1);
02293          }
02294       }
02295 
02296          // If a bitmask-value field has been configured, then find possible fields to exclude based on that:
02297       if ($TCA[$table]['types'][$typeNum]['bitmask_value_field']) {
02298          $sTfield = $TCA[$table]['types'][$typeNum]['bitmask_value_field'];
02299          $sTValue = t3lib_div::intInRange($row[$sTfield],0);
02300          if (is_array($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits'])) {
02301             reset($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits']);
02302             while(list($bitKey,$eList)=each($TCA[$table]['types'][$typeNum]['bitmask_excludelist_bits']))   {
02303                $bit=substr($bitKey,1);
02304                if (t3lib_div::testInt($bit)) {
02305                   $bit = t3lib_div::intInRange($bit,0,30);
02306                   if (
02307                         (substr($bitKey,0,1)=='-' && !($sTValue&pow(2,$bit))) ||
02308                         (substr($bitKey,0,1)=='+' && ($sTValue&pow(2,$bit)))
02309                      )  {
02310                      $excludeElements = array_merge($excludeElements,t3lib_div::trimExplode(',',$eList,1));
02311                   }
02312                }
02313             }
02314          }
02315       }
02316 
02317          // Return the array of elements:
02318       return $excludeElements;
02319    }
02320 
02330    function getFieldsToAdd($table,$row,$typeNum)   {
02331       global $TCA;
02332 
02333          // Init:
02334       $addElements=array();
02335 
02336          // If a subtype field is defined for the type
02337       if ($TCA[$table]['types'][$typeNum]['subtype_value_field']) {
02338          $sTfield = $TCA[$table]['types'][$typeNum]['subtype_value_field'];
02339          if (trim($TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]]))   {
02340             $addElements=t3lib_div::trimExplode(',',$TCA[$table]['types'][$typeNum]['subtypes_addlist'][$row[$sTfield]],1);
02341          }
02342       }
02343          // Return the return
02344       return array($addElements,$sTfield);
02345    }
02346 
02355    function mergeFieldsWithAddedFields($fields,$fieldsToAdd)   {
02356       if (count($fieldsToAdd[0]))   {
02357          reset($fields);
02358          $c=0;
02359          while(list(,$fieldInfo)=each($fields)) {
02360             $parts = explode(';',$fieldInfo);
02361             if (!strcmp(trim($parts[0]),$fieldsToAdd[1]))   {
02362                array_splice(
02363                   $fields,
02364                   $c+1,
02365                   0,
02366                   $fieldsToAdd[0]
02367                );
02368                break;
02369             }
02370             $c++;
02371          }
02372       }
02373       return $fields;
02374    }
02375 
02376 
02387    function setTSconfig($table,$row,$field='')  {
02388       $mainKey = $table.':'.$row['uid'];
02389       if (!isset($this->cachedTSconfig[$mainKey])) {
02390          $this->cachedTSconfig[$mainKey]=t3lib_BEfunc::getTCEFORM_TSconfig($table,$row);
02391       }
02392       if ($field) {
02393          return $this->cachedTSconfig[$mainKey][$field];
02394       } else {
02395          return $this->cachedTSconfig[$mainKey];
02396       }
02397    }
02398 
02409    function getSpecConfForField($table,$row,$field)   {
02410          // Finds the current "types" configuration for the table/row:
02411       $types_fieldConfig = t3lib_BEfunc::getTCAtypes($table,$row);
02412 
02413          // If this is an array, then traverse it:
02414       if (is_array($types_fieldConfig))   {
02415          foreach($types_fieldConfig as $vconf)  {
02416                // If the input field name matches one found in the 'types' list, then return the 'special' configuration.
02417             if ($vconf['field']==$field)  return $vconf['spec'];
02418          }
02419       }
02420    }
02421 
02430    function getSpecConfFromString($extraString, $defaultExtras)    {
02431       return t3lib_BEfunc::getSpecConfParts($extraString, $defaultExtras);
02432    }
02433 
02434 
02435 
02436 
02437 
02438 
02439 
02440 
02441 
02442 
02443    /************************************************************
02444     *
02445     * Display of localized content etc.
02446     *
02447     ************************************************************/
02448 
02458    function registerDefaultLanguageData($table,$rec)  {
02459       global $TCA;
02460 
02461          // Add default language:
02462       if ($TCA[$table]['ctrl']['languageField']
02463             && $rec[$TCA[$table]['ctrl']['languageField']] > 0
02464             && $TCA[$table]['ctrl']['transOrigPointerField']
02465             && intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]) > 0)  {
02466 
02467          $lookUpTable = $TCA[$table]['ctrl']['transOrigPointerTable'] ? $TCA[$table]['ctrl']['transOrigPointerTable'] : $table;
02468 
02469             // Get data formatted:
02470          $this->defaultLanguageData[$table.':'.$rec['uid']] = t3lib_BEfunc::getRecord($lookUpTable, intval($rec[$TCA[$table]['ctrl']['transOrigPointerField']]));
02471 
02472             // Get data for diff:
02473          if ($TCA[$table]['ctrl']['transOrigDiffSourceField']) {
02474             $this->defaultLanguageData_diff[$table.':'.$rec['uid']] = unserialize($rec[$TCA[$table]['ctrl']['transOrigDiffSourceField']]);
02475          }
02476       }
02477    }
02478 
02490    function renderDefaultLanguageContent($table,$field,$row,$item)   {
02491       if (is_array($this->defaultLanguageData[$table.':'.$row['uid']])) {
02492          $dLVal = t3lib_BEfunc::getProcessedValue($table,$field,$this->defaultLanguageData[$table.':'.$row['uid']][$field],0,1);
02493 
02494          if (strcmp($dLVal,''))  {
02495             $item.='<div class="typo3-TCEforms-originalLanguageValue">'.nl2br(htmlspecialchars($dLVal)).'&nbsp;</div>';
02496          }
02497       }
02498 
02499       return $item;
02500    }
02501 
02513    function renderDefaultLanguageDiff($table,$field,$row,$item)   {
02514       if (is_array($this->defaultLanguageData_diff[$table.':'.$row['uid']]))  {
02515 
02516             // Initialize:
02517          $dLVal = array(
02518             'old' => $this->defaultLanguageData_diff[$table.':'.$row['uid']],
02519             'new' => $this->defaultLanguageData[$table.':'.$row['uid']],
02520          );
02521 
02522          if (isset($dLVal['old'][$field]))   {  // There must be diff-data:
02523             if (strcmp($dLVal['old'][$field],$dLVal['new'][$field])) {
02524 
02525                   // Create diff-result:
02526                $t3lib_diff_Obj = t3lib_div::makeInstance('t3lib_diff');
02527                $diffres = $t3lib_diff_Obj->makeDiffDisplay(
02528                   t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['old'][$field],0,1),
02529                   t3lib_BEfunc::getProcessedValue($table,$field,$dLVal['new'][$field],0,1)
02530                );
02531 
02532                $item.='<div class="typo3-TCEforms-diffBox">'.
02533                   '<div class="typo3-TCEforms-diffBox-header">'.htmlspecialchars($this->getLL('l_changeInOrig')).':</div>'.
02534                   $diffres.
02535                '</div>';
02536             }
02537          }
02538       }
02539 
02540       return $item;
02541    }
02542 
02543 
02544 
02545 
02546 
02547 
02548 
02549 
02550 
02551    /************************************************************
02552     *
02553     * Form element helper functions
02554     *
02555     ************************************************************/
02556 
02569    function dbFileIcons($fName,$mode,$allowed,$itemArray,$selector='',$params=array(),$onFocus='') {
02570 
02571          // Sets a flag which means some JavaScript is included on the page to support this element.
02572       $this->printNeededJS['dbFileIcons']=1;
02573 
02574          // INIT
02575       $uidList=array();
02576       $opt=array();
02577       $itemArrayC=0;
02578 
02579          // Creating <option> elements:
02580       if (is_array($itemArray))  {
02581          $itemArrayC=count($itemArray);
02582          reset($itemArray);
02583          switch($mode)  {
02584             case 'db':
02585                while(list(,$pp)=each($itemArray))  {
02586                   $pRec = t3lib_BEfunc::getRecord($pp['table'],$pp['id']);
02587                   if (is_array($pRec)) {
02588                      $pTitle = t3lib_div::fixed_lgd_cs($this->noTitle($pRec[$GLOBALS['TCA'][$pp['table']]['ctrl']['label']]),$this->titleLen);
02589                      $pUid = $pp['table'].'_'.$pp['id'];
02590                      $uidList[]=$pUid;
02591                      $opt[]='<option value="'.htmlspecialchars($pUid).'">'.htmlspecialchars($pTitle).'</option>';
02592                   }
02593                }
02594             break;
02595             case 'file':
02596                while(list(,$pp)=each($itemArray))  {
02597                   $pParts = explode('|',$pp);
02598                   $uidList[]=$pUid=$pTitle = $pParts[0];
02599                   $opt[]='<option value="'.htmlspecialchars(rawurldecode($pParts[0])).'">'.htmlspecialchars(rawurldecode($pParts[0])).'</option>';
02600                }
02601             break;
02602             default:
02603                while(list(,$pp)=each($itemArray))  {
02604                   $pParts = explode('|',$pp);
02605                   $uidList[]=$pUid=$pParts[0];
02606                   $pTitle = $pParts[1];
02607                   $opt[]='<option value="'.htmlspecialchars(rawurldecode($pUid)).'">'.htmlspecialchars(rawurldecode($pTitle)).'</option>';
02608                }
02609             break;
02610          }
02611       }
02612 
02613          // Create selector box of the options
02614       if (!$selector)   {
02615          $sSize = $params['autoSizeMax'] ? t3lib_div::intInRange($itemArrayC+1,t3lib_div::intInRange($params['size'],1),$params['autoSizeMax']) : $params['size'];
02616          $selector = '<select size="'.$sSize.'"'.$this->insertDefStyle('group').' multiple="multiple" name="'.$fName.'_list" '.$onFocus.$params['style'].'>'.implode('',$opt).'</select>';
02617       }
02618 
02619 
02620       $icons = array(
02621          'L' => array(),
02622          'R' => array(),
02623       );
02624       if (!$params['noBrowser']) {
02625          $aOnClick='setFormValueOpenBrowser(\''.$mode.'\',\''.($fName.'|||'.$allowed.'|').'\'); return false;';
02626          $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
02627                '<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'))).' />'.
02628                '</a>';
02629       }
02630       if (!$params['dontShowMoveIcons'])  {
02631          $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Up\'); return false;">'.
02632                '<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')).' />'.
02633                '</a>';
02634       }
02635 
02636       $clipElements = $this->getClipboardElements($allowed,$mode);
02637       if (count($clipElements))  {
02638          $aOnClick = '';
02639 #        $counter = 0;
02640          foreach($clipElements as $elValue)  {
02641             if ($mode=='file')   {
02642                $itemTitle = 'unescape(\''.rawurlencode(basename($elValue)).'\')';
02643             } else { // 'db' mode assumed
02644                list($itemTable,$itemUid) = explode('|', $elValue);
02645                $itemTitle = $GLOBALS['LANG']->JScharCode(t3lib_BEfunc::getRecordTitle($itemTable, t3lib_BEfunc::getRecord($itemTable,$itemUid)));
02646                $elValue = $itemTable.'_'.$itemUid;
02647             }
02648             $aOnClick.= 'setFormValueFromBrowseWin(\''.$fName.'\',unescape(\''.rawurlencode(str_replace('%20',' ',$elValue)).'\'),'.$itemTitle.');';
02649 
02650 #           $counter++;
02651 #           if ($params['maxitems'] && $counter >= $params['maxitems']) {  break;   }  // Makes sure that no more than the max items are inserted... for convenience.
02652          }
02653          $aOnClick.= 'return false;';
02654          $icons['R'][]='<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
02655                '<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))).' />'.
02656                '</a>';
02657       }
02658 
02659       $icons['L'][]='<a href="#" onclick="setFormValueManipulate(\''.$fName.'\',\'Remove\'); return false;">'.
02660             '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/group_clear.gif','width="14" height="14"').' border="0" '.t3lib_BEfunc::titleAltAttrib($this->getLL('l_remove_selected')).' />'.
02661             '</a>';
02662 
02663       $str='<table border="0" cellpadding="0" cellspacing="0" width="1">
02664          '.($params['headers']?'
02665             <tr>
02666                <td>'.$this->wrapLabels($params['headers']['selector']).'</td>
02667                <td></td>
02668                <td></td>
02669                <td></td>
02670                <td>'.$this->wrapLabels($params['headers']['items']).'</td>
02671             </tr>':'').
02672          '
02673          <tr>
02674             <td valign="top">'.
02675                $selector.'<br />'.
02676                $this->wrapLabels($params['info']).
02677             '</td>
02678             <td valign="top">'.
02679                implode('<br />',$icons['L']).'</td>
02680             <td valign="top">'.
02681                implode('<br />',$icons['R']).'</td>
02682             <td><img src="clear.gif" width="5" height="1" alt="" /></td>
02683             <td valign="top">'.
02684                $this->wrapLabels($params['thumbnails']).
02685             '</td>
02686          </tr>
02687       </table>';
02688 
02689          // Creating the hidden field which contains the actual value as a comma list.
02690       $str.='<input type="hidden" name="'.$fName.'" value="'.htmlspecialchars(implode(',',$uidList)).'" />';
02691 
02692       return $str;
02693    }
02694 
02702    function getClipboardElements($allowed,$mode)   {
02703 
02704       $output = array();
02705 
02706       if (is_object($this->clipObj))   {
02707          switch($mode)  {
02708             case 'file':
02709                $elFromTable = $this->clipObj->elFromTable('_FILE');
02710                $allowedExts = t3lib_div::trimExplode(',', $allowed, 1);
02711 
02712                if ($allowedExts) {  // If there are a set of allowed extensions, filter the content:
02713                   foreach($elFromTable as $elValue)   {
02714                      $pI = pathinfo($elValue);
02715                      $ext = strtolower($pI['extension']);
02716                      if (in_array($ext, $allowedExts))   {
02717                         $output[] = $elValue;
02718                      }
02719                   }
02720                } else { // If all is allowed, insert all: (This does NOT respect any disallowed extensions, but those will be filtered away by the backend TCEmain)
02721                   $output = $elFromTable;
02722                }
02723             break;
02724             case 'db':
02725                $allowedTables = t3lib_div::trimExplode(',', $allowed, 1);
02726                if (!strcmp(trim($allowedTables[0]),'*')) {  // All tables allowed for relation:
02727                   $output = $this->clipObj->elFromTable('');
02728                } else { // Only some tables, filter them:
02729                   foreach($allowedTables as $tablename)  {
02730                      $elFromTable = $this->clipObj->elFromTable($tablename);
02731                      $output = array_merge($output,$elFromTable);
02732                   }
02733                }
02734                $output = array_keys($output);
02735             break;
02736          }
02737       }
02738 
02739       return $output;
02740    }
02741 
02751    function getClickMenu($str,$table,$uid='')   {
02752       if ($this->enableClickMenu)   {
02753          $onClick = $GLOBALS['SOBE']->doc->wrapClickMenuOnIcon($str,$table,$uid,1,'','+copy,info,edit,view', TRUE);
02754          return '<a href="#" onclick="'.htmlspecialchars($onClick).'">'.$str.'</a>';
02755       }
02756    }
02757 
02772    function renderWizards($itemKinds,$wizConf,$table,$row,$field,&$PA,$itemName,$specConf,$RTE=0)  {
02773 
02774          // Init:
02775       $fieldChangeFunc = $PA['fieldChangeFunc'];
02776       $item = $itemKinds[0];
02777       $outArr = array();
02778       $colorBoxLinks = array();
02779       $fName = '['.$table.']['.$row['uid'].']['.$field.']';
02780       $md5ID = 'ID'.t3lib_div::shortmd5($itemName);
02781       $listFlag = '_list';
02782 
02783          // Manipulate the field name (to be the true form field name) and remove a suffix-value if the item is a selector box with renderMode "singlebox":
02784       if ($PA['fieldConf']['config']['type']=='select')  {
02785          if ($PA['fieldConf']['config']['maxitems']<=1)  {  // Single select situation:
02786             $listFlag = '';
02787          } elseif ($PA['fieldConf']['config']['renderMode']=='singlebox')  {
02788             $itemName.='[]';
02789             $listFlag = '';
02790          }
02791       }
02792 
02793          // traverse wizards:
02794       if (is_array($wizConf) && !$this->disableWizards)  {
02795          foreach($wizConf as $wid => $wConf) {
02796             if (substr($wid,0,1)!='_'
02797                   && (!$wConf['enableByTypeConfig'] || @in_array($wid,$specConf['wizards']['parameters']))
02798                   && ($RTE || !$wConf['RTEonly'])
02799                )  {
02800 
02801                   // Title / icon:
02802                $iTitle = htmlspecialchars($this->sL($wConf['title']));
02803                if ($wConf['icon'])  {
02804                   $iDat = $this->getIcon($wConf['icon']);
02805                   $icon = '<img src="'.$iDat[0].'" '.$iDat[1][3].' border="0"'.t3lib_BEfunc::titleAltAttrib($iTitle).' />';
02806                } else {
02807                   $icon = $iTitle;
02808                }
02809 
02810                   //
02811                switch((string)$wConf['type'])   {
02812                   case 'userFunc':
02813                   case 'script':
02814                   case 'popup':
02815                   case 'colorbox':
02816                      if (!$wConf['notNewRecords'] || t3lib_div::testInt($row['uid']))  {
02817 
02818                            // Setting &P array contents:
02819                         $params = array();
02820                         $params['params'] = $wConf['params'];
02821                         $params['exampleImg'] = $wConf['exampleImg'];
02822                         $params['table'] = $table;
02823                         $params['uid'] = $row['uid'];
02824                         $params['pid'] = $row['pid'];
02825                         $params['field'] = $field;
02826                         $params['md5ID'] = $md5ID;
02827                         $params['returnUrl'] = $this->thisReturnUrl();
02828 
02829                            // Resolving script filename and setting URL.
02830                         if (!strcmp(substr($wConf['script'],0,4), 'EXT:')) {
02831                            $wScript = t3lib_div::getFileAbsFileName($wConf['script']);
02832                            if ($wScript)  {
02833                               $wScript = '../'.substr($wScript,strlen(PATH_site));
02834                            } else break;
02835                         } else {
02836                            $wScript = $wConf['script'];
02837                         }
02838                         $url = $this->backPath.$wScript.(strstr($wScript,'?') ? '' : '?');
02839 
02840                            // If there is no script and the type is "colorbox", break right away:
02841                         if ((string)$wConf['type']=='colorbox' && !$wConf['script'])   { break; }
02842 
02843                            // If "script" type, create the links around the icon:
02844                         if ((string)$wConf['type']=='script')  {
02845                            $aUrl = $url.t3lib_div::implodeArrayForUrl('',array('P'=>$params));
02846                            $outArr[]='<a href="'.htmlspecialchars($aUrl).'" onclick="'.$this->blur().'return !TBE_EDITOR_isFormChanged();">'.
02847                               $icon.
02848                               '</a>';
02849                         } else {
02850 
02851                               // ... else types "popup", "colorbox" and "userFunc" will need additional parameters:
02852                            $params['formName'] = $this->formName;
02853                            $params['itemName'] = $itemName;
02854                            $params['fieldChangeFunc'] = $fieldChangeFunc;
02855 
02856                            switch((string)$wConf['type'])   {
02857                               case 'popup':
02858                               case 'colorbox':
02859                                     // Current form value is passed as P[currentValue]!
02860                                  $addJS = $wConf['popup_onlyOpenIfSelected']?'if (!TBE_EDITOR_curSelected(\''.$itemName.$listFlag.'\')){alert('.$GLOBALS['LANG']->JScharCode($this->getLL('m_noSelItemForEdit')).'); return false;}':'';
02861                                  $curSelectedValues='+\'&P[currentSelectedValues]=\'+TBE_EDITOR_curSelected(\''.$itemName.$listFlag.'\')';
02862                                  $aOnClick=  $this->blur().
02863                                           $addJS.
02864                                           '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'].'\');'.
02865                                           'vHWin.focus();return false;';
02866                                     // Setting "colorBoxLinks" - user LATER to wrap around the color box as well:
02867                                  $colorBoxLinks = Array('<a href="#" onclick="'.htmlspecialchars($aOnClick).'">','</a>');
02868                                  if ((string)$wConf['type']=='popup')   {
02869                                     $outArr[] = $colorBoxLinks[0].$icon.$colorBoxLinks[1];
02870                                  }
02871                               break;
02872                               case 'userFunc':
02873                                  $params['item'] = &$item;  // Reference set!
02874                                  $params['icon'] = $icon;
02875                                  $params['iTitle'] = $iTitle;
02876                                  $params['wConf'] = $wConf;
02877                                  $params['row'] = $row;
02878                                  $outArr[] = t3lib_div::callUserFunction($wConf['userFunc'],$params,$this);
02879                               break;
02880                            }
02881                         }
02882 
02883                            // Hide the real form element?
02884                         if (is_array($wConf['hideParent']) || $wConf['hideParent']) {
02885                            $item = $itemKinds[1];  // Setting the item to a hidden-field.
02886                            if (is_array($wConf['hideParent'])) {
02887                               $item.= $this->getSingleField_typeNone_render($wConf['hideParent'], $PA['itemFormElValue']);
02888                            }
02889                         }
02890                      }
02891                   break;
02892                   case 'select':
02893                      $fieldValue = array('config' => $wConf);
02894                      $TSconfig = $this->setTSconfig($table, $row);
02895                      $TSconfig[$field] = $TSconfig[$field]['wizards.'][$wid.'.'];
02896                      $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($fieldValue), $fieldValue, $TSconfig, $field);
02897 
02898                      $opt = array();
02899                      $opt[] = '<option>'.$iTitle.'</option>';
02900                      foreach($selItems as $p)   {
02901                         $opt[] = '<option value="'.htmlspecialchars($p[1]).'">'.htmlspecialchars($p[0]).'</option>';
02902                      }
02903                      if ($wConf['mode']=='append') {
02904                         $assignValue = $this->elName($itemName).'.value=\'\'+this.options[this.selectedIndex].value+'.$this->elName($itemName).'.value';
02905                      } elseif ($wConf['mode']=='prepend')   {
02906                         $assignValue = $this->elName($itemName).'.value+=\'\'+this.options[this.selectedIndex].value';
02907                      } else {
02908                         $assignValue = $this->elName($itemName).'.value=this.options[this.selectedIndex].value';
02909                      }
02910                      $sOnChange = $assignValue.';this.selectedIndex=0;'.implode('',$fieldChangeFunc);
02911                      $outArr[] = '<select name="_WIZARD'.$fName.'" onchange="'.htmlspecialchars($sOnChange).'">'.implode('',$opt).'</select>';
02912                   break;
02913                }
02914 
02915                   // Color wizard colorbox:
02916                if ((string)$wConf['type']=='colorbox')   {
02917                   $dim = t3lib_div::intExplode('x',$wConf['dim']);
02918                   $dX = t3lib_div::intInRange($dim[0],1,200,20);
02919                   $dY = t3lib_div::intInRange($dim[1],1,200,20);
02920                   $color = $row[$field] ? ' bgcolor="'.htmlspecialchars($row[$field]).'"' : '';
02921                   $outArr[] = '<table border="0" cellpadding="0" cellspacing="0" id="'.$md5ID.'"'.$color.' style="'.htmlspecialchars($wConf['tableStyle']).'">
02922                            <tr>
02923                               <td>'.
02924                                  $colorBoxLinks[0].
02925                                  '<img src="clear.gif" width="'.$dX.'" height="'.$dY.'"'.t3lib_BEfunc::titleAltAttrib(trim($iTitle.' '.$row[$field])).' border="0" />'.
02926                                  $colorBoxLinks[1].
02927                                  '</td>
02928                            </tr>
02929                         </table>';
02930                }
02931             }
02932          }
02933 
02934             // For each rendered wizard, put them together around the item.
02935          if (count($outArr))  {
02936             if ($wizConf['_HIDDENFIELD']) $item = $itemKinds[1];
02937 
02938             $outStr = '';
02939             $vAlign = $wizConf['_VALIGN'] ? ' valign="'.$wizConf['_VALIGN'].'"' : '';
02940             if (count($outArr)>1 || $wizConf['_PADDING'])   {
02941                $dist = intval($wizConf['_DISTANCE']);
02942                if ($wizConf['_VERTICAL']) {
02943                   $dist = $dist ? '<tr><td><img src="clear.gif" width="1" height="'.$dist.'" alt="" /></td></tr>' : '';
02944                   $outStr = '<tr><td>'.implode('</td></tr>'.$dist.'<tr><td>',$outArr).'</td></tr>';
02945                } else {
02946                   $dist = $dist ? '<td><img src="clear.gif" height="1" width="'.$dist.'" alt="" /></td>' : '';
02947                   $outStr = '<tr><td'.$vAlign.'>'.implode('</td>'.$dist.'<td'.$vAlign.'>',$outArr).'</td></tr>';
02948                }
02949                $outStr = '<table border="0" cellpadding="'.intval($wizConf['_PADDING']).'" cellspacing="0">'.$outStr.'</table>';
02950             } else {
02951                $outStr = implode('',$outArr);
02952             }
02953 
02954             if (!strcmp($wizConf['_POSITION'],'left'))   {
02955                $outStr = '<tr><td'.$vAlign.'>'.$outStr.'</td><td'.$vAlign.'>'.$item.'</td></tr>';
02956             } elseif (!strcmp($wizConf['_POSITION'],'top')) {
02957                $outStr = '<tr><td>'.$outStr.'</td></tr><tr><td>'.$item.'</td></tr>';
02958             } elseif (!strcmp($wizConf['_POSITION'],'bottom')) {
02959                $outStr = '<tr><td>'.$item.'</td></tr><tr><td>'.$outStr.'</td></tr>';
02960             } else {
02961                $outStr = '<tr><td'.$vAlign.'>'.$item.'</td><td'.$vAlign.'>'.$outStr.'</td></tr>';
02962             }
02963 
02964             $item = '<table border="0" cellpadding="0" cellspacing="0">'.$outStr.'</table>';
02965          }
02966       }
02967       return $item;
02968    }
02969 
02976    function getIcon($icon) {
02977       if (substr($icon,0,4)=='EXT:')   {
02978          $file = t3lib_div::getFileAbsFileName($icon);
02979          if ($file)  {
02980             $file = substr($file,strlen(PATH_site));
02981             $selIconFile = $this->backPath.'../'.$file;
02982             $selIconInfo = @getimagesize(PATH_site.$file);
02983          }
02984       } elseif (substr($icon,0,3)=='../') {
02985          $selIconFile = $this->backPath.t3lib_div::resolveBackPath($icon);
02986          $selIconInfo = @getimagesize(PATH_site.t3lib_div::resolveBackPath(substr($icon,3)));
02987       } elseif (substr($icon,0,4)=='ext/' || substr($icon,0,7)=='sysext/') {
02988          $selIconFile = $this->backPath.$icon;
02989          $selIconInfo = @getimagesize(PATH_typo3.$icon);
02990       } else {
02991          $selIconFile = $this->backPath.'t3lib/gfx/'.$icon;
02992          $selIconInfo = @getimagesize(PATH_t3lib.'gfx/'.$icon);
02993       }
02994       return array($selIconFile,$selIconInfo);
02995    }
02996 
03003    function optionTagStyle($iconString)   {
03004       if ($iconString)  {
03005          list($selIconFile,$selIconInfo) = $this->getIcon($iconString);
03006          $padTop = t3lib_div::intInRange(($selIconInfo[1]-12)/2,0);
03007          $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;';
03008          return $styleAttr;
03009       }
03010    }
03011 
03019    function extractValuesOnlyFromValueLabelList($itemFormElValue) {
03020          // Get values of selected items:
03021       $itemArray = t3lib_div::trimExplode(',',$itemFormElValue,1);
03022       foreach($itemArray as $tk => $tv) {
03023          $tvP = explode('|',$tv,2);
03024          $tvP[0] = rawurldecode($tvP[0]);
03025 
03026          $itemArray[$tk] = $tvP[0];
03027       }
03028       return $itemArray;
03029    }
03030 
03041    function wrapOpenPalette($header,$table,$row,$palette,$retFunc=0) {
03042       $fieldL=array();
03043       if (!is_array($this->palFieldArr[$palette])) {$this->palFieldArr[$palette]=array();}
03044       $palFieldN = is_array($this->palFieldArr[$palette]) ? count($this->palFieldArr[$palette]) : 0;
03045       $palJSFunc = 'TBE_EDITOR_palUrl(\''.($table.':'.$row['uid'].':'.$palette).'\',\''.implode(',',$this->palFieldArr[$palette]).'\','.$palFieldN.',\''.$table.'\',\''.$row['uid'].'\',1);';
03046 
03047       $aOnClick = $this->blur().substr($palJSFunc,0,-3).'0);return false;';
03048 
03049       $iconCode = '<a href="#" onclick="'.htmlspecialchars($aOnClick).'" title="'.htmlspecialchars($table).'">'.
03050                $header.
03051                '</a>';
03052       return $retFunc ? array($iconCode,$palJSFunc) : $iconCode;
03053    }
03054 
03065    function checkBoxParams($itemName,$thisValue,$c,$iCount,$addFunc='') {
03066       $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)).');'.
03067                $addFunc;
03068       $str = ' onclick="'.htmlspecialchars($onClick).'"'.
03069             (($thisValue&pow(2,$c))?' checked="checked"':'');
03070       return $str;
03071    }
03072 
03079    function elName($itemName) {
03080       return 'document.'.$this->formName."['".$itemName."']";
03081    }
03082 
03090    function noTitle($str,$wrapParts=array()) {
03091       return strcmp($str,'') ? $str : $wrapParts[0].'['.$GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.no_title').']'.$wrapParts[1];
03092    }
03093 
03099    function blur()   {
03100       return $GLOBALS['CLIENT']['FORMSTYLE'] ? 'this.blur();':'';
03101    }
03102 
03108    function thisReturnUrl()   {
03109       return $this->returnUrl ? $this->returnUrl : t3lib_div::linkThisScript();
03110    }
03111 
03121    function getSingleHiddenField($table,$field,$row)  {
03122       global $TCA;
03123       $out='';
03124       t3lib_div::loadTCA($table);
03125       if ($TCA[$table]['columns'][$field])   {
03126 
03127          $uid=$row['uid'];
03128          $itemName=$this->prependFormFieldNames.'['.$table.']['.$uid.']['.$field.']';
03129          $itemValue=$row[$field];
03130          $item.='<input type="hidden" name="'.$itemName.'" value="'.htmlspecialchars($itemValue).'" />';
03131          $out = $item;
03132       }
03133       return $out;
03134    }
03135 
03143    function formWidth($size=48,$textarea=0) {
03144          // Input or text-field attribute (size or cols)
03145       if ($this->docLarge) $size = round($size*$this->form_largeComp);
03146       $wAttrib = $textarea?'cols':'size';
03147       if (!$GLOBALS['CLIENT']['FORMSTYLE'])  {  // If not setting the width by style-attribute
03148          $retVal = ' '.$wAttrib.'="'.$size.'"';
03149       } else { // Setting width by style-attribute. 'cols' MUST be avoided with NN6+
03150          $pixels = ceil($size*$this->form_rowsToStylewidth);
03151          $theStyle = 'width:'.$pixels.'px;'.$this->defStyle.$this->formElStyle($textarea?'text':'input');
03152          $retVal = ' style="'.htmlspecialchars($theStyle).'"';
03153 
03154          $class = $this->formElClass($textarea?'text':'input');
03155          if ($class) {
03156             $retVal.= ' class="'.htmlspecialchars($class).'"';
03157          }
03158       }
03159       return $retVal;
03160    }
03161 
03170    function formWidthText($size=48,$wrap='') {
03171       $wTags = $this->formWidth($size,1);
03172          // Netscape 6+ seems to have this ODD problem where there WILL ALWAYS be wrapping with the cols-attribute set and NEVER without the col-attribute...
03173       if (strtolower(trim($wrap))!='off' && $GLOBALS['CLIENT']['BROWSER']=='net' && $GLOBALS['CLIENT']['VERSION']>=5)   {
03174          $wTags.=' cols="'.$size.'"';
03175       }
03176       return $wTags;
03177    }
03178 
03186    function formElStyle($type)   {
03187       return $this->formElStyleClassValue($type);
03188    }
03189 
03197    function formElClass($type)   {
03198       return $this->formElStyleClassValue($type, TRUE);
03199    }
03200 
03208    function formElStyleClassValue($type, $class=FALSE)   {
03209          // Get value according to field:
03210       if (isset($this->fieldStyle[$type]))   {
03211          $style = trim($this->fieldStyle[$type]);
03212       } else {
03213          $style = trim($this->fieldStyle['all']);
03214       }
03215 
03216          // Check class prefixed:
03217       if (substr($style,0,6)=='CLASS:')   {
03218          return $class ? trim(substr($style,6)) : '';
03219       } else {
03220          return !$class ? $style : '';
03221       }
03222    }
03223 
03230    function insertDefStyle($type)   {
03231       $out = '';
03232 
03233       $style = trim($this->defStyle.$this->formElStyle($type));
03234       $out.= $style?' style="'.htmlspecialchars($style).'"':'';
03235 
03236       $class = $this->formElClass($type);
03237       $out.= $class?' class="'.htmlspecialchars($class).'"':'';
03238 
03239       return $out;
03240    }
03241 
03249    function getDynTabMenu($parts, $idString) {
03250       if (is_object($GLOBALS['TBE_TEMPLATE']))  {
03251          return $GLOBALS['TBE_TEMPLATE']->getDynTabMenu($parts, $idString);
03252       } else {
03253          $output = '';
03254          foreach($parts as $singlePad) {
03255             $output.='
03256             <h3>'.htmlspecialchars($singlePad['label']).'</h3>
03257             '.($singlePad['description'] ? '<p class="c-descr">'.nl2br(htmlspecialchars($singlePad['description'])).'</p>' : '').'
03258             '.$singlePad['content'];
03259          }
03260 
03261          return '<div class="typo3-dyntabmenu-divs">'.$output.'</div>';
03262       }
03263    }
03264 
03265 
03266 
03267 
03268 
03269 
03270 
03271 
03272 
03273 
03274 
03275    /************************************************************
03276     *
03277     * Item-array manipulation functions (check/select/radio)
03278     *
03279     ************************************************************/
03280 
03288    function initItemArray($fieldValue) {
03289       $items = array();
03290       if (is_array($fieldValue['config']['items']))   {
03291          reset ($fieldValue['config']['items']);
03292          while (list($itemName,$itemValue) = each($fieldValue['config']['items']))  {
03293             $items[] = array($this->sL($itemValue[0]), $itemValue[1], $itemValue[2]);
03294          }
03295       }
03296       return $items;
03297    }
03298 
03306    function addItems($items,$iArray)   {
03307       global $TCA;
03308       if (is_array($iArray))  {
03309          reset($iArray);
03310          while(list($value,$label)=each($iArray))  {
03311             $items[]=array($this->sl($label),$value);
03312          }
03313       }
03314       return $items;
03315    }
03316 
03328    function procItems($items,$iArray,$config,$table,$row,$field)  {
03329       global $TCA;
03330 
03331       $params=array();
03332       $params['items'] = &$items;
03333       $params['config'] = $config;
03334       $params['TSconfig'] = $iArray;
03335       $params['table'] = $table;
03336       $params['row'] = $row;
03337       $params['field'] = $field;
03338 
03339       t3lib_div::callUserFunction($config['itemsProcFunc'],$params,$this);
03340       return $items;
03341    }
03342 
03352    function addSelectOptionsToItemArray($items,$fieldValue,$TSconfig,$field)  {
03353       global $TCA;
03354 
03355          // Values from foreign tables:
03356       if ($fieldValue['config']['foreign_table'])  {
03357          $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field);
03358          if ($fieldValue['config']['neg_foreign_table']) {
03359             $items = $this->foreignTable($items,$fieldValue,$TSconfig,$field,1);
03360          }
03361       }
03362 
03363          // Values from a file folder:
03364       if ($fieldValue['config']['fileFolder'])  {
03365          $fileFolder = t3lib_div::getFileAbsFileName($fieldValue['config']['fileFolder']);
03366          if (@is_dir($fileFolder))  {
03367 
03368                // Configurations:
03369             $extList = $fieldValue['config']['fileFolder_extList'];
03370             $recursivityLevels = isset($fieldValue['config']['fileFolder_recursions']) ? t3lib_div::intInRange($fieldValue['config']['fileFolder_recursions'],0,99) : 99;
03371 
03372                // Get files:
03373             $fileFolder = ereg_replace('\/$','',$fileFolder).'/';
03374             $fileArr = t3lib_div::getAllFilesAndFoldersInPath(array(),$fileFolder,$extList,0,$recursivityLevels);
03375             $fileArr = t3lib_div::removePrefixPathFromList($fileArr, $fileFolder);
03376 
03377             foreach($fileArr as $fileRef) {
03378                $fI = pathinfo($fileRef);
03379                $icon = t3lib_div::inList('gif,png,jpeg,jpg', strtolower($fI['extension'])) ? '../'.substr($fileFolder,strlen(PATH_site)).$fileRef : '';
03380                $items[] = array(
03381                   $fileRef,
03382                   $fileRef,
03383                   $icon
03384                );
03385             }
03386          }
03387       }
03388 
03389          // If 'special' is configured:
03390       if ($fieldValue['config']['special'])  {
03391          switch ($fieldValue['config']['special']) {
03392             case 'tables':
03393                $temp_tc = array_keys($TCA);
03394                $descr = '';
03395 
03396                foreach($temp_tc as $theTableNames) {
03397                   if (!$TCA[$theTableNames]['ctrl']['adminOnly']) {
03398 
03399                         // Icon:
03400                      $icon = '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($theTableNames, array()),'',1);
03401 
03402                         // Add description texts:
03403                      if ($this->edit_showFieldHelp)   {
03404                         $GLOBALS['LANG']->loadSingleTableDescription($theTableNames);
03405                         $fDat = $GLOBALS['TCA_DESCR'][$theTableNames]['columns'][''];
03406                         $descr = $fDat['description'];
03407                      }
03408 
03409                         // Item configuration:
03410                      $items[] = array(
03411                         $this->sL($TCA[$theTableNames]['ctrl']['title']),
03412                         $theTableNames,
03413                         $icon,
03414                         $descr
03415                      );
03416                   }
03417                }
03418             break;
03419             case 'pagetypes':
03420                $theTypes = $TCA['pages']['columns']['doktype']['config']['items'];
03421 
03422                foreach($theTypes as $theTypeArrays)   {
03423                      // Icon:
03424                   $icon = $theTypeArrays[1]!='--div--' ? '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon('pages', array('doktype' => $theTypeArrays[1])),'',1) : '';
03425 
03426                      // Item configuration:
03427                   $items[] = array(
03428                      $this->sL($theTypeArrays[0]),
03429                      $theTypeArrays[1],
03430                      $icon
03431                   );
03432                }
03433             break;
03434             case 'exclude':
03435                $theTypes = t3lib_BEfunc::getExcludeFields();
03436                $descr = '';
03437 
03438                foreach($theTypes as $theTypeArrays)   {
03439                   list($theTable, $theField) = explode(':', $theTypeArrays[1]);
03440 
03441                      // Add description texts:
03442                   if ($this->edit_showFieldHelp)   {
03443                      $GLOBALS['LANG']->loadSingleTableDescription($theTable);
03444                      $fDat = $GLOBALS['TCA_DESCR'][$theTable]['columns'][$theField];
03445                      $descr = $fDat['description'];
03446                   }
03447 
03448                      // Item configuration:
03449                   $items[] = array(
03450                      ereg_replace(':$','',$theTypeArrays[0]),
03451                      $theTypeArrays[1],
03452                      '',
03453                      $descr
03454                   );
03455                }
03456             break;
03457             case 'explicitValues':
03458                $theTypes = t3lib_BEfunc::getExplicitAuthFieldValues();
03459 
03460                      // Icons:
03461                $icons = array(
03462                   'ALLOW' => '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_ok2.gif','',1),
03463                   'DENY' => '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,'gfx/icon_fatalerror.gif','',1),
03464                );
03465 
03466                   // Traverse types:
03467                foreach($theTypes as $tableFieldKey => $theTypeArrays)   {
03468 
03469                   if (is_array($theTypeArrays['items'])) {
03470                         // Add header:
03471                      $items[] = array(
03472                         $theTypeArrays['tableFieldLabel'],
03473                         '--div--',
03474                      );
03475 
03476                         // Traverse options for this field:
03477                      foreach($theTypeArrays['items'] as $itemValue => $itemContent) {
03478                            // Add item to be selected:
03479                         $items[] = array(
03480                            '['.$itemContent[2].'] '.$itemContent[1],
03481                            $tableFieldKey.':'.ereg_replace('[:|,]','',$itemValue).':'.$itemContent[0],
03482                            $icons[$itemContent[0]]
03483                         );
03484                      }
03485                   }
03486                }
03487             break;
03488             case 'languages':
03489                $items = array_merge($items,t3lib_BEfunc::getSystemLanguages());
03490             break;
03491             case 'custom':
03492                   // Initialize:
03493                $customOptions = $GLOBALS['TYPO3_CONF_VARS']['BE']['customPermOptions'];
03494                if (is_array($customOptions)) {
03495                   foreach($customOptions as $coKey => $coValue) {
03496                      if (is_array($coValue['items'])) {
03497                            // Add header:
03498                         $items[] = array(
03499                            $GLOBALS['LANG']->sl($coValue['header']),
03500                            '--div--',
03501                         );
03502 
03503                            // Traverse items:
03504                         foreach($coValue['items'] as $itemKey => $itemCfg) {
03505                               // Icon:
03506                            if ($itemCfg[1])  {
03507                               list($icon) = $this->getIcon($itemCfg[1]);
03508                               if ($icon)  $icon = '../typo3/'.$icon;
03509                            } else $icon = '';
03510 
03511                               // Add item to be selected:
03512                            $items[] = array(
03513                               $GLOBALS['LANG']->sl($itemCfg[0]),
03514                               $coKey.':'.ereg_replace('[:|,]','',$itemKey),
03515                               $icon,
03516                               $GLOBALS['LANG']->sl($itemCfg[2]),
03517                            );
03518                         }
03519                      }
03520                   }
03521                }
03522             break;
03523             case 'modListGroup':
03524             case 'modListUser':
03525                if (!is_object($loadModules)) {
03526                   $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
03527                   $loadModules->load($GLOBALS['TBE_MODULES']);
03528                }
03529 
03530                $modList = $fieldValue['config']['special']=='modListUser' ? $loadModules->modListUser : $loadModules->modListGroup;
03531                if (is_array($modList)) {
03532                   $descr = '';
03533 
03534                   foreach($modList as $theMod)  {
03535 
03536                         // Icon:
03537                      $icon = $GLOBALS['LANG']->moduleLabels['tabs_images'][$theMod.'_tab'];
03538                      if ($icon)  {
03539                         $icon = '../'.substr($icon,strlen(PATH_site));
03540                      }
03541 
03542                         // Description texts:
03543                      if ($this->edit_showFieldHelp)   {
03544                         $descr = $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tablabel'].
03545                                  chr(10).
03546                                  $GLOBALS['LANG']->moduleLabels['labels'][$theMod.'_tabdescr'];
03547                      }
03548 
03549                         // Item configuration:
03550                      $items[] = array(
03551                         $this->addSelectOptionsToItemArray_makeModuleData($theMod),
03552                         $theMod,
03553                         $icon,
03554                         $descr
03555                      );
03556                   }
03557                }
03558             break;
03559          }
03560       }
03561 
03562          // Return the items:
03563       return $items;
03564    }
03565 
03574    function addSelectOptionsToItemArray_makeModuleData($value) {
03575       $label = '';
03576          // Add label for main module:
03577       $pp = explode('_',$value);
03578       if (count($pp)>1) $label.=$GLOBALS['LANG']->moduleLabels['tabs'][$pp[0].'_tab'].'>';
03579          // Add modules own label now:
03580       $label.= $GLOBALS['LANG']->moduleLabels['tabs'][$value.'_tab'];
03581 
03582       return $label;
03583    }
03584 
03596    function foreignTable($items,$fieldValue,$TSconfig,$field,$pFFlag=0) {
03597       global $TCA;
03598 
03599          // Init:
03600       $pF=$pFFlag?'neg_':'';
03601       $f_table = $fieldValue['config'][$pF.'foreign_table'];
03602       $uidPre = $pFFlag?'-':'';
03603 
03604          // Get query:
03605       $res = t3lib_BEfunc::exec_foreign_table_where_query($fieldValue,$field,$TSconfig,$pF);
03606 
03607          // Perform lookup
03608       if ($GLOBALS['TYPO3_DB']->sql_error()) {
03609          echo($GLOBALS['TYPO3_DB']->sql_error()."\n\nThis may indicate a table defined in tables.php is not existing in the database!");
03610          return array();
03611       }
03612 
03613          // Get label prefix.
03614       $lPrefix = $this->sL($fieldValue['config'][$pF.'foreign_table_prefix']);
03615 
03616          // Get icon field + path if any:
03617       $iField = $TCA[$f_table]['ctrl']['selicon_field'];
03618       $iPath = trim($TCA[$f_table]['ctrl']['selicon_field_path']);
03619 
03620          // Traverse the selected rows to add them:
03621       while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))  {
03622             // Prepare the icon if available:
03623          if ($iField && $iPath && $row[$iField])   {
03624             $iParts = t3lib_div::trimExplode(',',$row[$iField],1);
03625             $icon = '../'.$iPath.'/'.trim($iParts[0]);
03626          } elseif (t3lib_div::inList('singlebox,checkbox',$fieldValue['config']['renderMode'])) {
03627             $icon = '../typo3/'.t3lib_iconWorks::skinImg($this->backPath,t3lib_iconWorks::getIcon($f_table, $row),'',1);
03628          } else $icon = '';
03629 
03630             // Add the item:
03631          $items[] = array(
03632             t3lib_div::fixed_lgd_cs($lPrefix.strip_tags(t3lib_BEfunc::getRecordTitle($f_table,$row)),$this->titleLen),
03633             $uidPre.$row['uid'],
03634             $icon
03635          );
03636       }
03637       return $items;
03638    }
03639 
03640 
03641 
03642 
03643 
03644 
03645 
03646 
03647 
03648 
03649 
03650 
03651 
03652 
03653 
03654 
03655 
03656 
03657 
03658 
03659 
03660 
03661 
03662 
03663 
03664    /********************************************
03665     *
03666     * Template functions
03667     *
03668     ********************************************/
03669 
03676    function setNewBEDesign()  {
03677 
03678          // Wrapping all table rows for a particular record being edited:
03679       $this->totalWrap='
03680       <table border="0" cellspacing="0" cellpadding="0" width="'.($this->docLarge ? 440+150 : 440).'" class="typo3-TCEforms">'.
03681          '<tr class="bgColor2">
03682             <td>&nbsp;</td>
03683             <td>###RECORD_ICON### <span class="typo3-TCEforms-recHeader">###TABLE_TITLE###</span> ###ID_NEW_INDICATOR### - ###RECORD_LABEL###</td>
03684          </tr>'.
03685          '|'.
03686          '<tr>
03687             <td>&nbsp;</td>
03688             <td><img src="clear.gif" width="'.($this->docLarge ? 440+150 : 440).'" height="1" alt="" /></td>
03689          </tr>
03690       </table>';
03691 
03692          // Wrapping a single field:
03693       $this->fieldTemplate='
03694          <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
03695             <td>###FIELD_HELP_ICON###</td>
03696             <td width="99%"><span style="color:###FONTCOLOR_HEAD###;"###CLASSATTR_4###><b>###FIELD_NAME###</b></span>###FIELD_HELP_TEXT###</td>
03697          </tr>
03698          <tr ###BGCOLOR######CLASSATTR_1###>
03699             <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>
03700             <td valign="top">###FIELD_ITEM######FIELD_PAL_LINK_ICON###</td>
03701          </tr>';
03702 
03703       $this->palFieldTemplate='
03704          <tr ###BGCOLOR######CLASSATTR_1###>
03705             <td>&nbsp;</td>
03706             <td nowrap="nowrap" valign="top">###FIELD_PALETTE###</td>
03707          </tr>';
03708       $this->palFieldTemplateHeader='
03709          <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
03710             <td>&nbsp;</td>
03711             <td nowrap="nowrap" valign="top"><strong>###FIELD_HEADER###</strong></td>
03712          </tr>';
03713 
03714       $this->sectionWrap='
03715          <tr>
03716             <td colspan="2"><img src="clear.gif" width="1" height="###SPACE_BEFORE###" alt="" /></td>
03717          </tr>
03718          <tr>
03719             <td colspan="2"><table ###TABLE_ATTRIBS###>###CONTENT###</table></td>
03720          </tr>
03721          ';
03722    }
03723 
03731    function intoTemplate($inArr,$altTemplate='')   {
03732             // Put into template_
03733       $fieldTemplateParts = explode('###FIELD_',$this->rplColorScheme($altTemplate?$altTemplate:$this->fieldTemplate));
03734       reset($fieldTemplateParts);
03735       $out=current($fieldTemplateParts);
03736       while(list(,$part)=each($fieldTemplateParts))   {
03737          list($key,$val)=explode('###',$part,2);
03738          $out.=$inArr[$key];
03739          $out.=$val;
03740       }
03741       return $out;
03742    }
03743 
03755    function addUserTemplateMarkers($marker,$table,$field,$row,&$PA)  {
03756       return $marker;
03757    }
03758 
03766    function wrapLabels($str)  {
03767       return $str;
03768    }
03769 
03779    function wrapTotal($c,$rec,$table)  {
03780       $parts = $this->replaceTableWrap(explode('|',$this->totalWrap,2),$rec,$table);
03781       return $parts[0].$c.$parts[1].implode('',$this->hiddenFieldAccum);
03782    }
03783 
03792    function replaceTableWrap($arr,$rec,$table)  {
03793       global $TCA;
03794       reset($arr);
03795       while(list($k,$v)=each($arr)) {
03796 
03797             // Make "new"-label
03798          if (strstr($rec['uid'],'NEW'))   {
03799             $newLabel = ' <span class="typo3-TCEforms-newToken">'.
03800                      $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.new',1).
03801                      '</span>';
03802 
03803             $truePid = t3lib_BEfunc::getTSconfig_pidValue($table,$rec['uid'],$rec['pid']);
03804             $prec = t3lib_BEfunc::getRecord('pages',$truePid,'title');
03805             $rLabel = '<em>[PID: '.$truePid.'] '.htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle('pages',$prec),40))).'</em>';
03806          } else {
03807             $newLabel = ' <span class="typo3-TCEforms-recUid">['.$rec['uid'].']</span>';
03808             $rLabel  = htmlspecialchars(trim(t3lib_div::fixed_lgd_cs(t3lib_BEfunc::getRecordTitle($table,$rec),40)));
03809          }
03810 
03811             // Make substitutions:
03812          $arr[$k] = str_replace('###ID_NEW_INDICATOR###', $newLabel, $arr[$k]);
03813          $arr[$k] = str_replace('###RECORD_LABEL###',$rLabel,$arr[$k]);
03814          $arr[$k] = str_replace('###TABLE_TITLE###',htmlspecialchars($this->sL($TCA[$table]['ctrl']['title'])),$arr[$k]);
03815 
03816          $titleA=t3lib_BEfunc::titleAltAttrib($this->getRecordPath($table,$rec));
03817          $arr[$k]=str_replace('###RECORD_ICON###',t3lib_iconWorks::getIconImage($table,$rec,$this->backPath,'class="absmiddle"'.$titleA),$arr[$k]);
03818       }
03819       return $arr;
03820    }
03821 
03829    function wrapBorder(&$out_array,&$out_pointer)  {
03830       if ($this->sectionWrap && $out_array[$out_pointer])   {
03831          $tableAttribs='';
03832          $tableAttribs.= $this->borderStyle[0] ? ' style="'.htmlspecialchars($this->borderStyle[0]).'"':'';
03833          $tableAttribs.= $this->borderStyle[2] ? ' background="'.htmlspecialchars($this->backPath.$this->borderStyle[2]).'"':'';
03834          $tableAttribs.= $this->borderStyle[3] ? ' class="'.htmlspecialchars($this->borderStyle[3]).'"':'';
03835          if ($tableAttribs)   {
03836             $tableAttribs='border="0" cellspacing="0" cellpadding="0" width="100%"'.$tableAttribs;
03837             $out_array[$out_pointer] = str_replace('###CONTENT###',$out_array[$out_pointer],
03838                str_replace('###TABLE_ATTRIBS###',$tableAttribs,
03839                   str_replace('###SPACE_BEFORE###',intval($this->borderStyle[1]),$this->sectionWrap)));
03840          }
03841          $out_pointer++;
03842       }
03843    }
03844 
03851    function rplColorScheme($inTemplate)   {
03852          // Colors:
03853       $inTemplate = str_replace('###BGCOLOR###',$this->colorScheme[0]?' bgcolor="'.$this->colorScheme[0].'"':'',$inTemplate);
03854       $inTemplate = str_replace('###BGCOLOR_HEAD###',$this->colorScheme[1]?' bgcolor="'.$this->colorScheme[1].'"':'',$inTemplate);
03855       $inTemplate = str_replace('###FONTCOLOR_HEAD###',$this->colorScheme[3],$inTemplate);
03856 
03857          // Classes:
03858       $inTemplate = str_replace('###CLASSATTR_1###',$this->classScheme[0]?' class="'.$this->classScheme[0].'"':'',$inTemplate);
03859       $inTemplate = str_replace('###CLASSATTR_2###',$this->classScheme[1]?' class="'.$this->classScheme[1].'"':'',$inTemplate);
03860       $inTemplate = str_replace('###CLASSATTR_4###',$this->classScheme[3]?' class="'.$this->classScheme[3].'"':'',$inTemplate);
03861 
03862       return $inTemplate;
03863    }
03864 
03871    function getDivider()   {
03872       //return "<hr />";
03873    }
03874 
03881    function printPalette($palArr)   {
03882 
03883          // Init color/class attributes:
03884       $ccAttr2 = $this->colorScheme[2] ? ' bgcolor="'.$this->colorScheme[2].'"' : '';
03885       $ccAttr2.= $this->classScheme[2] ? ' class="'.$this->classScheme[2].'"' : '';
03886       $ccAttr4 = $this->colorScheme[4] ? ' style="color:'.$this->colorScheme[4].'"' : '';
03887       $ccAttr4.= $this->classScheme[4] ? ' class="'.$this->classScheme[4].'"' : '';
03888 
03889          // Traverse palette fields and render them into table rows:
03890       foreach($palArr as $content)  {
03891          $hRow[]='<td'.$ccAttr2.'>&nbsp;</td>
03892                <td nowrap="nowrap"'.$ccAttr2.'>'.
03893                   '<span'.$ccAttr4.'>'.
03894                      $content['NAME'].
03895                   '</span>'.
03896                '</td>';
03897          $iRow[]='<td valign="top">'.
03898                   '<img name="req_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="10" height="10" vspace="4" alt="" />'.
03899                   '<img name="cm_'.$content['TABLE'].'_'.$content['ID'].'_'.$content['FIELD'].'" src="clear.gif" width="7" height="10" vspace="4" alt="" />'.
03900                '</td>
03901                <td nowrap="nowrap" valign="top">'.
03902                   $content['ITEM'].
03903                   $content['HELP_ICON'].
03904                '</td>';
03905       }
03906 
03907          // Final wrapping into the table:
03908       $out='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-palette">
03909          <tr>
03910             <td><img src="clear.gif" width="'.intval($this->paletteMargin).'" height="1" alt="" /></td>'.
03911                implode('
03912             ',$hRow).'
03913          </tr>
03914          <tr>
03915             <td></td>'.
03916                implode('
03917             ',$iRow).'
03918          </tr>
03919       </table>';
03920 
03921       return $out;
03922    }
03923 
03932    function helpTextIcon($table,$field,$force=0)   {
03933       if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && (($this->edit_showFieldHelp=='icon'&&!$this->doLoadTableDescr($table)) || $force))  {
03934          $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;';
03935          return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
03936                '<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="" />'.
03937                '</a>';
03938       } else {
03939             // Detects fields with no CSH and outputs dummy line to insert into CSH locallang file:
03940          #debug(array("'".$field.".description' => '[FILL IN] ".$table."->".$field."',"),$table);
03941          return '&nbsp;';
03942       }
03943    }
03944 
03952    function helpText($table,$field) {
03953       if ($this->globalShowHelp && $GLOBALS['TCA_DESCR'][$table]['columns'][$field] && ($this->edit_showFieldHelp=='text' || $this->doLoadTableDescr($table))) {
03954          $fDat = $GLOBALS['TCA_DESCR'][$table]['columns'][$field];
03955          return '<table border="0" cellpadding="2" cellspacing="0" width="90%"><tr><td valign="top" width="14">'.
03956                $this->helpTextIcon(
03957                   $table,
03958                   $field,
03959                   $fDat['details']||$fDat['syntax']||$fDat['image_descr']||$fDat['image']||$fDat['seeAlso']
03960                ).
03961                '</td><td valign="top"><span class="typo3-TCEforms-helpText">'.
03962                $GLOBALS['LANG']->hscAndCharConv($fDat['description'],1).
03963                '</span></td></tr></table>';
03964       }
03965    }
03966 
03973    function setColorScheme($scheme) {
03974       $this->colorScheme = $this->defColorScheme;
03975       $this->classScheme = $this->defClassScheme;
03976 
03977       $parts = t3lib_div::trimExplode(',',$scheme);
03978       foreach($parts as $key => $col)  {
03979             // Split for color|class:
03980          list($color,$class) = t3lib_div::trimExplode('|',$col);
03981 
03982             // Handle color values:
03983          if ($color) $this->colorScheme[$key] = $color;
03984          if ($color=='-')  $this->colorScheme[$key] = '';
03985 
03986             // Handle class values:
03987          if ($class) $this->classScheme[$key] = $class;
03988          if ($class=='-')  $this->classScheme[$key] = '';
03989       }
03990    }
03991 
03997    function resetSchemes() {
03998       $this->setColorScheme($GLOBALS['TBE_STYLES']['colorschemes'][0]);
03999       $this->fieldStyle = $GLOBALS['TBE_STYLES']['styleschemes'][0];
04000       $this->borderStyle = $GLOBALS['TBE_STYLES']['borderschemes'][0];
04001    }
04002 
04008    function storeSchemes() {
04009       $this->savedSchemes['classScheme'] = $this->classScheme;
04010       $this->savedSchemes['colorScheme'] = $this->colorScheme;
04011       $this->savedSchemes['fieldStyle'] = $this->fieldStyle;
04012       $this->savedSchemes['borderStyle'] = $this->borderStyle;
04013    }
04014 
04020    function restoreSchemes()  {
04021       $this->classScheme = $this->savedSchemes['classScheme'];
04022       $this->colorScheme = $this->savedSchemes['colorScheme'];
04023       $this->fieldStyle = $this->savedSchemes['fieldStyle'];
04024       $this->borderStyle = $this->savedSchemes['borderStyle'];
04025    }
04026 
04027 
04028 
04029 
04030 
04031 
04032 
04033 
04034 
04035 
04036 
04037 
04038 
04039    /********************************************
04040     *
04041     * JavaScript related functions
04042     *
04043     ********************************************/
04044 
04050    function JStop()  {
04051 
04052       $out = '';
04053 
04054          // Additional top HTML:
04055       if (count($this->additionalCode_pre))  {
04056          $out.= implode('
04057 
04058             <!-- NEXT: -->
04059          ',$this->additionalCode_pre);
04060       }
04061 
04062          // Additional top JavaScript
04063       if (count($this->additionalJS_pre)) {
04064          $out.='
04065 
04066 
04067       <!--
04068          JavaScript in top of page (before form):
04069       -->
04070 
04071       <script type="text/javascript">
04072          /*<![CDATA[*/
04073 
04074          '.implode('
04075 
04076             // NEXT:
04077          ',$this->additionalJS_pre).'
04078 
04079          /*]]>*/
04080       </script>
04081          ';
04082       }
04083 
04084          // Return result:
04085       return $out;
04086    }
04087 
04101    function JSbottom($formname='forms[0]')   {
04102 
04103             // required
04104          $reqLines=array();
04105          $reqLinesCheck=array();
04106          $reqLinesSet=array();
04107          reset($this->requiredFields);
04108          while(list($itemImgName,$itemName)=each($this->requiredFields))   {
04109             $reqLines[]="              TBE_REQUIRED['".$itemName."']=1;";
04110             $reqLinesCheck[]="               if (!document.".$formname."['".$itemName."'].value)   {OK=0;}";
04111             $reqLinesSet[]="              if (!document.".$formname."['".$itemName."'].value)   {TBE_EDITOR_setImage('req_".$itemImgName."','TBE_EDITOR_req');}";
04112          }
04113 
04114          $reqRange=array();
04115          $reqRangeCheck=array();
04116          $reqRangeSet=array();
04117          reset($this->requiredElements);
04118          while(list($itemName,$range)=each($this->requiredElements)) {
04119             $reqRange[]="              TBE_RANGE['".$itemName."']=1;";
04120             $reqRange[]="              TBE_RANGE_lower['".$itemName."']=".$range[0].";";
04121             $reqRange[]="              TBE_RANGE_upper['".$itemName."']=".$range[1].";";
04122             $reqRangeCheck[]="               if (!TBE_EDITOR_checkRange(document.".$formname."['".$itemName."_list'],".$range[0].",".$range[1].")) {OK=0;}";
04123             $reqRangeSet[]="              if (!TBE_EDITOR_checkRange(document.".$formname."['".$itemName."_list'],".$range[0].",".$range[1].")) {TBE_EDITOR_setImage('req_".$range['imgName']."','TBE_EDITOR_req');}";
04124          }
04125 
04126          $this->TBE_EDITOR_fieldChanged_func='TBE_EDITOR_fieldChanged_fName(fName,formObj[fName+"_list"]);';
04127 
04128          if ($this->loadMD5_JS)  {
04129          $out.='
04130          <script type="text/javascript" src="'.$this->backPath.'md5.js"></script>';
04131          }
04132          $out.='
04133          <script type="text/javascript" src="'.$this->backPath.'t3lib/jsfunc.evalfield.js"></script>
04134          <script type="text/javascript">
04135             /*<![CDATA[*/
04136 
04137             var TBE_EDITOR_req=new Image();  TBE_EDITOR_req.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/required_h.gif','',1).'";
04138             var TBE_EDITOR_cm=new Image();      TBE_EDITOR_cm.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_client.gif','',1).'";
04139             var TBE_EDITOR_sel=new Image();  TBE_EDITOR_sel.src = "'.t3lib_iconWorks::skinImg($this->backPath,'gfx/content_selected.gif','',1).'";
04140             var TBE_EDITOR_clear=new Image();   TBE_EDITOR_clear.src = "'.$this->backPath.'clear.gif";
04141             var TBE_REQUIRED=new Array();
04142 '.implode(chr(10),$reqLines).'
04143 
04144             var TBE_RANGE=new Array();
04145             var TBE_RANGE_lower=new Array();
04146             var TBE_RANGE_upper=new Array();
04147 '.implode(chr(10),$reqRange).'
04148 
04149             // $this->additionalJS_post:
04150 '.implode(chr(10),$this->additionalJS_post).'
04151 
04152             var TBE_EDITOR_loadTime = 0;
04153             var TBE_EDITOR_isChanged = 0;
04154 
04155             function TBE_EDITOR_loginRefreshed()   {  //
04156                var date = new Date();
04157                TBE_EDITOR_loadTime = Math.floor(date.getTime()/1000);
04158                if (top.busy && top.busy.loginRefreshed)  {top.busy.loginRefreshed();}
04159             }
04160             function TBE_EDITOR_checkLoginTimeout()   {  //
04161                var date = new Date();
04162                var theTime = Math.floor(date.getTime()/1000);
04163                if (theTime > TBE_EDITOR_loadTime+'.intval($GLOBALS['BE_USER']->auth_timeout_field).'-10) {
04164                   return true;
04165                }
04166             }
04167             function TBE_EDITOR_setHiddenContent(RTEcontent,theField)   {  //
04168                document.'.$formname.'[theField].value = RTEcontent;
04169                alert(document.'.$formname.'[theField].value);
04170             }
04171             function TBE_EDITOR_fieldChanged_fName(fName,el)   {  //
04172                var idx='.(2+substr_count($this->prependFormFieldNames,'[')).';
04173                var table = TBE_EDITOR_split(fName, "[", idx);
04174                var uid = TBE_EDITOR_split(fName, "[", idx+1);
04175                var field = TBE_EDITOR_split(fName, "[", idx+2);
04176 
04177                table = table.substr(0,table.length-1);
04178                uid = uid.substr(0,uid.length-1);
04179                field = field.substr(0,field.length-1);
04180                TBE_EDITOR_fieldChanged(table,uid,field,el);
04181             }
04182             function TBE_EDITOR_fieldChanged(table,uid,field,el)  {  //
04183                var theField = "'.$this->prependFormFieldNames.'["+table+"]["+uid+"]["+field+"]";
04184                TBE_EDITOR_isChanged = 1;
04185 
04186                   // Set change image:
04187                var imgObjName = "cm_"+table+"_"+uid+"_"+field;
04188                TBE_EDITOR_setImage(imgObjName,"TBE_EDITOR_cm");
04189 
04190                   // Set change image
04191                if (document.'.$formname.'[theField] && document.'.$formname.'[theField].type=="select-one" && document.'.$formname.'[theField+"_selIconVal"])  {
04192                   var imgObjName = "selIcon_"+table+"_"+uid+"_"+field+"_";
04193                   TBE_EDITOR_setImage(imgObjName+document.'.$formname.'[theField+"_selIconVal"].value,"TBE_EDITOR_clear");
04194                   document.'.$formname.'[theField+"_selIconVal"].value = document.'.$formname.'[theField].selectedIndex;
04195                   TBE_EDITOR_setImage(imgObjName+document.'.$formname.'[theField+"_selIconVal"].value,"TBE_EDITOR_sel");
04196                }
04197 
04198                   // Set required flag:
04199                var imgReqObjName = "req_"+table+"_"+uid+"_"+field;
04200                if (TBE_REQUIRED[theField] && document.'.$formname.'[theField])   {
04201                   if (document.'.$formname.'[theField].value)  {
04202                      TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_clear");
04203                   } else {
04204                      TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_req");
04205                   }
04206                }
04207                if (TBE_RANGE[theField] && document.'.$formname.'[theField])   {
04208                   if (TBE_EDITOR_checkRange(document.'.$formname.'[theField+"_list"],TBE_RANGE_lower[theField],TBE_RANGE_upper[theField]))   {
04209                      TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_clear");
04210                   } else {
04211                      TBE_EDITOR_setImage(imgReqObjName,"TBE_EDITOR_req");
04212                   }
04213                }
04214                '.(!$this->isPalettedoc?'':'
04215                TBE_EDITOR_setOriginalFormFieldValue(theField);
04216                ').'
04217             }
04218             '.($this->isPalettedoc?'
04219             function TBE_EDITOR_setOriginalFormFieldValue(theField)  {  //
04220                if ('.$this->isPalettedoc.' && '.$this->isPalettedoc.'.document.'.$formname.' && '.$this->isPalettedoc.'.document.'.$formname.'[theField]) {
04221                   '.$this->isPalettedoc.'.document.'.$formname.'[theField].value = document.'.$formname.'[theField].value;
04222                }
04223             }
04224             ':'').'
04225             function TBE_EDITOR_isFormChanged(noAlert)   {  //
04226                if (TBE_EDITOR_isChanged && !noAlert && confirm('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsChanged')).'))  {
04227                   return 0;
04228                }
04229                return TBE_EDITOR_isChanged;
04230             }
04231             function TBE_EDITOR_checkAndDoSubmit(sendAlert) {  //
04232                if (TBE_EDITOR_checkSubmit(sendAlert)) {
04233                   TBE_EDITOR_submitForm();
04234                }
04235             }
04236 
04243             function TBE_EDITOR_checkSubmit(sendAlert)   {  //
04244                if (TBE_EDITOR_checkLoginTimeout() && confirm('.$GLOBALS['LANG']->JScharCode($this->getLL('m_refresh_login')).')) {
04245                   vHWin=window.open(\''.$this->backPath.'login_frameset.php?\',\'relogin\',\'height=300,width=400,status=0,menubar=0\');
04246                   vHWin.focus();
04247                   return false;
04248                }
04249                var OK=1;
04250 
04251                // $this->additionalJS_post:
04252 '.implode(chr(10),$this->additionalJS_submit).'
04253 
04254                if(!OK)  {
04255                   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."))) {
04256                      return false;
04257                   } else {
04258                      OK = 1;
04259                   }
04260                }
04261 
04262 '.implode(chr(10),$reqLinesCheck).'
04263 '.implode(chr(10),$reqRangeCheck).'
04264 
04265                if (OK || sendAlert==-1)   {
04266                   return true;
04267                } else {
04268                   if(sendAlert)  alert('.$GLOBALS['LANG']->JScharCode($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.fieldsMissing')).');
04269                   return false;
04270                }
04271             }
04272             function TBE_EDITOR_checkRange(el,lower,upper)  {  //
04273                if (el && el.length>=lower && el.length<=upper) {
04274                   return true;
04275                } else {
04276                   return false;
04277                }
04278             }
04279             function TBE_EDITOR_initRequired()  {  //
04280 '.implode(chr(10),$reqLinesSet).'
04281 '.implode(chr(10),$reqRangeSet).'
04282             }
04283             function TBE_EDITOR_setImage(name,imgName)   {  //
04284                if (document[name]) {document[name].src = eval(imgName+".src");}
04285             }
04286             function TBE_EDITOR_submitForm() {  //
04287                '.($this->doSaveFieldName?'document.'.$this->formName."['".$this->doSaveFieldName."'].value=1;":'').'
04288                document.'.$this->formName.'.submit();
04289             }
04290             function typoSetup   () {  //
04291                this.passwordDummy = "********";
04292                this.decimalSign = ".";
04293             }
04294             var TS = new typoSetup();
04295             var evalFunc = new evalFunc();
04296 
04297             function typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue)   {  //
04298                if (document.'.$formname.'[theField])  {
04299                   var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
04300                   var theValue = document.'.$formname.'[theField].value;
04301                   if (checkbox && theValue==checkboxValue)  {
04302                      document.'.$formname.'[theField+"_hr"].value="";
04303                      if (document.'.$formname.'[theField+"_cb"])  document.'.$formname.'[theField+"_cb"].checked = "";
04304                   } else {
04305                      document.'.$formname.'[theField+"_hr"].value = evalFunc.outputObjValue(theFObj, theValue);
04306                      if (document.'.$formname.'[theField+"_cb"])  document.'.$formname.'[theField+"_cb"].checked = "on";
04307                   }
04308                }
04309             }
04310             function typo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off, checkSetValue) {  //
04311                if (document.'.$formname.'[theField])  {
04312                   var theFObj = new evalFunc_dummy (evallist,is_in, checkbox, checkboxValue);
04313                   if (checkbox_off) {
04314                      if (document.'.$formname.'[theField+"_cb"].checked)   {
04315                         document.'.$formname.'[theField].value=checkSetValue;
04316                      } else {
04317                         document.'.$formname.'[theField].value=checkboxValue;
04318                      }
04319                   }else{
04320                      document.'.$formname.'[theField].value = evalFunc.evalObjValue(theFObj, document.'.$formname.'[theField+"_hr"].value);
04321                   }
04322                   typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue);
04323                }
04324             }
04325             function TBE_EDITOR_split(theStr1, delim, index) {    //
04326                var theStr = ""+theStr1;
04327                var lengthOfDelim = delim.length;
04328                sPos = -lengthOfDelim;
04329                if (index<1) {index=1;}
04330                for (var a=1; a<index; a++)   {
04331                   sPos = theStr.indexOf(delim, sPos+lengthOfDelim);
04332                   if (sPos==-1)  {return null;}
04333                }
04334                ePos = theStr.indexOf(delim, sPos+lengthOfDelim);
04335                if(ePos == -1) {ePos = theStr.length;}
04336                return (theStr.substring(sPos+lengthOfDelim,ePos));
04337             }
04338             function TBE_EDITOR_palUrl(inData,fieldList,fieldNum,table,uid,isOnFocus) {      //
04339                var url = "'.$this->backPath.'alt_palette.php?inData="+inData+"&formName='.rawurlencode($this->formName).'"+"&prependFormFieldNames='.rawurlencode($this->prependFormFieldNames).'";
04340                var field = "";
04341                var theField="";
04342                for (var a=0; a<fieldNum;a++) {
04343                   field = TBE_EDITOR_split(fieldList, ",", a+1);
04344                   theField = "'.$this->prependFormFieldNames.'["+table+"]["+uid+"]["+field+"]";
04345                   if (document.'.$formname.'[theField])     url+="&rec["+field+"]="+TBE_EDITOR_rawurlencode(document.'.$formname.'[theField].value);
04346                }
04347                if (top.topmenuFrame)   {
04348                   top.topmenuFrame.document.location = url+"&backRef="+(top.content.list_frame ? (top.content.list_frame.view_frame ? "top.content.list_frame.view_frame" : "top.content.list_frame") : "top.content");
04349                } else if (!isOnFocus) {
04350                   var vHWin=window.open(url,"palette","height=300,width=200,status=0,menubar=0,scrollbars=1");
04351                   vHWin.focus();
04352                }
04353             }
04354             function TBE_EDITOR_curSelected(theField) {  //
04355                var fObjSel = document.'.$formname.'[theField];
04356                var retVal="";
04357                if (fObjSel)   {
04358                   if (fObjSel.type=="select-multiple" || fObjSel.type=="select-one")   {
04359                      var l=fObjSel.length;
04360                      for (a=0;a<l;a++) {
04361                         if (fObjSel.options[a].selected==1) {
04362                            retVal+=fObjSel.options[a].value+",";
04363                         }
04364                      }
04365                   }
04366                }
04367                return retVal;
04368             }
04369             function TBE_EDITOR_rawurlencode(str,maxlen) {  //
04370                var output = str;
04371                if (maxlen) output = output.substr(0,200);
04372                output = escape(output);
04373                output = TBE_EDITOR_str_replace("*","%2A", output);
04374                output = TBE_EDITOR_str_replace("+","%2B", output);
04375                output = TBE_EDITOR_str_replace("/","%2F", output);
04376                output = TBE_EDITOR_str_replace("@","%40", output);
04377                return output;
04378             }
04379             function TBE_EDITOR_str_replace(match,replace,string) {  //
04380                var input = ""+string;
04381                var matchStr = ""+match;
04382                if (!matchStr) {return string;}
04383                var output = "";
04384                var pointer=0;
04385                var pos = input.indexOf(matchStr);
04386                while (pos!=-1)   {
04387                   output+=""+input.substr(pointer, pos-pointer)+replace;
04388                   pointer=pos+matchStr.length;
04389                   pos = input.indexOf(match,pos+1);
04390                }
04391                output+=""+input.substr(pointer);
04392                return output;
04393             }
04394             /*]]>*/
04395          </script>
04396          <script type="text/javascript">
04397             /*<![CDATA[*/
04398 
04399             '.$this->extJSCODE.'
04400 
04401             TBE_EDITOR_initRequired();
04402             TBE_EDITOR_loginRefreshed();
04403             /*]]>*/
04404          </script>';
04405          return $out;
04406    }
04407 
04414    function dbFileCon($formObj='document.forms[0]')   {
04415       $str='
04416 
04417          // ***************
04418          // Used to connect the db/file browser with this document and the formfields on it!
04419          // ***************
04420 
04421          var browserWin="";
04422 
04423          function setFormValueOpenBrowser(mode,params) { //
04424             var url = "'.$this->backPath.'browser.php?mode="+mode+"&bparams="+params;
04425 
04426             browserWin = window.open(url,"Typo3WinBrowser","height=350,width="+(mode=="db"?650:600)+",status=0,menubar=0,resizable=1,scrollbars=1");
04427             browserWin.focus();
04428          }
04429          function setFormValueFromBrowseWin(fName,value,label) {  //
04430             var formObj = setFormValue_getFObj(fName)
04431             if (formObj && value!="--div--") {
04432                fObj = formObj[fName+"_list"];
04433                   // Inserting element
04434                var l=fObj.length;
04435                var setOK=1;
04436                if (!formObj[fName+"_mul"] || formObj[fName+"_mul"].value==0)  {
04437                   for (a=0;a<l;a++) {
04438                      if (fObj.options[a].value==value)   {
04439                         setOK=0;
04440                      }
04441                   }
04442                }
04443                if (setOK)  {
04444                   fObj.length++;
04445                   fObj.options[l].value=value;
04446                   fObj.options[l].text=unescape(label);
04447 
04448                      // Traversing list and set the hidden-field
04449                   setHiddenFromList(fObj,formObj[fName]);
04450                   '.$this->TBE_EDITOR_fieldChanged_func.'
04451                }
04452             }
04453          }
04454          function setHiddenFromList(fObjSel,fObjHid)  {  //
04455             l=fObjSel.length;
04456             fObjHid.value="";
04457             for (a=0;a<l;a++) {
04458                fObjHid.value+=fObjSel.options[a].value+",";
04459             }
04460          }
04461          function setFormValueManipulate(fName,type)  {  //
04462             var formObj = setFormValue_getFObj(fName)
04463             if (formObj)   {
04464                var localArray_V = new Array();
04465                var localArray_L = new Array();
04466                var fObjSel = formObj[fName+"_list"];
04467                var l=fObjSel.length;
04468                var c=0;
04469                var cS=0;
04470                if (type=="Remove" || type=="Up")   {
04471                   if (type=="Up")   {
04472                      for (a=0;a<l;a++) {
04473                         if (fObjSel.options[a].selected==1) {
04474                            localArray_V[c]=fObjSel.options[a].value;
04475                            localArray_L[c]=fObjSel.options[a].text;
04476                            c++;
04477                            cS++;
04478                         }
04479                      }
04480                   }
04481                   for (a=0;a<l;a++) {
04482                      if (fObjSel.options[a].selected!=1) {
04483                         localArray_V[c]=fObjSel.options[a].value;
04484                         localArray_L[c]=fObjSel.options[a].text;
04485                         c++;
04486                      }
04487                   }
04488                }
04489                fObjSel.length = c;
04490                for (a=0;a<c;a++) {
04491                   fObjSel.options[a].value = localArray_V[a];
04492                   fObjSel.options[a].text = localArray_L[a];
04493                   fObjSel.options[a].selected=(a<cS)?1:0;
04494                }
04495                setHiddenFromList(fObjSel,formObj[fName]);
04496 
04497                '.$this->TBE_EDITOR_fieldChanged_func.'
04498             }
04499          }
04500          function setFormValue_getFObj(fName)   {  //
04501             var formObj = '.$formObj.';
04502             if (formObj)   {
04503                if (formObj[fName] && formObj[fName+"_list"] && formObj[fName+"_list"].type=="select-multiple") {
04504                   return formObj;
04505                } else {
04506                   alert("Formfields missing:\n fName: "+formObj[fName]+"\n fName_list:"+formObj[fName+"_list"]+"\n type:"+formObj[fName+"_list"].type+"\n fName:"+fName);
04507                }
04508             }
04509             return "";
04510          }
04511 
04512          // END: dbFileCon parts.
04513       ';
04514       return $str;
04515    }
04516 
04522    function printNeededJSFunctions()   {
04523          // JS evaluation:
04524       $out = $this->JSbottom($this->formName);
04525          //
04526       if ($this->printNeededJS['dbFileIcons'])  {
04527          $out.= '
04528 
04529 
04530 
04531          <!--
04532             JavaScript after the form has been drawn:
04533          -->
04534 
04535          <script type="text/javascript">
04536             /*<![CDATA[*/
04537          '.$this->dbFileCon('document.'.$this->formName).'
04538             /*]]>*/
04539          </script>';
04540       }
04541       return $out;
04542    }
04543 
04549    function printNeededJSFunctions_top()  {
04550          // JS evaluation:
04551       $out = $this->JStop($this->formName);
04552       return $out;
04553    }
04554 
04555 
04556 
04557 
04558 
04559 
04560 
04561 
04562 
04563 
04564 
04565 
04566 
04567 
04568 
04569 
04570 
04571 
04572 
04573 
04574 
04575 
04576 
04577 
04578 
04579 
04580 
04581 
04582 
04583    /********************************************
04584     *
04585     * Various helper functions
04586     *
04587     ********************************************/
04588 
04589 
04597    function getDefaultRecord($table,$pid=0)  {
04598       global $TCA;
04599       if ($TCA[$table]) {
04600          t3lib_div::loadTCA($table);
04601          $row = array();
04602 
04603          if ($pid<0 && $TCA[$table]['ctrl']['useColumnsForDefaultValues']) {
04604                // Fetches the previous record:
04605             $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $table, 'uid='.abs($pid).t3lib_BEfunc::deleteClause($table));
04606             if ($drow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
04607                   // Gets the list of fields to copy from the previous record.
04608                $fArr = explode(',',$TCA[$table]['ctrl']['useColumnsForDefaultValues']);
04609                foreach($fArr as $theF) {
04610                   if ($TCA[$table]['columns'][$theF]) {
04611                      $row[$theF] = $drow[$theF];
04612                   }
04613                }
04614             }
04615             $GLOBALS['TYPO3_DB']->sql_free_result($res);
04616          }
04617 
04618          foreach($TCA[$table]['columns'] as $field => $info)   {
04619             if (isset($info['config']['default'])) {
04620                $row[$field] = $info['config']['default'];
04621             }
04622          }
04623 
04624          return $row;
04625       }
04626    }
04627 
04636    function getRecordPath($table,$rec) {
04637       t3lib_BEfunc::fixVersioningPid($table,$rec);
04638       list($tscPID,$thePidValue)=$this->getTSCpid($table,$rec['uid'],$rec['pid']);
04639       if ($thePidValue>=0) {
04640          return t3lib_BEfunc::getRecordPath($tscPID,$this->readPerms(),15);
04641       }
04642    }
04643 
04650    function readPerms() {
04651       if (!$this->perms_clause_set) {
04652          $this->perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
04653          $this->perms_clause_set=1;
04654       }
04655       return $this->perms_clause;
04656    }
04657 
04664    function sL($str) {
04665       return $GLOBALS['LANG']->sL($str);
04666    }
04667 
04677    function getLL($str) {
04678       switch(substr($str,0,2))   {
04679          case 'l_':
04680             return $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.'.substr($str,2));
04681          break;
04682          case 'm_':
04683             return $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:mess.'.substr($str,2));
04684          break;
04685       }
04686    }
04687 
04695    function isPalettesCollapsed($table,$palette)   {
04696       global $TCA;
04697 
04698       if ($TCA[$table]['ctrl']['canNotCollapse']) return 0;
04699       if (is_array($TCA[$table]['palettes'][$palette]) && $TCA[$table]['palettes'][$palette]['canNotCollapse'])   return 0;
04700       return $this->palettesCollapsed;
04701    }
04702 
04710    function isDisplayCondition($displayCond,$row)  {
04711       $output = FALSE;
04712 
04713       $parts = explode(':',$displayCond);
04714       switch((string)$parts[0])  {  // Type of condition:
04715          case 'FIELD':
04716             switch((string)$parts[2])  {
04717                case 'REQ':
04718                   if (strtolower($parts[3])=='true')  {
04719                      $output = $row[$parts[1]] ? TRUE : FALSE;
04720                   } elseif (strtolower($parts[3])=='false') {
04721                      $output = !$row[$parts[1]] ? TRUE : FALSE;
04722                   }
04723                break;
04724                case '>':
04725                   $output = $row[$parts[1]] > $parts[3];
04726                break;
04727                case '<':
04728                   $output = $row[$parts[1]] < $parts[3];
04729                break;
04730                case '>=':
04731                   $output = $row[$parts[1]] >= $parts[3];
04732                break;
04733                case '<=':
04734                   $output = $row[$parts[1]] <= $parts[3];
04735                break;
04736                case '-':
04737                case '!-':
04738                   $cmpParts = explode('-',$parts[3]);
04739                   $output = $row[$parts[1]] >= $cmpParts[0] && $row[$parts[1]] <= $cmpParts[1];
04740                   if ($parts[2]{0}=='!')  $output = !$output;
04741                break;
04742                case 'IN':
04743                case '!IN':
04744                   $output = t3lib_div::inList($parts[3],$row[$parts[1]]);
04745                   if ($parts[2]{0}=='!')  $output = !$output;
04746                break;
04747                case '=':
04748                case '!=':
04749                   $output = t3lib_div::inList($parts[3],$row[$parts[1]]);
04750                   if ($parts[2]{0}=='!')  $output = !$output;
04751                break;
04752             }
04753          break;
04754          case 'EXT':
04755             switch((string)$parts[2])  {
04756                case 'LOADED':
04757                   if (strtolower($parts[3])=='true')  {
04758                      $output = t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
04759                   } elseif (strtolower($parts[3])=='false') {
04760                      $output = !t3lib_extMgm::isLoaded($parts[1]) ? TRUE : FALSE;
04761                   }
04762                break;
04763             }
04764          break;
04765          case 'REC':
04766             switch((string)$parts[1])  {
04767                case 'NEW':
04768                   if (strtolower($parts[2])=='true')  {
04769                      $output = !(intval($row['uid']) > 0) ? TRUE : FALSE;
04770                   } elseif (strtolower($parts[2])=='false') {
04771                      $output = (intval($row['uid']) > 0) ? TRUE : FALSE;
04772                   }
04773                break;
04774             }
04775          break;
04776       }
04777 
04778       return $output;
04779    }
04780 
04791    function getTSCpid($table,$uid,$pid)   {
04792       $key = $table.':'.$uid.':'.$pid;
04793       if (!isset($this->cache_getTSCpid[$key])) {
04794          $this->cache_getTSCpid[$key] = t3lib_BEfunc::getTSCpid($table,$uid,$pid);
04795       }
04796       return $this->cache_getTSCpid[$key];
04797    }
04798 
04805    function doLoadTableDescr($table)   {
04806       global $TCA;
04807       return $TCA[$table]['interface']['always_description'];
04808    }
04809 
04817    function getAvailableLanguages($onlyIsoCoded=1,$setDefault=1)  {
04818       $isL = t3lib_extMgm::isLoaded('static_info_tables');
04819 
04820          // Find all language records in the system:
04821       $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('static_lang_isocode,title,uid', 'sys_language', 'pid=0 AND NOT hidden'.t3lib_BEfunc::deleteClause('sys_language'), '', 'title');
04822 
04823          // Traverse them:
04824       $output=array();
04825       if ($setDefault)  {
04826          $output[0]=array(
04827             'uid' => 0,
04828             'title' => 'Default language',
04829             'ISOcode' => 'DEF'
04830          );
04831       }
04832       while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))   {
04833          $output[$row['uid']]=$row;
04834 
04835          if ($isL && $row['static_lang_isocode'])  {
04836             $rr = t3lib_BEfunc::getRecord('static_languages',$row['static_lang_isocode'],'lg_iso_2');
04837             if ($rr['lg_iso_2']) $output[$row['uid']]['ISOcode']=$rr['lg_iso_2'];
04838          }
04839 
04840          if ($onlyIsoCoded && !$output[$row['uid']]['ISOcode'])   unset($output[$row['uid']]);
04841       }
04842       return $output;
04843    }
04844 }

getSingleField_typeGroup table,
field,
row,
&$  PA
 

Generation of TCEform elements of the type "group" This will render a selectorbox into which elements from either the file system or database can be inserted.

Relations.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Definition at line 1627 of file class.t3lib_tceforms.php.

References t3lib_BEfunc::getFileIcon(), t3lib_iconWorks::getIconImage(), t3lib_BEfunc::getRecord(), t3lib_BEfunc::splitTable_Uid(), and table().

Referenced by getSingleField_SW().

01627                                                                {
01628          // Init:
01629       $config = $PA['fieldConf']['config'];
01630       $internal_type = $config['internal_type'];
01631       $show_thumbs = $config['show_thumbs'];
01632       $size = intval($config['size']);
01633       $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01634       if (!$maxitems)   $maxitems=100000;
01635       $minitems = t3lib_div::intInRange($config['minitems'],0);
01636       $allowed = $config['allowed'];
01637       $disallowed = $config['disallowed'];
01638 
01639       $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'" />';
01640       $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01641       $info='';
01642 
01643          // Acting according to either "file" or "db" type:
01644       switch((string)$config['internal_type'])  {
01645          case 'file':   // If the element is of the internal type "file":
01646 
01647                // Creating string showing allowed types:
01648             $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01649             if (!count($tempFT)) {$info.='*';}
01650             foreach($tempFT as $ext)   {
01651                if ($ext)   {
01652                   $info.=strtoupper($ext).' ';
01653                }
01654             }
01655                // Creating string, showing disallowed types:
01656             $tempFT_dis = t3lib_div::trimExplode(',',$disallowed,1);
01657             if (count($tempFT_dis)) {$info.='<br />';}
01658             foreach($tempFT_dis as $ext)  {
01659                if ($ext)   {
01660                   $info.='-'.strtoupper($ext).' ';
01661                }
01662             }
01663 
01664                // Making the array of file items:
01665             $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01666 
01667                // Showing thumbnails:
01668             $thumbsnail = '';
01669             if ($show_thumbs) {
01670                $imgs = array();
01671                foreach($itemArray as $imgRead)  {
01672                   $imgP = explode('|',$imgRead);
01673 
01674                   $rowCopy = array();
01675                   $rowCopy[$field] = $imgP[0];
01676 
01677                      // Icon + clickmenu:
01678                   $absFilePath = t3lib_div::getFileAbsFileName($config['uploadfolder'].'/'.$imgP[0]);
01679 
01680                   $fI = pathinfo($imgP[0]);
01681                   $fileIcon = t3lib_BEfunc::getFileIcon(strtolower($fI['extension']));
01682                   $fileIcon = '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/fileicons/'.$fileIcon,'width="18" height="16"').' class="absmiddle" title="'.htmlspecialchars($fI['basename'].($absFilePath ? ' ('.t3lib_div::formatSize(filesize($absFilePath)).'bytes)' : ' - FILE NOT FOUND!')).'" alt="" />';
01683 
01684                   $imgs[] = '<span class="nobr">'.t3lib_BEfunc::thumbCode($rowCopy,$table,$field,$this->backPath,'thumbs.php',$config['uploadfolder'],0,' align="middle"').
01685                            ($absFilePath ? $this->getClickMenu($fileIcon, $absFilePath) : $fileIcon).
01686                            $imgP[0].
01687                            '</span>';
01688                }
01689                $thumbsnail = implode('<br />',$imgs);
01690             }
01691 
01692                // Creating the element:
01693             $params = array(
01694                'size' => $size,
01695                'dontShowMoveIcons' => ($maxitems<=1),
01696                'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01697                'maxitems' => $maxitems,
01698                'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01699                'info' => $info,
01700                'thumbnails' => $thumbsnail
01701             );
01702             $item.= $this->dbFileIcons($PA['itemFormElName'],'file',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01703 
01704                // Adding the upload field:
01705             if ($this->edit_docModuleUpload) $item.='<input type="file" name="'.$PA['itemFormElName_file'].'"'.$this->formWidth().' size="60" />';
01706          break;
01707          case 'db':  // If the element is of the internal type "db":
01708 
01709                // Creating string showing allowed types:
01710             $tempFT = t3lib_div::trimExplode(',',$allowed,1);
01711             if (!strcmp(trim($tempFT[0]),'*'))  {
01712                $info.='<span class="nobr">&nbsp;&nbsp;&nbsp;&nbsp;'.
01713                      htmlspecialchars($this->getLL('l_allTables')).
01714                      '</span><br />';
01715             } else {
01716                while(list(,$theT)=each($tempFT))   {
01717                   if ($theT)  {
01718                      $info.='<span class="nobr">&nbsp;&nbsp;&nbsp;&nbsp;'.
01719                            t3lib_iconWorks::getIconImage($theT,array(),$this->backPath,'align="top"').
01720                            htmlspecialchars($this->sL($GLOBALS['TCA'][$theT]['ctrl']['title'])).
01721                            '</span><br />';
01722                   }
01723                }
01724             }
01725 
01726             $perms_clause = $GLOBALS['BE_USER']->getPagePermsClause(1);
01727             $itemArray = array();
01728             $imgs = array();
01729 
01730                // Thumbnails:
01731             $temp_itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01732             foreach($temp_itemArray as $dbRead) {
01733                $recordParts = explode('|',$dbRead);
01734                list($this_table,$this_uid) = t3lib_BEfunc::splitTable_Uid($recordParts[0]);
01735                $itemArray[] = array('table'=>$this_table, 'id'=>$this_uid);
01736                if ($show_thumbs) {
01737                   $rr = t3lib_BEfunc::getRecord($this_table,$this_uid);
01738                   $imgs[] = '<span class="nobr">'.
01739                         $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).
01740                         '&nbsp;'.
01741                         $this->noTitle($rr[$GLOBALS['TCA'][$this_table]['ctrl']['label']],array('<em>','</em>')).
01742                         '</span>';
01743                }
01744             }
01745             $thumbsnail='';
01746             if ($show_thumbs) {
01747                $thumbsnail = implode('<br />',$imgs);
01748             }
01749 
01750                // Creating the element:
01751             $params = array(
01752                'size' => $size,
01753                'dontShowMoveIcons' => ($maxitems<=1),
01754                'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01755                'maxitems' => $maxitems,
01756                'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01757                'info' => $info,
01758                'thumbnails' => $thumbsnail
01759             );
01760             $item.= $this->dbFileIcons($PA['itemFormElName'],'db',implode(',',$tempFT),$itemArray,'',$params,$PA['onFocus']);
01761          break;
01762       }
01763 
01764          // Wizards:
01765       $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01766       $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
01767 
01768       return $item;
01769    }

getSingleField_typeInput table,
field,
row,
&$  PA
 

Generation of TCEform elements of the type "input" This will render a single-line input form field, possibly with various control/validation features.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Definition at line 903 of file class.t3lib_tceforms.php.

References table().

Referenced by getSingleField_SW().

00903                                                                {
00904       // typo3FormFieldSet(theField, evallist, is_in, checkbox, checkboxValue)
00905       // typo3FormFieldGet(theField, evallist, is_in, checkbox, checkboxValue, checkbox_off)
00906 
00907       $config = $PA['fieldConf']['config'];
00908 #     $specConf = $this->getSpecConfForField($table,$row,$field);
00909       $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
00910       $size = t3lib_div::intInRange($config['size']?$config['size']:30,5,$this->maxInputWidth);
00911       $evalList = t3lib_div::trimExplode(',',$config['eval'],1);
00912 
00913       if (in_array('required',$evalList)) {
00914          $this->requiredFields[$table.'_'.$row['uid'].'_'.$field]=$PA['itemFormElName'];
00915       }
00916 
00917       $paramsList = "'".$PA['itemFormElName']."','".implode(',',$evalList)."','".trim($config['is_in'])."',".(isset($config['checkbox'])?1:0).",'".$config['checkbox']."'";
00918       if (isset($config['checkbox']))  {
00919             // Setting default "click-checkbox" values for eval types "date" and "datetime":
00920          $nextMidNight = mktime(0,0,0)+1*3600*24;
00921          $checkSetValue = in_array('date',$evalList) ? $nextMidNight : '';
00922          $checkSetValue = in_array('datetime',$evalList) ? time() : $checkSetValue;
00923 
00924          $cOnClick = 'typo3FormFieldGet('.$paramsList.',1,\''.$checkSetValue.'\');'.implode('',$PA['fieldChangeFunc']);
00925          $item.='<input type="checkbox" name="'.$PA['itemFormElName'].'_cb" onclick="'.htmlspecialchars($cOnClick).'" />';
00926       }
00927 
00928       $PA['fieldChangeFunc'] = array_merge(array('typo3FormFieldGet'=>'typo3FormFieldGet('.$paramsList.');'), $PA['fieldChangeFunc']);
00929       $mLgd = ($config['max']?$config['max']:256);
00930       $iOnChange = implode('',$PA['fieldChangeFunc']);
00931       $item.='<input type="text" name="'.$PA['itemFormElName'].'_hr" value=""'.$this->formWidth($size).' maxlength="'.$mLgd.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].' />';  // This is the EDITABLE form field.
00932       $item.='<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';       // This is the ACTUAL form field - values from the EDITABLE field must be transferred to this field which is the one that is written to the database.
00933       $this->extJSCODE.='typo3FormFieldSet('.$paramsList.');';
00934 
00935          // Creating an alternative item without the JavaScript handlers.
00936       $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'_hr" value="" />';
00937       $altItem.= '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00938 
00939          // Wrap a wizard around the item?
00940       $item= $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'].'_hr',$specConf);
00941 
00942       return $item;
00943    }

getSingleField_typeNone table,
field,
row,
&$  PA
 

Generation of TCEform elements of the type "none" This will render a non-editable display of the content of the field.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Definition at line 1781 of file class.t3lib_tceforms.php.

References getSingleField_typeNone_render().

Referenced by getSingleField_SW().

01781                                                                {
01782          // Init:
01783       $config = $PA['fieldConf']['config'];
01784       $itemValue = $PA['itemFormElValue'];
01785 
01786       return $this->getSingleField_typeNone_render($config,$itemValue);
01787    }

getSingleField_typeNone_render config,
itemValue
 

HTML rendering of a value which is not editable.

Parameters:
array Configuration for the display
string The value to display
Returns:
string The HTML code for the display
See also:
getSingleField_typeNone();

Definition at line 1797 of file class.t3lib_tceforms.php.

Referenced by getSingleField_typeFlex_sheetMenu(), and getSingleField_typeNone().

01797                                                                {
01798 
01799             // is colorScheme[0] the right value?
01800       $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;';
01801 
01802       if ($config['rows']>1) {
01803          if(!$config['pass_content']) {
01804             $itemValue = nl2br(htmlspecialchars($itemValue));
01805          }
01806             // like textarea
01807          $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
01808          if (!$config['fixedRows']) {
01809             $origRows = $rows = t3lib_div::intInRange($config['rows'] ? $config['rows'] : 5, 1, 20);
01810             if (strlen($itemValue)>$this->charsPerRow*2) {
01811                $cols = $this->maxTextareaWidth;
01812                $rows = t3lib_div::intInRange(round(strlen($itemValue)/$this->charsPerRow),count(explode(chr(10),$itemValue)),20);
01813                if ($rows<$origRows) $rows=$origRows;
01814             }
01815          } else {
01816             $rows = intval($config['rows']);
01817          }
01818 
01819          if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
01820          $width = ceil($cols*$this->form_rowsToStylewidth);
01821             // hardcoded: 12 is the height of the font
01822          $height=$rows*12;
01823 
01824          $item='
01825             <div style="'.htmlspecialchars($divStyle.' overflow:auto; height:'.$height.'px; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'">'.
01826             $itemValue.
01827             '</div>';
01828       } else {
01829          if(!$config['pass_content']) {
01830             $itemValue = htmlspecialchars($itemValue);
01831          }
01832 
01833          $cols = $config['cols']?$config['cols']:($config['size']?$config['size']:$this->maxInputWidth);
01834          if ($this->docLarge) $cols = round($cols*$this->form_largeComp);
01835          $width = ceil($cols*$this->form_rowsToStylewidth);
01836 
01837             // overflow:auto crashes mozilla here. Title tag is usefull when text is longer than the div box (overflow:hidden).
01838          $item = '
01839             <div style="'.htmlspecialchars($divStyle.' overflow:hidden; width:'.$width.'px;').'" class="'.htmlspecialchars($this->formElClass('none')).'" title="'.$itemValue.'">'.
01840             '<span class="nobr">'.(strcmp($itemValue,'')?$itemValue:'&nbsp;').'</span>'.
01841             '</div>';
01842       }
01843 
01844       return $item;
01845    }

getSingleField_typeRadio table,
field,
row,
&$  PA
 

Generation of TCEform elements of the type "radio" This will render a series of radio buttons.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Definition at line 1113 of file class.t3lib_tceforms.php.

References table().

Referenced by getSingleField_SW().

01113                                                                {
01114       $config = $PA['fieldConf']['config'];
01115 
01116          // Get items for the array:
01117       $selItems = $this->initItemArray($PA['fieldConf']);
01118       if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01119 
01120          // Traverse the items, making the form elements:
01121       for ($c=0;$c<count($selItems);$c++) {
01122          $p = $selItems[$c];
01123          $rOnClick = implode('',$PA['fieldChangeFunc']);
01124          $rChecked = (!strcmp($p[1],$PA['itemFormElValue'])?' checked="checked"':'');
01125          $item.= '<input type="radio"'.$this->insertDefStyle('radio').' name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($p[1]).'" onclick="'.htmlspecialchars($rOnClick).'"'.$rChecked.$PA['onFocus'].' />'.
01126                htmlspecialchars($p[0]).
01127                '<br />';
01128       }
01129 
01130       return $item;
01131    }

getSingleField_typeSelect table,
field,
row,
&$  PA
 

Generation of TCEform elements of the type "select" This will render a selector box element, or possibly a special construction with two selector boxes.

That depends on configuration.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Definition at line 1143 of file class.t3lib_tceforms.php.

References $TCA, getSingleField_typeSelect_checkbox(), getSingleField_typeSelect_multiple(), getSingleField_typeSelect_single(), getSingleField_typeSelect_singlebox(), and table().

Referenced by getSingleField_SW().

01143                                                                {
01144       global $TCA;
01145 
01146          // Field configuration from TCA:
01147       $config = $PA['fieldConf']['config'];
01148 
01149          // Getting the selector box items from the system
01150       $selItems = $this->addSelectOptionsToItemArray($this->initItemArray($PA['fieldConf']),$PA['fieldConf'],$this->setTSconfig($table,$row),$field);
01151       $selItems = $this->addItems($selItems,$PA['fieldTSConfig']['addItems.']);
01152       if ($config['itemsProcFunc']) $selItems = $this->procItems($selItems,$PA['fieldTSConfig']['itemsProcFunc.'],$config,$table,$row,$field);
01153 
01154          // Possibly remove some items:
01155       $removeItems = t3lib_div::trimExplode(',',$PA['fieldTSConfig']['removeItems'],1);
01156       foreach($selItems as $tk => $p)  {
01157 
01158             // Checking languages and authMode:
01159          $languageDeny = $TCA[$table]['ctrl']['languageField'] && !strcmp($TCA[$table]['ctrl']['languageField'], $field) && !$GLOBALS['BE_USER']->checkLanguageAccess($p[1]);
01160          $authModeDeny = $config['type']=='select' && $config['authMode'] && !$GLOBALS['BE_USER']->checkAuthMode($table,$field,$p[1],$config['authMode']);
01161 
01162          if (in_array($p[1],$removeItems) || $languageDeny || $authModeDeny)  {
01163             unset($selItems[$tk]);
01164          } elseif (isset($PA['fieldTSConfig']['altLabels.'][$p[1]])) {
01165             $selItems[$tk][0]=$this->sL($PA['fieldTSConfig']['altLabels.'][$p[1]]);
01166          }
01167 
01168             // Removing doktypes with no access:
01169          if ($table.'.'.$field == 'pages.doktype') {
01170             if (!($GLOBALS['BE_USER']->isAdmin() || t3lib_div::inList($GLOBALS['BE_USER']->groupData['pagetypes_select'],$p[1])))   {
01171                unset($selItems[$tk]);
01172             }
01173          }
01174       }
01175 
01176          // Creating the label for the "No Matching Value" entry.
01177       $nMV_label = isset($PA['fieldTSConfig']['noMatchingValue_label']) ? $this->sL($PA['fieldTSConfig']['noMatchingValue_label']) : '[ '.$this->getLL('l_noMatchingValue').' ]';
01178 
01179          // Prepare some values:
01180       $maxitems = intval($config['maxitems']);
01181 
01182          // If a SINGLE selector box...
01183       if ($maxitems<=1) {
01184          $item = $this->getSingleField_typeSelect_single($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01185       } elseif (!strcmp($config['renderMode'],'checkbox'))  {  // Checkbox renderMode
01186          $item = $this->getSingleField_typeSelect_checkbox($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01187       } elseif (!strcmp($config['renderMode'],'singlebox')) {  // Single selector box renderMode
01188          $item = $this->getSingleField_typeSelect_singlebox($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01189       } else { // Traditional multiple selector box:
01190          $item = $this->getSingleField_typeSelect_multiple($table,$field,$row,$PA,$config,$selItems,$nMV_label);
01191       }
01192 
01193          // Wizards:
01194       $altItem = '<input type="hidden" name="'.$PA['itemFormElName'].'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
01195       $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf);
01196 
01197       return $item;
01198    }

getSingleField_typeSelect_checkbox table,
field,
row,
&$  PA,
config,
selItems,
nMV_label
 

Creates a checkbox list (renderMode = "checkbox") (Render function for getSingleField_typeSelect()).

Parameters:
string See getSingleField_typeSelect()
string See getSingleField_typeSelect()
array See getSingleField_typeSelect()
array See getSingleField_typeSelect()
array (Redundant) content of $PA['fieldConf']['config'] (for convenience)
array Items available for selection
string Label for no-matching-value
Returns:
string The HTML code for the item
See also:
getSingleField_typeSelect()

Definition at line 1323 of file class.t3lib_tceforms.php.

References $tRows, and table().

Referenced by getSingleField_typeSelect().

01323                                                                                                       {
01324 
01325          // Get values in an array (and make unique, which is fine because there can be no duplicates anyway):
01326       $itemArray = array_flip($this->extractValuesOnlyFromValueLabelList($PA['itemFormElValue']));
01327 
01328          // Traverse the Array of selector box items:
01329       $tRows = array();
01330       $sOnChange = implode('',$PA['fieldChangeFunc']);
01331       $c=0;
01332       $setAll = array();   // Used to accumulate the JS needed to restore the original selection.
01333       foreach($selItems as $p)   {
01334             // Non-selectable element:
01335          if (!strcmp($p[1],'--div--')) {
01336             if (count($setAll))  {
01337                   $tRows[] = '
01338                      <tr>
01339                         <td colspan="2">'.
01340                         '<a href="#" onclick="'.htmlspecialchars(implode('',$setAll).' return false;').'">'.
01341                         htmlspecialchars($this->getLL('l_setAllCheckboxes')).
01342                         '</a></td>
01343                      </tr>';
01344                   $setAll = array();
01345             }
01346 
01347             $tRows[] = '
01348                <tr class="c-header">
01349                   <td colspan="2">'.htmlspecialchars($p[0]).'</td>
01350                </tr>';
01351          } else {
01352                // Selected or not by default:
01353             $sM = '';
01354             if (isset($itemArray[$p[1]])) {
01355                $sM = ' checked="checked"';
01356                unset($itemArray[$p[1]]);
01357             }
01358 
01359                // Icon:
01360             $selIconFile = '';
01361             if ($p[2])  {
01362                list($selIconFile,$selIconInfo) = $this->getIcon($p[2]);
01363             }
01364 
01365                // Compile row:
01366             $onClickCell = $this->elName($PA['itemFormElName'].'['.$c.']').'.checked=!'.$this->elName($PA['itemFormElName'].'['.$c.']').'.checked;';
01367             $onClick = 'this.attributes.getNamedItem("class").nodeValue = '.$this->elName($PA['itemFormElName'].'['.$c.']').'.checked ? "c-selectedItem" : "";';
01368             $setAll[] = $this->elName($PA['itemFormElName'].'['.$c.']').'.checked=1;';
01369             $tRows[] = '
01370                <tr class="'.($sM ? 'c-selectedItem' : '').'" onclick="'.htmlspecialchars($onClick).'" style="cursor: pointer;">
01371                   <td><input type="checkbox" name="'.htmlspecialchars($PA['itemFormElName'].'['.$c.']').'" value="'.htmlspecialchars($p[1]).'"'.$sM.' onclick="'.htmlspecialchars($sOnChange).'"'.$PA['onFocus'].' /></td>
01372                   <td class="c-labelCell" onclick="'.htmlspecialchars($onClickCell).'">'.
01373                      ($selIconFile ? '<img src="'.$selIconFile.'" '.$selIconInfo[3].' vspace="2" border="0" class="absmiddle" style="margin-right: 4px;" alt="" />' : '').
01374                      t3lib_div::deHSCentities(htmlspecialchars($p[0])).
01375                      (strcmp($p[3],'') ? '<br/><p class="c-descr">'.nl2br(trim(htmlspecialchars($p[3]))).'</p>' : '').
01376                      '</td>
01377                </tr>';
01378             $c++;
01379          }
01380       }
01381 
01382          // Remaining checkboxes will get their set-all link:
01383       if (count($setAll))  {
01384             $tRows[] = '
01385                <tr>
01386                   <td colspan="2">'.
01387                   '<a href="#" onclick="'.htmlspecialchars(implode('',$setAll).' return false;').'">'.
01388                   htmlspecialchars($this->getLL('l_setAllCheckboxes')).
01389                   '</a></td>
01390                </tr>';
01391       }
01392 
01393          // Remaining values (invalid):
01394       if (count($itemArray) && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01395          foreach($itemArray as $theNoMatchValue => $temp)   {
01396                // Compile <checkboxes> tag:
01397             array_unshift($tRows,'
01398                   <tr class="c-invalidItem">
01399                      <td><input type="checkbox" name="'.htmlspecialchars($PA['itemFormElName'].'['.$c.']').'" value="'.htmlspecialchars($theNoMatchValue).'" checked="checked" onclick="'.htmlspecialchars($sOnChange).'"'.$PA['onFocus'].' /></td>
01400                      <td class="c-labelCell">'.
01401                         t3lib_div::deHSCentities(htmlspecialchars(@sprintf($nMV_label, $theNoMatchValue))).
01402                         '</td>
01403                   </tr>');
01404             $c++;
01405          }
01406       }
01407 
01408          // Add an empty hidden field which will send a blank value if all items are unselected.
01409       $item.='<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="" />';
01410 
01411          // Implode rows in table:
01412       $item.= '
01413          <table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-select-checkbox">'.
01414             implode('',$tRows).'
01415          </table>
01416          ';
01417 
01418       return $item;
01419    }

getSingleField_typeSelect_multiple table,
field,
row,
&$  PA,
config,
selItems,
nMV_label
 

Creates a multiple-selector box (two boxes, side-by-side) (Render function for getSingleField_typeSelect()).

Parameters:
string See getSingleField_typeSelect()
string See getSingleField_typeSelect()
array See getSingleField_typeSelect()
array See getSingleField_typeSelect()
array (Redundant) content of $PA['fieldConf']['config'] (for convenience)
array Items available for selection
string Label for no-matching-value
Returns:
string The HTML code for the item
See also:
getSingleField_typeSelect()

Definition at line 1537 of file class.t3lib_tceforms.php.

References table().

Referenced by getSingleField_typeSelect().

01537                                                                                                       {
01538 
01539          // Setting this hidden field (as a flag that JavaScript can read out)
01540       $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_mul" value="'.($config['multiple']?1:0).'" />';
01541 
01542          // Set max and min items:
01543       $maxitems = t3lib_div::intInRange($config['maxitems'],0);
01544       if (!$maxitems)   $maxitems=100000;
01545       $minitems = t3lib_div::intInRange($config['minitems'],0);
01546 
01547          // Register the required number of elements:
01548       $this->requiredElements[$PA['itemFormElName']] = array($minitems,$maxitems,'imgName'=>$table.'_'.$row['uid'].'_'.$field);
01549 
01550          // Get "removeItems":
01551       $removeItems = t3lib_div::trimExplode(',',$PA['fieldTSConfig']['removeItems'],1);
01552 
01553          // Perform modification of the selected items array:
01554       $itemArray = t3lib_div::trimExplode(',',$PA['itemFormElValue'],1);
01555       foreach($itemArray as $tk => $tv) {
01556          $tvP = explode('|',$tv,2);
01557          $evalValue = rawurldecode($tvP[0]);
01558          $isRemoved = in_array($evalValue,$removeItems)  || ($config['type']=='select' && $config['authMode'] && !$GLOBALS['BE_USER']->checkAuthMode($table,$field,$evalValue,$config['authMode']));
01559          if ($isRemoved && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement'])  {
01560             $tvP[1] = rawurlencode(@sprintf($nMV_label, $evalValue));
01561          } elseif (isset($PA['fieldTSConfig']['altLabels.'][$evalValue])) {
01562             $tvP[1] = rawurlencode($this->sL($PA['fieldTSConfig']['altLabels.'][$evalValue]));
01563          } else {
01564             $tvP[1] = rawurlencode($this->sL(rawurldecode($tvP[1])));
01565          }
01566          $itemArray[$tk] = implode('|',$tvP);
01567       }
01568 
01569          // Create option tags:
01570       $opt = array();
01571       $styleAttrValue = '';
01572       foreach($selItems as $p)   {
01573          if ($config['iconsInOptionTags'])   {
01574             $styleAttrValue = $this->optionTagStyle($p[2]);
01575          }
01576          $opt[]= '<option value="'.htmlspecialchars($p[1]).'"'.
01577                      ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01578                      '>'.htmlspecialchars($p[0]).'</option>';
01579       }
01580 
01581          // Put together the selector box:
01582       $selector_itemListStyle = isset($config['itemListStyle']) ? ' style="'.htmlspecialchars($config['itemListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"';
01583       $size = intval($config['size']);
01584       $size = $config['autoSizeMax'] ? t3lib_div::intInRange(count($itemArray)+1,t3lib_div::intInRange($size,1),$config['autoSizeMax']) : $size;
01585       $sOnChange = 'setFormValueFromBrowseWin(\''.$PA['itemFormElName'].'\',this.options[this.selectedIndex].value,this.options[this.selectedIndex].text); '.implode('',$PA['fieldChangeFunc']);
01586       $itemsToSelect = '
01587          <select name="'.$PA['itemFormElName'].'_sel"'.
01588                   $this->insertDefStyle('select').
01589                   ($size ? ' size="'.$size.'"' : '').
01590                   ' onchange="'.htmlspecialchars($sOnChange).'"'.
01591                   $PA['onFocus'].
01592                   $selector_itemListStyle.'>
01593             '.implode('
01594             ',$opt).'
01595          </select>';
01596 
01597          // Pass to "dbFileIcons" function:
01598       $params = array(
01599          'size' => $size,
01600          'autoSizeMax' => t3lib_div::intInRange($config['autoSizeMax'],0),
01601          'style' => isset($config['selectedListStyle']) ? ' style="'.htmlspecialchars($config['selectedListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"',
01602          'dontShowMoveIcons' => ($maxitems<=1),
01603          'maxitems' => $maxitems,
01604          'info' => '',
01605          'headers' => array(
01606             'selector' => $this->getLL('l_selected').':<br />',
01607             'items' => $this->getLL('l_items').':<br />'
01608          ),
01609          'noBrowser' => 1,
01610          'thumbnails' => $itemsToSelect
01611       );
01612       $item.= $this->dbFileIcons($PA['itemFormElName'],'','',$itemArray,'',$params,$PA['onFocus']);
01613 
01614       return $item;
01615    }

getSingleField_typeSelect_single table,
field,
row,
&$  PA,
config,
selItems,
nMV_label
 

Creates a single-selector box (Render function for getSingleField_typeSelect()).

Parameters:
string See getSingleField_typeSelect()
string See getSingleField_typeSelect()
array See getSingleField_typeSelect()
array See getSingleField_typeSelect()
array (Redundant) content of $PA['fieldConf']['config'] (for convenience)
array Items available for selection
string Label for no-matching-value
Returns:
string The HTML code for the item
See also:
getSingleField_typeSelect()

Definition at line 1214 of file class.t3lib_tceforms.php.

References table().

Referenced by getSingleField_typeSelect().

01214                                                                                                    {
01215 
01216          // Initialization:
01217       $c = 0;
01218       $sI = 0;
01219       $noMatchingValue = 1;
01220       $opt = array();
01221       $selicons = array();
01222       $onlySelectedIconShown = 0;
01223       $size = intval($config['size']);
01224 
01225          // Icon configuration:
01226       if ($config['suppress_icons']=='IF_VALUE_FALSE')   {
01227          $suppressIcons = !$PA['itemFormElValue'] ? 1 : 0;
01228       } elseif ($config['suppress_icons']=='ONLY_SELECTED') {
01229          $suppressIcons=0;
01230          $onlySelectedIconShown=1;
01231       } elseif ($config['suppress_icons'])   {
01232          $suppressIcons = 1;
01233       } else $suppressIcons = 0;
01234 
01235          // Traverse the Array of selector box items:
01236       foreach($selItems as $p)   {
01237          $sM = (!strcmp($PA['itemFormElValue'],$p[1])?' selected="selected"':'');
01238          if ($sM) {
01239             $sI = $c;
01240             $noMatchingValue = 0;
01241          }
01242 
01243             // Getting style attribute value (for icons):
01244          if ($config['iconsInOptionTags'])   {
01245             $styleAttrValue = $this->optionTagStyle($p[2]);
01246          }
01247 
01248             // Compiling the <option> tag:
01249          $opt[]= '<option value="'.htmlspecialchars($p[1]).'"'.
01250                   $sM.
01251                   ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01252                   (!strcmp($p[1],'--div--') ? ' class="c-divider"' : '').
01253                   '>'.t3lib_div::deHSCentities(htmlspecialchars($p[0])).'</option>';
01254 
01255             // If there is an icon for the selector box (rendered in table under)...:
01256          if ($p[2] && !$suppressIcons && (!$onlySelectedIconShown || $sM)) {
01257             list($selIconFile,$selIconInfo)=$this->getIcon($p[2]);
01258             $iOnClick = $this->elName($PA['itemFormElName']).'.selectedIndex='.$c.'; '.implode('',$PA['fieldChangeFunc']).$this->blur().'return false;';
01259             $selicons[]=array(
01260                (!$onlySelectedIconShown ? '<a href="#" onclick="'.htmlspecialchars($iOnClick).'">' : '').
01261                '<img src="'.$selIconFile.'" '.$selIconInfo[3].' vspace="2" border="0" title="'.htmlspecialchars($p[0]).'" alt="'.htmlspecialchars($p[0]).'" />'.
01262                (!$onlySelectedIconShown ? '</a>' : ''),
01263                $c,$sM);
01264          }
01265          $c++;
01266       }
01267 
01268          // No-matching-value:
01269       if ($PA['itemFormElValue'] && $noMatchingValue && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement'])   {
01270          $nMV_label = @sprintf($nMV_label, $PA['itemFormElValue']);
01271          $opt[]= '<option value="'.htmlspecialchars($PA['itemFormElValue']).'" selected="selected">'.htmlspecialchars($nMV_label).'</option>';
01272       }
01273 
01274          // Create item form fields:
01275       $sOnChange = 'if (this.options[this.selectedIndex].value==\'--div--\') {this.selectedIndex='.$sI.';} '.implode('',$PA['fieldChangeFunc']);
01276       $item.= '<input type="hidden" name="'.$PA['itemFormElName'].'_selIconVal" value="'.htmlspecialchars($sI).'" />';  // MUST be inserted before the selector - else is the value of the hiddenfield here mysteriously submitted...
01277       $item.= '<select name="'.$PA['itemFormElName'].'"'.
01278                $this->insertDefStyle('select').
01279                ($size?' size="'.$size.'"':'').
01280                ' onchange="'.htmlspecialchars($sOnChange).'"'.
01281                $PA['onFocus'].'>';
01282       $item.= implode('',$opt);
01283       $item.= '</select>';
01284 
01285          // Create icon table:
01286       if (count($selicons))   {
01287          $item.='<table border="0" cellpadding="0" cellspacing="0" class="typo3-TCEforms-selectIcons">';
01288          $selicon_cols = intval($config['selicon_cols']);
01289          if (!$selicon_cols)  $selicon_cols=count($selicons);
01290          $sR = ceil(count($selicons)/$selicon_cols);
01291          $selicons = array_pad($selicons,$sR*$selicon_cols,'');
01292          for($sa=0;$sa<$sR;$sa++)   {
01293             $item.='<tr>';
01294             for($sb=0;$sb<$selicon_cols;$sb++)  {
01295                $sk=($sa*$selicon_cols+$sb);
01296                $imgN = 'selIcon_'.$table.'_'.$row['uid'].'_'.$field.'_'.$selicons[$sk][1];
01297                $imgS = ($selicons[$sk][2]?$this->backPath.'gfx/content_selected.gif':'clear.gif');
01298                $item.='<td><img name="'.htmlspecialchars($imgN).'" src="'.$imgS.'" width="7" height="10" alt="" /></td>';
01299                $item.='<td>'.$selicons[$sk][0].'</td>';
01300             }
01301             $item.='</tr>';
01302          }
01303          $item.='</table>';
01304       }
01305 
01306       return $item;
01307    }

getSingleField_typeSelect_singlebox table,
field,
row,
&$  PA,
config,
selItems,
nMV_label
 

Creates a selectorbox list (renderMode = "singlebox") (Render function for getSingleField_typeSelect()).

Parameters:
string See getSingleField_typeSelect()
string See getSingleField_typeSelect()
array See getSingleField_typeSelect()
array See getSingleField_typeSelect()
array (Redundant) content of $PA['fieldConf']['config'] (for convenience)
array Items available for selection
string Label for no-matching-value
Returns:
string The HTML code for the item
See also:
getSingleField_typeSelect()

Definition at line 1435 of file class.t3lib_tceforms.php.

References table().

Referenced by getSingleField_typeSelect().

01435                                                                                                       {
01436 
01437          // Get values in an array (and make unique, which is fine because there can be no duplicates anyway):
01438       $itemArray = array_flip($this->extractValuesOnlyFromValueLabelList($PA['itemFormElValue']));
01439 
01440          // Traverse the Array of selector box items:
01441       $opt = array();
01442       $restoreCmd = array();  // Used to accumulate the JS needed to restore the original selection.
01443       $c = 0;
01444       foreach($selItems as $p)   {
01445             // Selected or not by default:
01446          $sM = '';
01447          if (isset($itemArray[$p[1]])) {
01448             $sM = ' selected="selected"';
01449             $restoreCmd[] = $this->elName($PA['itemFormElName'].'[]').'.options['.$c.'].selected=1;';
01450             unset($itemArray[$p[1]]);
01451          }
01452 
01453             // Non-selectable element:
01454          $nonSel = '';
01455          if (!strcmp($p[1],'--div--')) {
01456             $nonSel = ' onclick="this.selected=0;" class="c-divider"';
01457          }
01458 
01459             // Icon style for option tag:
01460          if ($config['iconsInOptionTags']) {
01461             $styleAttrValue = $this->optionTagStyle($p[2]);
01462          }
01463 
01464             // Compile <option> tag:
01465          $opt[] = '<option value="'.htmlspecialchars($p[1]).'"'.
01466                   $sM.
01467                   $nonSel.
01468                   ($styleAttrValue ? ' style="'.htmlspecialchars($styleAttrValue).'"' : '').
01469                   '>'.t3lib_div::deHSCentities(htmlspecialchars($p[0])).'</option>';
01470          $c++;
01471       }
01472 
01473          // Remaining values:
01474       if (count($itemArray) && !$PA['fieldTSConfig']['disableNoMatchingValueElement'] && !$config['disableNoMatchingValueElement']) {
01475          foreach($itemArray as $theNoMatchValue => $temp)   {
01476                // Compile <option> tag:
01477             array_unshift($opt,'<option value="'.htmlspecialchars($theNoMatchValue).'" selected="selected">'.t3lib_div::deHSCentities(htmlspecialchars(@sprintf($nMV_label, $theNoMatchValue))).'</option>');
01478          }
01479       }
01480 
01481          // Compile selector box:
01482       $sOnChange = implode('',$PA['fieldChangeFunc']);
01483       $selector_itemListStyle = isset($config['itemListStyle']) ? ' style="'.htmlspecialchars($config['itemListStyle']).'"' : ' style="'.$this->defaultMultipleSelectorStyle.'"';
01484       $size = intval($config['size']);
01485       $size = $config['autoSizeMax'] ? t3lib_div::intInRange(count($selItems)+1,t3lib_div::intInRange($size,1),$config['autoSizeMax']) : $size;
01486       $selectBox = '<select name="'.$PA['itemFormElName'].'[]"'.
01487                   $this->insertDefStyle('select').
01488                   ($size ? ' size="'.$size.'"' : '').
01489                   ' multiple="multiple" onchange="'.htmlspecialchars($sOnChange).'"'.
01490                   $PA['onFocus'].
01491                   $selector_itemListStyle.'>
01492                   '.
01493                implode('
01494                   ',$opt).'
01495                </select>';
01496 
01497          // Add an empty hidden field which will send a blank value if all items are unselected.
01498       $item.='<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="" />';
01499 
01500          // Put it all into a table:
01501       $item.= '
01502          <table border="0" cellspacing="0" cellpadding="0" width="1" class="typo3-TCEforms-select-singlebox">
01503             <tr>
01504                <td>
01505                '.$selectBox.'
01506                <br/>
01507                <em>'.
01508                   htmlspecialchars($this->getLL('l_holdDownCTRL')).
01509                   '</em>
01510                </td>
01511                <td valign="top">
01512                <a href="#" onclick="'.htmlspecialchars($this->elName($PA['itemFormElName'].'[]').'.selectedIndex=-1;'.implode('',$restoreCmd).' return false;').'">'.
01513                   '<img'.t3lib_iconWorks::skinImg($this->backPath,'gfx/history.gif','width="13" height="12"').' title="'.htmlspecialchars($this->getLL('l_revertSelection')).'" alt="" />'.
01514                   '</a>
01515                </td>
01516             </tr>
01517          </table>
01518             ';
01519 
01520       return $item;
01521    }

getSingleField_typeText table,
field,
row,
&$  PA
 

Generation of TCEform elements of the type "text" This will render a <textarea> OR RTE area form field, possibly with various control/validation features.

Parameters:
string The table name of the record
string The field name which this element is supposed to edit
array The record data array where the value(s) for the field can be found
array An array with additional configuration options.
Returns:
string The HTML code for the TCEform field

Definition at line 955 of file class.t3lib_tceforms.php.

References t3lib_parsehtml_proc::evalWriteFile(), t3lib_BEfunc::getSpecConfParametersFromArray(), t3lib_BEfunc::getTCAtypeValue(), getTSCpid(), RTEgetObj(), RTEsetup(), and table().

Referenced by getSingleField_SW().

00955                                                                {
00956 
00957          // Init config:
00958       $config = $PA['fieldConf']['config'];
00959 
00960          // Setting columns number:
00961       $cols = t3lib_div::intInRange($config['cols'] ? $config['cols'] : 30, 5, $this->maxTextareaWidth);
00962 
00963          // Setting number of rows:
00964       $origRows = $rows = t3lib_div::intInRange($config['rows'] ? $config['rows'] : 5, 1, 20);
00965       if (strlen($PA['itemFormElValue']) > $this->charsPerRow*2)  {
00966          $cols = $this->maxTextareaWidth;
00967          $rows = t3lib_div::intInRange(round(strlen($PA['itemFormElValue'])/$this->charsPerRow), count(explode(chr(10),$PA['itemFormElValue'])), 20);
00968          if ($rows<$origRows) $rows = $origRows;
00969       }
00970 
00971          // Init RTE vars:
00972       $RTEwasLoaded = 0;            // Set true, if the RTE is loaded; If not a normal textarea is shown.
00973       $RTEwouldHaveBeenLoaded = 0;  // Set true, if the RTE would have been loaded if it wasn't for the disable-RTE flag in the bottom of the page...
00974 
00975          // "Extra" configuration; Returns configuration for the field based on settings found in the "types" fieldlist. Traditionally, this is where RTE configuration has been found.
00976       $specConf = $this->getSpecConfFromString($PA['extra'], $PA['fieldConf']['defaultExtras']);
00977 
00978          // Setting up the altItem form field, which is a hidden field containing the value
00979       $altItem = '<input type="hidden" name="'.htmlspecialchars($PA['itemFormElName']).'" value="'.htmlspecialchars($PA['itemFormElValue']).'" />';
00980 
00981          // If RTE is generally enabled (TYPO3_CONF_VARS and user settings)
00982       if ($this->RTEenabled) {
00983          $p = t3lib_BEfunc::getSpecConfParametersFromArray($specConf['rte_transform']['parameters']);
00984          if (isset($specConf['richtext']) && (!$p['flag'] || !$row[$p['flag']])) {  // If the field is configured for RTE and if any flag-field is not set to disable it.
00985             list($tscPID,$thePidValue) = $this->getTSCpid($table,$row['uid'],$row['pid']);
00986 
00987                // If the pid-value is not negative (that is, a pid could NOT be fetched)
00988             if ($thePidValue >= 0)  {
00989                $RTEsetup = $GLOBALS['BE_USER']->getTSConfig('RTE',t3lib_BEfunc::getPagesTSconfig($tscPID));
00990                $RTEtypeVal = t3lib_BEfunc::getTCAtypeValue($table,$row);
00991                $thisConfig = t3lib_BEfunc::RTEsetup($RTEsetup['properties'],$table,$field,$RTEtypeVal);
00992 
00993                if (!$thisConfig['disabled']) {
00994                   if (!$this->disableRTE) {
00995                      $this->RTEcounter++;
00996 
00997                         // Find alternative relative path for RTE images/links:
00998                      $eFile = t3lib_parsehtml_proc::evalWriteFile($specConf['static_write'], $row);
00999                      $RTErelPath = is_array($eFile) ? dirname($eFile['relEditFile']) : '';
01000 
01001                         // Get RTE object, draw form and set flag:
01002                      $RTEobj = &t3lib_BEfunc::RTEgetObj();
01003                      $item = $RTEobj->drawRTE($this,$table,$field,$row,$PA,$specConf,$thisConfig,$RTEtypeVal,$RTErelPath,$thePidValue);
01004 
01005                         // Wizard:
01006                      $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf,1);
01007 
01008                      $RTEwasLoaded = 1;
01009                   } else {
01010                      $RTEwouldHaveBeenLoaded = 1;
01011                      $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!)';
01012                   }
01013                } else $this->commentMessages[] = $PA['itemFormElName'].': RTE is disabled by the Page TSconfig, "RTE"-key (eg. by RTE.default.disabled=0 or such)';
01014             } else $this->commentMessages[] = $PA['itemFormElName'].': PID value could NOT be fetched. Rare error, normally with new records.';
01015          } else {
01016             if (!isset($specConf['richtext']))  $this->commentMessages[] = $PA['itemFormElName'].': RTE was not configured for this field in TCA-types';
01017             if (!(!$p['flag'] || !$row[$p['flag']]))   $this->commentMessages[] = $PA['itemFormElName'].': Field-flag ('.$PA['flag'].') has been set to disable RTE!';
01018          }
01019       }
01020 
01021          // Display ordinary field if RTE was not loaded.
01022       if (!$RTEwasLoaded) {
01023          if ($specConf['rte_only']) {  // Show message, if no RTE (field can only be edited with RTE!)
01024             $item = '<p><em>'.htmlspecialchars($this->getLL('l_noRTEfound')).'</em></p>';
01025          } else {
01026             if ($specConf['nowrap'])   {
01027                $wrap = 'off';
01028             } else {
01029                $wrap = ($config['wrap'] ? $config['wrap'] : 'virtual');
01030             }
01031             $iOnChange = implode('',$PA['fieldChangeFunc']);
01032             $item.= '
01033                      <textarea name="'.$PA['itemFormElName'].'"'.$this->formWidthText($cols,$wrap).' rows="'.$rows.'" wrap="'.$wrap.'" onchange="'.htmlspecialchars($iOnChange).'"'.$PA['onFocus'].'>'.
01034                      t3lib_div::formatForTextarea($PA['itemFormElValue']).
01035                      '</textarea>';
01036             $item = $this->renderWizards(array($item,$altItem),$config['wizards'],$table,$row,$field,$PA,$PA['itemFormElName'],$specConf,$RTEwouldHaveBeenLoaded);
01037          }
01038       }
01039 
01040          // Return field HTML:
01041       return $item;
01042    }


Variable Documentation

return $out
 

Definition at line 606 of file class.t3lib_tceforms.php.

Referenced by t3lib_recordList::addElement(), t3lib_userAuthGroup::addTScomment(), SC_wizard_tsconfig::browseTSprop(), t3lib_userAuthGroup::calcPerms(), tx_install::check_mail(), t3lib_userAuthGroup::checkAuthMode(), t3lib_beUserAuth::checkLockToIP(), tx_install::checkTheDatabase(), tx_cms_layout::dataFields(), tx_install::displayFieldComp(), tx_install::displayFields(), tx_install::displaySuggestions(), tx_install::displayTwinImage(), SC_alt_doc::doProcessData(), tslib_fe::encryptEmail(), t3lib_superadmin::error(), localFolderTree::SC_browse_links::expandPage(), tslib_search::explodeCols(), t3lib_tsStyleConfig::ext_displayExample(), SC_mod_tools_em_index::extensionTitleIconHeader(), t3lib_readmail::find_MIDfromReturnPath(), t3lib_readmail::find_XTypo3MID(), t3lib_fullsearch::form(), tx_install::formatImCmds(), SC_mod_tools_em_index::getClassIndexLocallangFiles(), getItemArrayType(), t3lib_TCEforms::getListedFields(), getListOfBackendModules(), tx_cms_layout::getPageInfoBox(), getPaletteFields(), t3lib_fullsearch::getQueryResultCode(), t3lib_BEfunc::getRecordIconAltText(), t3lib_TCEmain::getRecordPropertiesFromRow(), tx_install::getSelectorOptions(), t3lib_BEfunc::getSetUpdateSignal(), getSingleField(), getSingleField_typeFlex_sheetMenu(), t3lib_BEfunc::getSpecConfParametersFromArray(), tx_cms_layout::getTable(), tx_cms_layout::getTable_fe_users(), tx_cms_layout::getTable_pages(), tx_cms_layout::getTable_sys_note(), tx_cms_layout::getTable_tt_address(), tx_cms_layout::getTable_tt_board(), tx_cms_layout::getTable_tt_calender(), tx_cms_layout::getTable_tt_content(), tx_cms_layout::getTable_tt_guest(), tx_cms_layout::getTable_tt_links(), tx_cms_layout::getTable_tt_news(), tx_cms_layout::getTable_tt_products(), tx_cms_layout::getTableMenu(), tx_install::getTwinImageMessage(), SC_mod_web_perm_index::groupPerms(), tx_cms_layout::headerFields(), t3lib_superadmin::headerParentDir(), t3lib_superadmin::headerSiteDir(), tx_install::imagemenu(), tx_cms_layout::infoGif(), t3lib_queryGenerator::JSbottom(), SC_wizard_tsconfig::linkProperty(), t3lib_superadmin::localExtensions(), tx_wizardsortpages_webfunc_2::main(), tx_wizardcrpages_webfunc_2::main(), t3lib_BEfunc::makeConfigForm(), tx_cms_layout::makeOrdinaryList(), t3lib_queryGenerator::makeSelectorTable(), tslib_fe::makeSimulFileName(), menu(), t3lib_queryGenerator::mkCompSelect(), t3lib_queryGenerator::mkFieldToInputSelect(), t3lib_queryGenerator::mkOperatorSelect(), t3lib_queryGenerator::mkTableSelect(), t3lib_queryGenerator::mkTypeSelect(), outputWrapper(), tslib_pibase::pi_list_makelist(), printAll(), t3lib_queryGenerator::printCodeArray(), formRender_vert::printPalette(), formRender::printPalette(), t3lib_TCEforms_FE::printPalette(), localFolderTree::printTree(), t3lib_fullsearch::queryMaker(), redirectUrls(), t3lib_TCEmain::removeCacheFiles(), tslib_fe::roundTripCryptString(), SC_mod_user_setup_index::setLabel(), t3lib_superadmin::setMenuItem(), language::sL(), stepHeader(), tx_install::suggestFieldDefinition(), suggestTCAFieldDefinition(), t3lib_BEfunc::titleAltAttrib(), t3lib_BEfunc::titleAttribForPages(), tx_cms_layout::tt_content_drawColHeader(), tx_cms_layout::tt_content_drawHeader(), tx_cms_layout::tt_content_drawItem(), typoLink(), and tslib_tmenu::writeMenu().


Generated on Sun Oct 3 01:06:10 2004 for TYPO3core 3.7.0 dev by  doxygen 1.3.8-20040913