• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/replicator/template/taskproducer.php
  • Класс: BitrixTasksReplicatorTemplateTaskProducer
  • Вызов: TaskProducer::buildTree
private function buildTree(): array
{
	$children = $this->repository->getTemplate()->getChildren();
	if (empty($children))
	{
		return [];
	}

	$walkQueue = [$this->repository->getTemplate()->getId()];
	$treeBundles = [];

	foreach ($children as $subTemplate)
	{
		$treeBundles[$subTemplate['BASE_TEMPLATE_ID']][] = $subTemplate['ID'];
	}

	$tree = $treeBundles;
	$met = [];
	while (!empty($walkQueue))
	{
		$topTemplate = array_shift($walkQueue);
		if (isset($met[$topTemplate])) // hey, i`ve met this guy before!
		{
			return [];
		}
		$met[$topTemplate] = true;

		if (is_array($treeBundles[$topTemplate] ?? null))
		{
			foreach ($treeBundles[$topTemplate] as $template)
			{
				$walkQueue[] = $template;
			}
		}
		unset($treeBundles[$topTemplate]);
	}

	return $tree;
}