diff options
Diffstat (limited to 'program/include/rcube_shared.inc')
-rw-r--r-- | program/include/rcube_shared.inc | 182 |
1 files changed, 87 insertions, 95 deletions
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc index 0d502f81c..0f8be06c2 100644 --- a/program/include/rcube_shared.inc +++ b/program/include/rcube_shared.inc @@ -5,7 +5,7 @@ | rcube_shared.inc | | | | This file is part of the RoundCube PHP suite | - | Copyright (C) 2005-2006, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | CONTENTS: | @@ -84,11 +84,20 @@ class rcube_html_page function add_script($script, $position='head') { if (!isset($this->scripts[$position])) - $this->scripts[$position] = "\n$script"; + $this->scripts[$position] = "\n".rtrim($script); else - $this->scripts[$position] .= "\n$script"; + $this->scripts[$position] .= "\n".rtrim($script); } + function add_header($str) + { + $this->header .= "\n".$str; + } + + function add_footer($str) + { + $this->footer .= "\n".$str; + } function set_title($t) { @@ -121,6 +130,8 @@ class rcube_html_page $this->script_files = array(); $this->scripts = array(); $this->title = ''; + $this->header = ''; + $this->footer = ''; } @@ -150,39 +161,37 @@ class rcube_html_page foreach ($this->script_files['head'] as $file) $__page_header .= sprintf($this->script_tag_file, $this->scripts_path, $file); - if (is_array($this->external_scripts['head'])) - { + if (is_array($this->external_scripts['head'])) foreach ($this->external_scripts['head'] as $xscript) - { - $__page_header .= sprintf($this->tag_format_external_script, $xscript); - } - } + $__page_header .= sprintf($this->tag_format_external_script, $xscript); + + $head_script = $this->scripts['head_top'] . $this->scripts['head']; + if (!empty($head_script)) + $__page_header .= sprintf($this->script_tag, $head_script); + + if (!empty($this->header)) + $__page_header .= $this->header; - if (!empty($this->scripts['head'])) - $__page_header .= sprintf($this->script_tag, $this->scripts['head']); - if (is_array($this->script_files['foot'])) - { foreach ($this->script_files['foot'] as $file) $__page_footer .= sprintf($this->script_tag_file, $this->scripts_path, $file); - } if (!empty($this->scripts['foot'])) $__page_footer .= sprintf($this->script_tag, $this->scripts['foot']); - if ($this->footer) - $__page_footer .= "\n" . $this->footer; + if (!empty($this->footer)) + $__page_footer .= $this->footer; $__page_header .= $this->css->show(); // find page header - if($hpos = rc_strpos(rc_strtolower($output), '</head>')) + if($hpos = strpos(strtolower($output), '</head>')) $__page_header .= "\n"; else { if (!is_numeric($hpos)) - $hpos = rc_strpos(rc_strtolower($output), '<body'); - if (!is_numeric($hpos) && ($hpos = rc_strpos(rc_strtolower($output), '<html'))) + $hpos = strpos(strtolower($output), '<body'); + if (!is_numeric($hpos) && ($hpos = strpos(strtolower($output), '<html'))) { while($output[$hpos]!='>') $hpos++; @@ -194,27 +203,27 @@ class rcube_html_page // add page hader if($hpos) - $output = rc_substr($output,0,$hpos) . $__page_header . rc_substr($output,$hpos,rc_strlen($output)); + $output = substr($output,0,$hpos) . $__page_header . substr($output,$hpos,strlen($output)); else $output = $__page_header . $output; // find page body - if($bpos = rc_strpos(rc_strtolower($output), '<body')) + if($bpos = strpos(strtolower($output), '<body')) { while($output[$bpos]!='>') $bpos++; $bpos++; } else - $bpos = rc_strpos(rc_strtolower($output), '</head>')+7; + $bpos = strpos(strtolower($output), '</head>')+7; // add page body if($bpos && $__page_body) - $output = rc_substr($output,0,$bpos) . "\n$__page_body\n" . rc_substr($output,$bpos,rc_strlen($output)); + $output = substr($output,0,$bpos) . "\n$__page_body\n" . substr($output,$bpos,strlen($output)); // find and add page footer - $output_lc = rc_strtolower($output); + $output_lc = strtolower($output); if(($fpos = strrstr($output_lc, '</body>')) || ($fpos = strrstr($output_lc, '</html>'))) $output = substr($output, 0, $fpos) . "$__page_footer\n" . substr($output, $fpos); @@ -1016,10 +1025,10 @@ class select extends base_form_element in_array($option['value'], $select, TRUE)) || (in_array($option['text'], $select, TRUE))) ? $this->_conv_case(' selected', 'attrib') : ''; - + $options_str .= sprintf("<%s%s%s>%s</%s>\n", $this->_conv_case('option', 'tag'), - isset($option['value']) ? sprintf($value_str, $option['value']) : '', + !empty($option['value']) ? sprintf($value_str, Q($option['value'])) : '', $selected, Q($option['text'], 'strict', FALSE), $this->_conv_case('option', 'tag')); @@ -1258,89 +1267,71 @@ function send_modified_header($mdate, $etag=null) } -// function to convert an array to a javascript array -function array2js($arr, $type='') +/** + * Convert a variable into a javascript notation string + */ +function json_serialize($var) { - if (!$type) - $type = 'mixed'; + if (is_object($var)) + $var = get_object_vars($var); - if (is_array($arr)) + if (is_array($var)) { - // no items in array - if (!sizeof($arr)) - return 'new Array()'; - else + // empty array + if (!sizeof($var)) + return '[]'; + else { - $a_pairs = array(); - $keys_arr = array_keys($arr); - $is_assoc = $have_numeric = 0; + $keys_arr = array_keys($var); + $is_assoc = $have_numeric = 0; - for ($i=0; $i<sizeof($keys_arr); ++$i) + 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; + 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(); - $previous_was_array = false; - while (list($key, $value) = each($arr)) + foreach ($var as $key => $value) { - // enclose key with quotes if it is not variable-name conform - if (!ereg("^[_a-zA-Z]{1}[_a-zA-Z0-9]*$", $key) /* || is_js_reserved_word($key) */) - $key = "'$key'"; + // enclose key with quotes if it is not variable-name conform + if (!ereg("^[_a-zA-Z]{1}[_a-zA-Z0-9]*$", $key) /* || is_js_reserved_word($key) */) + $key = "'$key'"; - if (!is_array($value) && is_string($value)) - { - $value = str_replace("\r\n", '\n', $value); - $value = str_replace("\n", '\n', $value); - } - - $is_string = false; - if (!is_array($value)) - { - if ($type=='string') - $is_string = true; - else if (($type == 'mixed' && is_bool($value)) || $type == 'bool') - { - $is_string = false; - $value = $value ? "true" : "false"; - } - else if ((($type=='mixed' && is_numeric($value)) || $type=='int') && rc_strlen($value)<16) // js interprets numbers with digits >15 as ...e+... - $is_string = FALSE; - else - $is_string = TRUE; - } - - if ($is_string) - $value = "'".preg_replace("/(?<!\\\)'/", "\'", $value)."'"; - - $a_pairs[] = sprintf("%s%s", - $is_assoc ? "$key:" : '', - is_array($value) ? array2js($value, $type) : $value); - } - - if ($a_pairs) - { - if ($is_assoc) - $return = '{'.implode(',', $a_pairs).'}'; - else - $return = '['.implode(',', $a_pairs).']'; + $pairs[] = sprintf("%s%s", $is_assoc ? "$key:" : '', json_serialize($value)); } - return $return; + return $brackets{0} . implode(',', $pairs) . $brackets{1}; } } - else - { - return $arr; - } + else if (is_numeric($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 + * @deprecated + */ +function array2js($arr, $type='') + { + return json_serialize($arr); } -// similar function as in_array() ut case-insensitive +/** + * Similar function as in_array() but case-insensitive + */ function in_array_nocase($needle, $haystack) { foreach ($haystack as $value) @@ -1353,8 +1344,9 @@ function in_array_nocase($needle, $haystack) } - -// find out if the string content means TRUE or FALSE +/** + * Find out if the string content means TRUE or FALSE + */ function get_boolean($str) { $str = strtolower($str); @@ -1469,7 +1461,7 @@ function rc_strtolower($str) } // wrapper function for substr -function rc_substr($str, $start, $len) +function rc_substr($str, $start, $len=null) { if (function_exists('mb_substr')) return mb_substr($str, $start, $len); |