From a57f9e2c64a8495ccb89a8b79eba6052483a0ede Mon Sep 17 00:00:00 2001 From: alecpl Date: Mon, 23 Apr 2012 09:33:35 +0000 Subject: - Applied fixes from trunk up to r6118 --- program/include/rcube_imap.php | 2 + program/include/rcube_imap_generic.php | 2 +- program/include/rcube_result_index.php | 8 ++- program/js/app.js | 106 ++++++++++++++++++--------------- 4 files changed, 65 insertions(+), 53 deletions(-) (limited to 'program') diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 5e36f16c5..4e1d57155 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -1213,7 +1213,9 @@ class rcube_imap extends rcube_storage } // use message index sort as default sorting else if (!$sort_field) { + // use search result from count() if possible if ($this->options['skip_deleted'] && !empty($this->icache['undeleted_idx']) + && $this->icache['undeleted_idx']->get_parameters('ALL') !== null && $this->icache['undeleted_idx']->get_parameters('MAILBOX') == $folder ) { $index = $this->icache['undeleted_idx']; diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php index a664c5b57..52459dd78 100644 --- a/program/include/rcube_imap_generic.php +++ b/program/include/rcube_imap_generic.php @@ -1650,7 +1650,7 @@ class rcube_imap_generic // If ESEARCH is supported always use ALL // but not when items are specified or using simple id2uid search - if (empty($items) && ((int) $criteria != $criteria)) { + if (empty($items) && preg_match('/[^0-9]/', $criteria)) { $items = array('ALL'); } diff --git a/program/include/rcube_result_index.php b/program/include/rcube_result_index.php index 1c7a5e067..cd900677e 100644 --- a/program/include/rcube_result_index.php +++ b/program/include/rcube_result_index.php @@ -89,18 +89,18 @@ class rcube_result_index $param = strtoupper($m[1]); $value = $m[2]; - $this->params[strtoupper($m[1])] = $value; + $this->params[$param] = $value; $data_item = substr($data_item, strlen($m[0])); if (in_array($param, array('COUNT', 'MIN', 'MAX'))) { - $this->meta[strtolower($param)] = (int) $m[2]; + $this->meta[strtolower($param)] = (int) $value; } } // @TODO: Implement compression using compressMessageSet() in __sleep() and __wakeup() ? // @TODO: work with compressed result?! if (isset($this->params['ALL'])) { - $data[$idx] = implode(self::SEPARATOR_ELEMENT, + $data_item = implode(self::SEPARATOR_ELEMENT, rcube_imap_generic::uncompressMessageSet($this->params['ALL'])); } } @@ -111,6 +111,8 @@ class rcube_result_index unset($data[$i]); } + $data = array_filter($data); + if (empty($data)) { return; } diff --git a/program/js/app.js b/program/js/app.js index eba53bd56..d7bdfbf63 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -273,7 +273,7 @@ function rcube_webmail() // show printing dialog else if (this.env.action == 'print' && this.env.uid) if (bw.safari) - window.setTimeout('window.print()', 10); + setTimeout('window.print()', 10); else window.print(); @@ -770,7 +770,7 @@ function rcube_webmail() case 'always-load': if (this.env.uid && this.env.sender) { this.add_contact(urlencode(this.env.sender)); - window.setTimeout(function(){ ref.command('load-images'); }, 300); + setTimeout(function(){ ref.command('load-images'); }, 300); break; } @@ -788,7 +788,7 @@ function rcube_webmail() qstring += '&_safe=1'; this.attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', 'rcubemailattachment'); if (this.attachment_win) { - window.setTimeout(function(){ ref.attachment_win.focus(); }, 10); + setTimeout(function(){ ref.attachment_win.focus(); }, 10); break; } } @@ -911,19 +911,25 @@ function rcube_webmail() break; case 'savedraft': + var form = this.gui_objects.messageform, msgid; + // Reset the auto-save timer - self.clearTimeout(this.save_timer); + clearTimeout(this.save_timer); - if (!this.gui_objects.messageform) + // saving Drafts is disabled + if (!form) break; - // if saving Drafts is disabled in main.inc.php - // or if compose form did not change - if (!this.env.drafts_mailbox || this.cmp_hash == this.compose_field_hash()) + // compose form did not change + if (this.cmp_hash == this.compose_field_hash()) { + this.auto_save_start(); break; + } + + // re-set keep-alive timeout + this.start_keepalive(); - var form = this.gui_objects.messageform, - msgid = this.set_busy(true, 'savingmessage'); + msgid = this.set_busy(true, 'savingmessage'); form.target = "savetarget"; form._draft.value = '1'; @@ -939,7 +945,7 @@ function rcube_webmail() break; // Reset the auto-save timer - self.clearTimeout(this.save_timer); + clearTimeout(this.save_timer); // all checks passed, send message var lang = this.spellcheck_lang(), @@ -958,7 +964,7 @@ function rcube_webmail() case 'send-attachment': // Reset the auto-save timer - self.clearTimeout(this.save_timer); + clearTimeout(this.save_timer); this.upload_file(props || this.gui_objects.uploadform); break; @@ -1005,7 +1011,7 @@ function rcube_webmail() if (uid = this.get_single_uid()) { ref.printwin = window.open(this.env.comm_path+'&_action=print&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+(this.env.safemode ? '&_safe=1' : '')); if (this.printwin) { - window.setTimeout(function(){ ref.printwin.focus(); }, 20); + setTimeout(function(){ ref.printwin.focus(); }, 20); if (this.env.action != 'show') this.mark_message('read', uid); } @@ -1016,7 +1022,7 @@ function rcube_webmail() if (uid = this.get_single_uid()) { ref.sourcewin = window.open(this.env.comm_path+'&_action=viewsource&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)); if (this.sourcewin) - window.setTimeout(function(){ ref.sourcewin.focus(); }, 20); + setTimeout(function(){ ref.sourcewin.focus(); }, 20); } break; @@ -1161,7 +1167,7 @@ function rcube_webmail() // set timer for requests if (a && this.env.request_timeout) - this.request_timer = window.setTimeout(function(){ ref.request_timed_out(); }, this.env.request_timeout * 1000); + this.request_timer = setTimeout(function(){ ref.request_timed_out(); }, this.env.request_timeout * 1000); return id; }; @@ -1213,7 +1219,7 @@ function rcube_webmail() if (this.is_framed()) parent.rcmail.reload(delay); else if (delay) - window.setTimeout(function(){ rcmail.reload(); }, delay); + setTimeout(function(){ rcmail.reload(); }, delay); else if (window.location) location.href = this.env.comm_path + (this.env.action ? '&_action='+this.env.action : ''); }; @@ -1346,7 +1352,7 @@ function rcube_webmail() this.env.last_folder_target = null; if (this.folder_auto_timer) { - window.clearTimeout(this.folder_auto_timer); + clearTimeout(this.folder_auto_timer); this.folder_auto_timer = null; this.folder_auto_expand = null; } @@ -1399,15 +1405,15 @@ function rcube_webmail() // if the folder is collapsed, expand it after 1sec and restart the drag & drop process. if (div.hasClass('collapsed')) { if (this.folder_auto_timer) - window.clearTimeout(this.folder_auto_timer); + clearTimeout(this.folder_auto_timer); this.folder_auto_expand = this.env.mailboxes[k].id; - this.folder_auto_timer = window.setTimeout(function() { + this.folder_auto_timer = setTimeout(function() { rcmail.command('collapse-folder', rcmail.folder_auto_expand); rcmail.drag_start(null); }, 1000); } else if (this.folder_auto_timer) { - window.clearTimeout(this.folder_auto_timer); + clearTimeout(this.folder_auto_timer); this.folder_auto_timer = null; this.folder_auto_expand = null; } @@ -1559,7 +1565,7 @@ function rcube_webmail() // start timer for message preview (wait for double click) if (selected && this.env.contentframe && !list.multi_selecting && !this.dummy_select) - this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, 200); + this.preview_timer = setTimeout(function(){ ref.msglist_get_preview(); }, 200); else if (this.env.contentframe) this.show_contentframe(false); }; @@ -1576,7 +1582,7 @@ function rcube_webmail() clearTimeout(this.preview_timer); if (this.preview_read_timer) clearTimeout(this.preview_read_timer); - this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, 200); + this.preview_timer = setTimeout(function(){ ref.msglist_get_preview(); }, 200); } } }; @@ -1962,7 +1968,7 @@ function rcube_webmail() // mark as read and change mbox unread counter if (action == 'preview' && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read >= 0) { - this.preview_read_timer = window.setTimeout(function() { + this.preview_read_timer = setTimeout(function() { ref.set_message(id, 'unread', false); ref.update_thread_root(id, 'read'); if (ref.env.unread_counts[ref.env.mailbox]) { @@ -3142,7 +3148,7 @@ function rcube_webmail() tinyMCE.execCommand('mceAddControl', false, props.id); if (this.env.default_font) - window.setTimeout(function() { + setTimeout(function() { $(tinyMCE.get(props.id).getBody()).css('font-family', rcmail.env.default_font); }, 500); } @@ -3241,7 +3247,7 @@ function rcube_webmail() this.auto_save_start = function() { if (this.env.draft_autosave) - this.save_timer = self.setTimeout(function(){ ref.command("savedraft"); }, this.env.draft_autosave * 1000); + this.save_timer = setTimeout(function(){ ref.command("savedraft"); }, this.env.draft_autosave * 1000); // Unlock interface now that saving is complete this.busy = false; @@ -3250,20 +3256,11 @@ function rcube_webmail() this.compose_field_hash = function(save) { // check input fields - var ed, str = '', - value_to = $("[name='_to']").val(), - value_cc = $("[name='_cc']").val(), - value_bcc = $("[name='_bcc']").val(), - value_subject = $("[name='_subject']").val(); - - if (value_to) - str += value_to+':'; - if (value_cc) - str += value_cc+':'; - if (value_bcc) - str += value_bcc+':'; - if (value_subject) - str += value_subject+':'; + var ed, i, val, str = '', hash_fields = ['to', 'cc', 'bcc', 'subject']; + + for (i=0; i') + .addClass('ff_'+col) + .attr({ name: '_'+col+name_suffix, cols:colprop.size, rows:colprop.rows }) + .appendTo(cell); + + this.init_edit_field(col, input); + } else if (colprop.type == 'composite') { var childcol, cp, first, templ, cols = [], suffices = []; // read template for composite field order @@ -5524,7 +5529,7 @@ function rcube_webmail() } // add element and set timeout this.messages[key].elements.push(id); - window.setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout); + setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout); return id; } @@ -5544,7 +5549,7 @@ function rcube_webmail() this.triggerEvent('message', { message:msg, type:type, timeout:timeout, object:obj }); if (timeout > 0) - window.setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout); + setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout); return id; }; @@ -6196,12 +6201,15 @@ function rcube_webmail() // starts interval for keep-alive/check-recent signal this.start_keepalive = function() { + if (!this.env.keep_alive || this.env.framed) + return; + if (this._int) clearInterval(this._int); - if (this.env.keep_alive && !this.env.framed && this.task == 'mail' && this.gui_objects.mailboxlist) + if (this.task == 'mail' && this.gui_objects.mailboxlist) this._int = setInterval(function(){ ref.check_for_recent(false); }, this.env.keep_alive * 1000); - else if (this.env.keep_alive && !this.env.framed && this.task != 'login' && this.env.action != 'print') + else if (this.task != 'login' && this.env.action != 'print') this._int = setInterval(function(){ ref.keep_alive(); }, this.env.keep_alive * 1000); }; @@ -6262,7 +6270,7 @@ function rcube_webmail() return obj.selectionEnd; else if (document.selection && document.selection.createRange) { var range = document.selection.createRange(); - if (range.parentElement()!=obj) + if (range.parentElement() != obj) return 0; var gm = range.duplicate(); -- cgit v1.2.3