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