/** * Find's messages in a given mailbox * * @param Account $account * @param string $mailbox * @param int $start * @param int $limit * @param sring $sortField See constants in \GO\Base\Mail\Imap::SORT_* * @param boolean $descending Sort descending * @param string $query * @param string $searchIn In what folder(s) are we searching ('current', 'all', 'recursive') * @return array */ public function find(Account $account, $mailbox = "INBOX", $start = 0, $limit = 50, $sortField = \GO\Base\Mail\Imap::SORT_DATE, $descending = true, $query = 'ALL', $searchIn = 'current') { $results = array(); if ($searchIn == "all") { foreach ($account->getRootMailboxes(false, true) as $mailbox) { //only search visable mailboxes not subscriptions if (!$mailbox->isVisible() || $mailbox->noselect) { continue; } $results = array_merge($results, $this->find($account, $mailbox->name, $start, $limit, $sortField, $descending, $query, 'recursive')); } return $results; } /** @var $imap \GO\Base\Mail\Imap */ $imap = $account->openImapConnection($mailbox); $headersSet = $imap->get_message_headers_set($start, $limit, $sortField, $descending, $query); foreach ($headersSet as $uid => $headers) { $message = ImapMessage::model()->createFromHeaders($account, $mailbox, $headers); $results[] = $message; } \GO::debug($mailbox); //find recursive in subfolders if ($searchIn === 'recursive') { $mailboxObj = new ImapMailbox($account, array('name' => $mailbox)); $children = $mailboxObj->getChildren(true, false); foreach ($children as $child) { //only search visible mailboxes not subscriptions if (!$child->isVisible() || $child->noselect) { continue; } $results = array_merge($results, $this->find($account, $child->name, $start, $limit, $sortField, $descending, $query, 'recursive')); } } return $results; }