From 107bde9cfd9a0392d18544b5a433552ce6f2f0a6 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Wed, 30 Aug 2006 13:41:21 -0400 Subject: [PATCH] Added MSSQL support --- program/include/rcube_shared.inc | 242 ++++++++++++++++++++++-------------------------- 1 files changed, 112 insertions(+), 130 deletions(-) diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc index 6874094..768ae3f 100644 --- a/program/include/rcube_shared.inc +++ b/program/include/rcube_shared.inc @@ -29,9 +29,11 @@ var $scripts_path = ''; var $script_files = array(); var $scripts = array(); + var $charset = 'ISO-8859-1'; var $script_tag_file = "<script type=\"text/javascript\" src=\"%s%s\"></script>\n"; var $script_tag = "<script type=\"text/javascript\">\n<!--\n%s\n\n//-->\n</script>\n"; + var $default_template = "<html>\n<head><title></title></head>\n<body></body>\n</html>"; var $title = ''; var $header = ''; @@ -77,23 +79,59 @@ } - function set_title() + function set_title($t) { + $this->title = $t; + } + + + function set_charset($charset) + { + global $MBSTRING; + $this->charset = $charset; + + if ($MBSTRING && function_exists("mb_internal_encoding")) + { + if(!@mb_internal_encoding($charset)) + $MBSTRING = FALSE; + } + } + + function get_charset() + { + return $this->charset; + } + + + function reset() + { + $this->css = new rcube_css(); + $this->script_files = array(); + $this->scripts = array(); + $this->title = ''; } function write($templ='', $base_path='') { - $output = trim($templ); - + $output = empty($templ) ? $this->default_template : trim($templ); + // set default page title if (!strlen($this->title)) - $this->title = 'RoundCube|Mail'; + $this->title = 'RoundCube Mail'; // replace specialchars in content $__page_title = rep_specialchars_output($this->title, 'html', 'show', FALSE); $__page_header = $__page_body = $__page_footer = ''; + + + // include meta tag with charset + if (!empty($this->charset)) + { + header('Content-Type: text/html; charset='.$this->charset); + $__page_header = '<meta http-equiv="content-type" content="text/html; charset='.$this->charset.'" />'."\n"; + } // definition of the code to be placed in the document header and footer @@ -166,8 +204,9 @@ // correct absolute pathes in images and other tags $output = preg_replace('/(src|href|background)=(["\']?)(\/[a-z0-9_\-]+)/Ui', "\\1=\\2$base_path\\3", $output); + $output = str_replace('$__skin_path', $base_path, $output); - print $output; + print rcube_charset_convert($output, 'UTF-8', $this->charset); } @@ -1031,7 +1070,7 @@ // get text in the desired language from the language file function rcube_label($attrib) { - global $sess_user_lang, $INSTALL_PATH; + global $sess_user_lang, $INSTALL_PATH, $OUTPUT; static $sa_text_data, $s_language, $utf8_decode; // extract attributes @@ -1051,8 +1090,8 @@ $sa_text_data = array(); // get english labels (these should be complete) - @include($INSTALL_PATH.'program/localization/en/labels.inc'); - @include($INSTALL_PATH.'program/localization/en/messages.inc'); + @include($INSTALL_PATH.'program/localization/en_US/labels.inc'); + @include($INSTALL_PATH.'program/localization/en_US/messages.inc'); if (is_array($labels)) $sa_text_data = $labels; @@ -1064,17 +1103,11 @@ { include_once($INSTALL_PATH.'program/localization/'.$sess_user_lang.'/labels.inc'); include_once($INSTALL_PATH.'program/localization/'.$sess_user_lang.'/messages.inc'); - + if (is_array($labels)) $sa_text_data = array_merge($sa_text_data, $labels); if (is_array($messages)) $sa_text_data = array_merge($sa_text_data, $messages); - } - - if (isset($utf8_decoding) && $utf8_decoding==TRUE) - { - @include_once('lib/utf8.inc'); - $utf8_decode = TRUE; } $s_language = $sess_user_lang; @@ -1131,12 +1164,6 @@ EOF; "); - - // perform utf-8 decoding - if ($utf8_decode && function_exists('utf8ToUnicodeEntities')) - $text = utf8ToUnicodeEntities($text); - - // format output if (($attrib['uppercase'] && strtolower($attrib['uppercase']=='first')) || $attrib['ucfirst']) return ucfirst($text); @@ -1170,113 +1197,6 @@ if (!headers_sent()) header("Expires: ".gmdate("D, d M Y H:i:s", mktime()+2600000)." GMT"); } - - -// replace specials characters to a specific encoding type -function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE) - { - global $OUTPUT_TYPE; - static $html_encode_arr, $js_rep_table, $rtf_rep_table, $xml_rep_table; - - if (!$enctype) - $enctype = $GLOBALS['OUTPUT_TYPE']; - - // convert nbsps back to normal spaces if not html - if ($enctype!='html') - $str = str_replace(chr(160), ' ', $str); - - - // encode for plaintext - if ($enctype=='text') - return str_replace("\r\n", "\n", $mode=='remove' ? strip_tags($str) : $str); - - // encode for HTML output - if ($enctype=='html') - { - if (!$html_encode_arr) - { - $html_encode_arr = get_html_translation_table(HTML_ENTITIES); - $html_encode_arr[chr(128)] = '€'; - unset($html_encode_arr['?']); - unset($html_encode_arr['&']); - } - - $ltpos = strpos($str, '<'); - $encode_arr = $html_encode_arr; - - // don't replace quotes and html tags - if (($mode=='show' || $mode=='') && $ltpos!==false && strpos($str, '>', $ltpos)!==false) - { - unset($encode_arr['"']); - unset($encode_arr['<']); - unset($encode_arr['>']); - } - else if ($mode=='remove') - $str = strip_tags($str); - - $out = strtr($str, $encode_arr); - - return $newlines ? nl2br($out) : $out; - } - - - if ($enctype=='url') - return rawurlencode($str); - - - // if the replace tables for RTF, XML and JS are not yet defined - if (!$js_rep_table) - { - for ($c=160; $c<256; $c++) // can be increased to support more charsets - { - $hex = dechex($c); - $js_rep_table[Chr($c)] = sprintf("\u%s%s", str_repeat('0', 4-strlen($hex)), $hex); - $rtf_rep_table[Chr($c)] = "\\'$hex"; - $xml_rep_table[Chr($c)] = "&#$c;"; - } - - $js_rep_table['"'] = sprintf("\u%s%s", str_repeat('0', 4-strlen(dechex(34))), dechex(34)); - $xml_rep_table['"'] = '"'; - } - - // encode for RTF - if ($enctype=='xml') - return strtr($str, $xml_rep_table); - - // encode for javascript use - if ($enctype=='js') - return preg_replace(array("/\r\n/", '/"/', "/'/"), array('\n', '\"', "\'"), strtr($str, $js_rep_table)); - - // encode for RTF - if ($enctype=='rtf') - return preg_replace("/\r\n/", "\par ", strtr($str, $rtf_rep_table)); - - // no encoding given -> return original string - return $str; - } - - -function decode_specialchars($input, $charset='') - { - $charset = strtolower($charset); - - if ($charset=='utf-8') - { - require_once('lib/utf8.inc'); - return utf8ToUnicodeEntities($input); - } - else if ($charset=="koi8-r") - return convert_cyr_string($input, 'k', 'w'); - else if ($charset=="iso8859-5") - return convert_cyr_string($input, 'i', 'w'); - else if ($charset=="x-cp866") - return convert_cyr_string($input, 'a', 'w'); - else if ($charset=="x-mac-cyrillic") - return convert_cyr_string($input, 'm', 'w'); - - return $input; - } - // function to convert an array to a javascript array @@ -1425,7 +1345,8 @@ } - +// replace the middle part of a string with ... +// if it is longer than the allowed length function abbrevate_string($str, $maxlength, $place_holder='...') { $length = strlen($str); @@ -1439,7 +1360,68 @@ return $str; } + + +// make sure the string ends with a slash +function slashify($str) + { + return unslashify($str).'/'; + } + + +// remove slash at the end of the string +function unslashify($str) + { + return preg_replace('/\/$/', '', $str); + } +// delete all files within a folder +function clear_directory($dir_path) + { + $dir = @opendir($dir_path); + if(!$dir) return FALSE; -?> \ No newline at end of file + while ($file = readdir($dir)) + if (strlen($file)>2) + unlink("$dir_path/$file"); + + closedir($dir); + return TRUE; + } + + +// create a unix timestamp with a specified offset from now +function get_offset_time($offset_str, $factor=1) + { + if (preg_match('/^([0-9]+)\s*([smhdw])/i', $offset_str, $regs)) + { + $amount = (int)$regs[1]; + $unit = strtolower($regs[2]); + } + else + { + $amount = (int)$offset_str; + $unit = 's'; + } + + $ts = mktime(); + switch ($unit) + { + case 'w': + $amount *= 7; + case 'd': + $amount *= 24; + case 'h': + $amount *= 60; + case 'h': + $amount *= 60; + case 's': + $ts += $amount * $factor; + } + + return $ts; + } + + +?> -- Gitblit v1.9.1