/** * Renders select milestone box * * @param string $name * @param Project $project * @param integer $selected ID of selected milestone * @param array $attributes Array of additional attributes * @return string * @throws InvalidInstanceError */ function select_milestone($name, $project = null, $selected = null, $attributes = null) { if (is_array($attributes)) { if (!isset($attributes['class'])) { $attributes['class'] = 'select_milestone'; } } else { $attributes = array('class' => 'select_milestone'); } // if $options = array(option_tag(lang('none'), 0)); if ($project) { $milestones = $project->getOpenMilestones(); } else { $milestones = ProjectMilestones::getActiveMilestonesByUser(logged_user()); } if (is_array($milestones)) { if ($selected) { //Fixes bug: If task is in a subworkspace of it's milestone's workspace, and user is standing on it, the assigned milestone is set to none when task is edited. $is_in_array = false; foreach ($milestones as $milestone) { if ($milestone->getId() == $selected) { $is_in_array = true; } } if (!$is_in_array) { $milestone = ProjectMilestones::findById($selected); if ($milestone) { $milestones[] = $milestone; } } } foreach ($milestones as $milestone) { $option_attributes = $milestone->getId() == $selected ? array('selected' => 'selected') : null; $options[] = option_tag($milestone->getName(), $milestone->getId(), $option_attributes); } // foreach } // if return select_box($name, $options, $attributes); }