From cd01dc027b8fb9cc4ce7237fbb8e7359c4a5d47e Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sat, 21 Jun 2014 09:41:40 -0400
Subject: [PATCH] Add option to set default message list mode - default_list_mode (#1487312)

---
 CHANGELOG                              |    1 +
 program/steps/settings/edit_folder.inc |    6 ++++--
 program/steps/settings/folders.inc     |    7 ++++---
 program/steps/mail/func.inc            |    7 +++++--
 program/steps/settings/save_folder.inc |   14 +++++---------
 config/defaults.inc.php                |    9 ++++++---
 6 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 0b15aaf..43c2504 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Add option to set default message list mode - default_list_mode (#1487312)
 - Close "no subject" prompt with Enter key (#1489580)
 - Add config option to specify IMAP connection socket parameters - imap_conn_options (#1489948)
 - Password: Add option to force new users to change their password (#1486884)
diff --git a/config/defaults.inc.php b/config/defaults.inc.php
index c20a06b..71a2e42 100644
--- a/config/defaults.inc.php
+++ b/config/defaults.inc.php
@@ -978,9 +978,12 @@
 // If true, after message delete/move, the next message will be displayed
 $config['display_next'] = true;
 
-// 0 - Do not expand threads 
-// 1 - Expand all threads automatically 
-// 2 - Expand only threads with unread messages 
+// Default messages listing mode. One of 'threads' or 'list'.
+$config['default_list_mode'] = 'list';
+
+// 0 - Do not expand threads
+// 1 - Expand all threads automatically
+// 2 - Expand only threads with unread messages
 $config['autoexpand_threads'] = 0;
 
 // When replying:
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index ac343ad..e8bf5e1 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -166,6 +166,7 @@
 {
     global $RCMAIL;
 
+    $default_threading  = $RCMAIL->config->get('default_list_mode', 'list') == 'threads';
     $a_threading        = $RCMAIL->config->get('message_threading', array());
     $message_sort_col   = $RCMAIL->config->get('message_sort_col');
     $message_sort_order = $RCMAIL->config->get('message_sort_order');
@@ -205,13 +206,15 @@
                 $RCMAIL->storage->set_page($_SESSION['page'] = 1);
             }
 
-            unset($a_threading[$_SESSION['mbox']]);
+            $a_threading[$_SESSION['mbox']] = false;
         }
 
         $RCMAIL->user->save_prefs(array('message_threading' => $a_threading));
     }
 
-    $RCMAIL->storage->set_threading($a_threading[$_SESSION['mbox']]);
+    $threading = isset($a_threading[$_SESSION['mbox']]) ? $a_threading[$_SESSION['mbox']] : $default_threading;
+
+    $RCMAIL->storage->set_threading($threading);
 }
 
 /**
diff --git a/program/steps/settings/edit_folder.inc b/program/steps/settings/edit_folder.inc
index 30a187f..87a45fa 100644
--- a/program/steps/settings/edit_folder.inc
+++ b/program/steps/settings/edit_folder.inc
@@ -163,8 +163,10 @@
             $value = (int) $_POST['_viewmode'];
         }
         else if (strlen($mbox_imap)) {
-            $a_threaded = $RCMAIL->config->get('message_threading', array());
-            $value = (int) isset($a_threaded[$mbox_imap]);
+            $a_threaded   = $RCMAIL->config->get('message_threading', array());
+            $default_mode = $RCMAIL->config->get('default_list_mode', 'list');
+
+            $value = (int) (isset($a_threaded[$mbox_imap]) ? $a_threaded[$mbox_imap] : $default_mode == 'threads');
         }
 
         $form['props']['fieldsets']['settings']['content']['viewmode'] = array(
diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc
index 1bcfb4c..8b74a59 100644
--- a/program/steps/settings/folders.inc
+++ b/program/steps/settings/folders.inc
@@ -406,16 +406,17 @@
         $a_threaded = (array) $RCMAIL->config->get('message_threading', array());
         $oldprefix  = '/^' . preg_quote($oldname . $delimiter, '/') . '/';
 
-        foreach (array_keys($a_threaded) as $key) {
+        foreach ($a_threaded as $key => $val) {
             if ($key == $oldname) {
                 unset($a_threaded[$key]);
-                $a_threaded[$newname] = true;
+                $a_threaded[$newname] = $val;
             }
             else if (preg_match($oldprefix, $key)) {
                 unset($a_threaded[$key]);
-                $a_threaded[preg_replace($oldprefix, $newname.$delimiter, $key)] = true;
+                $a_threaded[preg_replace($oldprefix, $newname.$delimiter, $key)] = $val;
             }
         }
+
         $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
 
         // #1488692: update session
diff --git a/program/steps/settings/save_folder.inc b/program/steps/settings/save_folder.inc
index d1449bb..a054224 100644
--- a/program/steps/settings/save_folder.inc
+++ b/program/steps/settings/save_folder.inc
@@ -115,15 +115,13 @@
         if (isset($_POST['_viewmode'])) {
             $a_threaded = (array) $RCMAIL->config->get('message_threading', array());
 
-            if ($_POST['_viewmode'])
-                $a_threaded[$folder['name']] = true;
-            else
-                unset($a_threaded[$folder['name']]);
+            $a_threaded[$folder['name']] = (bool) $_POST['_viewmode'];
 
             $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
         }
 
         rcmail_update_folder_row($folder['name'], null, $folder['subscribe'], $folder['class']);
+
         $OUTPUT->show_message('foldercreated', 'confirmation');
         // reset folder preview frame
         $OUTPUT->command('subscription_select');
@@ -167,14 +165,12 @@
                     }
                     else if (preg_match($oldprefix, $key)) {
                         unset($a_threaded[$key]);
-                        $a_threaded[preg_replace($oldprefix, $folder['name'].$delimiter, $key)] = true;
+                        $a_threaded[preg_replace($oldprefix, $folder['name'].$delimiter, $key)] = $val;
                     }
                 }
             }
-            if ($_POST['_viewmode'])
-                $a_threaded[$folder['name']] = true;
-            else
-                unset($a_threaded[$folder['name']]);
+
+            $a_threaded[$folder['name']] = (bool) $_POST['_viewmode'];
 
             $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
         }

--
Gitblit v1.9.1