- Fixed and optimized 'read_when_deleted': mark as read on server side

in one action when marking as deleted, fixed js bugs when deleting
  from message preview page
release-0.6
alecpl 16 years ago
parent 47124c2279
commit 3d35312cc4

@ -1,6 +1,12 @@
CHANGELOG RoundCube Webmail
---------------------------
2008/04/12 (alec)
----------
- Fixed and optimized 'read_when_deleted': mark as read on server side
in one action when marking as deleted, fixed js bugs when deleting
from message preview page
2008/04/12 (thomasb)
----------
- Changed codebase to PHP5 with autoloader

@ -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']))

@ -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,6 +1469,7 @@ function rcube_webmail()
{
id = selection[n];
a_uids[a_uids.length] = id;
this.message_list.remove_row(id, (n == selection.length-1));
}
}
@ -1494,12 +1496,15 @@ function rcube_webmail()
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];
}
}
if (!this.message_list)
r_uids = a_uids;
else
for (var id, n=0; n<a_uids.length; n++)
{
id = a_uids[n];
@ -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 ? this.message_list.rows : new Array();
var rows = this.message_list.rows;
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 add_url = '';
var r_uids = new Array();
var rows = this.message_list ? this.message_list.rows : new Array();
var rows = this.message_list.rows;
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)
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 *********/
/*********************************************************/
@ -3522,6 +3554,7 @@ function rcube_webmail()
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;
}

@ -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();

Loading…
Cancel
Save