From 627659be61034b406ef8cc65ef609baacd7966a8 Mon Sep 17 00:00:00 2001 From: Klaus Leithoff Date: Fri, 23 Nov 2007 12:33:58 +0000 Subject: [PATCH] changed the etemplate/inc/class.customfields_widget.inc.php, to display only fields with values in listview and to have an info icon to identify which customfield is displayed (onmouseover), a click on the icon or the value of the customfield opens the description of that field as alertbox. --- .../inc/class.customfields_widget.inc.php | 96 +++++++++++++------ 1 file changed, 65 insertions(+), 31 deletions(-) diff --git a/etemplate/inc/class.customfields_widget.inc.php b/etemplate/inc/class.customfields_widget.inc.php index f08f081ef6..469262d5c4 100644 --- a/etemplate/inc/class.customfields_widget.inc.php +++ b/etemplate/inc/class.customfields_widget.inc.php @@ -72,26 +72,38 @@ function pre_process($name,&$value,&$cell,&$readonlys,&$extension_data,&$tmpl) { $type2 = $cell['size']; - + $fields_with_vals=array(); switch($type = $cell['type']) { case 'customfields-types': $cell['type'] = 'select'; - foreach($this->cf_types as $name => $label) $cell['sel_options'][$name] = lang($label); + foreach($this->cf_types as $lname => $label) + { + $cell['sel_options'][$lname] = lang($label); + $fields_with_vals[]=$lname; + } $link_types = ExecMethod('phpgwapi.bolink.app_list',''); ksort($link_types); - foreach($link_types as $name => $label) $cell['sel_options'][$name] = '- '.$label; + foreach($link_types as $lname => $label) $cell['sel_options'][$lname] = '- '.$label; $cell['no_lang'] = true; return true; case 'customfields-list': - foreach(array_reverse($this->customfields) as $name => $field) + foreach(array_reverse($this->customfields) as $lname => $field) { - if (!empty($field['type2']) && strpos(','.$field['type2'].',',','.$type2.',') === false) continue; // not for our content type - if (isset($value[$this->prefix.$name]) && $value[$this->prefix.$name] !== '') break; - $stop_at_field = $name; + if (!empty($type2) && !empty($field['type2']) && strpos(','.$field['type2'].',',','.$type2.',') === false) continue; // not for our content type// + if (isset($value[$this->prefix.$lname]) && $value[$this->prefix.$lname] !== '') //break; + { + $fields_with_vals[]=$lname; + } + //$stop_at_field = $name; } break; + default: + foreach(array_reverse($this->customfields) as $lname => $field) + { + $fields_with_vals[]=$lname; + } } $readonly = $cell['readonly'] || $readonlys[$name] || $type == 'customfields-list'; @@ -104,14 +116,16 @@ $cell['type'] = 'grid'; $cell['data'] = array(array()); $cell['rows'] = $cell['cols'] = 0; - + $n = 1; - foreach($this->customfields as $name => $field) + foreach($this->customfields as $lname => $field) { - if ($stop_at_field && $name == $stop_at_field) break; // no further row necessary + if (!(array_search($lname,$fields_with_vals)===false)) + { + if ($stop_at_field && $lname == $stop_at_field) break; // no further row necessary // check if the customfield get's displayed for type $value, we can have multiple comma-separated types now - if (!empty($field['type2']) && strpos(','.$field['type2'].',',','.$type2.',') === false) + if (!empty($type2) && !empty($field['type2']) && strpos(','.$field['type2'].',',','.$type2.',') === false) { continue; // not for our content type } @@ -125,7 +139,14 @@ 'no_lang' => substr(lang($field['label']),-1) == '*' ? 2 : 0, 'span' => $field['type'] === 'label' ? '2' : '', ))); + } else { + if (isset($value[$this->prefix.$lname]) && $value[$this->prefix.$lname] !== '') { + etemplate::add_child($cell,$input =& etemplate::empty_cell('image','info.png', + array('label'=>lang("custom fields").": ".$field['label'],'width'=>"16px", + 'onclick'=>"return alert('".lang("custom fields").": ".$field['label']."');"))); + } } + switch ((string)$field['type']) { case 'select' : @@ -137,17 +158,17 @@ $field['values'][$key] = $val; } } - $input =& etemplate::empty_cell('select',$this->prefix.$name,array( + $input =& etemplate::empty_cell('select',$this->prefix.$lname,array( 'sel_options' => $field['values'], 'size' => $field['rows'], - 'no_lang' => True + 'no_lang' => True, )); if($this->advanced_search) { $select =& $input; unset($input); $input =& etemplate::empty_cell('hbox'); etemplate::add_child($input, $select); unset($select); - etemplate::add_child($input, etemplate::empty_cell('select',$this->prefix.$name,array( + etemplate::add_child($input, etemplate::empty_cell('select',$this->prefix.$lname,array( 'sel_options' => $field['values'], 'size' => $field['rows'], 'no_lang' => True @@ -158,14 +179,14 @@ $row_class = 'th'; break; case 'checkbox' : - $input =& etemplate::empty_cell('checkbox',$this->prefix.$name); + $input =& etemplate::empty_cell('checkbox',$this->prefix.$lname); break; case 'radio' : $input =& etemplate::empty_cell('groupbox'); $m = 0; foreach ($field['values'] as $key => $val) { - $radio = etemplate::empty_cell('radio',$this->prefix.$name); + $radio = etemplate::empty_cell('radio',$this->prefix.$lname); $radio['label'] = $val; $radio['size'] = $key; etemplate::add_child($input,$radio); @@ -176,35 +197,46 @@ case 'textarea' : case '' : // not set $field['len'] = $field['len'] ? $field['len'] : 20; - if($field['rows'] <= 1) + if ($type != 'customfields-list') { - list($max,$shown) = explode(',',$field['len']); - $input =& etemplate::empty_cell('text',$this->prefix.$name,array( - 'size' => intval($shown > 0 ? $shown : $max).','.intval($max) - )); - } - else - { - $input =& etemplate::empty_cell('textarea',$this->prefix.$name,array( - 'size' => $field['rows'].($field['len'] > 0 ? ','.(int)$field['len'] : '') - )); + if($field['rows'] <= 1) + {//text + list($max,$shown) = explode(',',$field['len']); + $input =& etemplate::empty_cell('text',$this->prefix.$lname,array( + 'size' => intval($shown > 0 ? $shown : $max).','.intval($max), + 'maxlength'=>intval($max), + )); + } + else + {//textarea + $input =& etemplate::empty_cell('textarea',$this->prefix.$lname,array( + 'size' => $field['rows'].($field['len'] > 0 ? ','.(int)$field['len'] : ''), + )); + } + } else { + $input =& etemplate::empty_cell('label',$this->prefix.$lname, + array( + 'onclick'=>"return alert('".lang("custom fields").": ". + $lname."=>".htmlentities(str_replace("\r","",str_replace("\n"," ",$value[$this->prefix.$lname]))) ."');", + ) + ); } break; case 'date': case 'date-time': - $input =& etemplate::empty_cell($field['type'],$this->prefix.$name,array( + $input =& etemplate::empty_cell($field['type'],$this->prefix.$lname,array( 'size' => $field['len'] ? $field['len'] : ($field['type'] == 'date' ? 'Y-m-d' : 'Y-m-d H:i:s'), )); break; case 'select-account': list($opts) = explode('=',$field['values'][0]); - $input =& etemplate::empty_cell('select-account',$this->prefix.$name,array( + $input =& etemplate::empty_cell('select-account',$this->prefix.$lname,array( 'size' => ($field['rows']>1?$field['rows']:lang('None')).','.$opts, )); break; case 'link-entry': default : // link-entry to given app - $input =& etemplate::empty_cell('link-entry',$this->prefix.$name,array( + $input =& etemplate::empty_cell('link-entry',$this->prefix.$lname,array( 'size' => $field['type'] == 'link-entry' ? '' : $field['type'], )); } @@ -223,13 +255,15 @@ unset($input); } unset($label); + } } if ($type != 'customfields-list') { $cell['data'][0]['A'] = '100'; } list($span,$class) = explode(',',$cell['span']); // msie (at least 5.5) shows nothing with div overflow=auto - $cell['size'] = '100%,100%,0,'.$class.','.($type=='customfields-list'?',0':',').($tmpl->html->user_agent != 'msie' ? ',auto' : ''); + // we dont want to use up the full space for the table created, so we skip the line below + //$cell['size'] = '100%,100%,0,'.$class.','.($type=='customfields-list'?',0':',').($tmpl->html->user_agent != 'msie' ? ',auto' : ''); return True; // extra Label is ok }