- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_message_param.php
- Класс: CIMMessageParam
- Вызов: CIMMessageParam::SendPull
static function SendPull($messageId, $sendExtraParams = true)
{
global $DB;
if (!CModule::IncludeModule('pull'))
return false;
$messageId = intval($messageId);
$sql = "
SELECT C.ID CHAT_ID, C.TYPE MESSAGE_TYPE, M.AUTHOR_ID, C.ENTITY_TYPE CHAT_ENTITY_TYPE, C.ENTITY_ID CHAT_ENTITY_ID
FROM b_im_message M INNER JOIN b_im_chat C ON M.CHAT_ID = C.ID
WHERE M.ID = ".$messageId."
";
$messageData = $DB->Query($sql)->Fetch();
if (!$messageData)
return false;
$arPullMessage = Array(
'id' => (int)$messageId,
'type' => $messageData['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE? 'private': 'chat',
);
$relations = CIMMessenger::GetRelationById($messageId);
if ($messageData['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE)
{
$arFields['FROM_USER_ID'] = $messageData['AUTHOR_ID'];
foreach ($relations as $rel)
{
if ($rel['USER_ID'] != $messageData['AUTHOR_ID'])
$arFields['TO_USER_ID'] = $rel['USER_ID'];
}
$arPullMessage['fromUserId'] = (int)$arFields['FROM_USER_ID'];
$arPullMessage['toUserId'] = (int)$arFields['TO_USER_ID'];
$arPullMessage['chatId'] = (int)$messageData['CHAT_ID'];
}
else
{
$arPullMessage['chatId'] = (int)$messageData['CHAT_ID'];
$arPullMessage['senderId'] = (int)$messageData['AUTHOR_ID'];
if ($messageData['CHAT_ENTITY_TYPE'] == 'LINES')
{
foreach ($relations as $rel)
{
if ($rel["EXTERNAL_AUTH_ID"] == 'imconnector')
{
unset($relations[$rel["USER_ID"]]);
}
}
}
}
$arMessages[$messageId] = Array();
$params = CIMMessageParam::Get(Array($messageId), false, $sendExtraParams === true);
$arMessages[$messageId]['params'] = $params[$messageId];
if (is_array($sendExtraParams) && !empty($sendExtraParams))
{
$arDefault = CIMMessageParam::GetDefault();
foreach($sendExtraParams as $key)
{
if (!isset($arMessages[$messageId]['params'][$key]))
{
$arMessages[$messageId]['params'][$key] = $arDefault[$key];
}
}
}
$arMessages = CIMMessageLink::prepareShow($arMessages, $params);
$arPullMessage['params'] = CIMMessenger::PrepareParamsForPull($arMessages[$messageId]['params']);
BitrixPullEvent::add(array_keys($relations), Array(
'module_id' => 'im',
'command' => 'messageParamsUpdate',
'params' => $arPullMessage,
'extra' => BitrixImCommon::getPullExtra()
));
if ($messageData['MESSAGE_TYPE'] == IM_MESSAGE_OPEN || $messageData['MESSAGE_TYPE'] == IM_MESSAGE_OPEN_LINE)
{
CPullWatch::AddToStack('IM_PUBLIC_'.$messageData['CHAT_ID'], Array(
'module_id' => 'im',
'command' => 'messageParamsUpdate',
'params' => $arPullMessage,
'extra' => BitrixImCommon::getPullExtra()
));
}
return true;
}