- Модуль: 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;
}