alecpl
2008-12-06 0b5539e3dc4e9f1f651defc9633d284ed3a950b5
- Fix sorting of folders with more than 2 levels (#1485569)


3 files modified
44 ■■■■■ changed files
CHANGELOG 4 ●●●● patch | view | raw | blame | history
program/include/rcube_config.php 9 ●●●●● patch | view | raw | blame | history
program/include/rcube_imap.php 31 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,10 @@
CHANGELOG RoundCube Webmail
---------------------------
2008/12/06 (alec)
----------
- Fix sorting of folders with more than 2 levels (#1485569)
2008/12/04 (alec)
----------
- Added 'show_images' option, removed 'addrbook_show_images' (#1485597)
program/include/rcube_config.php
@@ -75,12 +75,13 @@
    $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) {
program/include/rcube_imap.php
@@ -2711,32 +2711,43 @@
        $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
   */