• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/update/agent.php
  • Класс: BitrixImopenlinesUpdateAgent
  • Вызов: Agent::update222000
static function update222000(): string
{
	if (
		Loader::IncludeModule('im')
		&& Loader::IncludeModule('imopenlines')
	)
	{
		$connection = BitrixMainApplication::getInstance()->getConnection();
		$configs = [];
		$confList = $connection->query("SELECT ID FROM b_imopenlines_config");
		while ($row = $confList->fetch())
		{
			$configs[] = (int)$row['ID'];
		}

		$type = BitrixImChat::TYPE_OPEN_LINE;
		$chatType = BitrixImOpenLinesChat::CHAT_TYPE_OPERATOR;

		$res = $connection->query("
			SELECT 
				c.ID, c.ENTITY_ID 
			FROM 
				b_im_chat c 
				inner join b_im_recent r
					on c.ID = r.ITEM_ID 
					and r.ITEM_TYPE = '{$type}'
					and c.ENTITY_TYPE = '{$chatType}'
				left join b_imopenlines_session s
					on c.id = s.CHAT_ID
				left join b_imopenlines_config g
					on g.ID = cast(substring_index(substring_index(c.ENTITY_ID, '|', 2), '|', -1) as unsigned)
			WHERE 
				s.ID is null
				AND g.ID is null
		");
		while ($chat = $res->fetch())
		{
			$userCode = BitrixImOpenLinesSessionCommon::parseUserCode($chat['ENTITY_ID']);
			if ($userCode && (int)$userCode['CONFIG_ID'] > 0 && !in_array((int)$userCode['CONFIG_ID'], $configs))
			{
				BitrixImOpenLinesIm::chatHide($chat['ID']);
			}
		}

		if (Loader::includeModule('pull'))
		{
			BitrixPullEvent::send();
		}
	}

	return '';
}