You are here

protected function SearchApiMultiQuery::addFilters in Search API Multi-Index Searches 7

Helper method for adding a filter to index-specific queries.

Parameters

SearchApiQueryFilterInterface[]|array[] $filters: An array of filters to add, as returned by SearchApiQueryFilterInterface::getFilters().

SearchApiQuery[] $parents: The query or filter objects to which the filters should be applied, keyed by index ID.

SearchApiQuery[] $queries: The queries used, keyed by index ID.

1 call to SearchApiMultiQuery::addFilters()
SearchApiMultiQuery::searchMultiple in ./search_api_multi.query.inc
Searches multiple indexes with this query.

File

./search_api_multi.query.inc, line 872

Class

SearchApiMultiQuery
Standard implementation of SearchApiMultiQueryInterface.

Code

protected function addFilters(array $filters, array $parents, array $queries) {
  foreach ($filters as $filter) {
    if (is_array($filter)) {
      if ($filter[0] == 'search_api_multi_index') {
        continue;
      }
      list($index_id, $field) = explode(':', $filter[0], 2);
      if (!empty($parents[$index_id])) {
        $parents[$index_id]
          ->condition($field, $filter[1], $filter[2]);
      }
    }
    else {

      /** @var SearchApiQueryFilterInterface[] $nested */
      $nested = array();
      foreach ($parents as $index_id => $query) {
        $nested[$index_id] = $queries[$index_id]
          ->createFilter($filter
          ->getConjunction());
      }
      $this
        ->addFilters($filter
        ->getFilters(), $nested, $queries);
      foreach ($nested as $index_id => $nested_filter) {
        if ($nested_filter
          ->getFilters()) {
          $parents[$index_id]
            ->filter($nested_filter);
        }
      }
    }
  }
}