diff options
author | alecpl <alec@alec.pl> | 2008-12-06 18:52:18 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2008-12-06 18:52:18 +0000 |
commit | 0b5539e3dc4e9f1f651defc9633d284ed3a950b5 (patch) | |
tree | 6cdec13e001d9c05eae7884d2bd7b5bd576ca7d5 /program | |
parent | 9c705b72b8a2f9297d8fa7f3d967e320cfe5bb45 (diff) |
- Fix sorting of folders with more than 2 levels (#1485569)
Diffstat (limited to 'program')
-rw-r--r-- | program/include/rcube_config.php | 9 | ||||
-rw-r--r-- | program/include/rcube_imap.php | 31 |
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 */ |