From ec2185a1cb2a0d412ab9e916618972bc4c70f68c Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Tue, 05 Feb 2013 10:12:37 -0500
Subject: [PATCH] Add special config attribute 'group_filters' to specify a fixed list of groups to be listed in the leftmost pane, each having individual base-dn/filter parameters for contact listing

---
 program/include/rcmail.php |   39 +++++++++++++++++++++++++++++----------
 1 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 249bd05..a149db1 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -287,7 +287,7 @@
         $list[$id] = array(
           'id'       => $id,
           'name'     => html::quote($prop['name']),
-          'groups'   => is_array($prop['groups']),
+          'groups'   => !empty($prop['groups']) || !empty($prop['group_filters']),
           'readonly' => !$prop['writable'],
           'hidden'   => $prop['hidden'],
           'autocomplete' => in_array($id, $autocomplete)
@@ -1406,6 +1406,7 @@
             $js_mailboxlist = array();
             $out = html::tag('ul', $attrib, $rcmail->render_folder_tree_html($a_mailboxes, $mbox_name, $js_mailboxlist, $attrib), html::$common_attrib);
 
+            $rcmail->output->include_script('treelist.js');
             $rcmail->output->add_gui_object('mailboxlist', $attrib['id']);
             $rcmail->output->set_env('mailboxes', $js_mailboxlist);
             $rcmail->output->set_env('unreadwrap', $attrib['unreadwrap']);
@@ -1584,14 +1585,13 @@
                 'id' => "rcmli".$folder_id,
                 'class' => join(' ', $classes),
                 'noclose' => true),
-                html::a($link_attrib, $html_name) .
-                (!empty($folder['folders']) ? html::div(array(
-                    'class' => ($is_collapsed ? 'collapsed' : 'expanded'),
-                    'style' => "position:absolute",
-                    'onclick' => sprintf("%s.command('collapse-folder', '%s')", rcmail_output::JS_OBJECT_NAME, $js_name)
-                ), '&nbsp;') : ''));
+                html::a($link_attrib, $html_name));
 
-            $jslist[$folder_id] = array(
+            if (!empty($folder['folders'])) {
+                $out .= html::div('treetoggle ' . ($is_collapsed ? 'collapsed' : 'expanded'), '&nbsp;');
+            }
+
+            $jslist[$folder['id']] = array(
                 'id'      => $folder['id'],
                 'name'    => $foldername,
                 'virtual' => $folder['virtual']
@@ -1677,12 +1677,31 @@
      * Try to localize the given IMAP folder name.
      * UTF-7 decode it in case no localized text was found
      *
-     * @param string $name  Folder name
+     * @param string $name      Folder name
+     * @param bool   $with_path Enable path localization
      *
      * @return string Localized folder name in UTF-8 encoding
      */
-    public function localize_foldername($name)
+    public function localize_foldername($name, $with_path = true)
     {
+        // try to localize path of the folder
+        if ($with_path) {
+            $storage   = $this->get_storage();
+            $delimiter = $storage->get_hierarchy_delimiter();
+            $path      = explode($delimiter, $name);
+            $count     = count($path);
+
+            if ($count > 1) {
+                for ($i = 0; $i < $count; $i++) {
+                    $folder = implode($delimiter, array_slice($path, 0, -$i));
+                    if ($folder_class = $this->folder_classname($folder)) {
+                        $name = implode($delimiter, array_slice($path, $count - $i));
+                        return $this->gettext($folder_class) . $delimiter . rcube_charset::convert($name, 'UTF7-IMAP');
+                    }
+                }
+            }
+        }
+
         if ($folder_class = $this->folder_classname($name)) {
             return $this->gettext($folder_class);
         }

--
Gitblit v1.9.1