Esempio n. 1
0
 /**
  * Finds SPI content info objects for the given query.
  *
  * Internal for use by {@link findContent} and {@link findContentInfo}.
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException if query is not valid
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query $query
  * @param array $languageFilter - 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 bool $filterOnUserPermissions if true only the objects which is the user allowed to read are returned.
  *
  * @return \eZ\Publish\API\Repository\Values\Content\Search\SearchResult With "raw" SPI contentInfo objects in result
  */
 protected function internalFindContentInfo(Query $query, array $languageFilter = array(), $filterOnUserPermissions = true)
 {
     if (!is_int($query->offset)) {
         throw new InvalidArgumentType('$query->offset', 'integer', $query->offset);
     }
     if (!is_int($query->limit)) {
         throw new InvalidArgumentType('$query->limit', 'integer', $query->limit);
     }
     $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);
     if ($filterOnUserPermissions && !$this->permissionsCriterionHandler->addPermissionsCriterion($query->filter)) {
         return new SearchResult(array('time' => 0, 'totalCount' => 0));
     }
     return $this->searchHandler->findContent($query, $languageFilter);
 }
Esempio n. 2
0
 /**
  * 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;
 }