- Applied some fixes from trunk up to r5280

release-0.6
alecpl 13 years ago
parent 075e9d5ba2
commit 5f47eda94b

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix bug where the last identity is used on reply (#1488101)
- Fix locked folder rename option on servers supporting RFC2086 only (#1488089)
- Fix encoding of LDAP contacts identifiers (#1488079)
- Fix session race conditions when composing new messages

@ -3806,7 +3806,7 @@ class rcube_imap
// @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;
}

@ -3604,7 +3604,8 @@ function rcube_webmail()
var cpos = this.get_caret_pos(this.ksearch_input),
p = inp_value.lastIndexOf(',', cpos-1),
q = inp_value.substring(p+1, cpos),
min = this.env.autocomplete_min_length;
min = this.env.autocomplete_min_length,
ac = this.ksearch_data;
// trim query string
q = $.trim(q);
@ -3633,8 +3634,8 @@ function rcube_webmail()
if (!q.length)
return;
// ...new search value contains old one and previous search result was empty
if (old_value && old_value.length && this.env.contacts && !this.env.contacts.length && q.indexOf(old_value) == 0)
// ...new search value contains old one and previous search was not finished or its result was empty
if (old_value && old_value.length && q.indexOf(old_value) == 0 && (!ac || !ac.num) && this.env.contacts && !this.env.contacts.length)
return;
var i, lock, source, xhr, reqid = new Date().getTime(),
@ -3642,7 +3643,8 @@ function rcube_webmail()
sources = props && props.sources ? props.sources : [],
action = props && props.action ? props.action : 'mail/autocomplete';
this.ksearch_data = {id: reqid, sources: sources.slice(), action: action, locks: [], requests: []};
this.ksearch_data = {id: reqid, sources: sources.slice(), action: action,
locks: [], requests: [], num: sources.length};
for (i=0; i<threads; i++) {
source = this.ksearch_data.sources.shift();
@ -3727,6 +3729,7 @@ function rcube_webmail()
if (maxlen > 0 && this.ksearch_data.id == reqid && this.ksearch_data.sources.length) {
var lock, xhr, props = this.ksearch_data, source = props.sources.shift();
if (source) {
data.num--;
lock = this.display_message(this.get_label('searching'), 'loading');
xhr = this.http_post(props.action, '_search='+urlencode(s_val)+'&_id='+reqid
+'&_source='+urlencode(source), lock);

@ -619,10 +619,10 @@ function getCookie(name)
return null;
}
else {
begin += 2;
begin += 2;
}
var end = document.cookie.indexOf(";", begin);
var end = dc.indexOf(";", begin);
if (end == -1)
end = dc.length;

@ -46,7 +46,7 @@ if (!is_array($_SESSION['compose']))
'param' => request2param(RCUBE_INPUT_GET),
'mailbox' => $IMAP->get_mailbox_name(),
);
// process values like "mailto:foo@bar.com?subject=new+message&cc=another"
if ($_SESSION['compose']['param']['to']) {
// #1486037: remove "mailto:" prefix
@ -59,10 +59,10 @@ if (!is_array($_SESSION['compose']))
$_SESSION['compose']['param'][$f] = $val;
}
}
// select folder where to save the sent message
$_SESSION['compose']['param']['sent_mbox'] = $RCMAIL->config->get('sent_mbox');
// pipe compose parameters thru plugins
$plugin = $RCMAIL->plugins->exec_hook('message_compose', $_SESSION['compose']);
$_SESSION['compose']['param'] = array_merge($_SESSION['compose']['param'], $plugin['param']);
@ -84,12 +84,12 @@ if (!is_array($_SESSION['compose']))
'path' => $attach,
);
}
// save attachment if valid
if (($attachment['data'] && $attachment['name']) || ($attachment['path'] && file_exists($attachment['path']))) {
$attachment = rcmail::get_instance()->plugins->exec_hook('attachment_save', $attachment);
}
if ($attachment['status'] && !$attachment['abort']) {
unset($attachment['data'], $attachment['status'], $attachment['abort']);
$_SESSION['compose']['attachments'][$attachment['id']] = $attachment;
@ -242,21 +242,27 @@ else if (!empty($_SESSION['compose']['param']['from'])) {
$MESSAGE->compose['from'] = $_SESSION['compose']['param']['from'];
}
else if (count($MESSAGE->identities)) {
// extract all recipients of the reply-message
$a_recipients = array();
$a_names = array();
// extract all recipients of the reply-message
if (is_object($MESSAGE->headers) && in_array($compose_mode, array(RCUBE_COMPOSE_REPLY, RCUBE_COMPOSE_FORWARD)))
{
$a_to = $IMAP->decode_address_list($MESSAGE->headers->to);
foreach ($a_to as $addr) {
if (!empty($addr['mailto']))
if (!empty($addr['mailto'])) {
$a_recipients[] = strtolower($addr['mailto']);
$a_names[] = $addr['name'];
}
}
if (!empty($MESSAGE->headers->cc)) {
$a_cc = $IMAP->decode_address_list($MESSAGE->headers->cc);
foreach ($a_cc as $addr) {
if (!empty($addr['mailto']))
if (!empty($addr['mailto'])) {
$a_recipients[] = strtolower($addr['mailto']);
$a_names[] = $addr['name'];
}
}
}
}
@ -285,8 +291,11 @@ else if (count($MESSAGE->identities)) {
break;
}
// use replied message recipients
else if (in_array($ident['email_ascii'], $a_recipients)) {
$from_idx = $idx;
else if (($found = array_search($ident['email_ascii'], $a_recipients)) !== false) {
// match identity name, prefer default identity
if ($from_idx === null || ($a_names[$found] && $ident['name'] && $a_names[$found] == $ident['name'])) {
$from_idx = $idx;
}
}
}

Loading…
Cancel
Save