• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_history.php
  • Класс: CIMHistory
  • Вызов: CIMHistory::SearchChatMessage
function SearchChatMessage($searchText, $chatId, $bTimeZone = true)
{
	$chatId = intval($chatId);
	$searchText = trim($searchText);

	if ($searchText == '')
	{
		$GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_HISTORY_SEARCH_EMPTY"), "ERROR_SEARCH_EMPTY");
		return false;
	}

	if (!BitrixImDialog::hasAccess('chat'.$chatId, $this->user_id))
	{
		return false;
	}

	$where = Array(
		'=CHAT_ID' => $chatId,
		'*%MESSAGE' => $searchText,
	);

	if($this->checkFullText($searchText))
	{
		$where = Array(
			'=CHAT_ID' => $chatId,
			'*INDEX.SEARCH_CONTENT' => BitrixMainSearchContent::prepareStringToken($searchText),
		);
	}

	$ar = CIMChat::GetRelationById($chatId, $this->user_id, true, false);
	if ($ar && $ar['START_ID'] > 0)
	{
		$where['>=ID'] = intval($ar['START_ID']);
	}

	$orm = BitrixImModelMessageTable::getList(
		[
			'select' => [
				'ID',
				'CHAT_ID',
				'MESSAGE',
				'AUTHOR_ID',
				'DATE_CREATE'
			],
			'filter' => $where,
			'order' => ['DATE_CREATE' => 'DESC', 'ID' => 'DESC'],
			'limit' => 1000,
		]
	);

	$arMessages = Array();
	$arMessageId = Array();
	$arUnreadMessage = Array();
	$usersMessage = Array();

	while ($arRes = $orm->fetch())
	{
		$arMessages[$arRes['ID']] = Array(
			'id' => $arRes['ID'],
			'chatId' => $arRes['CHAT_ID'],
			'senderId' => $arRes['AUTHOR_ID'],
			'recipientId' => $arRes['CHAT_ID'],
			'date' => $arRes['DATE_CREATE'],
			'text' => BitrixImText::parse($arRes['MESSAGE']),
			'textLegacy' => BitrixImText::parseLegacyFormat($arRes['MESSAGE'])
		);

		$usersMessage[$arRes['CHAT_ID']][] = $arRes['ID'];
		$arMessageId[] = $arRes['ID'];
	}

	$params = CIMMessageParam::Get($arMessageId);
	$arFiles = Array();
	foreach ($params as $messageId => $param)
	{
		$arMessages[$messageId]['params'] = $param;
		if (isset($param['FILE_ID']))
		{
			foreach ($param['FILE_ID'] as $fileId)
			{
				$arFiles[$fileId] = $fileId;
			}
		}
	}
	$arMessageFiles = CIMDisk::GetFiles($chatId, $arFiles);
	$arMessages = CIMMessageLink::prepareShow($arMessages, $params);

	return Array('chatId' => $chatId, 'message' => $arMessages, 'unreadMessage' => $arUnreadMessage, 'usersMessage' => $usersMessage, 'files' => $arMessageFiles);
}