From 7c60ffbdaa8df2a4938ca0fb64a2fac79ba96fb6 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 10 Jun 2009 14:01:16 -0400
Subject: [PATCH] - fix email address pattern for some addresses
---
program/include/rcube_imap.php | 442 ++++++++++++++++++++++--------------------------------
1 files changed, 182 insertions(+), 260 deletions(-)
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 323979b..76aa853 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -139,7 +139,7 @@
if (!empty($this->conn->rootdir))
{
$this->set_rootdir($this->conn->rootdir);
- $this->root_ns = ereg_replace('[\.\/]$', '', $this->conn->rootdir);
+ $this->root_ns = preg_replace('/[.\/]$/', '', $this->conn->rootdir);
}
}
@@ -195,7 +195,7 @@
*/
function set_rootdir($root)
{
- if (ereg('[\.\/]$', $root)) //(substr($root, -1, 1)==='/')
+ if (preg_match('/[.\/]$/', $root)) //(substr($root, -1, 1)==='/')
$root = substr($root, 0, -1);
$this->root_dir = $root;
@@ -303,7 +303,7 @@
if (is_array($str) && $msgs == null)
list($str, $msgs, $charset, $sort_field) = $str;
if ($msgs != null && !is_array($msgs))
- $msgs = split(',', $msgs);
+ $msgs = explode(',', $msgs);
$this->search_string = $str;
$this->search_set = $msgs;
@@ -506,14 +506,8 @@
// get message count using SEARCH
// not very performant but more precise (using UNDELETED)
- $count = 0;
$index = $this->_search_index($mailbox, $search_str);
- if (is_array($index))
- {
- $str = implode(",", $index);
- if (!empty($str))
- $count = count($index);
- }
+ $count = is_array($index) ? count($index) : 0;
}
else
{
@@ -570,24 +564,16 @@
$this->_set_sort_order($sort_field, $sort_order);
- $max = $this->_messagecount($mailbox);
- $start_msg = ($this->list_page-1) * $this->page_size;
-
- list($begin, $end) = $this->_get_message_range($max, $page);
-
- // mailbox is empty
- if ($begin >= $end)
- return array();
-
- $headers_sorted = FALSE;
+ $page = $page ? $page : $this->list_page;
$cache_key = $mailbox.'.msg';
$cache_status = $this->check_cache_status($mailbox, $cache_key);
// cache is OK, we can get all messages from local cache
if ($cache_status>0)
{
+ $start_msg = ($page-1) * $this->page_size;
$a_msg_headers = $this->get_message_cache($cache_key, $start_msg, $start_msg+$this->page_size, $this->sort_field, $this->sort_order);
- $headers_sorted = TRUE;
+ return array_values($a_msg_headers);
}
// cache is dirty, sync it
else if ($this->caching_enabled && $cache_status==-1 && !$recursive)
@@ -595,49 +581,54 @@
$this->sync_header_index($mailbox);
return $this->_list_headers($mailbox, $page, $this->sort_field, $this->sort_order, TRUE);
}
+
+ // retrieve headers from IMAP
+ $a_msg_headers = array();
+
+ if ($this->get_capability('sort') && ($msg_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, $this->skip_deleted ? 'UNDELETED' : '')))
+ {
+ list($begin, $end) = $this->_get_message_range(count($msg_index), $page);
+ $max = max($msg_index);
+ $msg_index = array_slice($msg_index, $begin, $end-$begin);
+
+ // fetch reqested headers from server
+ $this->_fetch_headers($mailbox, join(',', $msg_index), $a_msg_headers, $cache_key);
+ }
else
{
- // retrieve headers from IMAP
- if ($this->get_capability('sort') && ($msg_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, $this->skip_deleted ? 'UNDELETED' : '')))
- {
- $mymsgidx = array_slice ($msg_index, $begin, $end-$begin);
- $msgs = join(",", $mymsgidx);
- }
- else
- {
- $msgs = sprintf("%d:%d", $begin+1, $end);
- $msg_index = range($begin, $end);
- }
+ $a_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:*", $this->sort_field, $this->skip_deleted);
+
+ if (empty($a_index))
+ return array();
+ asort($a_index); // ASC
+ $msg_index = array_keys($a_index);
+ $max = max($msg_index);
+ list($begin, $end) = $this->_get_message_range(count($msg_index), $page);
+ $msg_index = array_slice($msg_index, $begin, $end-$begin);
- // fetch reuested headers from server
- $a_msg_headers = array();
- $deleted_count = $this->_fetch_headers($mailbox, $msgs, $a_msg_headers, $cache_key);
-
- // delete cached messages with a higher index than $max+1
- // Changed $max to $max+1 to fix this bug : #1484295
- $this->clear_message_cache($cache_key, $max + 1);
-
- // kick child process to sync cache
- // ...
+ // fetch reqested headers from server
+ $this->_fetch_headers($mailbox, join(",", $msg_index), $a_msg_headers, $cache_key);
}
+
+ // delete cached messages with a higher index than $max+1
+ // Changed $max to $max+1 to fix this bug : #1484295
+ $this->clear_message_cache($cache_key, $max + 1);
+
+ // kick child process to sync cache
+ // ...
// return empty array if no messages found
- if (!is_array($a_msg_headers) || empty($a_msg_headers)) {
+ if (!is_array($a_msg_headers) || empty($a_msg_headers))
return array();
- }
+
+ // use this class for message sorting
+ $sorter = new rcube_header_sorter();
+ $sorter->set_sequence_numbers($msg_index);
+ $sorter->sort_headers($a_msg_headers);
- // if not already sorted
- if (!$headers_sorted)
- {
- // use this class for message sorting
- $sorter = new rcube_header_sorter();
- $sorter->set_sequence_numbers($msg_index);
- $sorter->sort_headers($a_msg_headers);
-
- if ($this->sort_order == 'DESC')
- $a_msg_headers = array_reverse($a_msg_headers);
- }
+ if ($this->sort_order == 'DESC')
+ $a_msg_headers = array_reverse($a_msg_headers);
return array_values($a_msg_headers);
}
@@ -661,7 +652,8 @@
$msgs = $this->search_set;
$a_msg_headers = array();
- $start_msg = ($this->list_page-1) * $this->page_size;
+ $page = $page ? $page : $this->list_page;
+ $start_msg = ($page-1) * $this->page_size;
$this->_set_sort_order($sort_field, $sort_order);
@@ -741,7 +733,7 @@
*/
function _get_message_range($max, $page)
{
- $start_msg = ($this->list_page-1) * $this->page_size;
+ $start_msg = ($page-1) * $this->page_size;
if ($page=='all')
{
@@ -766,7 +758,6 @@
return array($begin, $end);
}
-
/**
* Fetches message headers
@@ -776,7 +767,7 @@
* @param string Message index to fetch
* @param array Reference to message headers array
* @param array Array with cache index
- * @return int Number of deleted messages
+ * @return int Messages count
* @access private
*/
function _fetch_headers($mailbox, $msgs, &$a_msg_headers, $cache_key)
@@ -784,24 +775,23 @@
// cache is incomplete
$cache_index = $this->get_message_cache_index($cache_key);
- // fetch reuested headers from server
+ // fetch reqested headers from server
$a_header_index = iil_C_FetchHeaders($this->conn, $mailbox, $msgs, false, $this->fetch_add_headers);
- $deleted_count = 0;
if (!empty($a_header_index))
{
foreach ($a_header_index as $i => $headers)
- {
+ {
+/*
if ($headers->deleted && $this->skip_deleted)
{
// delete from cache
if ($cache_index[$headers->id] && $cache_index[$headers->id] == $headers->uid)
- $this->remove_message_cache($cache_key, $headers->id);
+ $this->remove_message_cache($cache_key, $headers->uid);
- $deleted_count++;
continue;
}
-
+*/
// add message to cache
if ($this->caching_enabled && $cache_index[$headers->id] != $headers->uid)
$this->add_message_cache($cache_key, $headers->id, $headers);
@@ -810,7 +800,7 @@
}
}
- return $deleted_count;
+ return count($a_msg_headers);
}
@@ -846,7 +836,7 @@
}
else
{
- $a_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, join(',', $this->search_set), $this->sort_field, false);
+ $a_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, join(',', $this->search_set), $this->sort_field, $this->skip_deleted);
if ($this->sort_order=="ASC")
asort($a_index);
@@ -874,7 +864,7 @@
// fetch complete message index
$msg_count = $this->_messagecount($mailbox);
- if ($this->get_capability('sort') && ($a_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, '')))
+ if ($this->get_capability('sort') && ($a_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, $this->skip_deleted ? 'UNDELETED' : '')))
{
if ($this->sort_order == 'DESC')
$a_index = array_reverse($a_index);
@@ -883,7 +873,7 @@
}
else
{
- $a_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:$msg_count", $this->sort_field);
+ $a_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:$msg_count", $this->sort_field, $this->skip_deleted);
if ($this->sort_order=="ASC")
asort($a_index);
@@ -904,10 +894,12 @@
{
$cache_key = $mailbox.'.msg';
$cache_index = $this->get_message_cache_index($cache_key);
- $msg_count = $this->_messagecount($mailbox);
// fetch complete message index
- $a_message_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:$msg_count", 'UID');
+ $a_message_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:*", 'UID', $this->skip_deleted);
+
+ if ($a_message_index === false)
+ return false;
foreach ($a_message_index as $id => $uid)
{
@@ -927,21 +919,25 @@
// other message at this position
if (isset($cache_index[$id]))
{
- $this->remove_message_cache($cache_key, $id);
+ $this->remove_message_cache($cache_key, $cache_index[$id]);
unset($cache_index[$id]);
}
-
- // fetch complete headers and add to cache
- $headers = iil_C_FetchHeader($this->conn, $mailbox, $id, false, $this->fetch_add_headers);
- $this->add_message_cache($cache_key, $headers->id, $headers);
+ $toupdate[] = $id;
}
+ // fetch complete headers and add to cache
+ if (!empty($toupdate)) {
+ if ($headers = iil_C_FetchHeader($this->conn, $mailbox, join(',', $toupdate), false, $this->fetch_add_headers))
+ foreach ($headers as $header)
+ $this->add_message_cache($cache_key, $header->id, $header);
+ }
+
// those ids that are still in cache_index have been deleted
if (!empty($cache_index))
{
foreach ($cache_index as $id => $uid)
- $this->remove_message_cache($cache_key, $id);
+ $this->remove_message_cache($cache_key, $uid);
}
}
@@ -1006,6 +1002,11 @@
*/
function _search_index($mailbox, $criteria='ALL', $charset=NULL, $sort_field=NULL)
{
+ $orig_criteria = $criteria;
+
+ if ($this->skip_deleted && !preg_match('/UNDELETED/', $criteria))
+ $criteria = 'UNDELETED '.$criteria;
+
if ($sort_field && $this->get_capability('sort'))
{
$charset = $charset ? $charset : $this->default_charset;
@@ -1021,6 +1022,11 @@
if (empty($val))
unset($a_messages[$i]);
}
+
+ // update messagecount cache ?
+// $a_mailbox_cache = get_cache('messagecount');
+// $a_mailbox_cache[$mailbox][$criteria] = sizeof($a_messages);
+// $this->update_cache('messagecount', $a_mailbox_cache);
return $a_messages;
}
@@ -1156,7 +1162,7 @@
{
$struct = new rcube_message_part;
$struct->mime_id = empty($parent) ? (string)$count : "$parent.$count";
-
+
// multipart
if (is_array($part[0]))
{
@@ -1178,18 +1184,19 @@
// fetch message headers if message/rfc822 or named part (could contain Content-Location header)
if (strtolower($part[$i][0]) == 'message' ||
(in_array('name', (array)$part[$i][2]) && (empty($part[$i][3]) || $part[$i][3]=='NIL'))) {
- $part_headers[] = $struct->mime_id ? $struct->mime_id.'.'.$i+1 : $i+1;
+ $part_headers[] = $struct->mime_id ? $struct->mime_id.'.'.($i+1) : $i+1;
}
-
+
// pre-fetch headers of all parts (in one command for better performance)
if ($part_headers)
$part_headers = iil_C_FetchMIMEHeaders($this->conn, $this->mailbox, $this->_msg_id, $part_headers);
$struct->parts = array();
for ($i=0, $count=0; $i<count($part); $i++)
- if (is_array($part[$i]) && count($part[$i]) > 3)
+ if (is_array($part[$i]) && count($part[$i]) > 3) {
$struct->parts[] = $this->_structure_part($part[$i], ++$count, $struct->mime_id,
- $part_headers[$struct->mime_id ? $struck->mime_id.'.'.$i+1 : $i+1]);
+ $part_headers[$struct->mime_id ? $struct->mime_id.'.'.($i+1) : $i+1]);
+ }
return $struct;
}
@@ -1433,44 +1440,19 @@
if (!$part) $part = 'TEXT';
- if ($print)
- {
- $mode = $o_part->encoding == 'base64' ? 3 : ($o_part->encoding == 'quoted-printable' ? 1 : 2);
- $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, $mode);
+ $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part,
+ $o_part->encoding, $print, $fp);
- // we have to decode the part manually before printing
- if ($mode == 1)
- {
- echo $this->mime_decode($body, $o_part->encoding);
- $body = true;
- }
- }
- else
- {
- if ($fp && $o_part->encoding == 'base64')
- return iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 3, $fp);
- else
- $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1);
+ if ($fp || $print)
+ return true;
- // decode part body
- if ($o_part->encoding)
- $body = $this->mime_decode($body, $o_part->encoding);
+ // convert charset (if text or message part)
+ if ($o_part->ctype_primary=='text' || $o_part->ctype_primary=='message') {
+ // assume default if no charset specified
+ if (empty($o_part->charset))
+ $o_part->charset = $this->default_charset;
- // convert charset (if text or message part)
- if ($o_part->ctype_primary=='text' || $o_part->ctype_primary=='message')
- {
- // assume default if no charset specified
- if (empty($o_part->charset))
- $o_part->charset = $this->default_charset;
-
- $body = rcube_charset_convert($body, $o_part->charset);
- }
-
- if ($fp)
- {
- fwrite($fp, $body);
- return true;
- }
+ $body = rcube_charset_convert($body, $o_part->charset);
}
return $body;
@@ -1487,8 +1469,7 @@
function &get_body($uid, $part=1)
{
$headers = $this->get_headers($uid);
- return rcube_charset_convert(
- $this->mime_decode($this->get_message_part($uid, $part), 'quoted-printable'),
+ return rcube_charset_convert($this->get_message_part($uid, $part, NULL),
$headers->charset ? $headers->charset : $this->default_charset);
}
@@ -1535,7 +1516,7 @@
if (!($msg_id = $this->_uid2id($uid)))
return FALSE;
- iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 2);
+ iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, NULL, true);
}
@@ -1544,40 +1525,33 @@
*
* @param mixed Message UIDs as array or as comma-separated string
* @param string Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
+ * @param string Folder name
* @return boolean True on success, False on failure
*/
- function set_flag($uids, $flag)
+ function set_flag($uids, $flag, $mbox_name=NULL)
{
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+
$flag = strtoupper($flag);
- $msg_ids = array();
if (!is_array($uids))
$uids = explode(',',$uids);
- foreach ($uids as $uid) {
- $msg_ids[$uid] = $this->_uid2id($uid);
- }
-
if ($flag=='UNDELETED')
- $result = iil_C_Undelete($this->conn, $this->mailbox, join(',', array_values($msg_ids)));
+ $result = iil_C_Undelete($this->conn, $mailbox, join(',', $uids));
else if ($flag=='UNSEEN')
- $result = iil_C_Unseen($this->conn, $this->mailbox, join(',', array_values($msg_ids)));
+ $result = iil_C_Unseen($this->conn, $mailbox, join(',', $uids));
else if ($flag=='UNFLAGGED')
- $result = iil_C_UnFlag($this->conn, $this->mailbox, join(',', array_values($msg_ids)), 'FLAGGED');
+ $result = iil_C_UnFlag($this->conn, $mailbox, join(',', $uids), 'FLAGGED');
else
- $result = iil_C_Flag($this->conn, $this->mailbox, join(',', array_values($msg_ids)), $flag);
+ $result = iil_C_Flag($this->conn, $mailbox, join(',', $uids), $flag);
// reload message headers if cached
- $cache_key = $this->mailbox.'.msg';
+ $cache_key = $mailbox.'.msg';
if ($this->caching_enabled)
{
- foreach ($msg_ids as $uid => $id)
- {
+ foreach ($uids as $uid)
if ($cached_headers = $this->get_cached_message($cache_key, $uid))
- {
- $this->remove_message_cache($cache_key, $id);
- //$this->get_headers($uid);
- }
- }
+ $this->remove_message_cache($cache_key, $uid);
// close and re-open connection
// this prevents connection problems with Courier
@@ -1585,15 +1559,15 @@
}
// set nr of messages that were flaged
- $count = count($msg_ids);
+ $count = count($uids);
// clear message count cache
if ($result && $flag=='SEEN')
- $this->_set_messagecount($this->mailbox, 'UNSEEN', $count*(-1));
+ $this->_set_messagecount($mailbox, 'UNSEEN', $count*(-1));
else if ($result && $flag=='UNSEEN')
- $this->_set_messagecount($this->mailbox, 'UNSEEN', $count);
+ $this->_set_messagecount($mailbox, 'UNSEEN', $count);
else if ($result && $flag=='DELETED')
- $this->_set_messagecount($this->mailbox, 'ALL', $count*(-1));
+ $this->_set_messagecount($mailbox, 'ALL', $count*(-1));
return $result;
}
@@ -1650,37 +1624,30 @@
$a_uids = is_string($uids) ? explode(',', $uids) : (is_array($uids) ? $uids : NULL);
// exit if no message uids are specified
- if (!is_array($a_uids))
+ if (!is_array($a_uids) || empty($a_uids))
return false;
- // convert uids to message ids
- $a_mids = array();
- foreach ($a_uids as $uid)
- $a_mids[] = $this->_uid2id($uid, $from_mbox);
-
- $iil_move = iil_C_Move($this->conn, join(',', $a_mids), $from_mbox, $to_mbox);
+ $iil_move = iil_C_Move($this->conn, join(',', $a_uids), $from_mbox, $to_mbox);
$moved = !($iil_move === false || $iil_move < 0);
// send expunge command in order to have the moved message
// really deleted from the source mailbox
if ($moved) {
- // but only when flag_for_deletion is set to false
- if (!rcmail::get_instance()->config->get('flag_for_deletion', false))
- {
- $this->_expunge($from_mbox, FALSE);
- $this->_clear_messagecount($from_mbox);
- $this->_clear_messagecount($to_mbox);
- }
+ $this->_expunge($from_mbox, FALSE, $a_uids);
+ $this->_clear_messagecount($from_mbox);
+ $this->_clear_messagecount($to_mbox);
}
// moving failed
else if (rcmail::get_instance()->config->get('delete_always', false)) {
- return iil_C_Delete($this->conn, $from_mbox, join(',', $a_mids));
+ return iil_C_Delete($this->conn, $from_mbox, join(',', $a_uids));
}
// remove message ids from search set
- if ($moved && $this->search_set && $from_mbox == $this->mailbox)
+ if ($moved && $this->search_set && $from_mbox == $this->mailbox) {
+ foreach ($a_uids as $uid)
+ $a_mids[] = $this->_uid2id($uid, $from_mbox);
$this->search_set = array_diff($this->search_set, $a_mids);
-
+ }
// update cached message headers
$cache_key = $from_mbox.'.msg';
if ($moved && ($a_cache_index = $this->get_message_cache_index($cache_key)))
@@ -1715,29 +1682,27 @@
$a_uids = is_string($uids) ? explode(',', $uids) : (is_array($uids) ? $uids : NULL);
// exit if no message uids are specified
- if (!is_array($a_uids))
+ if (!is_array($a_uids) || empty($a_uids))
return false;
- // convert uids to message ids
- $a_mids = array();
- foreach ($a_uids as $uid)
- $a_mids[] = $this->_uid2id($uid, $mailbox);
-
- $deleted = iil_C_Delete($this->conn, $mailbox, join(',', $a_mids));
+ $deleted = iil_C_Delete($this->conn, $mailbox, join(',', $a_uids));
// send expunge command in order to have the deleted message
// really deleted from the mailbox
if ($deleted)
{
- $this->_expunge($mailbox, FALSE);
+ $this->_expunge($mailbox, FALSE, $a_uids);
$this->_clear_messagecount($mailbox);
unset($this->uid_id_map[$mailbox]);
}
// remove message ids from search set
- if ($deleted && $this->search_set && $mailbox == $this->mailbox)
+ if ($deleted && $this->search_set && $mailbox == $this->mailbox) {
+ foreach ($a_uids as $uid)
+ $a_mids[] = $this->_uid2id($uid, $mailbox);
$this->search_set = array_diff($this->search_set, $a_mids);
-
+ }
+
// remove deleted messages from cache
$cache_key = $mailbox.'.msg';
if ($deleted && ($a_cache_index = $this->get_message_cache_index($cache_key)))
@@ -1806,11 +1771,20 @@
* Send IMAP expunge command and clear cache
*
* @see rcube_imap::expunge()
+ * @param string Mailbox name
+ * @param boolean False if cache should not be cleared
+ * @param string List of UIDs to remove, separated by comma
+ * @return boolean True on success
* @access private
*/
- function _expunge($mailbox, $clear_cache=TRUE)
+ function _expunge($mailbox, $clear_cache=TRUE, $uids=NULL)
{
- $result = iil_C_Expunge($this->conn, $mailbox);
+ if ($uids && $this->get_capability('UIDPLUS'))
+ $a_uids = is_array($uids) ? join(',', $uids) : $uids;
+ else
+ $a_uids = NULL;
+
+ $result = iil_C_Expunge($this->conn, $mailbox, $a_uids);
if ($result>=0 && $clear_cache)
{
@@ -2248,7 +2222,7 @@
* @return int -3 = off, -2 = incomplete, -1 = dirty
*/
function check_cache_status($mailbox, $cache_key)
- {
+ {
if (!$this->caching_enabled)
return -3;
@@ -2258,25 +2232,37 @@
// console("Cache check: $msg_count !== ".count($cache_index));
- if ($cache_count==$msg_count)
- {
- // get highest index
- $header = iil_C_FetchHeader($this->conn, $mailbox, "$msg_count", false, $this->fetch_add_headers);
- $cache_uid = array_pop($cache_index);
-
- // uids of highest message matches -> cache seems OK
- if ($cache_uid == $header->uid)
- return 1;
+ if ($cache_count==$msg_count) {
+ if ($this->skip_deleted) {
+ $h_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:*", 'UID', $this->skip_deleted);
+ if (sizeof($h_index) == $cache_count) {
+ $cache_index = array_flip($cache_index);
+ foreach ($h_index as $idx => $uid)
+ unset($cache_index[$uid]);
+
+ if (empty($cache_index))
+ return 1;
+ }
+ return -2;
+ } else {
+ // get highest index
+ $header = iil_C_FetchHeader($this->conn, $mailbox, "$msg_count");
+ $cache_uid = array_pop($cache_index);
+
+ // uids of highest message matches -> cache seems OK
+ if ($cache_uid == $header->uid)
+ return 1;
+ }
// cache is dirty
return -1;
- }
+ }
// if cache count differs less than 10% report as dirty
else if (abs($msg_count - $cache_count) < $msg_count/10)
return -1;
else
return -2;
- }
+ }
/**
* @access private
@@ -2445,7 +2431,7 @@
/**
* @access private
*/
- function remove_message_cache($key, $index)
+ function remove_message_cache($key, $uid)
{
if (!$this->caching_enabled)
return;
@@ -2454,10 +2440,10 @@
"DELETE FROM ".get_table_name('messages')."
WHERE user_id=?
AND cache_key=?
- AND idx=?",
+ AND uid=?",
$_SESSION['user_id'],
$key,
- $index);
+ $uid);
}
/**
@@ -2680,10 +2666,6 @@
{
switch (strtolower($encoding))
{
- case '7bit':
- return $input;
- break;
-
case 'quoted-printable':
return quoted_printable_decode($input);
break;
@@ -2691,7 +2673,15 @@
case 'base64':
return base64_decode($input);
break;
-
+
+ case 'x-uuencode':
+ case 'x-uue':
+ case 'uue':
+ case 'uuencode':
+ return convert_uudecode($input);
+ break;
+
+ case '7bit':
default:
return $input;
}
@@ -2796,7 +2786,7 @@
if (($p = array_search(strtolower($folder), $this->default_folders_lc)) !== false && !$a_defaults[$p])
$a_defaults[$p] = $folder;
else
- $folders[$folder] = rc_strtolower(rcube_charset_convert($folder, 'UTF-7'));
+ $folders[$folder] = rc_strtolower(rcube_charset_convert($folder, 'UTF7-IMAP'));
}
// sort folders and place defaults on the top
@@ -3100,71 +3090,3 @@
return $posa - $posb;
}
}
-
-
-/**
- * Add quoted-printable encoding to a given string
- *
- * @param string String to encode
- * @param int Add new line after this number of characters
- * @param boolean True if spaces should be converted into =20
- * @return string Encoded string
- */
-function quoted_printable_encode($input, $line_max=76, $space_conv=false)
- {
- $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
- $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
- $eol = "\r\n";
- $escape = "=";
- $output = "";
-
- while( list(, $line) = each($lines))
- {
- //$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary
- $linlen = strlen($line);
- $newline = "";
- for($i = 0; $i < $linlen; $i++)
- {
- $c = substr( $line, $i, 1 );
- $dec = ord( $c );
- if ( ( $i == 0 ) && ( $dec == 46 ) ) // convert first point in the line into =2E
- {
- $c = "=2E";
- }
- if ( $dec == 32 )
- {
- if ( $i == ( $linlen - 1 ) ) // convert space at eol only
- {
- $c = "=20";
- }
- else if ( $space_conv )
- {
- $c = "=20";
- }
- }
- else if ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) // always encode "\t", which is *not* required
- {
- $h2 = floor($dec/16);
- $h1 = floor($dec%16);
- $c = $escape.$hex["$h2"].$hex["$h1"];
- }
-
- if ( (strlen($newline) + strlen($c)) >= $line_max ) // CRLF is not counted
- {
- $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay
- $newline = "";
- // check if newline first character will be point or not
- if ( $dec == 46 )
- {
- $c = "=2E";
- }
- }
- $newline .= $c;
- } // end of for
- $output .= $newline.$eol;
- } // end of while
-
- return trim($output);
- }
-
-
--
Gitblit v1.9.1