Esempio n. 1
0
 /**
  *
  * @param CAccount $oAccount
  * @param string $sSubject
  * @param string $sEventName
  * @param string $sDate
  * @param string $sCalendarName
  * @param string $sEventText
  * @param string $sCalendarColor
  *
  * @return bool
  */
 private function sendMessage($oAccount, $sSubject, $sEventName, $sDate, $sCalendarName, $sEventText, $sCalendarColor)
 {
     $oMessage = $this->createMessage($oAccount, $sSubject, $this->createBodyHtml($oAccount, $sEventName, $sDate, $sCalendarName, $sEventText, $sCalendarColor), $this->createBodyText($oAccount, $sEventName, $sDate, $sCalendarName, $sEventText));
     try {
         return $this->oApiMailManager->sendMessage($oAccount, $oMessage);
     } catch (Exception $oException) {
         CApi::Log('MessageSend Exception', ELogLevel::Error, 'cron-');
         CApi::LogException($oException, ELogLevel::Error, 'cron-');
     }
     return false;
 }
Esempio n. 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);
 }
Esempio n. 3
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();
			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;
			
			if ($this->oApiFilestorage->FileExists(
				$oHelpdeskUserFromAttachment,
				$aValues['StorageType'], $aValues['Path'], $aValues['Name']
			))
			{
				$mResult = $this->oApiFilestorage->GetFile(
					$oHelpdeskUserFromAttachment,
					$aValues['StorageType'], $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
				));
			}

			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->MessageMimeStream($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);
	}