/** * Finds content objects for the given query. * * @todo define structs for the field filters * * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException if query is not valid * * @param \eZ\Publish\API\Repository\Values\Content\Query $query * @param array $fieldFilters - a map of filters for the returned fields. * Currently supported: <code>array("languages" => array(<language1>,..))</code>. * @param boolean $filterOnUserPermissions if true only the objects which is the user allowed to read are returned. * * @return \eZ\Publish\API\Repository\Values\Content\Search\SearchResult */ public function findContent(Query $query, array $fieldFilters = array(), $filterOnUserPermissions = true) { $query = clone $query; $query->filter = $query->filter ?: new Criterion\MatchAll(); $this->validateContentCriteria(array($query->query), "\$query"); $this->validateContentCriteria(array($query->filter), "\$query"); $this->validateContentSortClauses($query); $this->validateSortClauses($query); if ($filterOnUserPermissions && !$this->permissionsCriterionHandler->addPermissionsCriterion($query->filter)) { return new SearchResult(array('time' => 0, 'totalCount' => 0)); } if ($query->limit === null) { $query->limit = self::MAX_LIMIT; } $result = $this->searchHandler->findContent($query, $fieldFilters); foreach ($result->searchHits as $hit) { $hit->valueObject = $this->domainMapper->buildContentDomainObject($hit->valueObject); } return $result; }
/** * Finds content objects for the given query. * * @todo define structs for the field filters * * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException if query is not valid * * @param \eZ\Publish\API\Repository\Values\Content\Query $query * @param array $fieldFilters - a map of filters for the returned fields. * Currently supports: <code>array("languages" => array(<language1>,..), "useAlwaysAvailable" => bool)</code> * useAlwaysAvailable defaults to true to avoid exceptions on missing translations. * @param boolean $filterOnUserPermissions if true only the objects which is the user allowed to read are returned. * * @return \eZ\Publish\API\Repository\Values\Content\Search\SearchResult */ public function findContent(Query $query, array $fieldFilters = array(), $filterOnUserPermissions = true) { $query = clone $query; $query->filter = $query->filter ?: new Criterion\MatchAll(); $this->validateContentCriteria(array($query->query), "\$query"); $this->validateContentCriteria(array($query->filter), "\$query"); $this->validateContentSortClauses($query); $this->validateSortClauses($query); if ($filterOnUserPermissions && !$this->permissionsCriterionHandler->addPermissionsCriterion($query->filter)) { return new SearchResult(array('time' => 0, 'totalCount' => 0)); } if ($query->limit === null) { $query->limit = self::MAX_LIMIT; } $result = $this->searchHandler->findContent($query, $fieldFilters); $contentService = $this->repository->getContentService(); foreach ($result->searchHits as $hit) { $hit->valueObject = $contentService->loadContent($hit->valueObject->id, !empty($fieldFilters['languages']) ? $fieldFilters['languages'] : null, null, isset($fieldFilters['useAlwaysAvailable']) ? $fieldFilters['useAlwaysAvailable'] : true); } return $result; }