- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/checklist/internals/checklisttree.php
- Класс: BitrixTasksCheckListInternalsCheckListTree
- Вызов: CheckListTree::detachSubTree
static function detachSubTree($rootId)
{
$result = new Result();
if (!static::isNodeExist($rootId))
{
$result = static::addErrorToResult($result, ['#ID#' => $rootId], __METHOD__, 'NODE_NOT_FOUND');
}
else
{
$children = static::getChildren($rootId);
if (empty($children))
{
$result = static::detach($rootId);
}
else
{
$children[] = $rootId;
$children = implode(', ', $children);
$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} = {$rootId} AND {$levelColumnName} <> 0",
$parentColumnName
);
$sql = "
DELETE FROM {$tableName}
WHERE {$parentColumnName} IN ({$parentSubQuerySql}) AND {$childColumnName} IN ({$children})
";
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;
}