Esempio n. 1
0
 /**
  * @param Folder $folders
  * @param DbStorage $dbStorage
  * @return bool
  */
 function _synchronizeFolderWithOpenDbConnection(&$folder, &$dbStorage)
 {
     $result = true;
     if ($folder->SyncType == FOLDERSYNC_DontSync || $folder->SyncType == FOLDERSYNC_DirectMode) {
         return true;
     }
     //get uids from pop3 server
     $pop3Uids =& $this->_getPop3Uids(true);
     //get uids from DB
     $dbUids =& $dbStorage->SelectReadsRecords();
     $dbUids = array_keys($dbUids);
     //get only new messages from pop3 server
     $newUids = array_diff($pop3Uids, $dbUids);
     //get deletd uids from pop3 server
     $uidsToDelete = array_diff($dbUids, $pop3Uids);
     //get Array sizes all messages on pop3 server
     $pop3Sizes =& $this->_getPop3Sizes(true);
     //get size all messages in DB
     $mailBoxesSize = $dbStorage->SelectMailboxesSize();
     if ($this->DownloadedMessagesHandler != null) {
         ShowDownloadedMessageNumber($folder->Name, count($newUids));
         call_user_func($this->DownloadedMessagesHandler);
     }
     foreach ($newUids as $newUid) {
         //get id message from uid pop3 server
         $index = $this->_getMessageIndexFromUid($pop3Uids, $newUid);
         $indexArray = array($index);
         $mailBoxesSize += $pop3Sizes[$index];
         if (!$this->_settings->EnableMailboxSizeLimit || $this->Account->MailboxLimit > $mailBoxesSize) {
             //Check sync mode
             if ($folder->SyncType == FOLDERSYNC_NewEntireMessages || $folder->SyncType == FOLDERSYNC_AllEntireMessages) {
                 //Entire Message
                 $mailMessageCollection =& $this->LoadMessages($indexArray, false, $folder);
             } elseif ($folder->SyncType == FOLDERSYNC_NewHeadersOnly || $folder->SyncType == FOLDERSYNC_AllHeadersOnly) {
                 //Entire Header
                 $mailMessageCollection =& $this->_loadMessageHeaders($indexArray, false, $folder);
             }
             //Apply filters and save message in DB
             if (!$this->ApplyFilters($mailMessageCollection, $dbStorage, $folder)) {
                 return false;
                 //$result = false;
                 //break;
             }
             //Check mailmode to delete from server
             if ($this->Account->MailMode == MAILMODE_DeleteMessagesFromServer) {
                 //Delete received messages from server
                 $this->_pop3Mail->delete_mail($index);
             }
             //Save uid to reads table
             $dbStorage->InsertReadsRecords(array($newUid));
         } else {
             $result = false;
             setGlobalError(ErrorGetMailLimit);
             break;
         }
     }
     //delete from DB
     if (count($uidsToDelete) > 0) {
         if ($folder->SyncType == FOLDERSYNC_AllHeadersOnly || $folder->SyncType == FOLDERSYNC_AllEntireMessages) {
             $result &= $dbStorage->DeleteMessages($uidsToDelete, true, $folder);
         }
     }
     if (($this->Account->MailMode == MAILMODE_KeepMessagesOnServer || $this->Account->MailMode == MAILMODE_KeepMessagesOnServerAndDeleteMessageWhenItsRemovedFromTrash) && $this->Account->MailsOnServerDays > 0) {
         $expiredUids =& $dbStorage->SelectExpiredMessageUids();
         $result &= $this->DeleteMessages($expiredUids, true, $folder);
     }
     if (!empty($uidsToDelete)) {
         $result &= $dbStorage->DeleteReadsRecordsByUids($uidsToDelete);
     }
     $result &= $dbStorage->UpdateMailboxSize();
     return $result;
 }