fix editing mail accounts loses imap or smtp server type caused by not correctly escaping values searched via jQuery selector

This commit is contained in:
Ralf Becker 2016-04-06 14:57:44 +00:00
parent 47de53e086
commit ffaeb52bce

View File

@ -441,6 +441,25 @@ var et2_selectbox = (function(){ "use strict"; return et2_inputWidget.extend(
*/ */
_is_multiple_regexp: /^[,0-9A-Za-z/_-]+$/, _is_multiple_regexp: /^[,0-9A-Za-z/_-]+$/,
/**
* Regular expression and replace value for escaping values in jQuery selectors used to find options
*/
_escape_value_replace: /\\/g,
_escape_value_with: '\\\\',
/**
* Find an option by it's value
*
* Taking care of escaping values correctly eg. EGroupware\Api\Mail\Smtp using above regular expression
*
* @param {string} _value
* @return {array}
*/
find_option: function(_value)
{
return jQuery("option[value='"+_value.replace(this._escape_value_replace, this._escape_value_with)+"']", this.input);
},
/** /**
* Set value * Set value
* *
@ -486,19 +505,19 @@ var et2_selectbox = (function(){ "use strict"; return et2_inputWidget.extend(
{ {
for(var i = 0; i < _value.length; i++) for(var i = 0; i < _value.length; i++)
{ {
jQuery("option[value='"+_value[i]+"']", this.input).prop("selected", true); this.find_option(_value[i]).prop("selected", true);
} }
} }
else if (typeof _value == "object") else if (typeof _value == "object")
{ {
for(var i in _value) for(var i in _value)
{ {
jQuery("option[value='"+_value[i]+"']", this.input).prop("selected", true); this.find_option(_value[i]).prop("selected", true);
} }
} }
else else
{ {
if(_value && jQuery("option[value='"+_value+"']", this.input).prop("selected", true).length == 0) if(_value && this.find_option(_value).prop("selected", true).length == 0)
{ {
if(this.options.select_options[_value] || if(this.options.select_options[_value] ||
this.options.select_options.filter && this.options.select_options.filter &&
@ -532,25 +551,38 @@ var et2_selectbox = (function(){ "use strict"; return et2_inputWidget.extend(
} }
}, },
/**
* Find an option by it's value
*
* Taking care of escaping values correctly eg. EGroupware\Api\Mail\Smtp
*
* @param {string} _value
* @return {array}
*/
find_multi_option: function(_value)
{
return jQuery("input[value='"+_value.replace(this._escape_value_replace, this._escape_value_with)+"']", this.multiOptions);
},
set_multi_value: function(_value) { set_multi_value: function(_value) {
jQuery("input",this.multiOptions).prop("checked", false); jQuery("input",this.multiOptions).prop("checked", false);
if(typeof _value == "array") if(typeof _value == "array")
{ {
for(var i = 0; i < _value.length; i++) for(var i = 0; i < _value.length; i++)
{ {
jQuery("input[value='"+_value[i]+"']", this.multiOptions).prop("checked", true); this.find_multi_option(_value[i]).prop("checked", true);
} }
} }
else if (typeof _value == "object") else if (typeof _value == "object")
{ {
for(var i in _value) for(var i in _value)
{ {
jQuery("input[value='"+_value[i]+"']", this.multiOptions).prop("checked", true); this.find_multi_option(_value[i]).prop("checked", true);
} }
} }
else else
{ {
if(jQuery("input[value='"+_value+"']", this.multiOptions).prop("checked", true).length == 0) if(this.find_multi_option(_value[i]).prop("checked", true).length == 0)
{ {
var debug_value = _value; var debug_value = _value;
if(debug_value === null) debug_value == 'NULL'; if(debug_value === null) debug_value == 'NULL';