• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/preset/provider.php
  • Класс: BitrixRestPresetProvider
  • Вызов: Provider::deleteIntegration
static function deleteIntegration($id)
{
	$result = [
		'result' => 'success'
	];
	$errorList = [];

	$res = IntegrationTable::getList(
		[
			'filter' => [
				'=ID' => $id
			],
			'select' => [
				'ID',
				'APP_ID',
				'BOT_ID',
				'PASSWORD_ID',
				'USER_ID'
			],
			'limit' => 1
		]
	);
	if ($integration = $res->fetch())
	{
		global $USER;
		if ($integration['USER_ID'] === $USER->GetID() || CRestUtil::isAdmin())
		{
			$filterEvent = [
				'=INTEGRATION_ID' => $integration['ID']
			];
			if ($integration['BOT_ID'] > 0 && Loader::includeModule('im'))
			{
				$res = BotTable::getList(
					[
						'filter' => [
							'=BOT_ID' => $integration['BOT_ID'],
						]
					]
				);
				if ($bot = $res->fetch())
				{
					$filterEvent = [
						'LOGIC' => 'OR',
						$filterEvent,
						[
							'=APP_ID' => '',
							'=APPLICATION_TOKEN' => $bot['APP_ID'],
						]
					];
					Bot::unRegister(
						[
							'BOT_ID' => $integration['BOT_ID'],
							'MODULE_ID' => 'rest'
						]
					);
				}
			}
			if (($integration['PASSWORD_ID'] > 0) && !static::deleteWebHook($integration['PASSWORD_ID']))
			{
				$errorList[] = Loc::getMessage('INTEGRATION_PRESET_PROVIDER_ERROR_DELETE_WEBHOOK');
			}
			$resEvent = EventTable::getList(
				[
					'filter' => $filterEvent,
					'select' => [
						'ID'
					]
				]
			);
			while ($event = $resEvent->fetch())
			{
				$res = EventTable::delete($event['ID']);
				if (!$res->isSuccess())
				{
					$errorList[] = $res->getErrorMessages();
				}
			}
			$res = AppTable::getList(
				[
					'filter' => [
						'=ID' => $integration['APP_ID']
					],
					'select' => [
						'ID'
					]
				]
			);
			if ($app = $res->fetch())
			{
				$resPlacement = PlacementTable::getList(
					[
						'filter' => [
							'=APP_ID' => $app['ID']
						],
						'select' => [
							'ID'
						]
					]
				);
				while ($placement = $resPlacement->fetch())
				{
					$res = PlacementTable::delete($placement['ID']);
					if (!$res->isSuccess())
					{
						$errorList[] = $res->getErrorMessages();
					}
				}
				$res = AppTable::delete($app['ID']);
				if (!$res->isSuccess())
				{
					$errorList[] = $res->getErrorMessages();
				}
			}

			if (empty($errorList))
			{
				$res = IntegrationTable::delete($integration['ID']);
				if (!$res->isSuccess())
				{
					$errorList[] = $res->getErrorMessages();
				}
			}
		}
		else
		{
			$errorList[] = Loc::getMessage('INTEGRATION_PRESET_PROVIDER_ERROR_ACCESS_DENIED');
		}
	}

	if (!empty($errorList))
	{
		$result['result'] = 'error';
		$result['errors'] = $errorList;
	}

	BitrixRestEngineAccess::getActiveEntity(true);

	return $result;
}