public function getUnplannedOpenCollection(PFUser $user, Planning_Milestone $milestone, AgileDashboard_Milestone_Backlog_DescendantBacklogStrategy $backlog_strategy, $redirect_to_self) { $artifacts = array(); $backlog_item_ids = array(); $sub_milestone_ids = $this->getSubmilestoneIds($user, $milestone); $item_collection = $backlog_strategy->getOpenUnplannedArtifacts($user, $sub_milestone_ids); foreach ($item_collection as $artifact) { $artifacts[$artifact->getId()] = $artifact; $backlog_item_ids[] = $artifact->getId(); } $parents = $this->getParentArtifacts($milestone, $user, $backlog_item_ids); $semantics = $this->getArtifactsSemantics($user, $milestone, $backlog_item_ids, $artifacts); if (empty($backlog_item_ids)) { $children = 0; } else { $children = $this->artifact_factory->getChildrenCount($backlog_item_ids); } $collection = $this->backlog_item_builder->getCollection(); foreach ($artifacts as $artifact) { $artifact_id = $artifact->getId(); if (!isset($semantics[$artifact_id]) || !isset($semantics[$artifact_id][Tracker_Semantic_Status::NAME]) || $semantics[$artifact_id][Tracker_Semantic_Status::NAME] != AgileDashboard_BacklogItemDao::STATUS_OPEN) { continue; } $artifact->setTitle($semantics[$artifact_id][Tracker_Semantic_Title::NAME]); $backlog_item = $this->backlog_item_builder->getItem($artifact, $redirect_to_self); $backlog_item->setStatus(Tracker_Semantic_Status::OPEN); if (isset($parents[$artifact_id])) { $backlog_item->setParent($parents[$artifact_id]); } if (isset($children[$artifact_id])) { $backlog_item->setHasChildren($children[$artifact_id] > 0); } $this->setInitialEffort($backlog_item, $semantics[$artifact_id]); $collection->push($backlog_item); } $collection->setTotalAvaialableSize($item_collection->getTotalAvaialableSize()); return $collection; }