/** * @param CHelpdeskUser $oHelpdeskUser Helpdesk user object * @param CHelpdeskThread $oThread Helpdesk thread object * @param CHelpdeskPost $oPost Helpdesk post object * @param bool $bIsNew Default value is **false**. * @param bool $bSendNotify Default value is **true**. * @param string $sCc Default value is empty string. * @param string $sBcc Default value is empty string. * * @return bool */ public function createPost(CHelpdeskUser $oHelpdeskUser, $oThread, CHelpdeskPost $oPost, $bIsNew = false, $bSendNotify = true, $sCc = '', $sBcc = '') { $bResult = false; try { if ($oPost->validate()) { if ($oPost->Type === EHelpdeskPostType::Internal && !$oHelpdeskUser->IsAgent) { $oPost->Type = EHelpdeskPostType::Normal; } if ($oHelpdeskUser->IsAgent && !$bIsNew && $oHelpdeskUser->IdHelpdeskUser !== $oThread->IdOwner) { if ($oPost->Type !== EHelpdeskPostType::Internal) { $oThread->Type = EHelpdeskThreadType::Answered; } } else { $oThread->Type = EHelpdeskThreadType::Pending; } $bResult = $this->oStorage->createPost($oHelpdeskUser, $oPost); if (!$bResult) { $this->moveStorageExceptionToManager(); throw new CApiManagerException(Errs::HelpdeskManager_PostCreateFailed); } else { if (is_array($oPost->Attachments) && 0 < count($oPost->Attachments)) { $this->oStorage->addAttachments($oHelpdeskUser, $oThread, $oPost, $oPost->Attachments); } $oThread->Updated = time(); $oThread->PostCount = $this->getPostsCount($oHelpdeskUser, $oThread); $oThread->LastPostId = $oPost->IdHelpdeskPost; $oThread->LastPostOwnerId = $oPost->IdOwner; $oThread->Notificated = false; if (!$oThread->HasAttachments) { $oThread->HasAttachments = is_array($oPost->Attachments) && 0 < count($oPost->Attachments); } $bResult = $this->updateThread($oHelpdeskUser, $oThread); $this->setThreadSeen($oHelpdeskUser, $oThread); if ($bSendNotify) { $this->sendPostNotify($oThread, $oPost, $bIsNew, $sCc, $sBcc); } if (!empty($sCc) || !empty($sBcc)) { //$this->sendPostCopy($oThread, $oPost, $bIsNew, $sCc, $sBcc); } } } } catch (CApiBaseException $oException) { if ($oException->getCode() !== \Errs::Mail_MailboxUnavailable) { $bResult = false; $this->setLastException($oException); } else { $bResult = true; } } return $bResult; }