Exemple #1
0
 /**
  * @param int $iIdTenant
  *
  * @return bool
  */
 public function startMailboxMonitorPrev($iIdTenant)
 {
     $aData = $this->getHelpdeskMainSettings($iIdTenant);
     if (!empty($aData['AdminEmailAccount']) && 0 < $aData['HelpdeskFetcherType']) {
         $oApiUsers = $this->_getApiUsers();
         $oApiMail = $this->_getApiMail();
         $oApiFileCache = \CApi::Manager('filecache');
         $oApiFilestorage = \CApi::Manager('filestorage');
         if ($oApiUsers && $oApiMail && $oApiFileCache) {
             $oAccount = $oApiUsers->getAccountByEmail($aData['AdminEmailAccount']);
             if ($oAccount) {
                 $iPrevLastUid = $this->getHelpdeskMailboxLastUid($iIdTenant, \strtolower($oAccount->Email));
                 $iLastUid = 0;
                 $aData = $oApiMail->getMessagesForHelpdeskSynch($oAccount, 0 < $iPrevLastUid ? $iPrevLastUid + 1 : 0, $iLastUid);
                 if (0 < $iLastUid) {
                     $this->setHelpdeskMailboxLastUid($iIdTenant, \strtolower($oAccount->Email), $iLastUid);
                 }
                 if (is_array($aData) && 0 < count($aData)) {
                     foreach ($aData as $oMessage) {
                         $aMatch = array();
                         $oFrom = $oMessage->getFrom();
                         $aFrom = $oFrom ? $oFrom->GetAsArray() : array();
                         $oAttachments = $oMessage->getAttachments();
                         $aAttachments = $oAttachments ? $oAttachments->GetAsArray() : array();
                         $sSubject = $oMessage->getSubject();
                         if (is_array($aFrom) && 0 < count($aFrom) && !empty($sSubject) && preg_match('/\\[#([a-zA-Z0-9]+)#\\]/', $sSubject, $aMatch) && !empty($aMatch[1])) {
                             $oEmail = $aFrom[0];
                             $sEmail = $oEmail ? $oEmail->GetEmail() : '';
                             if (0 < \strlen($sEmail)) {
                                 $oHelpdeskUser = $this->getUserByEmail($iIdTenant, $sEmail);
                                 if ($oHelpdeskUser) {
                                     $sThreadHash = (string) $aMatch[1];
                                     if (!empty($sThreadHash)) {
                                         $iThreadID = $this->getThreadIdByHash($iIdTenant, $sThreadHash);
                                         if (0 < $iThreadID) {
                                             $oThread = $this->getThreadById($oHelpdeskUser, $iThreadID);
                                             if ($oThread) {
                                                 $sText = trim($oMessage->getHtml());
                                                 if (0 === strlen($sText)) {
                                                     $sText = trim($oMessage->getPlain());
                                                 } else {
                                                     $sText = \MailSo\Base\HtmlUtils::ConvertHtmlToPlain($sText);
                                                 }
                                                 $oPost = new \CHelpdeskPost();
                                                 $oPost->IdTenant = $oHelpdeskUser->IdTenant;
                                                 $oPost->IdOwner = $oHelpdeskUser->IdHelpdeskUser;
                                                 $oPost->IdHelpdeskThread = $oThread->IdHelpdeskThread;
                                                 $oPost->Type = \EHelpdeskPostType::Normal;
                                                 $oPost->SystemType = \EHelpdeskPostSystemType::None;
                                                 $oPost->Text = $sText;
                                                 $aResultAttachment = array();
                                                 if (is_array($aAttachments) && 0 < count($aAttachments)) {
                                                     foreach ($aAttachments as $oAttachment) {
                                                         $sUploadName = $oAttachment->getFileName(true);
                                                         $sTempName = md5($sUploadName . rand(1000, 9999));
                                                         $oApiMail->directMessageToStream($oAccount, function ($rResource, $sContentType, $sFileName, $sMimeIndex = '') use($oHelpdeskUser, &$sTempName, $oApiFileCache) {
                                                             if (!$oApiFileCache->putFile($oHelpdeskUser, $sTempName, $rResource)) {
                                                                 $sTempName = '';
                                                             }
                                                         }, $oAttachment->getFolder(), $oAttachment->getUid(), $oAttachment->MimeIndex());
                                                         $rData = 0 < \strlen($sTempName) ? $oApiFileCache->getFile($oHelpdeskUser, $sTempName) : null;
                                                         if ($rData) {
                                                             $iFileSize = $oApiFileCache->fileSize($oHelpdeskUser, $sTempName);
                                                             $sThreadID = (string) $oThread->IdHelpdeskThread;
                                                             $sThreadID = str_pad($sThreadID, 2, '0', STR_PAD_LEFT);
                                                             $sThreadIDSubFolder = substr($sThreadID, 0, 2);
                                                             $sThreadFolderName = API_HELPDESK_PUBLIC_NAME . '/' . $sThreadIDSubFolder . '/' . $sThreadID;
                                                             $oApiFilestorage->createFolder($oHelpdeskUser, \EFileStorageType::Corporate, '', $sThreadFolderName);
                                                             $oApiFilestorage->createFile($oHelpdeskUser, \EFileStorageTypeStr::Corporate, $sThreadFolderName, $sUploadName, $rData, false);
                                                             if (is_resource($rData)) {
                                                                 @fclose($rData);
                                                             }
                                                             $oAttachment = new \CHelpdeskAttachment();
                                                             $oAttachment->IdHelpdeskThread = $oThread->IdHelpdeskThread;
                                                             $oAttachment->IdHelpdeskPost = $oPost->IdHelpdeskPost;
                                                             $oAttachment->IdOwner = $oHelpdeskUser->IdHelpdeskUser;
                                                             $oAttachment->IdTenant = $oHelpdeskUser->IdTenant;
                                                             $oAttachment->FileName = $sUploadName;
                                                             $oAttachment->SizeInBytes = $iFileSize;
                                                             $oAttachment->encodeHash($oHelpdeskUser, $sThreadFolderName);
                                                             $oApiFileCache->clear($oHelpdeskUser, $sTempName);
                                                             $aResultAttachment[] = $oAttachment;
                                                         }
                                                     }
                                                     if (is_array($aResultAttachment) && 0 < count($aResultAttachment)) {
                                                         $oPost->Attachments = $aResultAttachment;
                                                     }
                                                 }
                                                 $this->createPost($oHelpdeskUser, $oThread, $oPost, false, false);
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                         unset($oMessage);
                     }
                 }
             }
         }
     }
     return true;
 }
Exemple #2
0
 /**
  * @param CHelpdeskUser $oHelpdeskUser
  * @param CHelpdeskThread $oHelpdeskThread
  *
  * @return array|bool
  */
 public function GetAttachments(CHelpdeskUser $oHelpdeskUser, CHelpdeskThread $oHelpdeskThread)
 {
     $mResult = false;
     if ($this->oConnection->Execute($this->oCommandCreator->GetAttachments($oHelpdeskUser, $oHelpdeskThread))) {
         $oRow = null;
         $mResult = array();
         while (false !== ($oRow = $this->oConnection->GetNextRecord())) {
             $oHelpdeskPost = new CHelpdeskAttachment();
             $oHelpdeskPost->InitByDbRow($oRow);
             if (!isset($mResult[$oHelpdeskPost->IdHelpdeskPost])) {
                 $mResult[$oHelpdeskPost->IdHelpdeskPost] = array();
             }
             $mResult[$oHelpdeskPost->IdHelpdeskPost][] = $oHelpdeskPost;
         }
     }
     $this->throwDbExceptionIfExist();
     return $mResult;
 }
Exemple #3
0
 public function AjaxHelpdeskPostCreate()
 {
     $oAccount = null;
     $oUser = $this->getHelpdeskAccountFromParam($oAccount);
     /* @var $oAccount CAccount */
     $iThreadId = (int) $this->getParamValue('ThreadId', 0);
     $sSubject = trim((string) $this->getParamValue('Subject', ''));
     $sText = trim((string) $this->getParamValue('Text', ''));
     $sCc = trim((string) $this->getParamValue('Cc', ''));
     $sBcc = trim((string) $this->getParamValue('Bcc', ''));
     $bIsInternal = '1' === (string) $this->getParamValue('IsInternal', '0');
     $mAttachments = $this->getParamValue('Attachments', null);
     if (0 === strlen($sText) || 0 === $iThreadId && 0 === strlen($sSubject)) {
         throw new \ProjectCore\Exceptions\ClientException(\ProjectCore\Notifications::InvalidInputParameter);
     }
     $mResult = false;
     $bIsNew = false;
     $oThread = null;
     if (0 === $iThreadId) {
         $bIsNew = true;
         $oThread = new \CHelpdeskThread();
         $oThread->IdTenant = $oUser->IdTenant;
         $oThread->IdOwner = $oUser->IdHelpdeskUser;
         $oThread->Type = \EHelpdeskThreadType::Pending;
         $oThread->Subject = $sSubject;
         if (!$this->ApiHelpdesk()->createThread($oUser, $oThread)) {
             $oThread = null;
         }
     } else {
         $oThread = $this->ApiHelpdesk()->getThreadById($oUser, $iThreadId);
     }
     if ($oThread && 0 < $oThread->IdHelpdeskThread) {
         $oPost = new \CHelpdeskPost();
         $oPost->IdTenant = $oUser->IdTenant;
         $oPost->IdOwner = $oUser->IdHelpdeskUser;
         $oPost->IdHelpdeskThread = $oThread->IdHelpdeskThread;
         $oPost->Type = $bIsInternal ? \EHelpdeskPostType::Internal : \EHelpdeskPostType::Normal;
         $oPost->SystemType = \EHelpdeskPostSystemType::None;
         $oPost->Text = $sText;
         $aResultAttachment = array();
         if (is_array($mAttachments) && 0 < count($mAttachments)) {
             foreach ($mAttachments as $sTempName => $sHash) {
                 $aDecodeData = \CApi::DecodeKeyValues($sHash);
                 if (!isset($aDecodeData['HelpdeskUserID'])) {
                     continue;
                 }
                 $rData = $this->ApiFileCache()->getFile($oUser, $sTempName);
                 if ($rData) {
                     $iFileSize = $this->ApiFileCache()->fileSize($oUser, $sTempName);
                     $sThreadID = (string) $oThread->IdHelpdeskThread;
                     $sThreadID = str_pad($sThreadID, 2, '0', STR_PAD_LEFT);
                     $sThreadIDSubFolder = substr($sThreadID, 0, 2);
                     $sThreadFolderName = API_HELPDESK_PUBLIC_NAME . '/' . $sThreadIDSubFolder . '/' . $sThreadID;
                     $this->oApiFilestorage->createFolder($oUser, \EFileStorageTypeStr::Corporate, '', $sThreadFolderName);
                     $sUploadName = isset($aDecodeData['Name']) ? $aDecodeData['Name'] : $sTempName;
                     $this->oApiFilestorage->createFile($oUser, \EFileStorageTypeStr::Corporate, $sThreadFolderName, $sUploadName, $rData, false);
                     $oAttachment = new \CHelpdeskAttachment();
                     $oAttachment->IdHelpdeskThread = $oThread->IdHelpdeskThread;
                     $oAttachment->IdHelpdeskPost = $oPost->IdHelpdeskPost;
                     $oAttachment->IdOwner = $oUser->IdHelpdeskUser;
                     $oAttachment->IdTenant = $oUser->IdTenant;
                     $oAttachment->FileName = $sUploadName;
                     $oAttachment->SizeInBytes = $iFileSize;
                     $oAttachment->encodeHash($oUser, $sThreadFolderName);
                     $aResultAttachment[] = $oAttachment;
                 }
             }
             if (is_array($aResultAttachment) && 0 < count($aResultAttachment)) {
                 $oPost->Attachments = $aResultAttachment;
             }
         }
         $mResult = $this->ApiHelpdesk()->createPost($oUser, $oThread, $oPost, $bIsNew, true, $sCc, $sBcc);
         if ($mResult) {
             $mResult = array('ThreadId' => $oThread->IdHelpdeskThread, 'ThreadIsNew' => $bIsNew);
         }
     }
     return $this->DefaultResponse($oAccount, __FUNCTION__, $mResult);
 }
 /**
  * @param CHelpdeskUser $oHelpdeskUser
  * @param int $iPostId
  *
  * @return string
  */
 public function GetAttachments(CHelpdeskUser $oHelpdeskUser, CHelpdeskThread $oHelpdeskThread)
 {
     $aMap = api_AContainer::DbReadKeys(CHelpdeskAttachment::GetStaticMap());
     $aMap = array_map(array($this, 'escapeColumn'), $aMap);
     $sSql = 'SELECT %s FROM %sahd_attachments';
     $sSql = sprintf($sSql, implode(', ', $aMap), $this->Prefix());
     $aWhere = array();
     if (0 < $oHelpdeskUser->IdTenant) {
         $aWhere[] = $this->escapeColumn('id_tenant') . ' = ' . $oHelpdeskUser->IdTenant;
     }
     $aWhere[] = $this->escapeColumn('id_helpdesk_thread') . ' = ' . $oHelpdeskThread->IdHelpdeskThread;
     return $sSql . ' WHERE ' . implode(' AND ', $aWhere);
 }