/** Get data to display on GANTT for a project task * * @param $ID ID of the project task */ static function getDataToDisplayOnGantt($ID) { global $DB; $todisplay = array(); $task = new self(); // echo $ID.'<br>'; if ($task->getFromDB($ID)) { $subtasks = array(); foreach ($DB->request('glpi_projecttasks', array('projecttasks_id' => $ID, 'ORDER' => array('plan_start_date', 'real_start_date'))) as $data) { $subtasks += static::getDataToDisplayOnGantt($data['id']); } $real_begin = NULL; $real_end = NULL; // Use real if set if (!is_null($task->fields['real_start_date'])) { $real_begin = $task->fields['real_start_date']; } // Determine begin / end date of current task if not set (min/max sub projects / tasks) if (is_null($real_begin)) { if (!is_null($task->fields['plan_start_date'])) { $real_begin = $task->fields['plan_start_date']; } else { foreach ($subtasks as $subtask) { if (is_null($real_begin) || !is_null($subtask['from']) && $real_begin > $subtask['from']) { $real_begin = $subtask['from']; } } } } // Use real if set if (!is_null($task->fields['real_end_date'])) { $real_end = $task->fields['real_end_date']; } if (is_null($real_end)) { if (!is_null($task->fields['plan_end_date'])) { $real_end = $task->fields['plan_end_date']; } else { foreach ($subtasks as $subtask) { if (is_null($real_end) || !is_null($subtask['to']) && $real_end < $subtask['to']) { $real_end = $subtask['to']; } } } } $parents = 0; if ($task->fields['projecttasks_id'] > 0) { $parents = count(getAncestorsOf("glpi_projecttasks", $ID)); } if ($task->fields['is_milestone']) { $percent = ""; } else { $percent = isset($task->fields['percent_done']) ? $task->fields['percent_done'] : 0; } // Add current task $todisplay[$real_begin . '#' . $real_end . '#task' . $task->getID()] = array('id' => $task->getID(), 'name' => $task->fields['name'], 'desc' => $task->fields['content'], 'link' => $task->getlink(), 'type' => 'task', 'percent' => $percent, 'from' => $real_begin, 'parents' => $parents, 'to' => $real_end, 'is_milestone' => $task->fields['is_milestone']); // Add ordered subtasks foreach ($subtasks as $key => $val) { $todisplay[$key] = $val; } } return $todisplay; }