From 6f4e7dbcb15ee6f51101186da2febff8d7d7234b Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sat, 22 May 2010 14:47:27 -0400
Subject: [PATCH] - Added list_mailboxes hook in rcube_imap::list_unsubscribed() (#1486668)

---
 program/include/rcube_imap.php |   31 ++++++++++++++++++++-----------
 1 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index cc1f9c5..cdf346a 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2512,7 +2512,7 @@
      * --------------------------------*/
 
     /**
-     * Public method for mailbox listing.
+     * Public method for listing subscribed folders
      *
      * Converts mailbox name with root dir first
      *
@@ -2552,16 +2552,16 @@
      */
     private function _list_mailboxes($root='', $filter='*')
     {
-        $a_defaults = $a_out = array();
-
         // get cached folder list
         $a_mboxes = $this->get_cache('mailboxes');
         if (is_array($a_mboxes))
             return $a_mboxes;
 
+        $a_defaults = $a_out = array();
+
         // Give plugins a chance to provide a list of mailboxes
         $data = rcmail::get_instance()->plugins->exec_hook('list_mailboxes',
-            array('root'=>$root,'filter'=>$filter));
+            array('root' => $root, 'filter' => $filter, 'mode' => 'LSUB'));
 
         if (isset($data['folders'])) {
             $a_folders = $data['folders'];
@@ -2585,17 +2585,26 @@
      * Get a list of all folders available on the IMAP server
      *
      * @param string IMAP root dir
+     * @param string Optional filter for mailbox listing
      * @return array Indexed array with folder names
      */
-    function list_unsubscribed($root='')
+    function list_unsubscribed($root='', $filter='*')
     {
-        static $a_folders;
+        // Give plugins a chance to provide a list of mailboxes
+        $data = rcmail::get_instance()->plugins->exec_hook('list_mailboxes',
+            array('root' => $root, 'filter' => $filter, 'mode' => 'LIST'));
 
-        if (is_array($a_folders))
-            return $a_folders;
-
-        // retrieve list of folders from IMAP server
-        $a_mboxes = $this->conn->listMailboxes($this->mod_mailbox($root), '*');
+        if (isset($data['folders'])) {
+            $a_mboxes = $data['folders'];
+        }
+        else {
+            // retrieve list of folders from IMAP server
+            $a_mboxes = $this->conn->listMailboxes($this->mod_mailbox($root), $filter);
+        }
+        
+        $a_folders = array();
+        if (!is_array($a_mboxes))
+            $a_mboxes = array();
 
         // modify names with root dir
         foreach ($a_mboxes as $idx => $mbox_name) {

--
Gitblit v1.9.1