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 . ')');
}