Exemplo n.º 1
0
 /**
  * @param Folder $folder
  * @return bool
  */
 function PurgeFolder(&$folder)
 {
     $result = false;
     if ($this->_account->MailProtocol == MAILPROTOCOL_IMAP4) {
         $result = true;
         if ($folder->SyncType != FOLDERSYNC_DirectMode) {
             if ($this->DbStorage->Connect()) {
                 $result &= $this->DbStorage->PurgeFolder($folder);
                 $result &= $this->DbStorage->UpdateMailboxSize();
             }
         }
         if ($folder->SyncType != FOLDERSYNC_DontSync) {
             if ($this->MailStorage->Connect()) {
                 $result &= $this->MailStorage->PurgeFolder($folder);
             }
         }
     }
     return $result;
 }
Exemplo n.º 2
0
 /**
  * @param Array $messageIdUidSet
  * @param Folder $fromFolder
  * @param Folder $toFolder
  * @return bool
  */
 function MoveMessages(&$messageIdUidSet, &$fromFolder, &$toFolder)
 {
     $GLOBALS[MailDefaultCharset] = $this->_account->DefaultIncCharset;
     $GLOBALS[MailOutputCharset] = $this->_account->DefaultOutCharset;
     $messageIdSet = array_keys($messageIdUidSet);
     $messageUidSet = array_values($messageIdUidSet);
     if (!$this->DbStorage->Connect() || !$this->MailStorage->Connect()) {
         return false;
     }
     $result = true;
     switch ($this->_account->MailProtocol) {
         case MAILPROTOCOL_POP3:
         case MAILPROTOCOL_WMSERVER:
             switch ($fromFolder->SyncType) {
                 case FOLDERSYNC_DontSync:
                     return $this->DbStorage->MoveMessages($messageIdSet, false, $fromFolder, $toFolder);
                     break;
                 default:
                     $result = $this->DbStorage->SaveMessages($this->GetMessages($messageIdUidSet, $fromFolder), $toFolder);
                     if ($result) {
                         if ($result && $fromFolder->SyncType != FOLDERSYNC_DirectMode) {
                             $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $fromFolder);
                         } else {
                             $result &= $this->MailStorage->DeleteMessages($messageUidSet, true, $fromFolder);
                         }
                     }
                     return $result;
                     break;
             }
             break;
         case MAILPROTOCOL_IMAP4:
             switch ($fromFolder->SyncType) {
                 case FOLDERSYNC_DontSync:
                     switch ($toFolder->SyncType) {
                         case FOLDERSYNC_DontSync:
                             return $this->DbStorage->MoveMessages($messageIdSet, false, $fromFolder, $toFolder);
                         case FOLDERSYNC_AllEntireMessages:
                         case FOLDERSYNC_AllHeadersOnly:
                         case FOLDERSYNC_NewEntireMessages:
                         case FOLDERSYNC_NewHeadersOnly:
                             $result = $this->MailStorage->SaveMessages($this->GetMessages($messageIdUidSet, $fromFolder), $toFolder);
                             if ($result) {
                                 $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $fromFolder);
                                 $result &= $this->MailStorage->SynchronizeFolder($toFolder);
                             }
                             return $result;
                         case FOLDERSYNC_DirectMode:
                             $result = $this->MailStorage->SaveMessages($this->DbStorage->LoadMessages($messageIdSet, false, $fromFolder), $toFolder);
                             if ($result) {
                                 $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $fromFolder);
                             }
                             return $result;
                     }
                     break;
                 case FOLDERSYNC_AllEntireMessages:
                 case FOLDERSYNC_AllHeadersOnly:
                 case FOLDERSYNC_NewEntireMessages:
                 case FOLDERSYNC_NewHeadersOnly:
                     switch ($toFolder->SyncType) {
                         case FOLDERSYNC_DontSync:
                             $result = $this->DbStorage->SaveMessages($this->GetMessages($messageIdUidSet, $fromFolder), $toFolder);
                             if ($result) {
                                 $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $fromFolder);
                                 $result &= $this->MailStorage->DeleteMessages($messageUidSet, true, $fromFolder);
                                 if ($this->MailStorage->PurgeUidFolder($fromFolder, $messageUidSet)) {
                                 } elseif (!$this->MailStorage->PurgeFolder($fromFolder)) {
                                     return false;
                                 }
                             }
                             return $result;
                         case FOLDERSYNC_AllEntireMessages:
                         case FOLDERSYNC_AllHeadersOnly:
                         case FOLDERSYNC_NewEntireMessages:
                         case FOLDERSYNC_NewHeadersOnly:
                             $result = $this->MailStorage->CopyMessages($messageUidSet, true, $fromFolder, $toFolder);
                             if ($result) {
                                 $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $fromFolder);
                                 $result &= $this->MailStorage->DeleteMessages($messageUidSet, true, $fromFolder);
                                 if ($this->MailStorage->PurgeUidFolder($fromFolder, $messageUidSet)) {
                                 } elseif (!$this->MailStorage->PurgeFolder($fromFolder)) {
                                     return false;
                                 }
                                 $GLOBALS[MailDefaultCharset] = $this->_account->GetDefaultIncCharset();
                                 $GLOBALS[MailOutputCharset] = $this->_account->DbCharset;
                                 $result &= $this->MailStorage->SynchronizeFolder($toFolder);
                             }
                             return $result;
                         case FOLDERSYNC_DirectMode:
                             $result = $this->MailStorage->CopyMessages($messageUidSet, true, $fromFolder, $toFolder);
                             if ($result) {
                                 $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $fromFolder);
                                 $result &= $this->MailStorage->DeleteMessages($messageUidSet, true, $fromFolder);
                                 if ($this->MailStorage->PurgeUidFolder($fromFolder, $messageUidSet)) {
                                 } elseif (!$this->MailStorage->PurgeFolder($fromFolder)) {
                                     return false;
                                 }
                             }
                             return $result;
                     }
                     break;
                 case FOLDERSYNC_DirectMode:
                     switch ($toFolder->SyncType) {
                         case FOLDERSYNC_DontSync:
                             $result = $this->DbStorage->SaveMessages($this->GetMessages($messageIdUidSet, $fromFolder), $toFolder);
                             if ($result) {
                                 $result &= $this->MailStorage->DeleteMessages($messageUidSet, true, $fromFolder);
                                 if ($this->MailStorage->PurgeUidFolder($fromFolder, $messageUidSet)) {
                                 } elseif (!$this->MailStorage->PurgeFolder($fromFolder)) {
                                     return false;
                                 }
                             }
                             return $result;
                         case FOLDERSYNC_AllEntireMessages:
                         case FOLDERSYNC_AllHeadersOnly:
                         case FOLDERSYNC_NewEntireMessages:
                         case FOLDERSYNC_NewHeadersOnly:
                             $result = $this->MailStorage->CopyMessages($messageUidSet, true, $fromFolder, $toFolder);
                             if ($result) {
                                 $result &= $this->MailStorage->DeleteMessages($messageUidSet, true, $fromFolder);
                                 if ($this->MailStorage->PurgeUidFolder($fromFolder, $messageUidSet)) {
                                 } elseif (!$this->MailStorage->PurgeFolder($fromFolder)) {
                                     return false;
                                 }
                                 $GLOBALS[MailDefaultCharset] = $this->_account->GetDefaultIncCharset();
                                 $GLOBALS[MailOutputCharset] = $this->_account->DbCharset;
                                 $result &= $this->MailStorage->SynchronizeFolder($toFolder);
                             }
                             return $result;
                         case FOLDERSYNC_DirectMode:
                             $result = $this->MailStorage->CopyMessages($messageUidSet, true, $fromFolder, $toFolder);
                             if ($result) {
                                 $result &= $this->MailStorage->DeleteMessages($messageUidSet, true, $fromFolder);
                                 if ($this->MailStorage->PurgeUidFolder($fromFolder, $messageUidSet)) {
                                 } elseif (!$this->MailStorage->PurgeFolder($fromFolder)) {
                                     return false;
                                 }
                             }
                             return $result;
                     }
                     break;
             }
             if ($fromFolder->SyncType != FOLDERSYNC_DirectMode) {
                 if ($this->DbStorage->Connect()) {
                     $result &= $this->DbStorage->DeleteMessages($messageIndexSet, $indexAsUid, $fromFolder, $toFolder);
                 }
             }
             if ($fromFolder->SyncType != FOLDERSYNC_DontSync && $toFolder->SyncType != FOLDERSYNC_DontSync) {
                 if ($this->MailStorage->Connect()) {
                     $result &= $this->MailStorage->MoveMessages($messageIndexSet, $indexAsUid, $fromFolder, $toFolder);
                     $folders =& $this->GetFolders();
                     $result &= $this->Synchronize($folders);
                 }
             }
             break;
     }
     return $result;
 }