From 0c1cb2fed7c584b31aa7f4df7aa565781dfe0021 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 27 Sep 2011 05:04:25 -0400
Subject: [PATCH] Fix typo; add attribute to allow html in labels
---
program/include/rcube_imap.php | 61 ++++++++++++++++++++----------
1 files changed, 41 insertions(+), 20 deletions(-)
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index a15a592..0f56515 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -176,12 +176,13 @@
$attempt = 0;
do {
$data = rcmail::get_instance()->plugins->exec_hook('imap_connect',
- array('host' => $host, 'user' => $user, 'attempt' => ++$attempt));
+ array_merge($this->options, array('host' => $host, 'user' => $user,
+ 'attempt' => ++$attempt)));
if (!empty($data['pass']))
$pass = $data['pass'];
- $this->conn->connect($data['host'], $data['user'], $pass, $this->options);
+ $this->conn->connect($data['host'], $data['user'], $pass, $data);
} while(!$this->conn->connected() && $data['retry']);
$this->host = $data['host'];
@@ -426,7 +427,7 @@
function set_search_set($str=null, $msgs=null, $charset=null, $sort_field=null, $threads=false, $sorted=false)
{
if (is_array($str) && $msgs == null)
- list($str, $msgs, $charset, $sort_field, $threads) = $str;
+ list($str, $msgs, $charset, $sort_field, $threads, $sorted) = $str;
if ($msgs === false)
$msgs = array();
else if ($msgs != null && !is_array($msgs))
@@ -813,7 +814,7 @@
$mailbox = $this->mailbox;
}
- return $this->_list_headers($mailbox, $page, $sort_field, $sort_order, false, $slice);
+ return $this->_list_headers($mailbox, $page, $sort_field, $sort_order, $slice);
}
@@ -910,19 +911,18 @@
}
// fetch specified header for all messages and sort
else if ($msg_index = $this->conn->fetchHeaderIndex($mailbox, "1:*",
- $this->sort_field, $this->skip_deleted, true)
+ $this->sort_field, $this->skip_deleted)
) {
asort($msg_index); // ASC
$msg_index = array_keys($msg_index);
list($begin, $end) = $this->_get_message_range(count($msg_index), $page);
$msg_index = array_slice($msg_index, $begin, $end-$begin);
- $is_uid = true;
if ($slice)
$msg_index = array_slice($msg_index, ($this->sort_order == 'DESC' ? 0 : -$slice), $slice);
// fetch reqested headers from server
- $a_msg_headers = $this->fetch_headers($mailbox, $msg_index, true);
+ $a_msg_headers = $this->fetch_headers($mailbox, $msg_index);
}
// return empty array if no messages found
@@ -1086,7 +1086,7 @@
if (!empty($parents)) {
$headers[$idx]->parent_uid = end($parents);
- if (!$header->seen)
+ if (empty($header->flags['SEEN']))
$headers[$parents[0]]->unread_children++;
}
array_push($parents, $header->uid);
@@ -1504,7 +1504,10 @@
// use message index sort as default sorting
if (!$sort_field) {
if ($this->skip_deleted) {
- $a_index = $this->_search_index($mailbox, 'ALL');
+ $a_index = $this->conn->search($mailbox, 'ALL UNDELETED');
+ // I didn't found that SEARCH should return sorted IDs
+ if (is_array($a_index))
+ sort($a_index);
} else if ($max = $this->_messagecount($mailbox)) {
$a_index = range(1, $max);
}
@@ -1999,12 +2002,11 @@
}
$struct = &$this->_structure_part($structure, 0, '', $headers);
- $struct->headers = get_object_vars($headers);
// don't trust given content-type
- if (empty($struct->parts) && !empty($struct->headers['ctype'])) {
+ if (empty($struct->parts) && !empty($headers->ctype)) {
$struct->mime_id = '1';
- $struct->mimetype = strtolower($struct->headers['ctype']);
+ $struct->mimetype = strtolower($headers->ctype);
list($struct->ctype_primary, $struct->ctype_secondary) = explode('/', $struct->mimetype);
}
@@ -2388,13 +2390,16 @@
}
// convert charset (if text or message part)
- if ($body && !$skip_charset_conv &&
- preg_match('/^(text|message)$/', $o_part->ctype_primary)
- ) {
- if (!$o_part->charset || strtoupper($o_part->charset) == 'US-ASCII') {
- $o_part->charset = $this->default_charset;
+ if ($body && preg_match('/^(text|message)$/', $o_part->ctype_primary)) {
+ // Remove NULL characters (#1486189)
+ $body = str_replace("\x00", '', $body);
+
+ if (!$skip_charset_conv) {
+ if (!$o_part->charset || strtoupper($o_part->charset) == 'US-ASCII') {
+ $o_part->charset = $this->default_charset;
+ }
+ $body = rcube_charset_convert($body, $o_part->charset);
}
- $body = rcube_charset_convert($body, $o_part->charset);
}
return $body;
@@ -3419,6 +3424,8 @@
if ($this->conn->selected != $mailbox) {
if ($this->conn->select($mailbox))
$this->mailbox = $mailbox;
+ else
+ return null;
}
$data = $this->conn->data;
@@ -3498,7 +3505,8 @@
}
if (!empty($options['rights'])) {
- $options['norename'] = !in_array('x', $options['rights']);
+ $options['norename'] = !in_array('x', $options['rights']) && !in_array('d', $options['rights']);
+
if (!$options['noselect']) {
$options['noselect'] = !in_array('r', $options['rights']);
}
@@ -3510,6 +3518,19 @@
$this->icache['options'] = $options;
return $options;
+ }
+
+
+ /**
+ * Synchronizes messages cache.
+ *
+ * @param string $mailbox Folder name
+ */
+ public function mailbox_sync($mailbox)
+ {
+ if ($mcache = $this->get_mcache_engine()) {
+ $mcache->synchronize($mailbox);
+ }
}
@@ -3725,7 +3746,7 @@
// @TODO: Honor MAXSIZE and DEPTH options
foreach ($queries as $attrib => $entry)
if ($result = $this->conn->getAnnotation($mailbox, $entry, $attrib))
- $res = array_merge($res, $result);
+ $res = array_merge_recursive($res, $result);
return $res;
}
--
Gitblit v1.9.1