You are here

public function SearchFacetapiTerm::execute in Faceted Navigation for Search 7

Adds the filter to the query object.

Parameters

$query: An object containing the query in the backend's native API.

File

plugins/facetapi/query_type_term.inc, line 29
Term query type plugin for the Faceted Navigation for Search adapter.

Class

SearchFacetapiTerm
Plugin for "term" query types.

Code

public function execute($query) {
  $facet_query = $this->adapter
    ->getFacetQueryExtender();
  $query_info = $this->adapter
    ->getQueryInfo($this->facet);
  $tables_joined = array();

  // Iterates over active items, adds joins and conditions.
  $active_items = $this->adapter
    ->getAllActiveItems();
  foreach ($active_items as $item) {
    if ($this->facet['name'] == $item['facets'][0]) {
      foreach ($query_info['fields'] as $field_info) {

        // Adds join to the facet query.
        $facet_query
          ->addFacetJoin($query_info, $field_info['table_alias']);

        // Adds adds join to search query, makes sure it is only added once.
        if (isset($query_info['joins'][$field_info['table_alias']])) {
          if (!isset($tables_joined[$field_info['table_alias']])) {
            $tables_joined[$field_info['table_alias']] = TRUE;
            $join_info = $query_info['joins'][$field_info['table_alias']];
            $query
              ->join($join_info['table'], $join_info['alias'], $join_info['condition']);
          }
        }

        // Adds facet conditions to the queries.
        $field = $field_info['table_alias'] . '.' . $field_info['field'];
        $query
          ->condition($field, $item['value']);
        $facet_query
          ->condition($field, $item['value']);
      }
    }
  }
}