• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/access/chatauthprovider.php
  • Класс: BitrixImAccessChatAuthProvider
  • Вызов: ChatAuthProvider::deleteChatCodes
public function deleteChatCodes(int $chatId, ?array $userIds = null): void
{
	if ($chatId > 0)
	{
		$connection = BitrixMainApplication::getConnection();
		$helper = $connection->getSqlHelper();
		$providerId = $helper->forSql($this->id);
		$accessCode = $helper->forSql($this->generateAccessCode($chatId));

		if ($userIds === null)
		{
			$res = BitrixMainUserAccessTable::getList([
				'filter' => ['=ACCESS_CODE' => $accessCode],
				'select' => ['USER_ID']
			]);
			$userIds = [];
			while ($row = $res->fetch())
			{
				$userIds[] = (int)$row['USER_ID'];
			}

			$connection->queryExecute(/** @lang mysql */ "
				DELETE FROM b_user_access
				WHERE PROVIDER_ID = '{$providerId}' AND ACCESS_CODE = '{$accessCode}' 
			");
		}
		else
		{
			$userIds = array_filter(array_map('intVal', $userIds));
			if (count($userIds) > 0)
			{
				$users = implode(',', $userIds);
				$connection->queryExecute(/** @lang mysql */ "
					DELETE FROM b_user_access
					WHERE PROVIDER_ID = '{$providerId}'
						AND ACCESS_CODE = '{$accessCode}'
						AND USER_ID IN({$users})
				");
			}
		}

		foreach ($userIds as $uid)
		{
			CAccess::ClearCache($uid);
		}
	}
}