Example #1
0
/**
 * 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);
}