public function postMessage($params) { $conversationService = MAILBOX_BOL_ConversationService::getInstance(); $language = OW::getLanguage(); if ($errorMessage = $conversationService->checkPermissions()) { return array('error' => $errorMessage); } $userId = OW::getUser()->getId(); // $userSendMessageIntervalOk = $conversationService->checkUserSendMessageInterval($userId); // if (!$userSendMessageIntervalOk) // { // $send_message_interval = (int)OW::getConfig()->getValue('mailbox', 'send_message_interval'); // return array('error'=>$language->text('mailbox', 'feedback_send_message_interval_exceed', array('send_message_interval'=>$send_message_interval))); // } $conversationId = $params['convId']; if (!isset($conversationId)) { return array('error' => "Conversation is not defined"); } $validator = new WyswygRequiredValidator(); if (!$validator->isValid($params['text'])) { return array('error' => $language->text('mailbox', 'chat_message_empty')); } if (mb_strlen($params['text']) > self::MAX_MESSAGE_TEXT_LENGTH) { return array('error' => $language->text('mailbox', 'message_too_long_error', array('maxLength' => self::MAX_MESSAGE_TEXT_LENGTH))); } $conversation = $conversationService->getConversation($conversationId); if (empty($conversation)) { $uidParams = explode('_', $params['uid']); if (count($uidParams) == 5 && $uidParams[0] == 'mailbox' && $uidParams[1] == 'dialog') { $opponentId = (int) $uidParams[3]; $conversationId = $conversationService->getChatConversationIdWithUserById($userId, $opponentId); if ($conversationId != 0) { $conversation = $conversationService->getConversation($conversationId); } } } if (empty($conversation)) { $conversation = $conversationService->createChatConversation($userId, $opponentId); $conversationId = $conversation->getId(); } $opponentId = $conversation->initiatorId == $userId ? $conversation->interlocutorId : $conversation->initiatorId; $checkResult = $conversationService->checkUser($userId, $opponentId); MAILBOX_BOL_ConversationService::getInstance()->resetUserLastData($opponentId); if ($checkResult['isSuspended']) { return array('error' => $checkResult['suspendReasonMessage']); } $mode = $conversationService->getConversationMode($conversationId); $actionName = ''; switch ($mode) { case 'chat': $firstMessage = $conversationService->getFirstMessage($conversationId); if (empty($firstMessage)) { $actionName = 'send_chat_message'; } else { $actionName = 'reply_to_chat_message'; } $isAuthorized = OW::getUser()->isAuthorized('mailbox', $actionName); if (!$isAuthorized) { $status = BOL_AuthorizationService::getInstance()->getActionStatus('mailbox', $actionName); if ($status['status'] != BOL_AuthorizationService::STATUS_AVAILABLE) { // return array('error'=>$language->text('mailbox', $actionName.'_permission_denied')); return array('error' => $status['msg']); } } $params['text'] = UTIL_HtmlTag::stripTags(UTIL_HtmlTag::stripJs($params['text'])); $params['text'] = nl2br($params['text']); break; case 'mail': $actionName = 'reply_to_message'; $isAuthorized = OW::getUser()->isAuthorized('mailbox', $actionName); if (!$isAuthorized) { $status = BOL_AuthorizationService::getInstance()->getActionStatus('mailbox', $actionName); if ($status['status'] != BOL_AuthorizationService::STATUS_AVAILABLE) { // return array('error'=>$language->text('mailbox', $actionName.'_permission_denied')); return array('error' => $status['msg']); } } $params['text'] = UTIL_HtmlTag::stripJs($params['text']); break; } $event = new OW_Event('mailbox.before_send_message', array('senderId' => $userId, 'recipientId' => $opponentId, 'conversationId' => $conversation->id, 'message' => $params['text']), array('result' => true, 'error' => '', 'message' => $params['text'])); OW::getEventManager()->trigger($event); $data = $event->getData(); if (!$data['result']) { return $data; } $text = $data['message']; try { $message = $conversationService->createMessage($conversation, $userId, $text); $files = BOL_AttachmentService::getInstance()->getFilesByBundleName('mailbox', $params['uid']); if (!empty($files)) { $conversationService->addMessageAttachments($message->id, $files); } if (!empty($params['embedAttachments'])) { $oembedParams = json_decode($params['embedAttachments'], true); $oembedParams['message'] = $text; $messageParams = array('entityType' => 'mailbox', 'eventName' => 'renderOembed', 'params' => $oembedParams); $message->isSystem = true; $message->text = json_encode($messageParams); $conversationService->saveMessage($message); } } catch (InvalidArgumentException $e) { return array('error' => $e->getMessage()); } if (!empty($actionName)) { BOL_AuthorizationService::getInstance()->trackAction('mailbox', $actionName); } $item = $conversationService->getMessageData($message); return array('message' => $item); }