/** * @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; }
/** * @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); } }