• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/agent.php
  • Класс: BitrixImConnectorAgent
  • Вызов: Agent::notifyUndelivered
static function notifyUndelivered(): string
{
	if (!Loader::includeModule('imopenlines'))
	{
		return __METHOD__ . '();';
	}

	$connection = Application::getInstance()->getConnection();
	$helper = $connection->getSqlHelper();

	$query = '
		SELECT s.*
		FROM b_imopenlines_session s
		INNER JOIN (
			SELECT MAX(MESSAGE_ID), CHAT_ID 
			FROM b_imconnectors_delivery_mark
			WHERE DATE_CREATE < ' . $helper->addSecondsToDateTime(-300) . '
			GROUP BY CHAT_ID 
		) m ON m.CHAT_ID = s.CHAT_ID
		WHERE s.STATUS = ' . Session::STATUS_OPERATOR . '
	';

	$result = $connection->query($query);

	while ($session = $result->fetch())
	{
		$sessionObj = new Session();
		if (
			$sessionObj->load($session)
			&& $sessionObj->getData('STATUS') > Session::STATUS_CLIENT
			&& $sessionObj->getData('STATUS') < Session::STATUS_CLOSE
		)
		{
			$sessionObj->update(['STATUS' => Session::STATUS_CLIENT]);

			$connection->query('DELETE FROM b_imconnectors_delivery_mark WHERE CHAT_ID=' . (int)$session['CHAT_ID']);

			Im::addMessage([
				'TO_CHAT_ID' => $session['CHAT_ID'],
				'MESSAGE' => Loc::getMessage('IMCONNECTOR_YOUR_MESSAGE_NOT_DELIVERED'),
				'SYSTEM' => 'Y',
			]);
		}

	}

	return __METHOD__ . '();';
}