reverting r52412, as it breaks not validating not send values, sending empty array for nothing selected in selectbox instead of (not submitted) null value

This commit is contained in:
Ralf Becker 2015-04-03 12:43:26 +00:00
parent 4ccc9b2cdb
commit d82f65e95e
4 changed files with 20 additions and 17 deletions

View File

@ -520,7 +520,7 @@ class etemplate_new extends etemplate_widget_template
{ {
if (!is_array($v) || !isset($old[$k]) || // no array or a new array if (!is_array($v) || !isset($old[$k]) || // no array or a new array
isset($v[0]) && !is_array($v[0]) && isset($v[count($v)-1]) || // or no associative array, eg. selecting multiple accounts isset($v[0]) && !is_array($v[0]) && isset($v[count($v)-1]) || // or no associative array, eg. selecting multiple accounts
is_array($v) && count($v) == 0 && is_array($old[$k])) // Empty array replacing non-empty is_array($v) && count($v) == 0) // Empty array replacing non-empty
{ {
$old[$k] = $v; $old[$k] = $v;
} }

View File

@ -130,7 +130,7 @@ class etemplate_widget_menupopup extends etemplate_widget
// 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']));
$allowed = array_merge($allowed,array_keys($type_options)); $allowed = array_merge($allowed,array_keys($type_options));
if (!$this->attrs['multiple'] || !($this->attrs['options'] > 1)) $allowed[] = ''; if (!$this->attrs['multiple'] || !($this->attrs['options'] > 1)) $allowed[] = '';
foreach((array) $value as $val) foreach((array) $value as $val)
@ -213,9 +213,11 @@ class etemplate_widget_menupopup extends etemplate_widget
} }
} }
} }
if (isset($value))
self::set_array($validated, $form_name, $value); {
self::set_array($validated, $form_name, $value);
//error_log(__METHOD__."() $form_name: ".array2string($value_in).' --> '.array2string($value).', allowed='.array2string($allowed)); //error_log(__METHOD__."() $form_name: ".array2string($value_in).' --> '.array2string($value).', allowed='.array2string($allowed));
}
} }
else else
{ {
@ -478,7 +480,7 @@ class etemplate_widget_menupopup extends etemplate_widget
{ {
$field = self::expand_name($field, 0, 0,'','',self::$cont); $field = self::expand_name($field, 0, 0,'','',self::$cont);
} }
list($rows,$type,$type2,$type3,$type4,$type5) = $legacy_options; list($rows,$type,$type2,$type3,$type4,$type5) = $legacy_options;
$no_lang = false; $no_lang = false;
$options = array(); $options = array();

View File

@ -159,7 +159,7 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput, et2_IPrin
// Directly set current col_filters from settings // Directly set current col_filters from settings
jQuery.extend(this.activeFilters.col_filter, this.options.settings.col_filter); jQuery.extend(this.activeFilters.col_filter, this.options.settings.col_filter);
/* /*
Process selected custom fields here, so that the settings are correctly Process selected custom fields here, so that the settings are correctly
set before the row template is parsed set before the row template is parsed
@ -1879,13 +1879,13 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput, et2_IPrin
beforePrint: function() { beforePrint: function() {
// Add the class, if needed // Add the class, if needed
this.div.addClass('print'); this.div.addClass('print');
// Trigger resize, so we can fit on a page // Trigger resize, so we can fit on a page
this.dynheight.outerNode.css('max-width',this.div.css('max-width')); this.dynheight.outerNode.css('max-width',this.div.css('max-width'));
this.resize(); this.resize();
// Reset height to auto (after width resize) so there's no restrictions // Reset height to auto (after width resize) so there's no restrictions
this.dynheight.innerNode.css('height', 'auto'); this.dynheight.innerNode.css('height', 'auto');
// Check for rows that aren't loaded yet, or lots of rows // Check for rows that aren't loaded yet, or lots of rows
var range = this.controller._grid.getIndexRange(); var range = this.controller._grid.getIndexRange();
this.old_height = this.controller._grid._scrollHeight; this.old_height = this.controller._grid._scrollHeight;
@ -1972,11 +1972,11 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput, et2_IPrin
$j('.egwGridView_scrollarea',this.div).css('overflow-y','hidden'); $j('.egwGridView_scrollarea',this.div).css('overflow-y','hidden');
// Show it all // Show it all
$j('.egwGridView_scrollarea',this.div).css('height','auto'); $j('.egwGridView_scrollarea',this.div).css('height','auto');
// Grid needs to redraw before it can be printed, so wait // Grid needs to redraw before it can be printed, so wait
window.setTimeout(jQuery.proxy(function() { window.setTimeout(jQuery.proxy(function() {
dialog.destroy(); dialog.destroy();
// Should be OK to print now // Should be OK to print now
defer.resolve(); defer.resolve();
},nm),ET2_GRID_INVALIDATE_TIMEOUT); },nm),ET2_GRID_INVALIDATE_TIMEOUT);
@ -1991,7 +1991,7 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput, et2_IPrin
else else
{ {
// Don't need more rows, limit to requested and finish // Don't need more rows, limit to requested and finish
// Show it all // Show it all
$j('.egwGridView_scrollarea',this.div).css('height','auto'); $j('.egwGridView_scrollarea',this.div).css('height','auto');
@ -2031,7 +2031,7 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput, et2_IPrin
* in beforePrint() * in beforePrint()
*/ */
afterPrint: function() { afterPrint: function() {
this.div.removeClass('print'); this.div.removeClass('print');
// Put scrollbar back // Put scrollbar back
@ -2040,7 +2040,7 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput, et2_IPrin
// Correct size of grid, and trigger resize to fix it // Correct size of grid, and trigger resize to fix it
this.controller._grid.setScrollHeight(this.old_height); this.controller._grid.setScrollHeight(this.old_height);
delete this.old_height; delete this.old_height;
// Remove CSS rule hiding extra rows // Remove CSS rule hiding extra rows
if(this.print_row_selector) if(this.print_row_selector)
{ {
@ -2394,7 +2394,7 @@ var et2_nextmatch_header_bar = et2_DOMWidget.extend(et2_INextmatchHeader,
} }
// Legacy: Add in 'All' option for cat_id, if not provided. // Legacy: Add in 'All' option for cat_id, if not provided.
if(name == 'cat_id' && options != null && (typeof options[''] == 'undefined' || options[0].value != '')) if(name == 'cat_id' && options != null && (typeof options[''] == 'undefined' || typeof options[0] != 'undefined' && options[0].value != ''))
{ {
widget_options.empty_label = this.egw().lang('All'); widget_options.empty_label = this.egw().lang('All');
} }

View File

@ -725,11 +725,12 @@ var et2_selectbox = et2_inputWidget.extend(
var value = []; var value = [];
jQuery("input:checked",this.multiOptions).each(function(){value.push(this.value);}); jQuery("input:checked",this.multiOptions).each(function(){value.push(this.value);});
// we need to return null for no value instead of empty array, which gets overwritten by preserved value on server-side // we need to return null for no value instead of empty array, which gets overwritten by preserved value on server-side
this.value = value.length > 0 ? value : null; this.value = value;
} }
else else
{ {
this.value = this._super.apply(this, arguments); this.value = this._super.apply(this, arguments);
if (this.value === null) this.value = []; // do NOT return null, as it does not get transmitted to server
} }
return this.value; return this.value;
}, },
@ -876,7 +877,7 @@ jQuery.extend(et2_selectbox,
} }
return content_options; return content_options;
}, },
/** /**
* Some static options, no need to transfer them over and over. * Some static options, no need to transfer them over and over.
* We still need the same thing on the server side to validate, so they * We still need the same thing on the server side to validate, so they
@ -1028,7 +1029,7 @@ jQuery.extend(et2_selectbox,
* options from the server once, then keep them to use if they're needed again. * options from the server once, then keep them to use if they're needed again.
* We use the options string to keep the different possibilites (eg. categories * We use the options string to keep the different possibilites (eg. categories
* for different apps) seperate. * for different apps) seperate.
* *
* @param {et2_selectbox} widget Selectbox we're looking at * @param {et2_selectbox} widget Selectbox we're looking at
* @param {string} options_string * @param {string} options_string
* @param {Object} attrs Widget attributes (not yet fully set) * @param {Object} attrs Widget attributes (not yet fully set)