芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/www/cloud.pulsehost.co.uk/modules/MailNotesPlugin/Module.php
subscribeEvent('Mail::GetFolders::before', array($this, 'onBeforeGetFolders')); $this->subscribeEvent('Mail::GetMessages::before', array($this, 'onBeforeGetMessages')); $this->subscribeEvent('Mail::GetMessages::after', array($this, 'onAfterGetMessages')); } /** * @return Module */ public static function getInstance() { return parent::getInstance(); } /** * @return Module */ public static function Decorator() { return parent::Decorator(); } /** * @return Settings */ public function getModuleSettings() { return $this->oModuleSettings; } public function onBeforeGetFolders(&$aArgs, &$mResult) { $oMailModule = \Aurora\Modules\Mail\Module::getInstance(); $oApiAccountsManager = $oMailModule->getAccountsManager(); $oApiMailManager = $oMailModule->getMailManager(); $iAccountID = $aArgs['AccountID']; $oAccount = $oApiAccountsManager->getAccountById($iAccountID); if ($oAccount) { $oNamespace = $oApiMailManager->getFoldersNamespace($oAccount); $sNamespace = $oNamespace ? $oNamespace->GetPersonalNamespace() : ''; $aResult = \Aurora\Modules\Mail\Module::Decorator()->GetRelevantFoldersInformation($iAccountID, array($sNamespace . 'Notes'), false); if (empty($aResult['Counts'])) { try { \Aurora\Modules\Mail\Module::Decorator()->CreateFolder($iAccountID, $sNamespace . 'Notes', '', '/'); } catch (\Exception $oException) { } } } } public function onBeforeGetMessages(&$aArgs, &$mResult) { if (isset($aArgs['Folder']) && $aArgs['Folder'] === 'Notes' && isset($aArgs['Search']) && !empty($aArgs['Search'])) { $aArgs['ActualSearch'] = $aArgs['Search']; $aArgs['Search'] = sprintf('text:%s', $aArgs['Search']); } } public function onAfterGetMessages(&$aArgs, &$mResult) { if (isset($aArgs['Folder']) && $aArgs['Folder'] === 'Notes' && isset($aArgs['ActualSearch'])) { $aArgs['Search'] = $aArgs['ActualSearch']; unset($aArgs['ActualSearch']); $mResult->Search = $aArgs['Search']; } } protected function populateFromOrigMessage($iAccountId, $FolderFullName, $MessageUid, &$oMessage) { $oOrigMessage = \Aurora\Modules\Mail\Module::Decorator()->GetMessage($iAccountId, $FolderFullName, $MessageUid); if ($oOrigMessage) { $oFromCollection = $oOrigMessage->getFrom(); if ($oFromCollection && $oFromCollection->Count() > 0) { $oMessage->SetFrom($oFromCollection->GetByIndex(0)); } $oToCollection = $oOrigMessage->getTo(); if ($oToCollection && $oToCollection->Count() > 0) { $oMessage->SetTo($oToCollection); } } } /** * Creates or updates a note. * * @param int $AccountID * @param string $FolderFullName * @param string $Text * @param string $Subject * @param int $MessageUid * * @return int */ public function SaveNote($AccountID, $FolderFullName, $Text, $Subject, $MessageUid = null) { \Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser); /** @var \Aurora\Modules\Mail\Module $oMailModule */ $oMailModule = \Aurora\System\Api::GetModule('Mail'); $oApiAccountsManager = $oMailModule->getAccountsManager(); $oAccount = $oApiAccountsManager->getAccountById($AccountID); $oAuthenticatedUser = \Aurora\System\Api::getAuthenticatedUser(); if ($oAccount->IdUser !== $oAuthenticatedUser->Id) { throw new \Aurora\System\Exceptions\ApiException(\Aurora\System\Notifications::AccessDenied, null, 'AccessDenied'); } $oApiMailManager = $oMailModule->getMailManager(); $oMessage = \MailSo\Mime\Message::NewInstance(); $oMessage->RegenerateMessageId(); $oMessage->SetSubject($Subject); $oMessage->AddText($Text, true); $oMessage->SetCustomHeader('X-Uniform-Type-Identifier', 'com.apple.mail-note'); $oMessage->SetCustomHeader('X-Universally-Unique-Identifier', uniqid()); if (!empty($MessageUid)) { $this->populateFromOrigMessage($AccountID, $FolderFullName, $MessageUid, $oMessage); $oApiMailManager->deleteMessage($oAccount, $FolderFullName, array($MessageUid)); } $rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); $iMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter($oMessage->ToStream(true), array($rMessageStream), 8192, true, true, true); $iNewUid = 0; $oApiMailManager->appendMessageFromStream($oAccount, $rMessageStream, $FolderFullName, $iMessageStreamSize, $iNewUid); $oApiMailManager->setMessageFlag($oAccount, $FolderFullName, [$iNewUid], \MailSo\Imap\Enumerations\MessageFlag::SEEN, \Aurora\Modules\Mail\Enums\MessageStoreAction::Add); return $iNewUid; } }