Ejemplo n.º 1
0
 /**
  * Searches for the emails on the server
  *
  * @param ContentParameter $cpo
  * @param string $prefix If used with the combined backend here will come the backend id and delimiter
  *
  * @return array
  */
 public function GetMailboxSearchResults($cpo, $prefix = '')
 {
     ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->GetMailboxSearchResults()"));
     $items = false;
     $searchFolderId = $cpo->GetSearchFolderid();
     $searchRange = explode('-', $cpo->GetSearchRange());
     $filter = $this->getSearchRestriction($cpo);
     // Open the folder to search
     $search = true;
     if (empty($searchFolderId)) {
         $searchFolderId = $this->getFolderIdFromImapId('INBOX');
     }
     // Convert searchFolderId to IMAP id
     $imapId = $this->getImapIdFromFolderId($searchFolderId);
     $listMessages = array();
     $numMessages = 0;
     ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->GetMailboxSearchResults: Filter <%s>", $filter));
     if ($cpo->GetSearchDeepTraversal()) {
         // Recursive search
         ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->GetMailboxSearchResults: Recursive search %s", $imapId));
         $listFolders = @imap_list($this->mbox, $this->server, "*");
         if ($listFolders === false) {
             ZLog::Write(LOGLEVEL_WARN, sprintf("BackendIMAP->GetMailboxSearchResults: Error recursive list %s", imap_last_error()));
         } else {
             foreach ($listFolders as $subFolder) {
                 if (@imap_reopen($this->mbox, $subFolder)) {
                     $imapSubFolder = str_replace($this->server, "", $subFolder);
                     $subFolderId = $this->getFolderIdFromImapId($imapSubFolder);
                     if ($subFolderId !== false) {
                         // only search found folders
                         $subList = @imap_search($this->mbox, $filter, SE_UID, "UTF-8");
                         if ($subList !== false) {
                             $numMessages += count($subList);
                             ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->GetMailboxSearchResults: SubSearch in %s : %s ocurrences", $imapSubFolder, count($subList)));
                             $listMessages[] = array($subFolderId => $subList);
                         }
                     }
                 }
             }
         }
     } else {
         // Search in folder
         if (@imap_reopen($this->mbox, $this->server . $imapId)) {
             $subList = @imap_search($this->mbox, $filter, SE_UID, "UTF-8");
             if ($subList !== false) {
                 $numMessages += count($subList);
                 ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->GetMailboxSearchResults: Search in %s : %s ocurrences", $imapId, count($subList)));
                 $listMessages[] = array($searchFolderId => $subList);
             }
         }
     }
     if ($numMessages > 0) {
         // range for the search results
         $rangestart = 0;
         $rangeend = SEARCH_MAXRESULTS - 1;
         if (is_array($searchRange) && isset($searchRange[0]) && isset($searchRange[1])) {
             $rangestart = $searchRange[0];
             $rangeend = $searchRange[1];
         }
         $querycnt = $numMessages;
         $items = array();
         $querylimit = $rangeend + 1 < $querycnt ? $rangeend + 1 : $querycnt + 1;
         $items['range'] = $rangestart . '-' . ($querylimit - 1);
         $items['searchtotal'] = $querycnt;
         ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->GetMailboxSearchResults: %s entries found, returning %s", $items['searchtotal'], $items['range']));
         $p = 0;
         $pc = 0;
         for ($i = $rangestart, $j = 0; $i <= $rangeend && $i < $querycnt; $i++, $j++) {
             $keys = array_keys($listMessages[$p]);
             $cntFolder = count($listMessages[$p][$keys[0]]);
             if ($pc >= $cntFolder) {
                 $p++;
                 $pc = 0;
                 $keys = array_keys($listMessages[$p]);
             }
             ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->GetMailboxSearchResults: %s %s %s %s", $p, $pc, $keys[0], $listMessages[$p][$keys[0]][$pc]));
             $foundFolderId = $keys[0];
             $items[$j]['class'] = 'Email';
             $items[$j]['longid'] = $prefix . $foundFolderId . ":" . $listMessages[$p][$foundFolderId][$pc];
             $items[$j]['folderid'] = $prefix . $foundFolderId;
             $pc++;
         }
     } else {
         ZLog::Write(LOGLEVEL_DEBUG, sprintf("BackendIMAP->GetMailboxSearchResults: No messages found!"));
     }
     return $items;
 }
Ejemplo n.º 2
0
 /**
  * Searches for the emails on the server
  *
  * @param ContentParameter $cpo
  *
  * @return array
  */
 public function GetMailboxSearchResults($cpo)
 {
     ZLog::Write(LOGLEVEL_DEBUG, "Combined->GetMailboxSearchResults()");
     $i = $this->getSearchBackend(ISearchProvider::SEARCH_MAILBOX);
     $result = false;
     if ($i !== false) {
         //Convert $cpo GetSearchFolderid
         $cpo->SetSearchFolderid($this->GetBackendFolder($cpo->GetSearchFolderid()));
         $result = $this->backends[$i]->GetMailboxSearchResults($cpo, $i . $this->config['delimiter']);
     }
     return $result;
 }