- Use built-in json_encode() for proper JSON format in AJAX replies (and compat. with jQuery 1.4)

release-0.6
alecpl 15 years ago
parent 46b48d9afc
commit e5d60d69d4

@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail
===========================
- Use built-in json_encode() for proper JSON format in AJAX replies
- Allow setting only selected params in 'message_compose' hook (#1486312)
- Plugin API: added 'message_compose_body' hook (#1486285)
- Fix counters of all folders are checked in 'getunread' action with check_all_folders disabled (#1486128)

@ -239,7 +239,7 @@ class rcube_json_output
if (!empty($this->callbacks))
$response['callbacks'] = $this->callbacks;
echo json_serialize($response);
echo json_encode($response);
}
@ -255,7 +255,7 @@ class rcube_json_output
foreach ($this->commands as $i => $args) {
$method = array_shift($args);
foreach ($args as $i => $arg) {
$args[$i] = json_serialize($arg);
$args[$i] = json_encode($arg);
}
$out .= sprintf(

@ -108,97 +108,6 @@ function send_modified_header($mdate, $etag=null, $skip_check=false)
}
/**
* Returns whether an $str is a reserved word for any of the version of Javascript or ECMAScript
* @param str String to check
* @return boolean True if $str is a reserver word, False if not
*/
function is_js_reserved_word($str)
{
return in_array($str, array(
// ECMASript ver 4 reserved words
'as','break','case','catch','class','const','continue',
'default','delete','do','else','export','extends','false','finally','for','function',
'if','import','in','instanceof','is','namespace','new','null','package','private',
'public','return','super','switch','this','throw','true','try','typeof','use','var',
'void','while','with',
// ECMAScript ver 4 future reserved words
'abstract','debugger','enum','goto','implements','interface','native','protected',
'synchronized','throws','transient','volatile',
// special meaning in some contexts
'get','set',
// were reserved in ECMAScript ver 3
'boolean','byte','char','double','final','float','int','long','short','static'
));
}
/**
* Convert a variable into a javascript object notation
*
* @param mixed Input value
* @return string Serialized JSON string
*/
function json_serialize($var)
{
if (is_object($var))
$var = get_object_vars($var);
if (is_array($var))
{
// empty array
if (!sizeof($var))
return '[]';
else
{
$keys_arr = array_keys($var);
$is_assoc = $have_numeric = 0;
for ($i=0; $i<sizeof($keys_arr); ++$i)
{
if (is_numeric($keys_arr[$i]))
$have_numeric = 1;
if (!is_numeric($keys_arr[$i]) || $keys_arr[$i] != $i)
$is_assoc = 1;
if ($is_assoc && $have_numeric)
break;
}
$brackets = $is_assoc ? '{}' : '[]';
$pairs = array();
foreach ($var as $key => $value)
{
// enclose key with quotes if it is not variable-name conform
if (!preg_match('/^[_a-zA-Z]{1}[_a-zA-Z0-9]*$/', $key) || is_js_reserved_word($key))
$key = "'$key'";
$pairs[] = sprintf("%s%s", $is_assoc ? "$key:" : '', json_serialize($value));
}
return $brackets{0} . implode(',', $pairs) . $brackets{1};
}
}
else if (!is_string($var) && strval(intval($var)) === strval($var))
return $var;
else if (is_bool($var))
return $var ? '1' : '0';
else
return "'".JQ($var)."'";
}
/**
* Function to convert an array to a javascript array
* Actually an alias function for json_serialize()
* @deprecated
*/
function array2js($arr, $type='')
{
return json_serialize($arr);
}
/**
* Similar function as in_array() but case-insensitive
*

@ -414,12 +414,12 @@ class rcube_template extends rcube_html_page
{
$out = '';
if (!$this->framed && !empty($this->js_env)) {
$out .= JS_OBJECT_NAME . '.set_env('.json_serialize($this->js_env).");\n";
$out .= JS_OBJECT_NAME . '.set_env('.json_encode($this->js_env).");\n";
}
foreach ($this->js_commands as $i => $args) {
$method = array_shift($args);
foreach ($args as $i => $arg) {
$args[$i] = json_serialize($arg);
$args[$i] = json_encode($arg);
}
$parent = $this->framed || preg_match('/^parent\./', $method);
$out .= sprintf(

@ -506,7 +506,7 @@ function rcmail_compose_body($attrib)
JQ(Q(rcube_label('close'))),
JQ(Q(rcube_label('revertto'))),
JQ(Q(rcube_label('nospellerrors'))),
json_serialize($spellcheck_langs),
json_encode($spellcheck_langs),
$lang,
$attrib['id'],
JS_OBJECT_NAME), 'foot');

@ -522,7 +522,7 @@ function rcmail_quota_display($attrib)
if (is_array($quota)) {
$OUTPUT->add_script('$(document).ready(function(){
rcmail.set_quota('.json_serialize($quota).')});', 'foot');
rcmail.set_quota('.json_encode($quota).')});', 'foot');
$quota = '';
}

Loading…
Cancel
Save