From: Michael M Slusarz Date: Thu, 18 Nov 2010 23:37:17 +0000 (-0700) Subject: Add IMP_Folder::getAllSubfolders(). X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=e5270a860aeffbe132660c48169cf2d137ebffdc;p=horde.git Add IMP_Folder::getAllSubfolders(). --- diff --git a/imp/lib/Folder.php b/imp/lib/Folder.php index 5d8c5de42..4270a93ee 100644 --- a/imp/lib/Folder.php +++ b/imp/lib/Folder.php @@ -211,11 +211,7 @@ class IMP_Folder $deleted = array($old); $inserted = array($new); - $imaptree = $GLOBALS['injector']->getInstance('IMP_Imap_Tree'); - $imaptree->setIteratorFilter(IMP_Imap_Tree::FLIST_NOCONTAINER | IMP_Imap_Tree::FLIST_UNSUB | IMP_Imap_Tree::FLIST_NOBASE, $old); - - /* Get list of any folders that are underneath this one. */ - $all_folders = array_merge(array($old), array_keys(iterator_to_array($imaptree))); + $all_folders = $this->getAllSubfolders($old); try { $GLOBALS['injector']->getInstance('IMP_Injector_Factory_Imap')->create()->renameMailbox($old, $new); @@ -426,4 +422,25 @@ class IMP_Folder return $msgcount ? $msgcount : false; } + /** + * Get list of all folders under a given mailbox. + * + * @param string $mbox The base mailbox. + * @param boolean $include_base Include the base mailbox in results? + * + * @return array All mailboxes under the base mailbox. + */ + public function getAllSubfolders($mbox, $include_base = true) + { + $imaptree = $GLOBALS['injector']->getInstance('IMP_Imap_Tree'); + $imaptree->setIteratorFilter(IMP_Imap_Tree::FLIST_NOCONTAINER | IMP_Imap_Tree::FLIST_UNSUB | IMP_Imap_Tree::FLIST_NOBASE, $mbox); + + $out = array_keys(iterator_to_array($imaptree)); + if ($include_base && $this->exists($mbox)) { + $out = array_merge(array($mbox), $out); + } + + return $out; + } + }