/** * @param \CHelpdeskUser $oUser * @param \CApiHelpdeskManager $oApiHelpdesk * @param \CApiFilestorageManager $oApiFilestorage */ public function populateContent($oUser, $oApiHelpdesk, $oApiFilestorage) { $aHash = \CApi::DecodeKeyValues($this->Hash); if (isset($aHash['StorageType'], $aHash['Path'], $aHash['Name']) && $oApiHelpdesk && $oApiFilestorage) { $oHelpdeskUserFromAttachment = null; if (isset($aHash['HelpdeskUserID'], $aHash['HelpdeskTenantID'])) { if ($oUser && $aHash['HelpdeskUserID'] === $oUser->IdHelpdeskUser) { $oHelpdeskUserFromAttachment = $oUser; } else { $oHelpdeskUserFromAttachment = $oApiHelpdesk->getUserById($aHash['HelpdeskTenantID'], $aHash['HelpdeskUserID']); } } if ($oHelpdeskUserFromAttachment && $oApiFilestorage->isFileExists($oHelpdeskUserFromAttachment, $aHash['StorageType'], $aHash['Path'], $aHash['Name'])) { $mResult = $oApiFilestorage->getFile($oHelpdeskUserFromAttachment, $aHash['StorageType'], $aHash['Path'], $aHash['Name']); if (is_resource($mResult)) { $this->Content = stream_get_contents($mResult); } } } }
/** * @return bool */ private function rawCallback($sRawKey, $fCallback, $bCache = true, &$oAccount = null, &$oHelpdeskUser = null) { $aValues = \CApi::DecodeKeyValues($sRawKey); $sFolder = ''; $iUid = 0; $sMimeIndex = ''; $oAccount = null; $oHelpdeskUser = null; $oHelpdeskUserFromAttachment = null; if (isset($aValues['HelpdeskUserID'], $aValues['HelpdeskTenantID'])) { $oAccount = null; $oHelpdeskUser = $this->getHelpdeskAccountFromParam($oAccount); if ($oHelpdeskUser && $oHelpdeskUser->IdTenant === $aValues['HelpdeskTenantID']) { $oApiHelpdesk = $this->ApiHelpdesk(); if ($oApiHelpdesk) { if ($oHelpdeskUser->IdHelpdeskUser === $aValues['HelpdeskUserID']) { $oHelpdeskUserFromAttachment = $oHelpdeskUser; } else { if ($oHelpdeskUser->IsAgent) { $oHelpdeskUserFromAttachment = $oApiHelpdesk->getUserById($aValues['HelpdeskTenantID'], $aValues['HelpdeskUserID']); } } } } } else { if (isset($aValues['AccountID'])) { $oAccount = $this->getAccountFromParam(true, !(isset($aValues['Iframed'], $aValues['Time']) && $aValues['Iframed'] && $aValues['Time'] > \ProjectCore\Base\Utils::iframedTimestamp())); if (!$oAccount || $aValues['AccountID'] !== $oAccount->IdAccount) { return false; } } } if ($oHelpdeskUserFromAttachment && isset($aValues['FilestorageFile'], $aValues['StorageType'], $aValues['Path'], $aValues['Name'])) { if ($bCache) { $this->verifyCacheByKey($sRawKey); } $bResult = false; $mResult = false; $sStorageType = $aValues['StorageType']; if (is_numeric($aValues['StorageType'])) { $iStorageType = (int) $aValues['StorageType']; switch ($iStorageType) { case \EFileStorageType::Personal: $sStorageType = \EFileStorageTypeStr::Personal; break; case \EFileStorageType::Corporate: $sStorageType = \EFileStorageTypeStr::Corporate; break; case \EFileStorageType::Shared: $sStorageType = \EFileStorageTypeStr::Shared; break; } } if ($this->oApiFilestorage->isFileExists($oHelpdeskUserFromAttachment, $sStorageType, $aValues['Path'], $aValues['Name'])) { $mResult = $this->oApiFilestorage->getFile($oHelpdeskUserFromAttachment, $sStorageType, $aValues['Path'], $aValues['Name']); if (is_resource($mResult)) { if ($bCache) { $this->cacheByKey($sRawKey); } $bResult = true; $sFileName = $aValues['Name']; $sContentType = empty($sFileName) ? 'text/plain' : \MailSo\Base\Utils::MimeContentType($sFileName); $sFileName = $this->clearFileName($sFileName, $sContentType); call_user_func_array($fCallback, array($oAccount, $sContentType, $sFileName, $mResult, $oHelpdeskUser)); } } else { $this->oHttp->StatusHeader(404); exit; } return $bResult; } else { if (isset($aValues['TempFile'], $aValues['TempName'], $aValues['Name']) && ($oHelpdeskUserFromAttachment || $oAccount)) { if ($bCache) { $this->verifyCacheByKey($sRawKey); } $bResult = false; $mResult = $this->ApiFileCache()->getFile($oHelpdeskUserFromAttachment ? $oHelpdeskUserFromAttachment : $oAccount, $aValues['TempName']); if (is_resource($mResult)) { if ($bCache) { $this->cacheByKey($sRawKey); } $bResult = true; $sFileName = $aValues['Name']; $sContentType = empty($sFileName) ? 'text/plain' : \MailSo\Base\Utils::MimeContentType($sFileName); $sFileName = $this->clearFileName($sFileName, $sContentType); call_user_func_array($fCallback, array($oAccount, $sContentType, $sFileName, $mResult, $oHelpdeskUser)); } return $bResult; } else { $sFolder = isset($aValues['Folder']) ? $aValues['Folder'] : ''; $iUid = (int) (isset($aValues['Uid']) ? $aValues['Uid'] : 0); $sMimeIndex = (string) (isset($aValues['MimeIndex']) ? $aValues['MimeIndex'] : ''); } } if ($bCache && 0 < strlen($sFolder) && 0 < $iUid) { $this->verifyCacheByKey($sRawKey); } $sContentTypeIn = (string) (isset($aValues['MimeType']) ? $aValues['MimeType'] : ''); $sFileNameIn = (string) (isset($aValues['FileName']) ? $aValues['FileName'] : ''); if (!$oAccount) { return false; } $self = $this; return $this->oApiMail->directMessageToStream($oAccount, function ($rResource, $sContentType, $sFileName, $sMimeIndex = '') use($self, $oAccount, $fCallback, $sRawKey, $bCache, $sContentTypeIn, $sFileNameIn) { if (is_resource($rResource)) { $sContentTypeOut = $sContentTypeIn; if (empty($sContentTypeOut)) { $sContentTypeOut = $sContentType; if (empty($sContentTypeOut)) { $sContentTypeOut = empty($sFileName) ? 'text/plain' : \MailSo\Base\Utils::MimeContentType($sFileName); } } $sFileNameOut = $sFileNameIn; if (empty($sFileNameOut) || '.' === $sFileNameOut[0]) { $sFileNameOut = $sFileName; } $sFileNameOut = $self->clearFileName($sFileNameOut, $sContentType, $sMimeIndex); if ($bCache) { $self->cacheByKey($sRawKey); } call_user_func_array($fCallback, array($oAccount, $sContentTypeOut, $sFileNameOut, $rResource)); } }, $sFolder, $iUid, $sMimeIndex); }