From e54bb72d30cfd88fcef5434b472fb3d9b2cca710 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Fri, 31 Jul 2009 05:07:54 -0400 Subject: [PATCH] - Added 'display_next' option --- CHANGELOG | 1 program/steps/mail/func.inc | 22 +++++----- program/steps/settings/func.inc | 10 ++++ program/localization/en_US/labels.inc | 1 program/steps/mail/show.inc | 5 ++ program/localization/pl_PL/labels.inc | 1 config/main.inc.php.dist | 3 + program/js/app.js | 18 ++++++--- program/steps/settings/save_prefs.inc | 1 9 files changed, 43 insertions(+), 19 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 69fa70b..c90960d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG RoundCube Webmail =========================== +- Added 'display_next' option - Fix rcube_mdb2::unixtimestamp for MS SQL (#1486015) - Fix HTML washing to respect character encoding - Fix endless loop in iil_C_Login() with Courier IMAP (#1486010) diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 6050a4a..c0bd5cf 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -437,5 +437,8 @@ // If true all folders will be checked for recent messages $rcmail_config['check_all_folders'] = FALSE; +// If true, after message delete/move, the next message will be displayed +$rcmail_config['display_next'] = FALSE; + // end of config file ?> diff --git a/program/js/app.js b/program/js/app.js index 9cd4231..17a3e0e 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -1890,19 +1890,21 @@ var selection = this.message_list.get_selection(); var rows = this.message_list.rows; var id; - for (var n=0; n<selection.length; n++) - { + for (var n=0; n<selection.length; n++) { id = selection[n]; a_uids[a_uids.length] = id; - this.message_list.remove_row(id, (n == selection.length-1)); + this.message_list.remove_row(id, (this.env.display_next && n == selection.length-1)); } + // make sure there are no selected rows + if (!this.env.display_next) + this.message_list.clear_selection(); } // also send search request to get the right messages if (this.env.search_request) add_url += '&_search='+this.env.search_request; - if (this.env.next_uid) + if (this.env.display_next && this.env.next_uid) add_url += '&_next_uid='+this.env.next_uid; // send request to server @@ -2046,11 +2048,15 @@ r_uids[r_uids.length] = uid; if (this.env.skip_deleted) - this.message_list.remove_row(uid, (i == this.message_list.selection.length-1)); + this.message_list.remove_row(uid, (this.env.display_next && i == this.message_list.selection.length-1)); else this.set_message(uid, 'deleted', true); } } + + // make sure there are no selected rows + if (this.env.skip_deleted && !this.env.display_next && this.message_list) + this.message_list.clear_selection(); add_url = '&_from='+(this.env.action ? this.env.action : ''); @@ -2061,7 +2067,7 @@ // also send search request to get the right messages if (this.env.search_request) add_url += '&_search='+this.env.search_request; - if (this.env.next_uid) + if (this.env.display_next && this.env.next_uid) add_url += '&_next_uid='+this.env.next_uid; } diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index c3181b2..443b4bb 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -305,6 +305,7 @@ $labels['advancedoptions'] = 'Advanced options'; $labels['focusonnewmessage'] = 'Focus browser window on new message'; $labels['checkallfolders'] = 'Check all folders for new messages'; +$labels['displaynext'] = 'After message delete/move display the next message'; $labels['folder'] = 'Folder'; $labels['folders'] = 'Folders'; diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc index feb4b8f..84e7ca5 100644 --- a/program/localization/pl_PL/labels.inc +++ b/program/localization/pl_PL/labels.inc @@ -245,6 +245,7 @@ $labels['everynminutes'] = 'co $n minut(y)'; $labels['never'] = 'nigdy'; $labels['focusonnewmessage'] = 'Informuj przeglądarkę o nowej wiadomości'; +$labels['displaynext'] = 'Po usunięciu/przeniesieniu wiadomości wyświetl następną'; $labels['folder'] = 'Folder'; $labels['folders'] = 'Foldery'; $labels['foldername'] = 'Nazwa folderu'; diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 21f0fed..d82c8ef 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -93,6 +93,8 @@ $OUTPUT->set_env('read_when_deleted', true); if ($CONFIG['skip_deleted']) $OUTPUT->set_env('skip_deleted', true); + if ($CONFIG['display_next']) + $OUTPUT->set_env('display_next', true); if ($CONFIG['trash_mbox']) $OUTPUT->set_env('trash_mailbox', $CONFIG['trash_mbox']); @@ -686,18 +688,16 @@ $html = preg_replace_callback('/(<[\/!]*)([^ >]+)/', 'rcmail_html_tag_callback', $html); // charset was converted to UTF-8 in rcube_imap::get_message_part(), - // -> change charset specification in HTML accordingly - $charset_pattern = '(content=[\'"]?\w+\/\w+;\s*charset)=([a-z0-9-_]+)'; - if (preg_match("/<meta\s+[^>]*$charset_pattern/Ui", $html)) { - $html = preg_replace("/\s+$charset_pattern/i", '\\1='.RCMAIL_CHARSET, $html); + // change charset specification in HTML accordingly + $charset_pattern = '/(\s+content=[\'"]?\w+\/\w+;\s*charset)=([a-z0-9-_]+)/i'; + if (preg_match($charset_pattern, $html)) { + $html = preg_replace($charset_pattern, '\\1='.RCMAIL_CHARSET, $html); } - else { - // add meta content-type to malformed messages, washtml cannot work without that - if (!preg_match('/<head[^>]*>(.*)<\/head>/Uims', $html)) - $html = '<head></head>'. $html; - $html = substr_replace($html, '<meta http-equiv="Content-Type" content="text/html; charset='.RCMAIL_CHARSET.'" />', intval(stripos($html, '<head>')+6), 0); - } - + // add head for malformed messages, washtml cannot work without that + if (!preg_match('/<head[^>]*>(.*)<\/head>/Uims', $html)) + $html = '<head></head>'. $html; + $html = substr_replace($html, '<meta http-equiv="Content-Type" content="text/html; charset='.RCMAIL_CHARSET.'" />', intval(stripos($html, '<head>')+6), 0); + // turn relative into absolute urls $html = rcmail_resolve_base($html); diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index 068ccbc..88961e9 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -78,7 +78,7 @@ $OUTPUT->set_env('trash_mailbox', $CONFIG['trash_mbox']); if (!$OUTPUT->ajax_call) $OUTPUT->add_label('checkingmail', 'deletemessage', 'movemessagetotrash', 'movingmessage'); - + // check for unset disposition notification if ($MESSAGE->headers->mdn_to && !$MESSAGE->headers->mdn_sent && !$MESSAGE->headers->seen && @@ -143,6 +143,9 @@ $OUTPUT->set_env('last_uid', $last); } + if ($CONFIG['display_next']) + $OUTPUT->set_env('display_next', true); + if (!$MESSAGE->headers->seen) $RCMAIL->plugins->exec_hook('message_read', array('uid' => $MESSAGE->uid, 'mailbox' => $IMAP->mailbox, 'message' => $MESSAGE)); diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index f72b437..f833c1a 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -258,12 +258,20 @@ $table->add(null, $input_inline_images->show($config['inline_images']?1:0)); } + // "display after delete" checkbox + if (!isset($no_override['display_next'])) { + $field_id = 'rcmfd_displaynext'; + $input_displaynext = new html_checkbox(array('name' => '_display_next', 'id' => $field_id, 'value' => 1)); + + $table->add('title', html::label($field_id, Q(rcube_label('displaynext')))); + $table->add(null, $input_displaynext->show($config['display_next']?1:0)); + } + $RCMAIL->plugins->exec_hook('user_preferences', array('section' => $part, 'table' => $table)); if ($table->size()) $out = html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('messagesdisplaying'))) . $table->show($attrib)); break; - // Mail composition case 'compose': diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc index 8430ffd..910cab6 100644 --- a/program/steps/settings/save_prefs.inc +++ b/program/steps/settings/save_prefs.inc @@ -29,6 +29,7 @@ 'htmleditor' => isset($_POST['_htmleditor']) ? TRUE : FALSE, 'inline_images' => isset($_POST['_inline_images']) ? TRUE : FALSE, 'preview_pane' => isset($_POST['_preview_pane']) ? TRUE : FALSE, + 'display_next' => isset($_POST['_display_next']) ? TRUE : FALSE, 'focus_on_new_message' => isset($_POST['_focus_on_new_message']) ? TRUE : FALSE, 'read_when_deleted' => isset($_POST['_read_when_deleted']) ? TRUE : FALSE, 'skip_deleted' => isset($_POST['_skip_deleted']) ? TRUE : FALSE, -- Gitblit v1.9.1