Как получить дерево подзадач?

Как получить всю ветку ID подзадач?

\CTasks::getTaskSubTree($taskId)

Вернет нам список всех ID вне зависимости от уровня вложения.

Array
(
    [0] => 100002
    [1] => 100003
    [2] => 100004
    [3] => 100005
)

Увы, без информации о вложенности.

Как получить сами задачи? Рекурсивно!
Имеем уже существующую задачу и запрашиваем ее подзадачи

$tree = $this->getSubTasks($taskId);

В итоге имеет массив со всеми задачами, с уровнем вложенности.
В идеале, советую использовать новое ядро и closure table

private function getSubTasks($taskId, $level = 0)
{
   $list = array();

   if(\CTasks::getTaskSubTree($taskId))
   {
      $this->listParameters['legacyFilter']['PARENT_ID'] = $taskId;
      $getListParameters = array(
         'order'        => $this->getOrder(),
         'select'       => $this->getSelect(),
         'legacyFilter' => $this->listParameters['legacyFilter'],
      );

      $mgrResult = Manager\Task::getList($this->userId, $getListParameters);
      $level ++;

      if($mgrResult['DATA'])
      {
         foreach ($mgrResult['DATA'] as $item)
         {
            $item['__LEVEL'] = $level;
            $list[] = $item;
            if ($sub = $this->getSubTasks($item['ID'], $level))
            {
               $list = array_merge($list, $sub);
            }
         }
      }
   }

   return $list;
}

Оставьте комментарий