You are here

function geolocation_proximity_views_handler_filter_distance::query in Geolocation Proximity 7.2

Add this filter to the query.

Overrides views_handler_filter::query

File

handlers/geolocation_proximity_views_handler_filter_distance.inc, line 271
Definition of geolocation_proximity_views_handler_filter_distance.

Class

geolocation_proximity_views_handler_filter_distance
General proximity filter for location latitude/longitude.

Code

function query() {
  if (empty($this->value)) {
    return;
  }
  $value = isset($this->value[0]) ? $this->value[0] : $this->value;
  if ($value['latitude'] === "" || $value['longitude'] === "") {
    return;
  }
  $this
    ->ensure_my_table();
  $table = $this->table_alias;
  $field_id = str_replace('_distance', '', $this->options['field']);

  // Prepare filter values.
  $filter_distance = $value['search_distance'];
  $filter_lat = $value['latitude'];
  $filter_lng = $value['longitude'];

  // Prepare field values.
  $field_latsin = "{$table}.{$field_id}_lat_sin";
  $field_latcos = "{$table}.{$field_id}_lat_cos";
  $field_lng = "{$table}.{$field_id}_lng_rad";

  // Build the query.
  $sql = _proximity_sql_fragment($filter_lat, $filter_lng, $field_latsin, $field_latcos, $field_lng);

  // We use having to be able to reuse the query on field handlers
  $this->query
    ->add_field(NULL, $sql, $this->field_alias);
  $this->query
    ->add_having_expression($this->options['group'], '(' . $this->field_alias . ' IS NULL) OR (' . $this->field_alias . $this->operator . $filter_distance . ')');
}