You are here

protected function JsonApiQueryString::initializeActiveFilters in JSON:API Search API 8

Initializes the active filters from the request query.

Get all the filters that are active by checking the request query and store them in activeFilters which is an array where key is the facet id and value is an array of raw values.

Overrides QueryString::initializeActiveFilters

File

modules/jsonapi_search_api_facets/src/Plugin/facets/url_processor/JsonApiQueryString.php, line 42

Class

JsonApiQueryString
Query string URL processor.

Namespace

Drupal\jsonapi_search_api_facets\Plugin\facets\url_processor

Code

protected function initializeActiveFilters() {
  $url_parameters = $this->request->query;

  // Get the active facet parameters.
  // @todo can we leverage \Drupal\jsonapi_search_api\Query\Filter
  $active_params = $url_parameters
    ->get($this->filterKey, []);
  $facet_source_id = $this->configuration['facet']
    ->getFacetSourceId();

  // When an invalid parameter is passed in the url, we can't do anything.
  if (!is_array($active_params)) {
    return;
  }
  foreach ($active_params as $param_identifier => $param_value) {

    // Check if this is a complex filter definition.
    if (is_array($param_value)) {
      if (isset($param_value['condition'])) {
        $facet_id = $this
          ->getFacetIdByUrlAlias($param_value['condition']['path'], $facet_source_id);

        // Skip filters that do not target facets.
        if ($facet_id === NULL) {
          $this->originalFilters[$param_identifier] = $param_value;
          continue;
        }
        $this->activeFilters[$facet_id] = [];
        if (isset($param_value['condition']['value'])) {
          foreach ($param_value['condition']['value'] as $condition_value) {
            $this->activeFilters[$facet_id][] = $condition_value;
          }
        }
      }
      else {
        $this->originalFilters[$param_identifier] = $param_value;
      }
    }
    else {

      // Shorthand filter notation.
      $facet_id = $this
        ->getFacetIdByUrlAlias($param_identifier, $facet_source_id);
      if ($facet_id === NULL) {
        $this->originalFilters[$param_identifier] = $param_value;
      }
      else {
        $this->activeFilters[$facet_id] = $param_value;
      }
    }
  }
}