- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_notify.php
- Класс: CIMNotify
- Вызов: CIMNotify::GetNotifyList
public function GetNotifyList($arParams = array())
{
global $DB;
$iNumPage = 1;
if (isset($arParams['PAGE']) && intval($arParams['PAGE']) >= 0)
$iNumPage = intval($arParams['PAGE']);
$bTimeZone = isset($arParams['USE_TIME_ZONE']) && $arParams['USE_TIME_ZONE'] == 'N'? false: true;
$sqlStr = "
SELECT COUNT(M.ID) as CNT, M.CHAT_ID
FROM b_im_relation R
INNER JOIN b_im_message M ON M.CHAT_ID = R.CHAT_ID
WHERE R.USER_ID = ".$this->user_id." AND R.MESSAGE_TYPE = '".IM_MESSAGE_SYSTEM."'
GROUP BY M.CHAT_ID
ORDER BY M.CHAT_ID
";
$res_cnt = $DB->Query($sqlStr);
$res_cnt = $res_cnt->Fetch();
$cnt = $res_cnt["CNT"];
$chatId = $res_cnt["CHAT_ID"];
$arNotify = Array();
if ($cnt > 0)
{
if (!$bTimeZone)
CTimeZone::Disable();
$strSql ="
SELECT
M.ID,
M.CHAT_ID,
M.MESSAGE,
M.MESSAGE_OUT,
".$DB->DatetimeToTimestampFunction('M.DATE_CREATE')." DATE_CREATE,
M.NOTIFY_TYPE,
M.NOTIFY_MODULE,
M.NOTIFY_EVENT,
M.NOTIFY_TITLE,
M.NOTIFY_BUTTONS,
M.NOTIFY_TAG,
M.NOTIFY_SUB_TAG,
M.NOTIFY_READ,
$this->user_id TO_USER_ID,
M.AUTHOR_ID FROM_USER_ID
FROM b_im_message M
WHERE M.CHAT_ID = ".$chatId." #LIMIT#
ORDER BY M.DATE_CREATE DESC, M.ID DESC
";
if (!$bTimeZone)
CTimeZone::Enable();
if ($iNumPage == 0)
{
$sqlLimit = '';
if ($DB->type == "MYSQL")
$sqlLimit = " AND M.DATE_CREATE > DATE_SUB(NOW(), INTERVAL 30 DAY)";
elseif ($DB->type == "MSSQL")
$sqlLimit = " AND M.DATE_CREATE > dateadd(day, -30, getdate())";
elseif ($DB->type == "ORACLE")
$sqlLimit = " AND M.DATE_CREATE > SYSDATE-30";
$strSql = $DB->TopSql($strSql, 100);
$dbRes = $DB->Query(str_replace("#LIMIT#", $sqlLimit, $strSql), false, "File: ".__FILE__."
Line: ".__LINE__);
}
else
{
$dbRes = new CDBResult();
$dbRes->NavQuery(str_replace("#LIMIT#", "", $strSql), $cnt, Array('iNumPage' => $iNumPage, 'nPageSize' => 20));
}
$arGetUsers = Array();
$arNotifyId = Array();
$arChatId = Array();
while ($arRes = $dbRes->Fetch())
{
if ($this->bHideLink)
$arRes['HIDE_LINK'] = 'Y';
$arNotify[$arRes['ID']] = $arRes;
$arNotifyId[$arRes['ID']] = $arRes['ID'];
$arGetUsers[] = $arRes['FROM_USER_ID'];
$arChatId[$arRes['CHAT_ID']] = $arRes['CHAT_ID'];
}
if (empty($arNotify))
return $arNotify;
$counters = self::GetCounters($arChatId);
$params = CIMMessageParam::Get(array_keys($arNotifyId));
foreach ($params as $notifyId => $param)
{
$arNotify[$notifyId]['PARAMS'] = $param;
}
$arUsers = CIMContactList::GetUserData(Array('ID' => $arGetUsers, 'DEPARTMENT' => 'N', 'USE_CACHE' => 'Y', 'CACHE_TTL' => 86400));
$arGetUsers = $arUsers['users'];
$arNotify = $this->fillReadStatuses($arNotify);
foreach ($arNotify as $key => $value)
{
$value['COUNTER'] = $counters[$value['CHAT_ID']];
$value['FROM_USER_DATA'] = $arGetUsers;
$arNotify[$key] = self::GetFormatNotify($value);
}
}
return $arNotify;
}