diff --git a/admin/templates/default/customfields.xet b/admin/templates/default/customfields.xet index a5393238f3..c22848e45d 100644 --- a/admin/templates/default/customfields.xet +++ b/admin/templates/default/customfields.xet @@ -63,7 +63,7 @@ - + diff --git a/etemplate/inc/class.etemplate_widget_customfields.inc.php b/etemplate/inc/class.etemplate_widget_customfields.inc.php index 2425c7c58b..6c23d03414 100644 --- a/etemplate/inc/class.etemplate_widget_customfields.inc.php +++ b/etemplate/inc/class.etemplate_widget_customfields.inc.php @@ -135,17 +135,21 @@ class etemplate_widget_customfields extends etemplate_widget_transformer // app changed $customfields =& egw_customfields::get($app); } - // Filter fields if($this->attrs['field-names']) { - if($this->attrs['field-names'][0] == '!') + $fields_name = explode(',', $this->attrs['field-names']); + foreach($fields_name as &$f) { - $negate_field_filter = true; - $this->attrs['field-names'] = substr($this->attrs['field_names'],1); + if ($f[0] == "!") + { + $f= substr($f,1); + $negate_fields[]= $f; + } + $field_filters []= $f; } - $field_filter = explode(',', $this->attrs['field_names']); } + $fields = $customfields; $use_private = self::expand_name($this->attrs['use-private'],0,0,'','',self::$cont); @@ -160,8 +164,7 @@ class etemplate_widget_customfields extends etemplate_widget_transformer } // Remove filtered fields - if($field_filter && (!$negate_field_filter && !in_array($key, $field_filter) || - $negate_field_filter && in_array($key, $field_filter))) + if($field_filters && in_array($key, $negate_fields) && in_array($key, $field_filters)) { unset($fields[$key]); } @@ -169,11 +172,11 @@ class etemplate_widget_customfields extends etemplate_widget_transformer // check if name refers to a single custom field --> show only that $matches = null; if (($pos=strpos($form_name,self::$prefix)) !== false && // allow the prefixed name to be an array index too - preg_match("/$this->prefix([^\]]+)/",$form_name,$matches) && isset($fields[$name=$matches[1]])) + preg_match($preg = '/'.self::$prefix.'([^\]]+)/',$form_name,$matches) && isset($fields[$name=$matches[1]])) { $fields = array($name => $fields[$name]); - $value = array($this->prefix.$name => $value); - $form_name = substr($form_name,0,-strlen("[$this->prefix$name]")); + $value = array(self::$prefix.$name => $value); + $form_name = self::$prefix.$name; } if(!is_array($fields)) $fields = array(); @@ -199,7 +202,7 @@ class etemplate_widget_customfields extends etemplate_widget_transformer { if (!empty($this->attrs['sub-type']) && !empty($field['type2']) && strpos(','.$field['type2'].',',','.$field['type2'].',') === false) continue; // not for our content type// - if (isset($value[$this->prefix.$lname]) && $value[$this->prefix.$lname] !== '') //break; + if (isset($value[self::$prefix.$lname]) && $value[self::$prefix.$lname] !== '') //break; { $fields_with_vals[]=$lname; } @@ -368,7 +371,7 @@ class etemplate_widget_customfields extends etemplate_widget_transformer { self::set_validation_error($field,lang('Field must not be empty !!!'),''); } - $field_name = self::form_name($form_name != self::GLOBAL_ID ? $form_name : $cname, $field); + $field_name = $this->id[0] == self::$prefix && $customfields[substr($this->id,1)] ? $this->id : self::form_name($form_name != self::GLOBAL_ID ? $form_name : $cname, $field); $valid =& self::get_array($validated, $field_name, true); if (is_array($valid)) $valid = implode(',', $valid); diff --git a/etemplate/js/et2_extension_customfields.js b/etemplate/js/et2_extension_customfields.js index f01a7a8c16..27317c5eda 100644 --- a/etemplate/js/et2_extension_customfields.js +++ b/etemplate/js/et2_extension_customfields.js @@ -53,7 +53,7 @@ var et2_customfields_list = et2_valueWidget.extend([et2_IDetachedDOM, et2_IInput } }, - legacyOptions: ["type_filter","private"], // Field restriction & private done server-side + legacyOptions: ["type_filter","private", "fields"], // Field restriction & private done server-side prefix: '#', @@ -189,7 +189,8 @@ var et2_customfields_list = et2_valueWidget.extend([et2_IDetachedDOM, et2_IInput { var row = jQuery(document.createElement("tr")) - .appendTo(this.tbody); + .appendTo(this.tbody) + .addClass(this.id+'_'+id); var cf = jQuery(document.createElement("td")) .appendTo(row); if(!field.type) field.type = 'text";' @@ -286,15 +287,22 @@ var et2_customfields_list = et2_valueWidget.extend([et2_IDetachedDOM, et2_IInput // Set the value for this element var contentMgr = this.getArrayMgr("content"); if (contentMgr != null) { - var val = contentMgr.getEntry(this.id); + var val = contentMgr.getEntry(this.id); _attrs["value"] = {}; if (val !== null) { - // Only set the values that match desired custom fields - for(var key in val) + if(this.id.indexOf(this.prefix) === 0 && data.fields[this.id.replace(this.prefix,'')] === true) { - if(key.indexOf(this.prefix) == 0) { - _attrs["value"][key] = val[key]; + _attrs['value'][this.id] = val; + } + else + { + // Only set the values that match desired custom fields + for(var key in val) + { + if(key.indexOf(this.prefix) == 0) { + _attrs["value"][key] = val[key]; + } } } //_attrs["value"] = val;