• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/database/structure/closuretree/fragment.php
  • Класс: BitrixTasksInternalsDataBaseStructureClosureTreeFragment
  • Вызов: Fragment::getSubTree
public function getSubTree($point = 0)
{
	$point = intval($point);

	$result = new static();

	// todo: use ->walkWidth() here
	$data = array();
	if(array_key_exists($point, $this->values))
	{
		$index = $this->getIndex();

		$queue = array($point);
		$met = array();
		$limit = 0;
		while(count($queue))
		{
			$limit++;
			if($limit > 10000)
			{
				break;
			}

			$nextId = array_shift($queue);
			if(isset($met[$nextId]))
			{
				continue;
			}
			$met[$nextId] = true;

			$data[$nextId] = $this->values[$nextId];
			if(array_key_exists($nextId, $index))
			{
				foreach($index[$nextId] as $subNodeId => $subNode)
				{
					$queue[] = $subNodeId;
				}
			}
		}

		if($limit > 10000)
		{
			$result->addError('ILLEGAL_STRUCTURE.DEPTH', 'Illegal fragment structure');
		}
	}

	$result->set($data);

	return $result;
}