• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/integration/report/internals/task.php
  • Класс: BitrixTasksIntegrationReportInternalsTaskTable
  • Вызов: TaskTable::getChildrenTasksData
static function getChildrenTasksData($taskId, $parameters = array())
{
	$taskId = Assert::expectIntegerPositive($taskId, '$taskId');

	if(!is_array($parameters))
	{
		$parameters = array();
	}

	// a shame, but no tree struct here, so have to make "recursive" calls...
	$queue = array($taskId);
	$meetings = array();
	$result = array();

	$i = -1;
	while(!empty($queue))
	{
		$i++;

		$nextId = array_shift($queue);
		if(isset($meetings[$nextId]))
		{
			throw new BitrixTasksException('Task subtree seems to be loopy');
		}
		$meetings[$nextId] = true;

		$nextParams = array_merge_recursive(BitrixTasksInternalsRuntime::cloneFields($parameters), array(
			'filter' => array(
				'=PARENT_ID' => $nextId
			),
			'select' => array(
				'ID'
			)
		));

		$res = static::getList($nextParams);
		while($item = $res->fetch())
		{
			if(intval($item['ID']))
			{
				array_unshift($queue, $item['ID']);

				$result[$item['ID']] = $item;
			}
		}
	}

	return new BitrixMainDBArrayResult($result);
}