• Модуль: 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;
}