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