diff options
Diffstat (limited to 'program')
-rw-r--r-- | program/include/main.inc | 2 | ||||
-rw-r--r-- | program/js/app.js | 135 | ||||
-rw-r--r-- | program/steps/mail/mark.inc | 9 |
3 files changed, 94 insertions, 52 deletions
diff --git a/program/include/main.inc b/program/include/main.inc index 6d548d8e5..09a53f0ad 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -465,7 +465,7 @@ function rcmail_load_gui() $OUTPUT = new rcube_template($CONFIG, $GLOBALS['_task']); $OUTPUT->set_env('comm_path', $GLOBALS['COMM_PATH']); - foreach (array('read_when_deleted', 'flag_for_deletion') as $js_config_var) + foreach (array('flag_for_deletion') as $js_config_var) $OUTPUT->set_env($js_config_var, $CONFIG[$js_config_var]); if (!empty($GLOBALS['_framed'])) diff --git a/program/js/app.js b/program/js/app.js index a62d8d8ec..3ed681719 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -1407,7 +1407,7 @@ function rcube_webmail() this.delete_messages = function() { var selection = this.message_list ? this.message_list.get_selection() : new Array(); - + // exit if no mailbox specified or if selection is empty if (!this.env.uid && !selection.length) return; @@ -1458,8 +1458,9 @@ function rcube_webmail() this._with_selected_messages = function(action, lock, add_url) { var a_uids = new Array(); + if (this.env.uid) - a_uids[a_uids.length] = this.env.uid; + a_uids[0] = this.env.uid; else { var selection = this.message_list.get_selection(); @@ -1468,10 +1469,11 @@ function rcube_webmail() { id = selection[n]; a_uids[a_uids.length] = id; + this.message_list.remove_row(id, (n == selection.length-1)); } } - + // also send search request to get the right messages if (this.env.search_request) add_url += '&_search='+this.env.search_request; @@ -1487,20 +1489,23 @@ function rcube_webmail() var a_uids = new Array(); var r_uids = new Array(); var selection = this.message_list ? this.message_list.get_selection() : new Array(); - + if (uid) a_uids[0] = uid; else if (this.env.uid) a_uids[0] = this.env.uid; else if (this.message_list) { - for (var id, n=0; n<selection.length; n++) + for (var n=0; n<selection.length; n++) { a_uids[a_uids.length] = selection[n]; } } - for (var id, n=0; n<a_uids.length; n++) + if (!this.message_list) + r_uids = a_uids; + else + for (var id, n=0; n<a_uids.length; n++) { id = a_uids[n]; if ((flag=='read' && this.message_list.rows[id].unread) @@ -1511,11 +1516,11 @@ function rcube_webmail() r_uids[r_uids.length] = id; } } - + // nothing to do if (!r_uids.length) return; - + switch (flag) { case 'read': @@ -1581,11 +1586,11 @@ function rcube_webmail() parent.rcmail.set_classname(rows[uid].obj, 'unread', false); if (rows[uid].replied && parent.rcmail.env.repliedicon) - icn_src = parent.rcmail.env.repliedicon; + icn_src = parent.rcmail.env.repliedicon; else if (parent.rcmail.env.messageicon) icn_src = parent.rcmail.env.messageicon; - if (rows[uid].icon && icn_src) + if (rows[uid].icon && icn_src) rows[uid].icon.src = icn_src; } } @@ -1594,17 +1599,11 @@ function rcube_webmail() // mark all message rows as deleted/undeleted this.toggle_delete_status = function(a_uids) { - if (this.env.read_when_deleted) - this.mark_message('read',a_uids); - - // if deleting message from "view message" don't bother with delete icon - if (this.env.action == "show") - return false; - - var rows = this.message_list.rows; + var rows = this.message_list ? this.message_list.rows : new Array(); + if (a_uids.length==1) { - if (rows[a_uids[0]] && rows[a_uids[0]].classname.indexOf('deleted') < 0) + if (!rows.length || (rows[a_uids[0]] && rows[a_uids[0]].classname.indexOf('deleted') < 0)) this.flag_as_deleted(a_uids); else this.flag_as_undeleted(a_uids); @@ -1636,12 +1635,8 @@ function rcube_webmail() this.flag_as_undeleted = function(a_uids) { - // if deleting message from "view message" don't bother with delete icon - if (this.env.action == "show") - return false; - var icn_src; - var rows = this.message_list.rows; + var rows = this.message_list ? this.message_list.rows : new Array(); for (var i=0; i<a_uids.length; i++) { @@ -1660,6 +1655,7 @@ function rcube_webmail() icn_src = this.env.repliedicon; else if (this.env.messageicon) icn_src = this.env.messageicon; + if (rows[uid].icon && icn_src) rows[uid].icon.src = icn_src; } @@ -1672,31 +1668,67 @@ function rcube_webmail() this.flag_as_deleted = function(a_uids) { - // if deleting message from "view message" don't bother with delete icon - if (this.env.action == "show") - return false; - - var rows = this.message_list.rows; + var add_url = ''; + var r_uids = new Array(); + var rows = this.message_list ? this.message_list.rows : new Array(); + for (var i=0; i<a_uids.length; i++) - { + { uid = a_uids[i]; - if (rows[uid]) { + if (rows[uid]) + { rows[uid].deleted = true; - if (rows[uid].classname.indexOf('deleted')<0) { + if (rows[uid].classname.indexOf('deleted')<0) + { rows[uid].classname += ' deleted'; this.set_classname(rows[uid].obj, 'deleted', true); - } - if (rows[uid].icon && this.env.deletedicon) + } + + if (rows[uid].icon && this.env.deletedicon) rows[uid].icon.src = this.env.deletedicon; + + if (rows[uid].unread) + r_uids[r_uids.length] = uid; + } } - } - this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=delete'); + if (r_uids.length) + add_url = '&_ruid='+r_uids.join(','); + + this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=delete'+add_url); return true; }; + // flag as read without mark request (called from backend) + // argument should be a coma-separated list of uids + this.flag_deleted_as_read = function(uids) + { + var icn_src; + var rows = this.message_list ? this.message_list.rows : new Array(); + var str = String(uids); + var a_uids = new Array(); + + a_uids = str.split(','); + + for (var uid, i=0; i<a_uids.length; i++) + { + uid = a_uids[i]; + if (rows[uid]) + { + rows[uid].unread = false; + rows[uid].read = true; + + rows[uid].classname = rows[uid].classname.replace(/\s*unread/, ''); + this.set_classname(rows[uid].obj, 'unread', false); + + if (rows[uid].icon) + rows[uid].icon.src = this.env.deletedicon; + } + } + }; + /*********************************************************/ /********* login form methods *********/ /*********************************************************/ @@ -3502,27 +3534,28 @@ function rcube_webmail() this.message_list.init(); case 'purge': - case 'expunge': - if (!this.env.messagecount) - { - // clear preview pane content - if (this.env.contentframe) - this.show_contentframe(false); - // disable commands useless when mailbox is empty - this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource', - 'print', 'load-attachment', 'purge', 'expunge', 'select-all', 'select-none', 'sort', false); - } + case 'expunge': + if (!this.env.messagecount) + { + // clear preview pane content + if (this.env.contentframe) + this.show_contentframe(false); + // disable commands useless when mailbox is empty + this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource', + 'print', 'load-attachment', 'purge', 'expunge', 'select-all', 'select-none', 'sort', false); + } - break; + break; case 'list': - this.msglist_select(this.message_list); + this.msglist_select(this.message_list); case 'check-recent': case 'getunread': - this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0)); - this.enable_command('purge', (this.env.messagecount && (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox))); - break; + this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0)); + this.enable_command('purge', (this.env.messagecount && (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox))); + + break; } diff --git a/program/steps/mail/mark.inc b/program/steps/mail/mark.inc index 53194b5ab..830f1fe3d 100644 --- a/program/steps/mail/mark.inc +++ b/program/steps/mail/mark.inc @@ -29,6 +29,15 @@ if (($uids = get_input_value('_uid', RCUBE_INPUT_POST)) && ($flag = get_input_va $flag = $a_flags_map[$flag] ? $a_flags_map[$flag] : strtoupper($flag); $marked = $IMAP->set_flag($uids, $flag); + if($flag == 'DELETED' && $CONFIG['read_when_deleted'] && !empty($_POST['_ruid'])) + { + $uids = get_input_value('_ruid', RCUBE_INPUT_POST); + $read = $IMAP->set_flag($uids, 'SEEN'); + + if ($read != -1) + $OUTPUT->command('flag_deleted_as_read', $uids); + } + if ($marked != -1) { $mbox_name = $IMAP->get_mailbox_name(); |