From 5fefe78f750030f35d3c47cf9f379c431037a0e9 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sun, 23 Mar 2014 06:19:22 -0400
Subject: [PATCH] Make sure parent folder selector always contains parent folder of current folder, even if it does not exist

---
 program/include/rcmail.php |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 9c7ed98..c026eed 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -1360,12 +1360,31 @@
 
         $delimiter = $storage->get_hierarchy_delimiter();
 
-        foreach ($list as $folder) {
-            if (empty($p['exceptions']) || !in_array($folder, $p['exceptions'])) {
-                $this->build_folder_tree($a_mailboxes, $folder, $delimiter);
+        if (!empty($p['exceptions'])) {
+            $list = array_diff($list, (array) $p['exceptions']);
+        }
+
+        if (!empty($p['additional'])) {
+            foreach ($p['additional'] as $add_folder) {
+                $add_items = explode($delimiter, $add_folder);
+                $folder    = '';
+                while (count($add_items)) {
+                    $folder .= array_shift($add_items);
+
+                    // @TODO: sorting
+                    if (!in_array($folder, $list)) {
+                        $list[] = $folder;
+                    }
+
+                    $folder .= $delimiter;
+                }
             }
         }
 
+        foreach ($list as $folder) {
+            $this->build_folder_tree($a_mailboxes, $folder, $delimiter);
+        }
+
         $select = new html_select($p);
 
         if ($p['noselection']) {

--
Gitblit v1.9.1