Fix handling multiple patterns in listMailboxes()
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 26 Jan 2010 19:13:16 +0000 (12:13 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 26 Jan 2010 20:42:49 +0000 (13:42 -0700)
framework/Imap_Client/lib/Horde/Imap/Client/Base.php
framework/Imap_Client/lib/Horde/Imap/Client/Socket.php

index 08791e8..7fab6ec 100644 (file)
@@ -870,7 +870,11 @@ abstract class Horde_Imap_Client_Base
     public function listMailboxes($pattern, $mode = Horde_Imap_Client::MBOX_ALL,
                                   $options = array())
     {
-        $ret = $this->_listMailboxes(Horde_Imap_Client_Utf7imap::Utf8ToUtf7Imap($pattern), $mode, $options);
+        $pattern = is_array($pattern)
+            ? array_map(array('Horde_Imap_Client_Utf7imap', 'Utf8ToUtf7Imap'), $pattern)
+            : Horde_Imap_Client_Utf7imap::Utf8ToUtf7Imap($pattern);
+
+        $ret = $this->_listMailboxes($pattern, $mode, $options);
 
         if (!empty($options['sort'])) {
             Horde_Imap_Client_Sort::sortMailboxes($ret, array('delimiter' => empty($options['sort_delimiter']) ? '.' : $options['sort_delimiter'], 'index' => false, 'keysort' => empty($options['flat'])));
index f0d14c8..fc6af55 100644 (file)
@@ -1024,7 +1024,7 @@ class Horde_Imap_Client_Socket extends Horde_Imap_Client_Base
             if (is_array($pattern)) {
                 $cmd .= '(';
                 foreach ($pattern as $val) {
-                    $cmd .= $this->utils->escape($pattern) . ' ';
+                    $cmd .= $this->utils->escape($val) . ' ';
                 }
                 $cmd = rtrim($cmd) . ')';
             } else {
@@ -1039,6 +1039,14 @@ class Horde_Imap_Client_Socket extends Horde_Imap_Client_Base
                 $cmd .= ' RETURN (' . implode(' ', $return_opts) . ')';
             }
         } else {
+            if (is_array($pattern)) {
+                $return_array = array();
+                foreach ($pattern as $val) {
+                    $return_array = array_merge($return_array, $this->_getMailboxList($val, $mode, $options, $subscribed));
+                }
+                return $return_array;
+            }
+
            $cmd = (($mode == Horde_Imap_Client::MBOX_SUBSCRIBED) ? 'LSUB' : 'LIST') . ' "" ' . $this->utils->escape($pattern);
         }