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 |
|
||||||||||||||||||||||||||||
|
Creates a palette (collection of secondary options).
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 }
|
|
||||||||||||||||||||||||||||||||
|
Returns the form HTML code for a database table field.
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 }
|
|
||||||||||||||||||||
|
Rendering a single item for the form.
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 }
|
|
||||||||||||||||||||
|
Generation of TCEform elements of the type "check" This will render a check-box OR an array of checkboxes.
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]).' ').
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 }
|
|
||||||||||||||||||||
|
Handler for Flex Forms.
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 }
|
|
||||||||||||||||||||
|
Creates the language menu for FlexForms:.
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 }
|
|
||||||||||||||||
|
Creates the menu for selection of the sheets:.
[Describe function...]
Handler for unknown types.
User defined field type
Calculate and return the current "types" pointer value for a record
Used to adhoc-rearrange the field order normally set in the [types][showitem] list
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
Finds possible field to add to the form, based on subtype fields.
Merges the current [types][showitem] array with the array of fields to add for the current subtype field of the "type" value.
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.
Returns the "special" configuration (from the "types" "showitem" list) for a fieldname based on input table/record (Not used anywhere...?)
Returns the "special" configuration of an "extra" string (non-parsed)
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
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.
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.
Prints the selector box form-field for the db/file/select elements (multiple)
Returns array of elements from clipboard to insert into GROUP element box.
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.
Rendering wizards for form fields.
Get icon (for example for selector boxes)
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)
Extracting values from a value/label list (as made by transferData class)
Wraps a string with a link to the palette.
Creates checkbox parameters
Returns element reference for form element name
Returns the "No title" string if the input $str is empty.
Returns 'this.blur();' string, if supported.
Returns the "returnUrl" of the form. Can be set externally or will be taken from "t3lib_div::linkThisScript()"
Returns the form field for a single HIDDEN field. (Not used anywhere...?)
Returns parameters to set the width for a <input>/<textarea>-element
Returns parameters to set with for a textarea field
Get style CSS values for the current field type.
Get class attribute value for the current field type.
Get style CSS values for the current field type.
Return default "style" / "class" attribute line.
Create tab menu
Initialize item array (for checkbox, selectorbox, radio buttons) Will resolve the label value.
Merges items into an item-array
Perform user processing of the items arrays of checkboxes, selectorboxes and radio buttons.
Add selector box items of more exotic kinds.
Creates value/label pair for a backend module (main and sub)
Adds records from a foreign table (for selector boxes)
Sets the design to the backend design. Backend
This inserts the content of $inArr into the field-template
Overwrite this function in own extended class to add own markers for output
Wrapping labels Currently not implemented - just returns input value.
Wraps all the table rows into a single table. Used externally from scripts like alt_doc.php and db_layout.php (which uses TCEforms...)
This replaces markers in the total wrap
Wraps an element in the $out_array with the template row for a "section" ($this->sectionWrap)
Replaces colorscheme markers in the template string
Returns divider. Currently not implemented and returns only blank value.
Creates HTML output for a palette
Returns help-text ICON if configured for.
Returns help text DESCRIPTION, if configured for.
Setting the current color scheme ($this->colorScheme) based on $this->defColorScheme plus input string.
Reset color schemes.
Store current color scheme
Restore the saved color scheme
JavaScript code added BEFORE the form is drawn:
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
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!
Prints necessary JavaScript for TCEforms (after the form HTML).
Returns necessary JavaScript for the top
Gets default record. Maybe not used anymore. FE-editor?
Return record path (visually formatted, using 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.
Fetches language label for key
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
Returns true, if the palette, $palette, is collapsed (not shown, but found in top-frame) for the table.
Returns true, if the evaluation of the required-field code is OK.
Return TSCpid (cached) Using t3lib_BEfunc::getTSCpid()
Returns true if descriptions should be loaded always
Returns an array of available languages (to use for FlexForms)
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)).' </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> </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> </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> </td>
03706 <td nowrap="nowrap" valign="top">###FIELD_PALETTE###</td>
03707 </tr>';
03708 $this->palFieldTemplateHeader='
03709 <tr ###BGCOLOR_HEAD######CLASSATTR_2###>
03710 <td> </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.'> </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 ' ';
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 }
|
|
||||||||||||||||||||
|
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.
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"> '.
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"> '.
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 ' '.
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 }
|
|
||||||||||||||||||||
|
Generation of TCEform elements of the type "input" This will render a single-line input form field, possibly with various control/validation features.
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 }
|
|
||||||||||||||||||||
|
Generation of TCEform elements of the type "none" This will render a non-editable display of the content of the 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 }
|
|
||||||||||||
|
HTML rendering of a value which is not editable.
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:' ').'</span>'.
01841 '</div>';
01842 }
01843
01844 return $item;
01845 }
|
|
||||||||||||||||||||
|
Generation of TCEform elements of the type "radio" This will render a series of radio buttons.
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 }
|
|
||||||||||||||||||||
|
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.
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 }
|
|
||||||||||||||||||||||||||||||||
|
Creates a checkbox list (renderMode = "checkbox") (Render function for 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 }
|
|
||||||||||||||||||||||||||||||||
|
Creates a multiple-selector box (two boxes, side-by-side) (Render function for 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 }
|
|
||||||||||||||||||||||||||||||||
|
Creates a single-selector box (Render function for 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 }
|
|
||||||||||||||||||||||||||||||||
|
Creates a selectorbox list (renderMode = "singlebox") (Render function for 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 }
|
|
||||||||||||||||||||
|
Generation of TCEform elements of the type "text" This will render a <textarea> OR RTE area form field, possibly with various control/validation features.
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 }
|
|
1.3.8-20040913