Example #1
0
 /**
  * @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);
             }
         }
     }
 }
Example #2
0
 /**
  * @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);
 }