You are here

protected function SearchBuilder::getQueryFilters in Elasticsearch Connector 8.2

Same name and namespace in other branches
  1. 8.7 src/ElasticSearch/Parameters/Builder/SearchBuilder.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder\SearchBuilder::getQueryFilters()
  2. 8.5 src/ElasticSearch/Parameters/Builder/SearchBuilder.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder\SearchBuilder::getQueryFilters()
  3. 8.6 src/ElasticSearch/Parameters/Builder/SearchBuilder.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder\SearchBuilder::getQueryFilters()

Recursively parse Search API condition group.

Parameters

ConditionGroupInterface $condition_group:

array $index_fields:

string $ignored_field_id:

Return value

array|null

Throws

\Exception

1 call to SearchBuilder::getQueryFilters()
SearchBuilder::getSearchQueryOptions in src/ElasticSearch/Parameters/Builder/SearchBuilder.php
Helper function return associative array with query options.

File

src/ElasticSearch/Parameters/Builder/SearchBuilder.php, line 305

Class

SearchBuilder
Class SearchBuilder.

Namespace

Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder

Code

protected function getQueryFilters(ConditionGroupInterface $condition_group, array $index_fields, $ignored_field_id = '') {
  if (empty($condition_group)) {
    return NULL;
  }
  else {
    $conjunction = $condition_group
      ->getConjunction();
    $filters = [];
    foreach ($condition_group
      ->getConditions() as $condition) {
      $filter = NULL;

      // Simple filter [field_id, value, operator].
      if ($condition instanceof Condition) {
        if (!$condition
          ->getField() || !$condition
          ->getValue() || !$condition
          ->getOperator()) {

          // TODO: When using views the sort field is coming as a filter and messing with this section.
          // throw new Exception(t('Incorrect filter criteria is using for searching!'));
        }
        $field_id = $condition
          ->getField();
        if (!isset($index_fields[$field_id])) {

          // TODO: proper exception.
          throw new \Exception(t(':field_id Undefined field ! Incorrect filter criteria is using for searching!', [
            ':field_id' => $field_id,
          ]));
        }

        // Check operator.
        if (!$condition
          ->getOperator()) {

          // TODO: proper exception.
          throw new \Exception(t('Empty filter operator for :field_id field! Incorrect filter criteria is using for searching!', [
            ':field_id' => $field_id,
          ]));
        }

        // Check field.
        $filter = FilterFactory::filterFromCondition($condition);
        if (!empty($filter)) {
          $filters[] = $filter;
        }
      }
      elseif ($condition instanceof ConditionGroupInterface) {
        $nested_filters = $this
          ->getQueryFilters($condition, $index_fields, $ignored_field_id);
        if (!empty($nested_filters)) {
          $filters = array_merge($filters, $nested_filters);
        }
      }
    }
    $filters = $this
      ->setFiltersConjunction($filters, $conjunction);
    return $filters;
  }
}