From c8cf268b9db55ca0a27f669a060eea320b2d5f9e Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Tue, 02 Mar 2010 12:33:51 -0500 Subject: [PATCH] No more case-insensitive folder name comparisons --- program/include/rcube_imap.php | 70 ++++++++++++++++++---------------- 1 files changed, 37 insertions(+), 33 deletions(-) diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 2408fa2..e485226 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -56,7 +56,6 @@ var $default_charset = 'ISO-8859-1'; var $struct_charset = NULL; var $default_folders = array('INBOX'); - var $default_folders_lc = array('inbox'); var $fetch_add_headers = ''; var $cache = array(); var $cache_keys = array(); @@ -105,8 +104,9 @@ if ($use_ssl && extension_loaded('openssl')) $ICL_SSL = $use_ssl == 'imaps' ? 'ssl' : $use_ssl; else if ($use_ssl) { - raise_error(array('code' => 403, 'type' => 'imap', 'file' => __FILE__, - 'message' => 'Open SSL not available;'), TRUE, FALSE); + raise_error(array('code' => 403, 'type' => 'imap', + 'file' => __FILE__, 'line' => __LINE__, + 'message' => "Open SSL not available"), TRUE, FALSE); $port = 143; } @@ -136,9 +136,9 @@ else if (!$this->conn && $GLOBALS['iil_error']) { $this->error_code = $GLOBALS['iil_errornum']; - raise_error(array('code' => 403, - 'type' => 'imap', - 'message' => $GLOBALS['iil_error']), TRUE, FALSE); + raise_error(array('code' => 403, 'type' => 'imap', + 'file' => __FILE__, 'line' => __LINE__, + 'message' => $GLOBALS['iil_error']), TRUE, FALSE); } // get server properties @@ -241,15 +241,10 @@ if (is_array($arr)) { $this->default_folders = $arr; - $this->default_folders_lc = array(); // add inbox if not included if (!in_array_nocase('INBOX', $this->default_folders)) array_unshift($this->default_folders, 'INBOX'); - - // create a second list with lower cased names - foreach ($this->default_folders as $mbox) - $this->default_folders_lc[] = strtolower($mbox); } } @@ -1698,17 +1693,27 @@ /** * Append a mail message (source) to a specific mailbox * - * @param string Target mailbox - * @param string Message source + * @param string Target mailbox + * @param string The message source string or filename + * @param string Headers string if $message contains only the body + * @param boolean True if $message is a filename + * * @return boolean True on success, False on error */ - function save_message($mbox_name, &$message) + function save_message($mbox_name, &$message, $headers='', $is_file=false) { $mailbox = $this->mod_mailbox($mbox_name); // make sure mailbox exists - if (($mailbox == 'INBOX') || in_array($mailbox, $this->_list_mailboxes())) - $saved = iil_C_Append($this->conn, $mailbox, $message); + if (($mailbox == 'INBOX') || in_array($mailbox, $this->_list_mailboxes())) { + if ($is_file) { + $separator = rcmail::get_instance()->config->header_delimiter(); + $saved = iil_C_AppendFromFile($this->conn, $mailbox, $message, + $headers, $separator.$separator); + } + else + $saved = iil_C_Append($this->conn, $mailbox, $message); + } if ($saved) { @@ -2145,9 +2150,9 @@ foreach ($this->default_folders as $folder) { $abs_name = $this->mod_mailbox($folder); - if (!in_array_nocase($abs_name, $a_folders)) + if (!in_array($abs_name, $a_folders)) $this->create_mailbox($folder, TRUE); - else if (!in_array_nocase($abs_name, $a_subscribed)) + else if (!in_array($abs_name, $a_subscribed)) $this->subscribe($folder); } } @@ -2893,11 +2898,13 @@ if ((!empty($this->root_ns) && $this->root_ns == $mbox_name) || $mbox_name == 'INBOX') return $mbox_name; - if (!empty($this->root_dir) && $mode=='in') - $mbox_name = $this->root_dir.$this->delimiter.$mbox_name; - else if (strlen($this->root_dir) && $mode=='out') - $mbox_name = substr($mbox_name, strlen($this->root_dir)+1); - + if (!empty($this->root_dir)) { + if ($mode=='in') + $mbox_name = $this->root_dir.$this->delimiter.$mbox_name; + else if (!empty($mbox_name)) // $mode=='out' + $mbox_name = substr($mbox_name, strlen($this->root_dir)+1); + } + return $mbox_name; } @@ -2934,7 +2941,7 @@ if ($folder{0}=='.') continue; - if (($p = array_search(strtolower($folder), $this->default_folders_lc)) !== false && !$a_defaults[$p]) + if (($p = array_search($folder, $this->default_folders)) !== false && !$a_defaults[$p]) $a_defaults[$p] = $folder; else $folders[$folder] = mb_strtolower(rcube_charset_convert($folder, 'UTF7-IMAP')); @@ -2998,15 +3005,12 @@ { if (!$mbox_name) $mbox_name = $this->mailbox; - - $index = array_flip((array)$this->uid_id_map[$mbox_name]); - if (isset($index[$id])) - $uid = $index[$id]; - else - { - $uid = iil_C_ID2UID($this->conn, $mbox_name, $id); - $this->uid_id_map[$mbox_name][$uid] = $id; - } + + if ($uid = array_search($id, (array)$this->uid_id_map[$mbox_name])) + return $uid; + + $uid = iil_C_ID2UID($this->conn, $mbox_name, $id); + $this->uid_id_map[$mbox_name][$uid] = $id; return $uid; } -- Gitblit v1.9.1