Beispiel #1
0
 /**
  * @see Tracker_Artifact::getAllowedChildrenTypes()
  */
 public function getAllowedChildrenTypes()
 {
     $trackers = $this->artifact->getAllowedChildrenTypes();
     if ($this->getTracker() == $this->planning->getPlanningTracker()) {
         $trackers[] = $this->planning->getBacklogTracker();
     }
     return $trackers;
 }
Beispiel #2
0
 /**
  * Allow to create artifacts when the item comes from the planning tracker and if
  * the backlog tracker is at the root of the hierarchy.
  *
  * Example:
  * Given I have a planning Epic -> Release
  * And Epic has not parent (root of hierarchy)
  * Then I can create an Epic right in the release
  *
  * Counter example:
  * Given I have a planning Story -> Sprint
  * And I have a hierarchy Epic -> Story
  * Then I cannot create Story directly below Sprint
  *
  * @param array $allowed_trackers
  * @return type
  */
 private function appendBacklogTrackerIfRoot(array $allowed_trackers)
 {
     $backlog_tracker = array();
     if ($this->getTracker() == $this->planning->getPlanningTracker()) {
         $backlog_hierarchy = $this->planning->getBacklogTracker()->getHierarchy();
         if ($backlog_hierarchy->isRoot($this->planning->getBacklogTrackerId())) {
             $backlog_tracker = array($this->planning->getBacklogTracker());
         }
     }
     return array_merge($allowed_trackers, $backlog_tracker);
 }
Beispiel #3
0
 public function build(User $user, Project $project, Tracker_CrossSearch_Query $cross_search_query, array $already_planned_artifact_ids, $backlog_tracker_id, Planning $planning, $planning_redirect_parameter)
 {
     $backlog_hierarchy = $this->hierarchy_factory->getHierarchy(array($backlog_tracker_id));
     $report = $this->getReport($user);
     $criteria = $this->getCriteria($user, $project, $report, $cross_search_query);
     $tracker_ids = $backlog_hierarchy->flatten();
     $artifacts = $this->getHierarchicallySortedArtifacts($user, $project, $tracker_ids, $cross_search_query, $already_planned_artifact_ids);
     // The following lines allows to tailor/rebuild the result before display
     // As of today (aug-12), we decided to display everything and to wait for
     // user feedback to see if we need to enable one of them.
     //$visitor     = new Planning_BacklogItemFilterVisitor($backlog_tracker_id, $this->hierarchy_factory, $already_planned_artifact_ids);
     //$artifacts   = $artifacts->accept($visitor);
     //$visitor     = new Planning_GroupByParentsVisitor($user);
     //$artifacts->accept($visitor);
     $backlog_actions_presenter = new Planning_BacklogActionsPresenter($planning->getBacklogTracker(), $planning_redirect_parameter);
     return new Planning_SearchContentView($report, $criteria, $artifacts, Tracker_ArtifactFactory::instance(), $this->form_element_factory, $user, $backlog_actions_presenter, $planning, $planning_redirect_parameter);
 }
 protected function buildContentView(Planning_ViewBuilder $view_builder, Planning $planning, Project $project = null)
 {
     $already_planned_artifact_ids = $this->getAlreadyPlannedArtifactsIds();
     $cross_search_query = $this->getCrossSearchQuery();
     $backlog_tracker_ids = $this->hierarchy_factory->getHierarchy(array($planning->getBacklogTrackerId()))->flatten();
     $backlog_actions_presenter = new Planning_BacklogActionsPresenter($planning->getBacklogTracker(), $this->milestone, $this->getPlanningRedirectToSelf());
     $view = $view_builder->build($this->getCurrentUser(), $project, $cross_search_query, $already_planned_artifact_ids, $backlog_tracker_ids, $planning, $backlog_actions_presenter, $this->getPlanningRedirectToSelf());
     return $view;
 }