From 681a59fa52b2996d8e8fa8c2d36eee1d1e70d938 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 30 May 2008 06:35:19 -0400
Subject: [PATCH] - Support for subfolders in default/protected folders (#1484665)

---
 program/include/rcube_imap.php |   34 ++++++++++++++++++++++++++--------
 1 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 12cce6e..ee2eafe 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2489,10 +2489,12 @@
    */
   function _sort_mailbox_list($a_folders)
     {
-    $a_out = $a_defaults = array();
+    $a_out = $a_defaults = $folders = $subfolders = array();
+
+    $delimiter = $this->get_hierarchy_delimiter();
 
     // find default folders and skip folders starting with '.'
-    foreach($a_folders as $i => $folder)
+    foreach ($a_folders as $i => $folder)
       {
       if ($folder{0}=='.')
         continue;
@@ -2500,15 +2502,31 @@
       if (($p = array_search(strtolower($folder), $this->default_folders_lc)) !== false && !$a_defaults[$p])
         $a_defaults[$p] = $folder;
       else
-	{
-	$l_folders[$folder] = mb_strtolower(rcube_charset_convert($folder, 'UTF-7'));
+	$folders[$folder] = mb_strtolower(rcube_charset_convert($folder, 'UTF-7'));
+      }
+
+    asort($folders, SORT_LOCALE_STRING);
+    ksort($a_defaults);
+
+    $folders = array_merge($a_defaults, array_keys($folders));
+
+    // finally we must rebuild the list to move 
+    // subfolders of default folders to their place
+    while (list($key, $folder) = each($folders)) {
+      $a_out[] = $folder;
+      unset($folders[$key]);
+      if (in_array(strtolower($folder), $this->default_folders_lc)) {
+	foreach ($folders as $idx => $f) {
+	  if (strpos($f, $folder.$delimiter) === 0) {
+    	    $a_out[] = $f;
+	    unset($folders[$idx]);
+	    }
+	  }
+	reset($folders);  
 	}
       }
 
-    asort($l_folders, SORT_LOCALE_STRING);
-    ksort($a_defaults);
-
-    return array_merge($a_defaults, array_keys($l_folders));
+    return $a_out;
     }
 
   /**

--
Gitblit v1.9.1