• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_chat.php
  • Класс: CIMChat
  • Вызов: CIMChat::GetLastSendMessage
public function GetLastSendMessage($arParams)
{
	global $DB;

	if (!isset($arParams['ID']))
		return false;

	$chatId = $arParams['ID'];

	$fromUserId = isset($arParams['FROM_USER_ID']) && intval($arParams['FROM_USER_ID'])>0? intval($arParams['FROM_USER_ID']): $this->user_id;
	$limit = isset($arParams['LIMIT']) && intval($arParams['LIMIT'])>0? intval($arParams['LIMIT']): false;
	$bTimeZone = isset($arParams['USE_TIME_ZONE']) && $arParams['USE_TIME_ZONE'] == 'N'? false: true;

	$arChatId = Array();
	if (is_array($chatId))
	{
		foreach ($chatId as $val)
			$arChatId[] = intval($val);
	}
	else
	{
		$arChatId[] = intval($chatId);
	}
	if (empty($arChatId))
		return Array();

	$sqlLimit = '';
	if ($limit)
	{
		if ($DB->type == "MYSQL")
			$sqlLimit = " AND M.DATE_CREATE > DATE_SUB(NOW(), INTERVAL ".$limit." DAY)";
		elseif ($DB->type == "MSSQL")
			$sqlLimit = " AND M.DATE_CREATE > dateadd(day, -".$limit.", getdate())";
		elseif ($DB->type == "ORACLE")
			$sqlLimit = " AND M.DATE_CREATE > SYSDATE-".$limit;
	}
	if (!$bTimeZone)
		CTimeZone::Disable();

	$strSql = "
		SELECT
			M.ID,
			M.CHAT_ID,
			M.MESSAGE,
			".$DB->DatetimeToTimestampFunction('M.DATE_CREATE')." DATE_CREATE,
			M.AUTHOR_ID,
			C.TITLE CHAT_TITLE,
			C.COLOR CHAT_COLOR,
			C.ENTITY_TYPE CHAT_ENTITY_TYPE,
			C.ENTITY_DATA_1 CHAT_ENTITY_DATA_1,
			C.ENTITY_DATA_2 CHAT_ENTITY_DATA_2,
			C.ENTITY_DATA_3 CHAT_ENTITY_DATA_3,
			".$DB->DatetimeToTimestampFunction('C.DATE_CREATE')." CHAT_DATE_CREATE,
			C.TYPE CHAT_TYPE,
			R.ID RID
		FROM b_im_message M
		INNER JOIN b_im_chat C ON C.ID = M.CHAT_ID AND C.LAST_MESSAGE_ID = M.ID
		LEFT JOIN b_im_relation R ON R.CHAT_ID = M.CHAT_ID AND R.USER_ID = ".$fromUserId."
		WHERE
			M.ID = C.LAST_MESSAGE_ID
			AND M.CHAT_ID IN (".implode(",",$arChatId).")
			".$sqlLimit."
	";
	if (!$bTimeZone)
		CTimeZone::Enable();

	$arMessages = Array();
	$enableOpenChat = CIMMessenger::CheckEnableOpenChat();
	$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); while ($arRes = $dbRes->Fetch()) { $arRes['CHAT_TYPE'] = trim($arRes['CHAT_TYPE']); if ($arRes['CHAT_TYPE'] == IM_MESSAGE_OPEN) { if (!$enableOpenChat) { continue; } else if (intval($arRes['RID']) <= 0 && IMUser::getInstance($this->user_id)->isExtranet()) { continue; } } else if (intval($arRes['RID']) <= 0) { continue; } $chatType = BitrixImChat::getType($arRes); $arMessages[$arRes['CHAT_ID']] = Array( 'id' => $arRes['ID'], 'senderId' => $arRes['AUTHOR_ID'], 'recipientId' => $arRes['CHAT_ID'], 'chatTitle' => BitrixImText::decodeEmoji($arRes['CHAT_TITLE']), 'date' => BitrixMainTypeDateTime::createFromTimestamp($arRes['DATE_CREATE']), 'color' => $arRes["CHAT_COLOR"] == ""? IMColor::getColorByNumber($arRes['CHAT_ID']): IMColor::getColor($arRes['CHAT_COLOR']), 'type' => $chatType, 'messageType' => $arRes["CHAT_TYPE"], 'text' => BitrixImText::parse($arRes['MESSAGE']), 'textLegacy' => BitrixImText::parseLegacyFormat($arRes['MESSAGE']), ); } return $arMessages; }