mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-01 20:34:20 +01:00
do NOT send select-options for each autorepeated row for id like "set[$row_cont[id]][value]" and fix merging of app preset options with type-specific ones to not overwrite the later
This commit is contained in:
parent
b72aef8cc2
commit
7fa86b19ca
@ -210,13 +210,18 @@ class etemplate_widget_menupopup extends etemplate_widget
|
|||||||
{
|
{
|
||||||
$form_name = $matches[1];
|
$form_name = $matches[1];
|
||||||
}
|
}
|
||||||
|
// happens with autorepeated grids: this->id='some[$row_cont[thing]][else]' --> just use 'else'
|
||||||
|
elseif (preg_match('/\$row.*\[([^]]+)\]$/', $this->id, $matches))
|
||||||
|
{
|
||||||
|
$form_name = $matches[1];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$form_name = self::form_name($cname, $this->id, $expand);
|
$form_name = self::form_name($cname, $this->id, $expand);
|
||||||
}
|
}
|
||||||
if (!is_array(self::$request->sel_options[$form_name])) self::$request->sel_options[$form_name] = array();
|
if (!is_array(self::$request->sel_options[$form_name])) self::$request->sel_options[$form_name] = array();
|
||||||
$type = $this->attrs['type'] ? $this->attrs['type'] : $this->type;
|
$type = $this->attrs['type'] ? $this->attrs['type'] : $this->type;
|
||||||
if ($type != 'select')
|
if ($type != 'select' && $type != 'menupopup')
|
||||||
{
|
{
|
||||||
// Check selection preference, we may be able to skip reading some data
|
// Check selection preference, we may be able to skip reading some data
|
||||||
$select_pref = $GLOBALS['egw_info']['user']['preferences']['common']['account_selection'];
|
$select_pref = $GLOBALS['egw_info']['user']['preferences']['common']['account_selection'];
|
||||||
@ -228,22 +233,30 @@ class etemplate_widget_menupopup extends etemplate_widget
|
|||||||
$this->attrs['readonly'] = true;
|
$this->attrs['readonly'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// += to keep further options set by app code
|
// adding type specific options here, while keep further options set by app code
|
||||||
|
// we need to make sure to run only once for auto-repeated rows, because
|
||||||
|
// array_merge used to keep options from app would otherwise add
|
||||||
|
// type-specific ones multiple time (and of cause better performance)
|
||||||
$no_lang = null;
|
$no_lang = null;
|
||||||
self::$request->sel_options[$form_name] += self::typeOptions($this,
|
static $form_names_done = array();
|
||||||
|
if (!isset($form_names_done[$form_name]) &&
|
||||||
|
($type_options = self::typeOptions($this,
|
||||||
// typeOptions thinks # of rows is the first thing in options
|
// typeOptions thinks # of rows is the first thing in options
|
||||||
($this->attrs['rows'] && strpos($this->attrs['options'], $this->attrs['rows']) !== 0 ? $this->attrs['rows'].','.$this->attrs['options'] : $this->attrs['options']),
|
($this->attrs['rows'] && strpos($this->attrs['options'], $this->attrs['rows']) !== 0 ? $this->attrs['rows'].','.$this->attrs['options'] : $this->attrs['options']),
|
||||||
$no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name), $form_name);
|
$no_lang, $this->attrs['readonly'], self::get_array(self::$request->content, $form_name), $form_name)))
|
||||||
|
|
||||||
// if no_lang was modified, forward modification to the client
|
|
||||||
if ($no_lang != $this->attr['no_lang'])
|
|
||||||
{
|
{
|
||||||
self::setElementAttribute($form_name, 'no_lang', $no_lang);
|
self::fix_encoded_options($type_options);
|
||||||
|
|
||||||
|
self::$request->sel_options[$form_name] = array_merge(self::$request->sel_options[$form_name], $type_options);
|
||||||
|
|
||||||
|
// if no_lang was modified, forward modification to the client
|
||||||
|
if ($no_lang != $this->attr['no_lang'])
|
||||||
|
{
|
||||||
|
self::setElementAttribute($form_name, 'no_lang', $no_lang);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
$form_names_done[$form_name] = true;
|
||||||
}
|
}
|
||||||
// need to run that here manually for select-* and customfield widgets
|
|
||||||
// (automatic run through etemplate_new::exec() already happend)
|
|
||||||
self::fix_encoded_options(self::$request->sel_options[$form_name]);
|
|
||||||
|
|
||||||
// Make sure s, etc. are properly encoded when sent, and not double-encoded
|
// Make sure s, etc. are properly encoded when sent, and not double-encoded
|
||||||
$options = (isset(self::$request->sel_options[$form_name]) ? $form_name : $this->id);
|
$options = (isset(self::$request->sel_options[$form_name]) ? $form_name : $this->id);
|
||||||
|
Loading…
Reference in New Issue
Block a user