private function recursivelyFindChildrenBelongingToTracker(Tracker_Artifact $source_artifact, Tracker $expected_tracker, User $user, array $hierarchy) { $artifacts = array(); $children = $source_artifact->getLinkedArtifactsOfHierarchy($user); if (isset($hierarchy[$source_artifact->getId()])) { array_walk($children, array($this, 'keepOnlyArtifactsBelongingToParentTracker'), $hierarchy[$source_artifact->getId()]); array_filter($children); } if ($children) { foreach ($children as $child) { if ($child->getTracker() == $expected_tracker) { $artifacts[] = $child; } else { $artifacts = array_merge($artifacts, $this->recursivelyFindChildrenBelongingToTracker($child, $expected_tracker, $user, $hierarchy)); } } } return $artifacts; }