/**
  * @return boolean
  */
 private function hasUsableBurndownField(PFUser $user, Planning_ArtifactMilestone $milestone)
 {
     $tracker = $milestone->getArtifact()->getTracker();
     $factory = $this->formelement_factory;
     $duration_field = $factory->getFormElementByName($tracker->getId(), Planning_Milestone::DURATION_FIELD_NAME);
     $initial_effort_field = AgileDashBoard_Semantic_InitialEffort::load($tracker)->getField();
     return $factory->getABurndownField($user, $tracker) && $initial_effort_field && $initial_effort_field->isUsed() && $duration_field && $duration_field->isUsed();
 }
 private function getFieldValue(User $user, Planning_ArtifactMilestone $milestone, $field_name)
 {
     $milestone_artifact = $milestone->getArtifact();
     $field = $this->formelement_factory->getComputableFieldByNameForUser($milestone_artifact->getTracker()->getId(), $field_name, $user);
     if ($field) {
         return $field->getComputedValue($user, $milestone_artifact);
     }
     return 0;
 }
 private function getAddItemsToBacklogUrls(PFUser $user, Planning_ArtifactMilestone $milestone, $redirect_to_self)
 {
     $submit_urls = array();
     foreach ($this->getDescendantTrackers() as $descendant_tracker) {
         if ($descendant_tracker->userCanSubmitArtifact($user)) {
             $submit_urls[] = array('tracker_type' => $descendant_tracker->getName(), 'tracker_id' => $descendant_tracker->getId(), 'submit_url' => $milestone->getArtifact()->getSubmitNewArtifactLinkedToMeUri($descendant_tracker) . '&' . $redirect_to_self);
         }
     }
     return $submit_urls;
 }