diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | program/include/rcube_json_output.php | 4 | ||||
-rw-r--r-- | program/include/rcube_shared.inc | 91 | ||||
-rwxr-xr-x | program/include/rcube_template.php | 4 | ||||
-rw-r--r-- | program/steps/mail/compose.inc | 2 | ||||
-rw-r--r-- | program/steps/mail/func.inc | 2 |
6 files changed, 7 insertions, 97 deletions
@@ -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) diff --git a/program/include/rcube_json_output.php b/program/include/rcube_json_output.php index ea23dc20b..cb8a7dbf4 100644 --- a/program/include/rcube_json_output.php +++ b/program/include/rcube_json_output.php @@ -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( diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc index 2cf59af5f..f4c6f7126 100644 --- a/program/include/rcube_shared.inc +++ b/program/include/rcube_shared.inc @@ -109,97 +109,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 * * @param mixed Needle value diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php index 5226f8db8..19f2d430b 100755 --- a/program/include/rcube_template.php +++ b/program/include/rcube_template.php @@ -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( diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index a441e00b6..999242c1a 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -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'); diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index b3016ee2a..6b2ce0907 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -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 = ''; } |