summaryrefslogtreecommitdiff
path: root/program
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2008-12-06 18:52:18 +0000
committeralecpl <alec@alec.pl>2008-12-06 18:52:18 +0000
commit0b5539e3dc4e9f1f651defc9633d284ed3a950b5 (patch)
tree6cdec13e001d9c05eae7884d2bd7b5bd576ca7d5 /program
parent9c705b72b8a2f9297d8fa7f3d967e320cfe5bb45 (diff)
- Fix sorting of folders with more than 2 levels (#1485569)
Diffstat (limited to 'program')
-rw-r--r--program/include/rcube_config.php9
-rw-r--r--program/include/rcube_imap.php31
2 files changed, 26 insertions, 14 deletions
diff --git a/program/include/rcube_config.php b/program/include/rcube_config.php
index 1b1594919..790340702 100644
--- a/program/include/rcube_config.php
+++ b/program/include/rcube_config.php
@@ -75,12 +75,13 @@ class rcube_config
$this->prop['log_dir'] = $this->prop['log_dir'] ? unslashify($this->prop['log_dir']) : INSTALL_PATH . 'logs';
$this->prop['temp_dir'] = $this->prop['temp_dir'] ? unslashify($this->prop['temp_dir']) : INSTALL_PATH . 'temp';
- // fix default imap folders encode
- foreach (Array('drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox') as $folder)
+ // fix default imap folders encoding
+ foreach (array('drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox') as $folder)
$this->prop[$folder] = rcube_charset_convert($this->prop[$folder], RCMAIL_CHARSET, 'UTF-7');
- foreach ($this->prop['default_imap_folders'] as $n => $folder)
- $this->prop['default_imap_folders'][$n] = rcube_charset_convert($folder, RCMAIL_CHARSET, 'UTF-7');
+ if (!empty($this->prop['default_imap_folders']))
+ foreach ($this->prop['default_imap_folders'] as $n => $folder)
+ $this->prop['default_imap_folders'][$n] = rcube_charset_convert($folder, RCMAIL_CHARSET, 'UTF-7');
// set PHP error logging according to config
if ($this->prop['debug_level'] & 1) {
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 8b703b9e6..c9cca72ee 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2711,32 +2711,43 @@ class rcube_imap
$folders[$folder] = rc_strtolower(rcube_charset_convert($folder, 'UTF-7'));
}
+ // sort folders and place defaults on the top
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...
// ...also do this for the rest of folders because
// asort() is not properly sorting case sensitive names
-
- // set the type of folder name variable (#1485527)
while (list($key, $folder) = each($folders)) {
+ // set the type of folder name variable (#1485527)
$a_out[] = (string) $folder;
unset($folders[$key]);
- foreach ($folders as $idx => $f) {
- if (strpos($f, $folder.$delimiter) === 0) {
- $a_out[] = (string) $f;
- unset($folders[$idx]);
- }
- }
- reset($folders);
+ $this->_rsort($folder, $delimiter, $folders, $a_out);
}
return $a_out;
}
+
+ /**
+ * @access private
+ */
+ function _rsort($folder, $delimiter, &$list, &$out)
+ {
+ while (list($key, $name) = each($list)) {
+ if (strpos($name, $folder.$delimiter) === 0) {
+ // set the type of folder name variable (#1485527)
+ $out[] = (string) $name;
+ unset($list[$key]);
+ $this->_rsort($name, $delimiter, $list, $out);
+ }
+ }
+ reset($list);
+ }
+
+
/**
* @access private
*/