- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_history.php
- Класс: CIMHistory
- Вызов: CIMHistory::SearchMessage
function SearchMessage($searchText, $toUserId, $fromUserId = false, $bTimeZone = true)
{
global $DB;
$fromUserId = intval($fromUserId);
if ($fromUserId <= 0)
$fromUserId = $this->user_id;
$toUserId = intval($toUserId);
if ($toUserId <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_HISTORY_ERROR_TO_USER_ID"), "ERROR_TO_USER_ID");
return false;
}
$searchText = trim($searchText);
if (mb_strlen($searchText) < 3)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_HISTORY_SEARCH_EMPTY"), "ERROR_SEARCH_EMPTY");
return false;
}
$chatId = 0;
$arMessages = Array();
$arMessageId = Array();
$arUnreadMessage = Array();
$arMessageFiles = Array();
$arUsers = Array();
$limitById = '';
if ($toUserId == $fromUserId)
{
$chat = new CIMChat();
$chatId = $chat->GetPersonalChat();
if (!$chatId)
{
return false;
}
$startId = 0;
}
else
{
$arRelation = CIMChat::GetPrivateRelation($fromUserId, $toUserId);
$chatId = $arRelation['CHAT_ID'];
$startId = $arRelation['START_ID'];
}
if ($chatId > 0)
{
$where = [
'=CHAT_ID' => $chatId,
'*%MESSAGE' => $searchText,
];
if ($this->checkFullText($searchText))
{
$searchText = BitrixMainSearchContent::prepareStringToken($searchText);
$where = [
'=CHAT_ID' => $chatId,
'*INDEX.SEARCH_CONTENT' => $searchText,
];
}
if ($startId)
{
$where['>=ID'] = intval($startId);
}
$orm = BitrixImModelMessageTable::getList(
[
'select' => [
'ID',
'CHAT_ID',
'MESSAGE',
'AUTHOR_ID',
'NOTIFY_EVENT',
'DATE_CREATE'
],
'filter' => $where,
'order' => ['DATE_CREATE' => 'DESC', 'ID' => 'DESC'],
'limit' => 1000,
]
);
while ($arRes = $orm->fetch())
{
if ($fromUserId == $arRes['AUTHOR_ID'])
{
$arRes['TO_USER_ID'] = $toUserId;
$arRes['FROM_USER_ID'] = $fromUserId;
$convId = $arRes['TO_USER_ID'];
}
else
{
$arRes['TO_USER_ID'] = $fromUserId;
$arRes['FROM_USER_ID'] = $toUserId;
$convId = $arRes['FROM_USER_ID'];
}
$arMessages[$arRes['ID']] = Array(
'id' => $arRes['ID'],
'chatId' => $arRes['CHAT_ID'],
'senderId' => $arRes['FROM_USER_ID'],
'recipientId' => $arRes['TO_USER_ID'],
'date' => $arRes['DATE_CREATE'],
'system' => $arRes['NOTIFY_EVENT'] == 'private'? 'N': 'Y',
'text' => BitrixImText::parse($arRes['MESSAGE']),
'textLegacy' => BitrixImText::parseLegacyFormat($arRes['MESSAGE'])
);
$arUsers[$convId][] = $arRes['ID'];
$arMessageId[] = $arRes['ID'];
$chatId = $arRes['CHAT_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' => $arUsers, 'files' => $arMessageFiles);
}