diff options
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/main.inc | 90 | ||||
-rw-r--r-- | program/include/rcube_imap.inc | 46 | ||||
-rw-r--r-- | program/include/rcube_shared.inc | 10 |
3 files changed, 75 insertions, 71 deletions
diff --git a/program/include/main.inc b/program/include/main.inc index e40ab0948..ab11911b2 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -289,7 +289,7 @@ function rcube_language_prop($lang, $prop='lang') // init output object for GUI and add common scripts function load_gui() { - global $CONFIG, $OUTPUT, $COMM_PATH, $JS_OBJECT_NAME, $CHARSET, $sess_user_lang; + global $CONFIG, $OUTPUT, $COMM_PATH, $JS_OBJECT_NAME, $sess_user_lang; // init output page $OUTPUT = new rcube_html_page(); @@ -307,14 +307,9 @@ function load_gui() // set user-selected charset if (!empty($CONFIG['charset'])) - { $OUTPUT->set_charset($CONFIG['charset']); - $CHARSET = $CONFIG['charset']; - } else - { rcmail_set_locale($sess_user_lang); - } // add some basic label to client rcube_add_label('loading'); @@ -324,10 +319,8 @@ function load_gui() // set localization charset based on the given language function rcmail_set_locale($lang) { - global $OUTPUT, $CHARSET; - - $CHARSET = rcube_language_prop($lang, 'charset'); - $OUTPUT->set_charset($CHARSET); + global $OUTPUT; + $OUTPUT->set_charset(rcube_language_prop($lang, 'charset')); } @@ -704,39 +697,46 @@ function rcmail_clear_session_temp($sess_id) -// decode characters from any charset to UTF-8 -function decode_specialchars($input, $charset='') +// convert a string from one charset to another +// this function is not complete and not tested well +function rcube_charset_convert($str, $from, $to=NULL) { - global $CHARSET; - $charset = strtolower($charset); + $from = strtolower($from); + $to = $to==NULL ? strtolower($GLOBALS['CHARSET']) : strtolower($to); - if ($charset=='utf-7') - $output = UTF7DecodeString($input); - else if ($charset=='utf-8' && $CHARSET!='UTF-8' && function_exists('utf8_decode')) - $output = utf8_decode($input); - else if ($charset=="koi8-r") - $output = convert_cyr_string($input, 'k', 'w'); - else if ($charset=="iso8859-5") - $output = convert_cyr_string($input, 'i', 'w'); - else if ($charset=="x-cp866") - $output = convert_cyr_string($input, 'a', 'w'); - else if ($charset=="x-mac-cyrillic") - $output = convert_cyr_string($input, 'm', 'w'); - else - $output = $input; - + if ($from==$to) + return $str; + + // decode characters + if ($from=='utf-7') + $str = UTF7DecodeString($str); + else if ($from=='utf-8' && function_exists('utf8_decode')) + $str = utf8_decode($str); + else if ($from=="koi8-r") + $str = convert_cyr_string($str, 'k', 'i'); + else if ($from=="windows-1251" || $from=="win-1251") + $str = convert_cyr_string($str, 'w', 'i'); + else if ($from=="x-cp866") + $str = convert_cyr_string($str, 'a', 'i'); + else if ($from=="x-mac-cyrillic") + $str = convert_cyr_string($str, 'm', 'i'); + // encode string for output - if ($CHARSET=='UTF-8' && $charset!='utf-8' && function_exists('utf8_encode')) - $output = utf8_encode($output); + if ($to=='utf-8' && function_exists('utf8_encode')) + return utf8_encode($str); + else if ($to=='utf-7') + return UTF7EncodeString($str); - return $output; + // return raw string + return $str; } + // replace specials characters to a specific encoding type function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE) { - global $OUTPUT_TYPE, $CHARSET; + global $OUTPUT_TYPE, $OUTPUT; static $html_encode_arr, $js_rep_table, $rtf_rep_table, $xml_rep_table; if (!$enctype) @@ -794,7 +794,7 @@ function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE) $rtf_rep_table[Chr($c)] = "\\'$hex"; $xml_rep_table[Chr($c)] = "&#$c;"; - if ($CHARSET=='ISO-8859-1') + if ($OUTPUT->get_charset()=='ISO-8859-1') $js_rep_table[Chr($c)] = sprintf("\u%s%s", str_repeat('0', 4-strlen($hex)), $hex); } @@ -819,26 +819,6 @@ function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE) } -// convert a string from one charset to another -// this function is not complete and not tested well -function rcube_charset_convert($str, $from, $to) - { - $charset = strtolower($to); - - if (strtolower($from)==$charset) - return $str; - - $str = decode_specialchars($str, $from); - - if ($charset=='utf-8' && function_exists('utf8_encode')) - return utf8_encode($str); - else if ($charset=='utf-7') - return UTF7EncodeString($str); - - return $str; - } - - // ************** template parsing and gui functions ************** @@ -1022,7 +1002,7 @@ function rcube_xml_command($command, $str_attrib, $a_attrib=NULL) else if (isset($GLOBALS['PAGE_TITLE'])) $title .= $GLOBALS['PAGE_TITLE']; else if ($task=='mail' && ($mbox_name = $IMAP->get_mailbox_name())) - $title .= $OUTPUT->encode_string(UTF7DecodeString($mbox_name)); + $title .= rcube_charset_convert($mbox_name, 'UTF-7', 'UTF-8'); else $title .= $task; diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc index 7b71dc09c..eb021159d 100644 --- a/program/include/rcube_imap.inc +++ b/program/include/rcube_imap.inc @@ -70,7 +70,7 @@ class rcube_imap */ function __construct($db_conn) { - $this->db = $db_conn; + $this->db = $db_conn; } @@ -376,14 +376,28 @@ class rcube_imap } - // get message count for a specific mailbox; acceptes modes are: ALL, UNSEEN, RECENT + /** + * Get message count for a specific mailbox + * + * @param string Mailbox/folder name + * @param string Mode for count [ALL|UNSEEN|RECENT] + * @param boolean Force reading from server and update cache + * @return number Number of messages + * @access public + */ function messagecount($mbox='', $mode='ALL', $force=FALSE) { $mailbox = $mbox ? $this->_mod_mailbox($mbox) : $this->mailbox; return $this->_messagecount($mailbox, $mode, $force); } - // private method for getting nr of mesages + + /** + * Private method for getting nr of messages + * + * @access private + * @see rcube_imap::messagecount + */ function _messagecount($mailbox='', $mode='ALL', $force=FALSE) { $a_mailbox_cache = FALSE; @@ -442,8 +456,17 @@ class rcube_imap } - // public method for listing headers - // convert mailbox name with root dir first + /** + * Public method for listing headers + * convert mailbox name with root dir first + * + * @param string Mailbox/folder name + * @param number Current page to list + * @param string Header field to sort by + * @param string Sort order [ASC|DESC] + * @return array Indexed array with message header objects + * @access public + */ function list_headers($mbox='', $page=NULL, $sort_field=NULL, $sort_order=NULL) { $mailbox = $mbox ? $this->_mod_mailbox($mbox) : $this->mailbox; @@ -451,7 +474,12 @@ class rcube_imap } - // private method for listing message header + /** + * Private method for listing message header + * + * @access private + * @see rcube_imap::list_headers + */ function _list_headers($mailbox='', $page=NULL, $sort_field=NULL, $sort_order=NULL, $recursive=FALSE) { if (!strlen($mailbox)) @@ -1548,10 +1576,10 @@ class rcube_imap $rest = quoted_printable_decode($rest); } - return decode_specialchars($rest, $a[0]); + return rcube_charset_convert($rest, $a[0]); } else - return $str; //we dont' know what to do with this + return $str; // we dont' know what to do with this } @@ -1599,7 +1627,7 @@ class rcube_imap function charset_decode($body, $ctype_param) { if (is_array($ctype_param) && !empty($ctype_param['charset'])) - return decode_specialchars($body, $ctype_param['charset']); + return rcube_charset_convert($body, $ctype_param['charset']); return $body; } diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc index b622203dd..a36458b00 100644 --- a/program/include/rcube_shared.inc +++ b/program/include/rcube_shared.inc @@ -88,13 +88,9 @@ class rcube_html_page $this->charset = $charset; } - - function encode_string($str) + function get_charset() { - if ($this->charset=='UTF-8' && function_exists('utf8_encode')) - return utf8_encode($str); - else - return $str; + return $this->charset; } @@ -187,7 +183,7 @@ class rcube_html_page // correct absolute pathes in images and other tags $output = preg_replace('/(src|href|background)=(["\']?)(\/[a-z0-9_\-]+)/Ui', "\\1=\\2$base_path\\3", $output); - print $output; + print rcube_charset_convert($output, 'UTF-8', $this->charset); } |