• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/mysql/messages.php
  • Класс: CSocNetMessages
  • Вызов: CSocNetMessages::GetMessagesForChat
static function GetMessagesForChat($currentUserID, $userID, $date = false, $arNavStartParams = false, $replyMessId=false)
{
	global $DB;

	$currentUserID = intval($currentUserID);
	if ($currentUserID <= 0)
		return false;

	$userID = intval($userID);

	if ($date !== false)
	{
		$date = Trim($date);
		if ($date == '')
			return false;

		if (!preg_match("#dddd-dd-dd dd:dd:dd#i", $date))
			return false;
	}

	$replyMessId = intval($replyMessId);

	//time zone
	$diff = false;
	if(CTimeZone::Enabled())
		$diff = CTimeZone::GetOffset();

	if($diff !== false && $diff <> 0)
		$sDateFmt = "DATE_FORMAT(DATE_ADD(DATE_CREATE, INTERVAL ".$diff." SECOND), '%Y-%m-%d %H:%i:%s') as DATE_CREATE_FMT, ";			
	else
		$sDateFmt = "DATE_FORMAT(DATE_CREATE, '%Y-%m-%d %H:%i:%s') as DATE_CREATE_FMT, ";

	$strSql =
		"SELECT 'IN' as WHO, ID, FROM_USER_ID as USER_ID, TITLE, MESSAGE, DATE_VIEW as DATE_VIEW, DATE_CREATE, ".
		"	".$sDateFmt.
		"	".$DB->DateToCharFunction("DATE_CREATE", "FULL")." as DATE_CREATE_FORMAT ".
		"FROM b_sonet_messages ".
		"WHERE TO_USER_ID = ".$currentUserID." ".
		($userID > 0? "	AND FROM_USER_ID = ".$userID." ":"").
		"	AND TO_DELETED = 'N' ".
		"	AND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') ".
		(($date !== false && $replyMessId <=0) ? " AND MESSAGE_TYPE = 'P' AND DATE_CREATE > '".$DB->ForSql($date)."' " : "").
		(($replyMessId > 0) ? " AND MESSAGE_TYPE = 'P' AND ID >= '".$replyMessId."' " : "").
		"UNION ALL ".
		"SELECT 'OUT' as WHO, ID, TO_USER_ID as USER_ID, TITLE, MESSAGE, DATE_CREATE as DATE_VIEW, DATE_CREATE, ".
		"	".$sDateFmt.
		"	".$DB->DateToCharFunction("DATE_CREATE", "FULL")." as DATE_CREATE_FORMAT ".
		"FROM b_sonet_messages ".
		"WHERE FROM_USER_ID = ".$currentUserID." ".
		($userID > 0? "	AND TO_USER_ID = ".$userID." ":"").
		"	AND FROM_DELETED = 'N' ".
		"	AND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') ".
		(($date !== false && $replyMessId <=0) ? " AND MESSAGE_TYPE = 'P' AND DATE_CREATE > '".$DB->ForSql($date)."' " : "").
		(($replyMessId > 0) ? " AND MESSAGE_TYPE = 'P' AND ID >= '".$replyMessId."' " : "").
		"ORDER BY DATE_CREATE ".(($date !== false) ? "ASC" : "DESC")." ";

	if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"]) <= 0)
	{
		$strSql_tmp =
			"SELECT COUNT(M.ID) as CNT ".
			"FROM b_sonet_messages M ".
			"WHERE (M.TO_USER_ID = ".$currentUserID." ".
			($userID > 0? "	AND M.FROM_USER_ID = ".$userID." ":"").
			"	AND M.TO_DELETED = 'N' ".
			"	OR ".
			"	M.FROM_USER_ID = ".$currentUserID." ".
			($userID > 0? "	AND M.TO_USER_ID = ".$userID." ":"").
			"	AND M.FROM_DELETED = 'N') ".
			"	AND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') ".
			(($date !== false || $replyMessId > 0) ? " AND M.MESSAGE_TYPE = 'P' " : "");

		$dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."
Line: ".__LINE__); $cnt = 0; if ($arRes = $dbRes->Fetch()) $cnt = $arRes["CNT"]; $dbRes = new CDBResult(); $dbRes->NavQuery($strSql, $cnt, $arNavStartParams); } else { if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"]) > 0) $strSql .= "LIMIT ".intval($arNavStartParams["nTopCount"]); $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } return $dbRes; }