You are here

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

Checks a filter object for filters on the used indexes.

Parameters

SearchApiQueryFilterInterface $filter: The filter whose indexes should be added.

Return value

array An array mapping the machine names of all indexes used in the filter to TRUE.

1 call to SearchApiMultiQuery::checkFilterIndexes()
SearchApiMultiQuery::filter in ./search_api_multi.query.inc
Adds a subfilter to this query's filter.

File

./search_api_multi.query.inc, line 587

Class

SearchApiMultiQuery
Standard implementation of SearchApiMultiQueryInterface.

Code

protected function checkFilterIndexes(SearchApiQueryFilterInterface $filter) {
  $indexes = array();

  // Remember all the indexes of fields used in any filters, so we can later
  // restrict the search to only those. Also, restrict the search correctly if
  // the "search_api_multi_index" field is used.
  foreach ($filter
    ->getFilters() as $f) {
    if (is_array($f)) {
      if ($f[0] == 'search_api_multi_index') {
        if ($f[2] == '=') {
          $indexes[$f[1]] = TRUE;
        }
        else {
          foreach ($this->indexes as $id => $index) {
            if ($id != $f[1]) {
              $indexes[$id] = TRUE;
            }
          }
        }
      }
      elseif ($f[2] != '<>' && strpos($f[0], ':')) {
        list($index_id) = explode(':', $f[0], 2);
        $indexes[$index_id] = TRUE;
      }
    }
    else {
      $indexes += $this
        ->checkFilterIndexes($f);
    }
  }
  return $indexes;
}