private function getTopSubMilestoneArtifacts(PFUser $user, Planning_VirtualTopMilestone $top_milestone)
 {
     $artifacts = array();
     if (!$top_milestone->getPlanning()) {
         return $artifacts;
     }
     $milestone_planning_tracker_id = $top_milestone->getPlanning()->getPlanningTrackerId();
     if (!$milestone_planning_tracker_id) {
         return $artifacts;
     }
     return $this->artifact_factory->getArtifactsByTrackerId($milestone_planning_tracker_id);
 }
 /**
  * Return the list of top most milestones
  *
  * @param PFUser $user
  * @param Planning_VirtualTopMilestone $top_milestone
  *
  * @return Planning_ArtifactMilestone[]
  */
 private function getTopSubMilestones(PFUser $user, Planning_VirtualTopMilestone $top_milestone)
 {
     $milestones = array();
     if (!$top_milestone->getPlanning()) {
         return $milestones;
     }
     $root_planning = $this->planning_factory->getRootPlanning($user, $top_milestone->getProject()->getID());
     $milestone_planning_tracker_id = $top_milestone->getPlanning()->getPlanningTrackerId();
     $artifacts = $this->artifact_factory->getArtifactsByTrackerId($milestone_planning_tracker_id);
     if ($milestone_planning_tracker_id) {
         foreach ($artifacts as $artifact) {
             if ($artifact->getLastChangeset() && $artifact->userCanView($user)) {
                 $milestone = new Planning_ArtifactMilestone($top_milestone->getProject(), $root_planning, $artifact);
                 $this->addMilestoneAncestors($user, $milestone);
                 $this->updateMilestoneContextualInfo($user, $milestone);
                 $milestones[] = $milestone;
             }
         }
     }
     return $milestones;
 }