• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_history.php
  • Класс: CIMHistory
  • Вызов: CIMHistory::SearchDateMessage
function SearchDateMessage($searchDate, $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;
	}

	$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;
	}

	$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)
	{
		if ($startId > 0)
		{
			$limitById = 'AND M.ID >= '.intval($startId);
		}

		if (!$bTimeZone)
			CTimeZone::Disable();
		$strSql = "
			SELECT
				M.ID,
				M.CHAT_ID,
				M.MESSAGE,
				".$DB->DatetimeToTimestampFunction('M.DATE_CREATE')." DATE_CREATE,
				M.AUTHOR_ID,
				".$fromUserId." R1_USER_ID,
				".$toUserId." R2_USER_ID,
				M.NOTIFY_EVENT
			FROM b_im_message M
			WHERE
				M.CHAT_ID = ".$chatId."
			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__); while ($arRes = $dbRes->Fetch()) { if ($fromUserId == $arRes['AUTHOR_ID']) { $arRes['TO_USER_ID'] = $arRes['R2_USER_ID']; $arRes['FROM_USER_ID'] = $arRes['R1_USER_ID']; $convId = $arRes['TO_USER_ID']; } else { $arRes['TO_USER_ID'] = $arRes['R1_USER_ID']; $arRes['FROM_USER_ID'] = $arRes['R2_USER_ID']; $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' => BitrixMainTypeDateTime::createFromTimestamp($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); }