- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Send/PushService.php
- Класс: BitrixImV2MessageSendPushService
- Вызов: PushService::getFormatGroupChatMessage
private function getFormatGroupChatMessage(Message $message, GroupChat $chat): array
{
$fromUserId = $message->getAuthorId();
$arUsers = CIMContactList::GetUserData(Array(
'ID' => $fromUserId,
'PHONES' => 'Y',
));
$arChat = CIMChat::GetChatData([
'ID' => $chat->getChatId(),
'USE_CACHE' => 'N',
]);
// todo: Replace it with Chat methods
$pushParams = $message->getPushParams();
$extraParamContext = $pushParams['CONTEXT'] ?? null;
if (
!empty($arUsers['users'])
&& $extraParamContext == Chat::ENTITY_TYPE_LIVECHAT
&& BitrixMainLoader::includeModule('imopenlines')
)
{
[$lineId, $userId] = explode('|', $arChat['chat'][$chat->getChatId()]['entity_id']);
$userCode = 'livechat|' . $lineId . '|' . $chat->getChatId() . '|' . $userId;
unset($lineId, $userId);
foreach ($arUsers['users'] as $userId => $userData)
{
$arUsers['users'][$userId] = BitrixImOpenLinesConnector::getOperatorInfo($pushParams['LINE_ID'], $userId, $userCode);
}
}
return [
'chatId' => $chat->getChatId(),
'dialogId' => $chat->getDialogId(),
'chat' => $arChat['chat'] ?? [],
'lines' => $arChat['lines'][$chat->getChatId()] ?? null,
'userInChat' => $arChat['userInChat'] ?? [],
'userBlockChat' => $arChat['userChatBlockStatus'] ?? [],
'users' => (is_array($arUsers) && is_array($arUsers['users'])) ? $arUsers['users'] : null,
'message' => [
'id' => $message->getMessageId(),
'templateId' => $message->getUuid(),
'templateFileId' => $message->getFileIds(),
'prevId' => $chat->getPrevMessageId(),
'chatId' => $chat->getChatId(),
'senderId' => $fromUserId,
'recipientId' => $chat->getDialogId(),
'system' => ($message->isSystem() ? 'Y': 'N'),
'date' => DateTime::createFromTimestamp(time()), // DATE_CREATE
'text' => Text::parse($message->getMessage()),
'textLegacy' => Text::parseLegacyFormat($message->getMessage()),
'params' => $message->getParams()->toPullFormat(),
'counter' => 0,
'isImportant' => $message->isImportant(),
'importantFor' => $message->getImportantFor(),
],
'files' => $message->getFilesDiskData(),
'notify' => 'Y',
];
}