• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_notify.php
  • Класс: CIMNotify
  • Вызов: CIMNotify::MarkNotifyRead
public function MarkNotifyRead($id = 0, $setThisAndHigher = false, $appId = 'Bitrix24')
{
	$id = intval($id);
	if ($id < 0)
		return false;
	/*global $DB;



	if ($id === 0)
	{
		$query = [
			'select' => ['CHAT_ID'],
			'filter' => [
				'=USER_ID' => $this->user_id,
				'=MESSAGE_TYPE' => IM_MESSAGE_SYSTEM
			]
		];

		$chatResult = BitrixImModelRelationTable::getList($query)->fetch();
		$chatId = (int)$chatResult['CHAT_ID'];
		if (!$chatId)
		{
			return false;
		}
	}
	else
	{
		$query = [
			'select' => ['ID', 'CHAT_ID', 'NOTIFY_TAG'],
			'filter' => [
				'=RELATION.MESSAGE_TYPE' => IM_MESSAGE_SYSTEM,
				'=RELATION.USER_ID' => $this->user_id,
				'=ID' => $id
			]
		];

		$message = BitrixImModelMessageTable::getList($query)->fetch();
		if (!$message)
		{
			return false;
		}

		$chatId = (int)$message['CHAT_ID'];
	}

	$messages = array();

	$filter = [
		'=CHAT_ID' => $chatId,
		'=NOTIFY_READ' => 'N',
	];
	if ($id > 0)
	{
		$filterId = ($setThisAndHigher? '>=': '=').'ID';
		$filter[$filterId] = $id;
	}
	$orm = BitrixImModelMessageTable::getList(Array(
		'select' => ['ID', 'CHAT_ID', 'NOTIFY_TAG'],
		'filter' => $filter
	));
	while ($row = $orm->fetch())
	{
		$messages[$row['ID']] = $row;
	}

	if ($messages)
	{
		$DB->Query("UPDATE b_im_message SET NOTIFY_READ = 'Y' WHERE ID IN (".implode(',', array_keys($messages)).")");
	}

	if (!empty($message['NOTIFY_TAG']))
	{
		$orm = BitrixImModelMessageTable::getList(Array(
			'select' => Array('ID', 'CHAT_ID', 'NOTIFY_TYPE'),
			'filter' => Array(
				'=CHAT_ID' => $chatId,
				'=NOTIFY_READ' => 'N',
				'=NOTIFY_TAG' => $message['NOTIFY_TAG'],
			)
		));
		$tagIds = Array();
		while ($row = $orm->fetch())
		{
			$messages[$row['ID']] = $row;
			$tagIds[] = $row['ID'];
		}
		if ($tagIds)
		{
			$DB->Query("UPDATE b_im_message SET NOTIFY_READ = 'Y' WHERE ID IN (".implode(',', $tagIds).")");
		}
	}

	if (!$messages)
	{
		self::SetLastId($chatId, $this->user_id);
		return false;
	}

	$lastId = max(array_keys($messages));

	self::SetLastId($chatId, $this->user_id, $lastId);*/

	$findResult = NotifyChat::find(['TO_USER_ID' => $this->user_id]);

	if (!$findResult->isSuccess())
	{
		return false;
	}

	$chatId = (int)$findResult->getResult()['ID'];

	$readService = new IMV2MessageReadService($this->user_id);
	$counterService = $readService->getCounterService();

	if ($id === 0)
	{
		$readService->readAllInChat($chatId);
		if (CModule::IncludeModule("pull"))
		{
			BitrixPullEvent::add($this->user_id, Array(
				'module_id' => 'im',
				'command' => 'notifyReadAll',
				'params' => Array(
					'chatId' => $chatId,
				),
				'extra' => BitrixImCommon::getPullExtra()
			));

			BitrixPullMobileCounter::send($this->user_id, $appId);
		}

		return true;
	}

	$messages = [];

	$operator = $setThisAndHigher ? '>=' : '=';
	$query = IMModelMessageUnreadTable::query()
		->setSelect(['MESSAGE_ID'])
		->where('USER_ID', $this->user_id)
		->where('CHAT_ID', $chatId)
		->where('MESSAGE_ID', $operator, $id)
		->exec()
	;

	$messageCollection = new IMV2MessageCollection();

	while ($row = $query->fetch())
	{
		$messages[] = (int)$row['MESSAGE_ID'];
		$message = new BitrixImV2Message();
		$message->setMessageId((int)$row['MESSAGE_ID'])->setChatId($chatId)->setAuthorId(0);
		$messageCollection->add($message);
	}

	if (empty($messages))
	{
		return false;
	}

	$counter = $readService->readNotifications($messageCollection, [$chatId => $this->user_id])->getResult()['COUNTERS'][$chatId];

	if (CModule::IncludeModule("pull"))
	{
		BitrixPullEvent::add($this->user_id, Array(
			'module_id' => 'im',
			'command' => 'notifyRead',
			'params' => Array(
				'chatId' => $chatId,
				'list' => $messages,
				'counter' => $counter
			),
			'extra' => BitrixImCommon::getPullExtra()
		));

		BitrixPullMobileCounter::send($this->user_id, $appId);
	}

	CIMMessenger::SpeedFileDelete($this->user_id, IM_SPEED_NOTIFY);

	return true;
}