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

	$chatId = intval($chatId);

	$sqlHelper = BitrixMainApplication::getInstance()->getConnection()->getSqlHelper();
	try
	{
		$dateStart = BitrixMainTypeDateTime::createFromUserTime($searchDate);
		$sqlDateStart = $sqlHelper->getCharToDateFunction($dateStart->format("Y-m-d H:i:s"));

		$dateEnd = $dateStart->add('1 DAY');
		$sqlDateEnd = $sqlHelper->getCharToDateFunction($dateEnd->format("Y-m-d H:i:s"));
	}
	catch(BitrixMainObjectException $e)
	{
		$GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_HISTORY_SEARCH_DATE_EMPTY"), "ERROR_SEARCH_EMPTY");
		return false;
	}

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

	if (!$bTimeZone)
		CTimeZone::Disable();
	$strSql ="
		SELECT
			M.ID,
			M.CHAT_ID,
			M.MESSAGE,
			".$DB->DatetimeToTimestampFunction('M.DATE_CREATE')." DATE_CREATE,
			M.AUTHOR_ID
		FROM b_im_relation R1
		INNER JOIN b_im_message M ON M.CHAT_ID = R1.CHAT_ID
		WHERE
			R1.CHAT_ID = ".$chatId."
		AND	R1.USER_ID = ".$this->user_id."
		AND M.DATE_CREATE >= ".$sqlDateStart." 
		AND M.DATE_CREATE <=  ".$sqlDateEnd."
			".$limitById."
		ORDER BY M.DATE_CREATE DESC, M.ID DESC
	";
	if (!$bTimeZone)
		CTimeZone::Enable();
	$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); $arMessages = Array(); $arMessageId = Array(); $arUnreadMessage = Array(); $usersMessage = Array(); while ($arRes = $dbRes->Fetch()) { $arMessages[$arRes['ID']] = Array( 'id' => $arRes['ID'], 'chatId' => $arRes['CHAT_ID'], 'senderId' => $arRes['AUTHOR_ID'], 'recipientId' => $arRes['CHAT_ID'], 'date' => BitrixMainTypeDateTime::createFromTimestamp($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); }