You are here

protected function SearchApiElasticsearchBackend::parseFilter in Elasticsearch Connector 8

Recursively parse Search API filters.

2 calls to SearchApiElasticsearchBackend::parseFilter()
SearchApiElasticsearchBackend::getFacetSearchFilter in src/Plugin/search_api/backend/SearchApiElasticsearchBackend.php
Helper function return Facet filter.
SearchApiElasticsearchBackend::getSearchQueryOptions in src/Plugin/search_api/backend/SearchApiElasticsearchBackend.php
Helper function return associative array with query options.

File

src/Plugin/search_api/backend/SearchApiElasticsearchBackend.php, line 646
Contains the SearchApiElasticsearchBackend object.

Class

SearchApiElasticsearchBackend
Plugin annotation @SearchApiBackend( id = "elasticsearch", label = @Translation("Elasticsearch"), description = @Translation("Index items using an Elasticsearch server.") )

Namespace

Drupal\elasticsearch_connector\Plugin\search_api\backend

Code

protected function parseFilter(FilterInterface $query_filter, $index_fields, $ignored_field_id = '') {
  if (empty($query_filter)) {
    return NULL;
  }
  else {
    $conjunction = $query_filter
      ->getConjunction();
    $filters = array();
    try {
      foreach ($query_filter
        ->getFilters() as $filter_info) {
        $filter = NULL;

        // Simple filter [field_id, value, operator].
        if (is_array($filter_info)) {
          $filter_assoc = $this
            ->getAssociativeFilter($filter_info);
          $this
            ->correctFilter($filter_assoc, $index_fields, $ignored_field_id);

          // Check field.
          $filter = $this
            ->getFilter($filter_assoc);
          if (!empty($filter)) {
            $filters[] = $filter;
          }
        }
        elseif ($filter_info instanceof FilterInterface) {
          $nested_filters = $this
            ->parseFilter($filter_info, $index_fields, $ignored_field_id);

          // TODO: handle error. - here is unnecessary cause in if we thow exceptions and this is still in try{}  .
          if (!empty($nested_filters)) {
            $filters = array_merge($filters, $nested_filters);
          }
        }
      }
      $filters = $this
        ->setFiltersConjunction($filters, $conjunction);
    } catch (\Exception $e) {
      watchdog('Elasticsearch Search API', String::checkPlain($e
        ->getMessage()), array(), WATCHDOG_ERROR);
      drupal_set_message(String::checkPlain($e
        ->getMessage()), 'error');
    }
    return $filters;
  }
}