• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/checklist/internals/checklisttree.php
  • Класс: BitrixTasksCheckListInternalsCheckListTree
  • Вызов: CheckListTree::detach
static function detach($id)
{
	$result = new Result();

	if (!static::isNodeExist($id))
	{
		$result = static::addErrorToResult($result, ['#ID#' => $id], __METHOD__, 'NODE_NOT_FOUND');
	}
	else
	{
		$connection = Application::getConnection();

		$tableName = static::getTableName();
		$parentColumnName = static::getParentNodeColumnName();
		$childColumnName = static::getNodeColumnName();
		$levelColumnName = static::getLevelColumnName();

		/** @noinspection PhpUndefinedClassInspection */
		$parentSubQuerySql = Helper::getTemporaryTableSubQuerySql(
			"SELECT {$parentColumnName} FROM {$tableName} WHERE {$childColumnName} = {$id} AND {$levelColumnName} <> 0",
			$parentColumnName
		);

		/** @noinspection PhpUndefinedClassInspection */
		$childSubQuerySql = Helper::getTemporaryTableSubQuerySql(
			"SELECT {$childColumnName} FROM {$tableName} WHERE {$parentColumnName} = {$id}",
			$childColumnName
		);

		$sql = "
			DELETE FROM {$tableName}
			WHERE
				/*nodes from path (above node)*/
				{$parentColumnName} IN ({$parentSubQuerySql})
				AND
				/*nodes from subtree (below node + node itself)*/
				{$childColumnName} IN ({$childSubQuerySql})
		";

		try
		{
			$connection->query($sql);
		}
		catch (SqlException $exception)
		{
			$result->addException($exception);
		}

		if ($result->isSuccess())
		{
			$removed = $connection->getAffectedRowsCount();
			if (!$removed)
			{
				$result->addWarning('NO_ROWS_AFFECTED', 'No rows were affected');
			}
		}
	}

	return $result;
}