Etemplate: Fix for some attributes not getting set

This commit is contained in:
nathangray 2020-12-17 09:17:38 -07:00
parent 870cb9f175
commit 8910983c8e
4 changed files with 27 additions and 15 deletions

View File

@ -119,7 +119,7 @@ var et2_customfields_list = /** @class */ (function (_super) {
if (!this.options || !this.options.customfields) if (!this.options || !this.options.customfields)
return; return;
// Already set up - avoid duplicates in nextmatch // Already set up - avoid duplicates in nextmatch
if (this.getType() == 'customfields-list' && !this.isInTree()) if (this.getType() == 'customfields-list' && !this.isInTree() && Object.keys(this.widgets).length > 0)
return; return;
if (!jQuery.isEmptyObject(this.widgets)) if (!jQuery.isEmptyObject(this.widgets))
return; return;
@ -282,7 +282,7 @@ var et2_customfields_list = /** @class */ (function (_super) {
// Make sure widget is created, and has the needed function // Make sure widget is created, and has the needed function
if (!this.widgets[field_name] || !this.widgets[field_name].set_value) if (!this.widgets[field_name] || !this.widgets[field_name].set_value)
continue; continue;
var value = _value[this.options.prefix + field_name] ? _value[et2_customfields_list.PREFIX + field_name] : null; var value = _value[this.options.prefix + field_name] ? _value[this.options.prefix + field_name] : null;
// Check if ID was missing // Check if ID was missing
if (value == null && this.id == et2_customfields_list.DEFAULT_ID && this.getArrayMgr("content").getEntry(this.options.prefix + field_name)) { if (value == null && this.id == et2_customfields_list.DEFAULT_ID && this.getArrayMgr("content").getEntry(this.options.prefix + field_name)) {
value = this.getArrayMgr("content").getEntry(this.options.prefix + field_name); value = this.getArrayMgr("content").getEntry(this.options.prefix + field_name);

View File

@ -189,7 +189,7 @@ export class et2_customfields_list extends et2_valueWidget implements et2_IDetac
if(!this.options || !this.options.customfields) return; if(!this.options || !this.options.customfields) return;
// Already set up - avoid duplicates in nextmatch // Already set up - avoid duplicates in nextmatch
if(this.getType() == 'customfields-list' && !this.isInTree()) return; if(this.getType() == 'customfields-list' && !this.isInTree() && Object.keys(this.widgets).length > 0) return;
if(!jQuery.isEmptyObject(this.widgets)) return; if(!jQuery.isEmptyObject(this.widgets)) return;
// Check for global setting changes (visibility) // Check for global setting changes (visibility)
@ -391,7 +391,7 @@ export class et2_customfields_list extends et2_valueWidget implements et2_IDetac
// Make sure widget is created, and has the needed function // Make sure widget is created, and has the needed function
if(!this.widgets[field_name] || !this.widgets[field_name].set_value) continue; if(!this.widgets[field_name] || !this.widgets[field_name].set_value) continue;
let value = _value[this.options.prefix + field_name] ? _value[et2_customfields_list.PREFIX + field_name] : null; let value = _value[this.options.prefix + field_name] ? _value[this.options.prefix + field_name] : null;
// Check if ID was missing // Check if ID was missing
if(value == null && this.id == et2_customfields_list.DEFAULT_ID && this.getArrayMgr("content").getEntry(this.options.prefix + field_name)) if(value == null && this.id == et2_customfields_list.DEFAULT_ID && this.getArrayMgr("content").getEntry(this.options.prefix + field_name))

View File

@ -195,7 +195,7 @@ class Widget
$template = $this; $template = $this;
while($reader->moveToNextAttribute()) while($reader->moveToNextAttribute())
{ {
if ($reader->name != 'id' && $template->attr[$reader->name] != $reader->value) if ($reader->name != 'id' && $template->attr[$reader->name] !== $reader->value)
{ {
if (!$cloned) if (!$cloned)
{ {
@ -209,7 +209,7 @@ class Widget
// expand attributes values, otherwise eg. validation can not use attrs referencing to content // expand attributes values, otherwise eg. validation can not use attrs referencing to content
if ($value[0] == '@' || strpos($value, '$cont') !== false) if ($value[0] == '@' || strpos($value, '$cont') !== false)
{ {
$value = self::expand_name($value, null, null, null, null, $template->attrs[$reader->name] = $value = self::expand_name($value, null, null, null, null,
isset(self::$cont) ? self::$cont : self::$request->content); isset(self::$cont) ? self::$cont : self::$request->content);
} }

View File

@ -78,6 +78,7 @@ class Customfields extends Transformer
public function __construct($xml) public function __construct($xml)
{ {
$this->attrs['prefix'] = self::$prefix;
parent::__construct($xml); parent::__construct($xml);
} }
@ -124,7 +125,7 @@ class Customfields extends Transformer
$customfields =& $this->getElementAttribute(self::GLOBAL_VALS, 'customfields'); $customfields =& $this->getElementAttribute(self::GLOBAL_VALS, 'customfields');
} }
if(!$app) if(!$app && !$customfields)
{ {
$app =& $this->setElementAttribute(self::GLOBAL_VALS, 'app', $GLOBALS['egw_info']['flags']['currentapp']); $app =& $this->setElementAttribute(self::GLOBAL_VALS, 'app', $GLOBALS['egw_info']['flags']['currentapp']);
if ($this->attrs['sub-app']) $app .= '-'.$this->attrs['sub-app']; if ($this->attrs['sub-app']) $app .= '-'.$this->attrs['sub-app'];
@ -138,6 +139,10 @@ class Customfields extends Transformer
// app changed // app changed
$customfields =& Api\Storage\Customfields::get($app); $customfields =& Api\Storage\Customfields::get($app);
} }
if($this->attrs['customfields'])
{
$customfields = $this->attrs['customfields'];
}
// Filter fields // Filter fields
if($this->attrs['field-names']) if($this->attrs['field-names'])
{ {
@ -174,20 +179,20 @@ class Customfields extends Transformer
// Rmove fields for none private cutomfields when name refers to a single custom field // Rmove fields for none private cutomfields when name refers to a single custom field
$matches = null; $matches = null;
if (($pos=strpos($form_name,self::$prefix)) !== false && if (($pos=strpos($form_name,$this->attrs['prefix'])) !== false &&
preg_match($preg = '/'.self::$prefix.'([^\]]+)/',$form_name,$matches) && !isset($fields[$name=$matches[1]])) preg_match($preg = '/'.$this->attrs['prefix'].'([^\]]+)/',$form_name,$matches) && !isset($fields[$name=$matches[1]]))
{ {
unset($fields[$key]); unset($fields[$key]);
} }
} }
// check if name refers to a single custom field --> show only that // check if name refers to a single custom field --> show only that
$matches = null; $matches = null;
if (($pos=strpos($form_name,self::$prefix)) !== false && // allow the prefixed name to be an array index too if (($pos=strpos($form_name,$this->attrs['prefix'])) !== false && // allow the prefixed name to be an array index too
preg_match($preg = '/'.self::$prefix.'([^\]]+)/',$form_name,$matches) && isset($fields[$name=$matches[1]])) preg_match($preg = '/'.$this->attrs['prefix'].'([^\]]+)/',$form_name,$matches) && isset($fields[$name=$matches[1]]))
{ {
$fields = array($name => $fields[$name]); $fields = array($name => $fields[$name]);
$value = array(self::$prefix.$name => $value); $value = array($this->attrs['prefix'].$name => $value);
$form_name = self::$prefix.$name; $form_name = $this->attrs['prefix'].$name;
} }
if(!is_array($fields)) $fields = array(); if(!is_array($fields)) $fields = array();
@ -216,7 +221,7 @@ class Customfields extends Transformer
{ {
if (!empty($this->attrs['sub-type']) && !empty($field['type2']) && if (!empty($this->attrs['sub-type']) && !empty($field['type2']) &&
strpos(','.$field['type2'].',',','.$field['type2'].',') === false) continue; // not for our content type// strpos(','.$field['type2'].',',','.$field['type2'].',') === false) continue; // not for our content type//
if (isset($value[self::$prefix.$lname]) && $value[self::$prefix.$lname] !== '') //break; if (isset($value[$this->attrs['prefix'].$lname]) && $value[$this->attrs['prefix'].$lname] !== '') //break;
{ {
$fields_with_vals[]=$lname; $fields_with_vals[]=$lname;
} }
@ -400,7 +405,14 @@ class Customfields extends Transformer
// if we have no id / use self::GLOBAL_ID, we have to set $value_in in global namespace for regular widgets validation to find // if we have no id / use self::GLOBAL_ID, we have to set $value_in in global namespace for regular widgets validation to find
if (!$this->id) $content = array_merge($content, $value_in); if (!$this->id) $content = array_merge($content, $value_in);
//error_log(__METHOD__."($cname, ...) form_name=$form_name, use-private={$this->attrs['use-private']}, value_in=".array2string($value_in)); //error_log(__METHOD__."($cname, ...) form_name=$form_name, use-private={$this->attrs['use-private']}, value_in=".array2string($value_in));
$customfields =& $this->getElementAttribute(self::GLOBAL_VALS, 'customfields'); if($this->getElementAttribute($form_name, 'customfields'))
{
$customfields =& $this->getElementAttribute($form_name, 'customfields');
}
else
{
$customfields =& $this->getElementAttribute(self::GLOBAL_VALS, 'customfields');
}
if(is_array($value_in)) if(is_array($value_in))
{ {
foreach(array_keys($value_in) as $field) foreach(array_keys($value_in) as $field)