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 }
|
|