| | |
| | | var $sort_order = 'DESC'; |
| | | var $delimiter = NULL; |
| | | var $caching_enabled = FALSE; |
| | | var $default_charset = 'ISO-8859-1'; |
| | | var $default_folders = array('INBOX'); |
| | | var $default_folders_lc = array('inbox'); |
| | | var $cache = array(); |
| | |
| | | |
| | | if (empty($this->delimiter)) |
| | | $this->get_hierarchy_delimiter(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Set default message charset |
| | | * |
| | | * This will be used for message decoding if a charset specification is not available |
| | | * |
| | | * @param string Charset string |
| | | * @access public |
| | | */ |
| | | function set_charset($cs) |
| | | { |
| | | $this->default_charset = $ch; |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | // normalize filename property |
| | | if (!empty($struct->d_parameters['filename'])) |
| | | $struct->filename = $this->decode_mime_string($struct->d_parameters['filename']); |
| | | else if (!empty($struct->ctype_parameters['name'])) |
| | | $struct->filename = $this->decode_mime_string($struct->ctype_parameters['name']); |
| | | if ($filename_mime = $struct->d_parameters['filename'] ? $struct->d_parameters['filename'] : $struct->ctype_parameters['name']) |
| | | $struct->filename = rcube_imap::decode_mime_string($filename_mime, $this->default_charset); |
| | | else if ($filename_encoded = $struct->d_parameters['filename*'] ? $struct->d_parameters['filename*'] : $struct->ctype_parameters['name*']) |
| | | { |
| | | // decode filename according to RFC 2231, Section 4 |
| | | list($filename_charset,, $filename_urlencoded) = split('\'', $filename_encoded); |
| | | $struct->filename = rcube_charset_convert(urldecode($filename_urlencoded), $filename_charset); |
| | | } |
| | | else if (!empty($struct->headers['content-description'])) |
| | | $struct->filename = $this->decode_mime_string($struct->headers['content-description']); |
| | | $struct->filename = rcube_imap::decode_mime_string($struct->headers['content-description'], $this->default_charset); |
| | | |
| | | return $struct; |
| | | } |
| | |
| | | // convert charset (if text or message part) |
| | | if ($o_part->ctype_primary=='text' || $o_part->ctype_primary=='message') |
| | | { |
| | | // assume ISO-8859-1 if no charset specified |
| | | // assume default if no charset specified |
| | | if (empty($o_part->charset)) |
| | | $o_part->charset = 'ISO-8859-1'; |
| | | $o_part->charset = $this->default_charset; |
| | | |
| | | $body = rcube_charset_convert($body, $o_part->charset); |
| | | } |
| | |
| | | /** |
| | | * Subscribe to a specific mailbox(es) |
| | | * |
| | | * @param string Mailbox name(s) |
| | | * @param array Mailbox name(s) |
| | | * @return boolean True on success |
| | | */ |
| | | function subscribe($mbox_name) |
| | | function subscribe($a_mboxes) |
| | | { |
| | | if (is_array($mbox_name)) |
| | | $a_mboxes = $mbox_name; |
| | | else if (is_string($mbox_name) && strlen($mbox_name)) |
| | | $a_mboxes = explode(',', $mbox_name); |
| | | |
| | | if (!is_array($a_mboxes)) |
| | | $a_mboxes = array($a_mboxes); |
| | | |
| | | // let this common function do the main work |
| | | return $this->_change_subscription($a_mboxes, 'subscribe'); |
| | | } |
| | |
| | | /** |
| | | * Unsubscribe mailboxes |
| | | * |
| | | * @param string Mailbox name(s) |
| | | * @param array Mailbox name(s) |
| | | * @return boolean True on success |
| | | */ |
| | | function unsubscribe($mbox_name) |
| | | function unsubscribe($a_mboxes) |
| | | { |
| | | if (is_array($mbox_name)) |
| | | $a_mboxes = $mbox_name; |
| | | else if (is_string($mbox_name) && strlen($mbox_name)) |
| | | $a_mboxes = explode(',', $mbox_name); |
| | | if (!is_array($a_mboxes)) |
| | | $a_mboxes = array($a_mboxes); |
| | | |
| | | // let this common function do the main work |
| | | return $this->_change_subscription($a_mboxes, 'unsubscribe'); |
| | |
| | | */ |
| | | function remove_message_cache($key, $index) |
| | | { |
| | | if (!$this->caching_enabled) |
| | | return; |
| | | |
| | | $this->db->query( |
| | | "DELETE FROM ".get_table_name('messages')." |
| | | WHERE user_id=? |
| | |
| | | */ |
| | | function clear_message_cache($key, $start_index=1) |
| | | { |
| | | if (!$this->caching_enabled) |
| | | return; |
| | | |
| | | $this->db->query( |
| | | "DELETE FROM ".get_table_name('messages')." |
| | | WHERE user_id=? |
| | |
| | | { |
| | | $a = $this->_parse_address_list($input, $decode); |
| | | $out = array(); |
| | | // Special chars as defined by RFC 822 need to in quoted string (or escaped). |
| | | $special_chars = '[\(\)\<\>\\\.\[\]@,;:"]'; |
| | | |
| | | if (!is_array($a)) |
| | | return $out; |
| | |
| | | $address = $val['address']; |
| | | $name = preg_replace(array('/^[\'"]/', '/[\'"]$/'), '', trim($val['name'])); |
| | | if ($name && $address && $name != $address) |
| | | $string = sprintf('%s <%s>', strpos($name, ',')!==FALSE ? '"'.$name.'"' : $name, $address); |
| | | $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address); |
| | | else if ($address) |
| | | $string = $address; |
| | | else if ($name) |
| | |
| | | */ |
| | | function decode_header($input, $remove_quotes=FALSE) |
| | | { |
| | | $str = $this->decode_mime_string((string)$input); |
| | | $str = rcube_imap::decode_mime_string((string)$input, $this->default_charset); |
| | | if ($str{0}=='"' && $remove_quotes) |
| | | $str = str_replace('"', '', $str); |
| | | |
| | |
| | | $pos = strpos($input, '=?'); |
| | | if ($pos !== false) |
| | | { |
| | | // rfc: all line breaks or other characters not found in the Base64 Alphabet must be ignored by decoding software |
| | | // delete all blanks between MIME-lines, differently we can receive unnecessary blanks and broken utf-8 symbols |
| | | $input = preg_replace("/\?=\s+=\?/", '?==?', $input); |
| | | |
| | | $out = substr($input, 0, $pos); |
| | | |
| | | $end_cs_pos = strpos($input, "?", $pos+2); |
| | |
| | | return rcube_charset_convert($body, $ctype_param['charset']); |
| | | |
| | | // defaults to what is specified in the class header |
| | | return rcube_charset_convert($body, 'ISO-8859-1'); |
| | | return rcube_charset_convert($body, $this->default_charset); |
| | | } |
| | | |
| | | |