You are here

protected function RestfulDataProviderDbQuery::queryForListFilter in RESTful 7

Filter the query for list.

Parameters

\SelectQuery $query: The query object.

Throws

\RestfulBadRequestException

See also

\RestfulEntityBase::getQueryForList

2 calls to RestfulDataProviderDbQuery::queryForListFilter()
RestfulDataProviderDbQuery::getQueryCount in plugins/restful/RestfulDataProviderDbQuery.php
Prepare a query for RestfulEntityBase::getTotalCount().
RestfulDataProviderDbQuery::getQueryForList in plugins/restful/RestfulDataProviderDbQuery.php
Prepare a query for RestfulEntityBase::getList().

File

plugins/restful/RestfulDataProviderDbQuery.php, line 196
Contains \RestfulDataProviderDbQuery

Class

RestfulDataProviderDbQuery
@file Contains \RestfulDataProviderDbQuery

Code

protected function queryForListFilter(\SelectQuery $query) {
  $public_fields = $this
    ->getPublicFields();
  foreach ($this
    ->parseRequestForListFilter() as $filter) {
    if (in_array(strtoupper($filter['operator'][0]), array(
      'IN',
      'NOT IN',
      'BETWEEN',
    ))) {
      $column_name = $this
        ->getPropertyColumnForQuery($public_fields[$filter['public_field']]);
      if (is_array($filter['value']) && empty($filter['value'])) {
        if (strtoupper($filter['operator'][0]) == 'NOT IN') {

          // Skip filtering by an empty value when operator is 'NOT IN',
          // since it throws an SQL error.
          continue;
        }

        // Since Drupal doesn't know how to handle an empty array within a
        // condition we add the `NULL` as an element to the array.
        $filter['value'] = array(
          NULL,
        );
      }
      $query
        ->condition($column_name, $filter['value'], $filter['operator'][0]);
      continue;
    }
    $condition = db_condition($filter['conjunction']);
    for ($index = 0; $index < count($filter['value']); $index++) {
      $column_name = $this
        ->getPropertyColumnForQuery($public_fields[$filter['public_field']]);
      $condition
        ->condition($column_name, $filter['value'][$index], $filter['operator'][$index]);
    }
    $query
      ->condition($condition);
  }
}