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