From 64f20dae0cdd3a53114053e3520eb30b71bfa42c Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 31 Jul 2008 17:30:25 -0400
Subject: [PATCH] Show real names in folder drop-down + rebuild default_imap_folders property when saving prefs

---
 program/include/main.inc              |   22 ++++++++++++----------
 program/steps/settings/func.inc       |    4 ++--
 program/steps/settings/save_prefs.inc |   12 ++++++++++++
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index 8f0b3cb..bfba9dd 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -879,6 +879,8 @@
 {
   global $IMAP, $OUTPUT;
   static $a_mailboxes;
+  
+  $attrib += array('maxlength' => 100, 'relanames' => false);
 
   // add some labels to client
   rcube_add_label('purgefolderconfirm');
@@ -911,11 +913,11 @@
     if ($attrib['noselection'])
       $select->add(rcube_label($attrib['noselection']), '0');
     
-    rcmail_render_folder_tree_select($a_mailboxes, $mbox_name, $attrib['maxlength'], $select);
+    rcmail_render_folder_tree_select($a_mailboxes, $mbox_name, $attrib['maxlength'], $select, $attrib['realnames']);
     $out = $select->show();
   }
   else {
-    $out = html::tag('ul', $attrib, rcmail_render_folder_tree_html($a_mailboxes, $mbox_name, $attrib['maxlength']), html::$common_attrib);
+    $out = html::tag('ul', $attrib, rcmail_render_folder_tree_html($a_mailboxes, $mbox_name, $attrib['maxlength'], $attrib['realnames']), html::$common_attrib);
   }
 
   if ($type=='ul')
@@ -935,7 +937,7 @@
 {
   global $RCMAIL;
   
-  $p += array('maxlength' => 100);
+  $p += array('maxlength' => 100, 'relanames' => false);
   $a_mailboxes = array();
   
   foreach ($RCMAIL->imap->list_mailboxes() as $folder)
@@ -946,7 +948,7 @@
   if ($p['noselection'])
     $select->add($p['noselection'], '');
     
-  rcmail_render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $select);
+  rcmail_render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $select, $p['realnames']);
   
   return $select;
 }
@@ -989,7 +991,7 @@
  * Return html for a structured list &lt;ul&gt; for the mailbox tree
  * @access private
  */
-function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, $maxlength, $nestLevel=0)
+function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, $maxlength, $realnames=false, $nestLevel=0)
   {
   global $COMM_PATH, $IMAP, $CONFIG, $OUTPUT;
 
@@ -1000,7 +1002,7 @@
     $zebra_class = (($nestLevel+1)*$idx) % 2 == 0 ? 'even' : 'odd';
     $title = null;
 
-    if ($folder_class = rcmail_folder_classname($folder['id']))
+    if (($folder_class = rcmail_folder_classname($folder['id'])) && !$realnames)
       $foldername = rcube_label($folder_class);
     else
       {
@@ -1052,7 +1054,7 @@
       ), Q($foldername)));
     
     if (!empty($folder['folders']))
-      $out .= "\n<ul>\n" . rcmail_render_folder_tree_html($folder['folders'], $mbox_name, $maxlength, $nestLevel+1) . "</ul>\n";
+      $out .= "\n<ul>\n" . rcmail_render_folder_tree_html($folder['folders'], $mbox_name, $maxlength, $realnames, $nestLevel+1) . "</ul>\n";
 
     $out .= "</li>\n";
     $idx++;
@@ -1066,7 +1068,7 @@
  * Return html for a flat list <select> for the mailbox tree
  * @access private
  */
-function rcmail_render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, &$select, $nestLevel=0)
+function rcmail_render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, &$select, $realnames=false, $nestLevel=0)
   {
   global $IMAP, $OUTPUT;
 
@@ -1074,7 +1076,7 @@
   $out = '';
   foreach ($arrFolders as $key=>$folder)
     {
-    if ($folder_class = rcmail_folder_classname($folder['id']))
+    if (!$realnames && ($folder_class = rcmail_folder_classname($folder['id'])))
       $foldername = rcube_label($folder_class);
     else
       {
@@ -1088,7 +1090,7 @@
     $select->add(str_repeat('&nbsp;', $nestLevel*4) . $foldername, $folder['id']);
 
     if (!empty($folder['folders']))
-      $out .= rcmail_render_folder_tree_select($folder['folders'], $mbox_name, $maxlength, $select, $nestLevel+1);
+      $out .= rcmail_render_folder_tree_select($folder['folders'], $mbox_name, $maxlength, $select, $realnames, $nestLevel+1);
 
     $idx++;
     }
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index 1b44818..5b6e113 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -227,9 +227,9 @@
   $out .= html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('messagescomposition'))) . $table->show($attrib));
 
   // Configure special folders
-  if (!isset($no_override['folders'])) {
+  if (!isset($no_override['default_imap_folders'])) {
     $RCMAIL->imap_init(true);
-    $select = rcmail_mailbox_select(array('noselection' => '---'));
+    $select = rcmail_mailbox_select(array('noselection' => '---', 'realnames' => true));
     
     $table = new html_table(array('cols' => 2));
 
diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc
index ccd6e5f..3bccffa 100644
--- a/program/steps/settings/save_prefs.inc
+++ b/program/steps/settings/save_prefs.inc
@@ -46,6 +46,18 @@
 foreach ((array)$CONFIG['dont_override'] as $p)
   $a_user_prefs[$p] = $CONFIG[$p];
 
+// special handling for 'default_imap_folders'
+if (in_array('default_imap_folders', (array)$CONFIG['dont_override'])) {
+  foreach (array('drafts_mbox','sent_mbox','junk_mbox','trash_mbox') as $p)
+    $a_user_prefs[$p] = $CONFIG[$p];
+}
+else {
+  $a_user_prefs['default_imap_folders'] = array('INBOX');
+  foreach (array('drafts_mbox','sent_mbox','junk_mbox','trash_mbox') as $p) {
+    if ($a_user_prefs[$p])
+      $a_user_prefs['default_imap_folders'][] = $a_user_prefs[$p];
+  }
+}
 
 // switch UI language
 if (isset($_POST['_language'])) {

--
Gitblit v1.9.1