public function getArtifactLinkCriteria(User $user, Tracker_Report $report, Tracker_CrossSearch_Query $cross_search_query) { $criteria = array(); $allowed_artifact_ids = array(); foreach ($this->planning_trackers as $tracker) { $tracker_id = $tracker->getId(); $tracker_artifacts = Tracker_ArtifactFactory::instance()->getArtifactsByTrackerIdUserCanView($user, $tracker_id); // TODO: far from being perfect, anyway we should not modify query but // we should only use criteria in the whole stack foreach ($tracker_artifacts as $artifact) { $allowed_artifact_ids[$artifact->getId()] = true; } $tracker_artifacts = $cross_search_query->setSelectedArtifacts($tracker_id, $tracker_artifacts); $field = new Tracker_CrossSearch_ArtifactReportField($tracker, $tracker_artifacts); $criteria[] = $this->buildCriteria($report, $field); } $cross_search_query->purgeArtifactIdsNotInList($allowed_artifact_ids); return $criteria; }