You are here

public static function FilterFactory::filterFromCondition in Elasticsearch Connector 8.2

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

Get query by Condition instance.

Parameters

Condition $condition:

Return value

array

Throws

\Exception

1 call to FilterFactory::filterFromCondition()
SearchBuilder::getQueryFilters in src/ElasticSearch/Parameters/Builder/SearchBuilder.php
Recursively parse Search API condition group.

File

src/ElasticSearch/Parameters/Factory/FilterFactory.php, line 21

Class

FilterFactory
Class FilterFactory.

Namespace

Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory

Code

public static function filterFromCondition(Condition $condition) {

  // Handles "empty", "not empty" operators.
  if (!$condition
    ->getValue()) {
    switch ($condition
      ->getOperator()) {
      case '<>':
        $filter = [
          'exists' => [
            'field' => $condition
              ->getField(),
          ],
        ];
        break;
      case '=':
        $filter = [
          'not' => [
            'filter' => [
              'exists' => [
                'field' => $condition
                  ->getField(),
              ],
            ],
          ],
        ];
        break;
      default:
        throw new \Exception(t('Value is empty for :field_id! Incorrect filter criteria is using for searching!', [
          ':field_id' => $condition
            ->getField(),
        ]));
    }
  }
  else {
    switch ($condition
      ->getOperator()) {
      case '=':
        $filter = [
          'term' => [
            $condition
              ->getField() => $condition
              ->getValue(),
          ],
        ];
        break;
      case 'IN':
        $filter = [
          'terms' => [
            $condition
              ->getField() => array_values($condition
              ->getValue()),
          ],
        ];
        break;
      case '<>':
        $filter = [
          'not' => [
            'filter' => [
              'term' => [
                $condition
                  ->getField() => $condition
                  ->getValue(),
              ],
            ],
          ],
        ];
        break;
      case '>':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => $condition
                ->getValue(),
              'to' => NULL,
              'include_lower' => FALSE,
              'include_upper' => FALSE,
            ],
          ],
        ];
        break;
      case '>=':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => $condition
                ->getValue(),
              'to' => NULL,
              'include_lower' => TRUE,
              'include_upper' => FALSE,
            ],
          ],
        ];
        break;
      case '<':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => NULL,
              'to' => $condition
                ->getValue(),
              'include_lower' => FALSE,
              'include_upper' => FALSE,
            ],
          ],
        ];
        break;
      case '<=':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => NULL,
              'to' => $condition
                ->getValue(),
              'include_lower' => FALSE,
              'include_upper' => TRUE,
            ],
          ],
        ];
        break;
      default:
        throw new \Exception(t('Undefined operator :field_operator for :field_id field! Incorrect filter criteria is using for searching!', [
          ':field_operator' => $condition
            ->getOperator(),
          ':field_id' => $condition
            ->getField(),
        ]));
    }
  }
  return $filter;
}