You are here

function timefield_handler_filter_timefield_duration::query in Timefield 7

Add this filter to the query.

Due to the nature of fapi, the value and the operator have an unintended level of indirection. You will find them in $this->operator and $this->value respectively.

Overrides views_handler_filter_numeric::query

File

views/timefield_handler_filter_timefield_duration.inc, line 53
Contains the duration filter handler.

Class

timefield_handler_filter_timefield_duration
@file Contains the duration filter handler.

Code

function query() {
  $this
    ->ensure_my_table();

  // Get the Field API field name from the definition.
  $field_name = $this->definition['field_name'];
  $formula = $field_name . '_value2' . ' - ' . $field_name . '_value';
  switch ($this->operator) {
    case 'between':
      $value_min = empty($this->value['min']) ? 0 : $this->value['min'];
      $value_max = empty($this->value['max']) ? 0 : $this->value['max'];
      $op = $formula . ' BETWEEN :value_min AND :value_max';
      $this->query
        ->add_where_expression($this->options['group'], $op, array(
        ':value_min' => $this
          ->filterSelectionToSeconds($value_min),
        ':value_max' => $this
          ->filterSelectionToSeconds($value_max),
      ));
      break;
    case 'not between':
      $value_min = empty($this->value['min']) ? 0 : $this->value['min'];
      $value_max = empty($this->value['max']) ? 0 : $this->value['max'];
      $op = $formula . ' BETWEEN :value_min AND :value_max';
      $this->query
        ->add_where_expression($this->options['group'], $formula . ' <= :value_min', array(
        ':value_min' => $this
          ->filterSelectionToSeconds($value_min),
      ));
      $this->query
        ->add_where_expression($this->options['group'], $formula . ' >= :value_max', array(
        ':value_max' => $this
          ->filterSelectionToSeconds($value_max),
      ));
      break;
    default:
      $value = empty($this->value['value']) ? 0 : $this->value['value'];
      $op = $formula . ' ' . $this->operator . ' :value';
      $this->query
        ->add_where_expression($this->options['group'], $op, array(
        ':value' => $this
          ->filterSelectionToSeconds($value),
      ));
      break;
  }
}