• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/database/structure/closuretree.php
  • Класс: Bitrix\Tasks\Internals\DataBase\Structure\is
  • Вызов: is::getSubTree
static function getSubTree($id, array $parameters = array(), array $settings = array())
{
	/** @var DataManager $dc */
	$dc = static::getDataController();
	$pCName = static::getParentNodeColumnName();
	$cName = static::getNodeColumnName();

	$id = intval($id);

	$parameters['runtime'][] = new Entity\ReferenceField(
		'TDD',
		$dc::getEntity(),
		array(
			'=ref.'.$cName => 'this.'.$cName,
			'=ref.DIRECT' => array('?', '1'),
			'!=ref.'.$cName => 'ref.'.$pCName,
		),
		array(
			//'join_type' => 'inner'
		)
	);

	$parameters['filter']['='.$pCName] = $id;

	$parameters['select'][] = $cName;
	$parameters['select']['ACTUAL_PARENT_ID'] = 'TDD.'.$pCName;

	$res = $dc::getList($parameters);
	$data = array();

	$returnArray = ($settings['RETURN_ARRAY'] ?? null);

	if ($returnArray && ($settings['GROUP_PARENT'] ?? null))
	{
		while($item = $res->fetch())
		{
			$parentId = $item['ACTUAL_PARENT_ID'];
			unset($item['ACTUAL_PARENT_ID']);

			$data[intval($parentId)][$item[$cName]] = $item;
		}

		return $data;
	}

	while($item = $res->fetch())
	{
		$item['__PARENT_ID'] = $item['ACTUAL_PARENT_ID'];
		$item['__ID'] = $item[$cName];

		unset($item['ACTUAL_PARENT_ID']);
		unset($item[$cName]);

		$data[$item['__ID']] = $item;
	}

	if ($returnArray)
	{
		return $data;
	}

	return new ClosureTree\Fragment($data);
}