/** * @see Tracker_Artifact::getAllowedChildrenTypes() */ public function getAllowedChildrenTypes() { $trackers = $this->artifact->getAllowedChildrenTypes(); if ($this->getTracker() == $this->planning->getPlanningTracker()) { $trackers[] = $this->planning->getBacklogTracker(); } return $trackers; }
/** * 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); }
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; }