Exemplo n.º 1
0
 /**
  * @param	Account	$account
  * @param	int		$sync[optional] = null
  * @return	bool
  */
 function UpdateAccount($account, $sync = null)
 {
     $result = true;
     if ($this->DbStorage->Connect()) {
         if ($account->DefaultAccount) {
             $defaultAccountArray = $this->DbStorage->SelectAccountDataByLogin($account->Email, $account->MailIncLogin, true, $account->Id);
             if (is_array($defaultAccountArray) && count($defaultAccountArray) > 0) {
                 $this->SetError(ap_Utils::TakePhrase('WM_CANT_ADD_DEF_ACCT'));
                 $result = false;
             }
         }
         if ($result && $account->MailProtocol == WM_MAILPROTOCOL_POP3 && $sync != null) {
             $folders =& $this->DbStorage->GetFolders($account);
             if ($folders) {
                 $inboxFolder =& $folders->GetFolderByType(WM_FOLDERTYPE_Inbox);
                 if ($inboxFolder) {
                     $inboxFolder->SyncType = $sync;
                     $result &= $this->DbStorage->UpdateFolder($inboxFolder);
                 }
             }
         }
         if ($result && $account->MailProtocol == WM_MAILPROTOCOL_IMAP4 && $this->_account->_settings->TakeImapQuota) {
             if ($this->_account->ImapQuota === 1) {
                 $mbl = $this->GetQuota();
                 if (false !== $mbl && $mbl >= 0) {
                     $account->MailboxLimit = GetGoodBigInt($mbl);
                 }
             } else {
                 if ($this->_account->ImapQuota === -1 && $this->IsQuotaSupport()) {
                     $this->_account->ImapQuota = 0;
                 }
             }
             $result = $this->DbStorage->UpdateAccountImapQuota($account);
         }
         if ($result) {
             $result = $this->DbStorage->UpdateAccountData($account);
         }
         if ($result && $account->IsInternal) {
             $result &= $this->DbStorage->SaveMailAliases($account);
             $result &= $this->DbStorage->SaveMailForwards($account);
         }
     }
     return $result;
 }
Exemplo n.º 2
0
 /**
  * @param Array $messageIdUidSet
  * @param Folder $folder optional
  * @return bool
  */
 function DeleteMessages(&$messageIdUidSet, &$folder, $noMove = false)
 {
     ConvertUtils::SetLimits();
     $messageIdSet = array_keys($messageIdUidSet);
     $messageUidSet = array_values($messageIdUidSet);
     $settings =& Settings::CreateInstance();
     $result = true;
     switch ($this->_account->MailProtocol) {
         default:
             return false;
         case MAILPROTOCOL_POP3:
             if ($folder->Type == FOLDERTYPE_Trash || $noMove) {
                 if ($folder->SyncType != FOLDERSYNC_DirectMode) {
                     if ($this->DbStorage->Connect()) {
                         $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $folder);
                         $result &= $this->DbStorage->UpdateMailboxSize();
                     }
                 }
                 if ($this->_account->MailMode == MAILMODE_DeleteMessageWhenItsRemovedFromTrash || $this->_account->MailMode == MAILMODE_KeepMessagesOnServerAndDeleteMessageWhenItsRemovedFromTrash) {
                     $result &= $this->MailStorage->Connect() && $this->MailStorage->DeleteMessages($messageUidSet, true, $folder);
                 }
                 return $result;
             } else {
                 if ($folder->SyncType == FOLDERSYNC_DirectMode) {
                     return $result && $this->MailStorage->Connect() && $this->MailStorage->DeleteMessages($messageUidSet, true, $folder);
                 }
             }
             $folderList =& $this->GetFolders();
             $trashFolder =& $folderList->GetFolderByType(FOLDERTYPE_Trash);
             return $noMove ? true : $this->MoveMessages($messageIdUidSet, $folder, $trashFolder);
         case MAILPROTOCOL_WMSERVER:
             if ($folder->Type == FOLDERTYPE_Trash || $folder->Type == FOLDERTYPE_Spam || $noMove) {
                 if ($folder->SyncType != FOLDERSYNC_DirectMode) {
                     if ($this->DbStorage->Connect()) {
                         $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $folder);
                         $result &= $this->DbStorage->UpdateMailboxSize();
                     }
                 }
                 return $result && $this->MailStorage->Connect() && $this->MailStorage->DeleteMessages($messageUidSet, true, $folder);
             } else {
                 if ($folder->SyncType == FOLDERSYNC_DirectMode) {
                     return $result && $this->MailStorage->Connect() && $this->MailStorage->DeleteMessages($messageUidSet, true, $folder);
                 }
             }
             $folderList =& $this->GetFolders();
             $trashFolder =& $folderList->GetFolderByType(FOLDERTYPE_Trash);
             if (!$trashFolder) {
                 $trashFolder = new Folder($this->_account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_AllHeadersOnly);
                 if (!$this->CreateFolder($trashFolder)) {
                     return false;
                 }
             }
             return $noMove ? true : $this->MoveMessages($messageIdUidSet, $folder, $trashFolder);
         case MAILPROTOCOL_IMAP4:
             //if ($settings->Imap4DeleteLikePop3 && $folder->SyncType != FOLDERSYNC_DirectMode)
             if ($settings->Imap4DeleteLikePop3) {
                 $trashFolder = null;
                 $folderList =& $this->GetFolders();
                 if ($folderList) {
                     $trashFolderType =& $folderList->GetFolderByType(FOLDERTYPE_Trash);
                     if (!$trashFolderType) {
                         $trashFolderName =& $folderList->GetFolderByName(FOLDERNAME_Trash);
                         if ($trashFolderName) {
                             $trashFolderName->Type = FOLDERTYPE_Trash;
                             $trashFolder = $trashFolderName;
                             if (USE_DB && $this->DbStorage->Connect()) {
                                 $result &= $this->DbStorage->UpdateFolder($trashFolderName);
                             }
                         } else {
                             $inboxFolderType =& $folderList->GetFolderByType(FOLDERTYPE_Inbox);
                             if ($inboxFolderType && $inboxFolderType->SubFolders && $inboxFolderType->SubFolders->Count() > 0) {
                                 $trashFolderName2 =& $inboxFolderType->SubFolders->GetFolderByName(FOLDERNAME_Trash);
                                 if ($trashFolderName2) {
                                     $trashFolderName2->Type = FOLDERTYPE_Trash;
                                     $trashFolder = $trashFolderName2;
                                     if (USE_DB && $this->DbStorage->Connect()) {
                                         $result &= $this->DbStorage->UpdateFolder($trashFolderName2);
                                     }
                                 }
                             }
                             if (!$trashFolder) {
                                 $trashFolder = new Folder($this->_account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_DontSync);
                                 /*
                                 $trashFolder = new Folder($this->_account->Id, -1,
                                 	FOLDERNAME_Trash, FOLDERNAME_Trash, $this->_account->GetDefaultFolderSync($settings));
                                 */
                                 if (!$this->CreateFolder($trashFolder)) {
                                     $trashFolder = null;
                                 }
                             }
                         }
                     } else {
                         $trashFolder = $trashFolderType;
                     }
                     if ($trashFolder) {
                         if ($folder->Type == FOLDERTYPE_Trash || $noMove) {
                             $result = true;
                             $result &= $this->SetFlags($messageIdUidSet, $folder, MESSAGEFLAGS_Deleted, ACTION_Set);
                             $result &= $this->PurgeFolder($folder);
                             return $result;
                         }
                         return $noMove ? true : $this->MoveMessages($messageIdUidSet, $folder, $trashFolder);
                     }
                     return false;
                 }
             }
             return $this->SetFlags($messageIdUidSet, $folder, MESSAGEFLAGS_Deleted, ACTION_Set) && $this->PurgeFolder($folder);
     }
 }