From 5fefe78f750030f35d3c47cf9f379c431037a0e9 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 22 Mar 2014 14:55:12 +0100 Subject: Make sure parent folder selector always contains parent folder of current folder, even if it does not exist --- program/include/rcmail.php | 25 ++++++++++++++++++++++--- program/steps/settings/edit_folder.inc | 1 + 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/program/include/rcmail.php b/program/include/rcmail.php index 9c7ed98aa..c026eed67 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -1360,12 +1360,31 @@ class rcmail extends rcube $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']) { diff --git a/program/steps/settings/edit_folder.inc b/program/steps/settings/edit_folder.inc index fc6b2cd16..6b7bd08d2 100644 --- a/program/steps/settings/edit_folder.inc +++ b/program/steps/settings/edit_folder.inc @@ -139,6 +139,7 @@ function rcmail_folder_form($attrib) 'unsubscribed' => true, 'skip_noinferiors' => true, 'exceptions' => $exceptions, + 'additional' => strlen($selected) ? array($selected) : null, )); $form['props']['fieldsets']['location']['content']['path'] = array( -- cgit v1.2.3