From d311d809d650e4cab6a5bf0aeb92b97631672c64 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Fri, 28 May 2010 05:38:41 -0400 Subject: [PATCH] - Fix forwarding of messages with winmail attachments - Remove some redundant code for winmail handling in get.inc, move tnef_decode() to rcube_message - Fix handling of uuencoded attachments in message body (#1485839) - Extend rc_mime_content_type() to work with string buffer --- program/include/rcube_imap.php | 71 ++++++++++------------------------- 1 files changed, 21 insertions(+), 50 deletions(-) diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 768e833..97662e4 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -472,7 +472,6 @@ // get message count and store in cache if ($mode == 'UNSEEN') $search_str .= " UNSEEN"; - // get message count using SEARCH // not very performant but more precise (using UNDELETED) // disable THREADS for this request @@ -2034,7 +2033,7 @@ return true; // convert charset (if text or message part) - if ($o_part->ctype_primary=='text' || $o_part->ctype_primary=='message') { + if ($o_part->ctype_primary == 'text' || $o_part->ctype_primary == 'message') { // assume default if no charset specified if (empty($o_part->charset) || strtolower($o_part->charset) == 'us-ascii') $o_part->charset = $this->default_charset; @@ -2512,7 +2511,7 @@ * --------------------------------*/ /** - * Public method for mailbox listing. + * Public method for listing subscribed folders * * Converts mailbox name with root dir first * @@ -2552,16 +2551,16 @@ */ private function _list_mailboxes($root='', $filter='*') { - $a_defaults = $a_out = array(); - // get cached folder list $a_mboxes = $this->get_cache('mailboxes'); if (is_array($a_mboxes)) return $a_mboxes; + $a_defaults = $a_out = array(); + // Give plugins a chance to provide a list of mailboxes $data = rcmail::get_instance()->plugins->exec_hook('list_mailboxes', - array('root'=>$root,'filter'=>$filter)); + array('root' => $root, 'filter' => $filter, 'mode' => 'LSUB')); if (isset($data['folders'])) { $a_folders = $data['folders']; @@ -2585,17 +2584,26 @@ * Get a list of all folders available on the IMAP server * * @param string IMAP root dir + * @param string Optional filter for mailbox listing * @return array Indexed array with folder names */ - function list_unsubscribed($root='') + function list_unsubscribed($root='', $filter='*') { - static $a_folders; + // Give plugins a chance to provide a list of mailboxes + $data = rcmail::get_instance()->plugins->exec_hook('list_mailboxes', + array('root' => $root, 'filter' => $filter, 'mode' => 'LIST')); - if (is_array($a_folders)) - return $a_folders; - - // retrieve list of folders from IMAP server - $a_mboxes = $this->conn->listMailboxes($this->mod_mailbox($root), '*'); + if (isset($data['folders'])) { + $a_mboxes = $data['folders']; + } + else { + // retrieve list of folders from IMAP server + $a_mboxes = $this->conn->listMailboxes($this->mod_mailbox($root), $filter); + } + + $a_folders = array(); + if (!is_array($a_mboxes)) + $a_mboxes = array(); // modify names with root dir foreach ($a_mboxes as $idx => $mbox_name) { @@ -3370,43 +3378,6 @@ } return $out; - } - - - /** - * Decode a Microsoft Outlook TNEF part (winmail.dat) - * - * @param object rcube_message_part Message part to decode - * @param string UID of the message - * @return array List of rcube_message_parts extracted from windmail.dat - */ - function tnef_decode(&$part, $uid) - { - if (!isset($part->body)) - $part->body = $this->get_message_part($uid, $part->mime_id, $part); - - require_once('lib/tnef_decoder.inc'); - - $pid = 0; - $tnef_parts = array(); - $tnef_arr = tnef_decode($part->body); - - foreach ($tnef_arr as $winatt) { - $tpart = new rcube_message_part; - $tpart->filename = $winatt["name"]; - $tpart->encoding = 'stream'; - $tpart->ctype_primary = $winatt["type0"]; - $tpart->ctype_secondary = $winatt["type1"]; - $tpart->mimetype = strtolower($winatt["type0"] . "/" . $winatt["type1"]); - $tpart->mime_id = "winmail." . $part->mime_id . ".$pid"; - $tpart->size = $winatt["size"]; - $tpart->body = $winatt['stream']; - - $tnef_parts[] = $tpart; - $pid++; - } - - return $tnef_parts; } -- Gitblit v1.9.1