You are here

function filter_harmonizer_filter_harmonizer_set_alter in Views Filter Harmonizer 7

Implements hook_filter_harmonizer_set_alter().

You could argue this implementation belongs in the Geofield module.

File

plugins/filter_harmonizer_geofield.inc, line 13
filter_harmonizer_geofield.inc

Code

function filter_harmonizer_filter_harmonizer_set_alter(&$data) {
  list($form, $form_state, $contextual_filter, $regular_filter, $filter_values) = $data;
  if ($contextual_filter->field != 'field_geofield_distance') {
    return;
  }
  $geofield =& $form['field_geofield_distance'];
  if (isset($form['field_geofield_distance']['origin']['lat']['#value'])) {
    $lat_lon_dist = $contextual_filter
      ->parseLatLonDistArg($value);
    if (!$lat_lon_dist) {

      // Fallback, but should not happen.
      $lat_lon_dist = $contextual_filter
        ->parseAddress($value);
    }
    if ($lat_lon_dist) {
      $geofield['origin']['lat']['#value'] = $lat_lon_dist['latitude'];
      $geofield['origin']['lon']['#value'] = $lat_lon_dist['longitude'];
      $geofield['distance']['#value'] = $lat_lon_dist['distance'];
    }
  }
  else {

    // See if there are contextual arguments in the URL.
    $args = array_slice(arg(), $contextual_filter->position + 1);
    $is_default = empty($args);
    if ($is_default) {
      $dist = $contextual_filter
        ->getDefaultDist();
      $loc = $contextual_filter
        ->get_default_argument(FALSE);
    }
    else {

      // There are args in the URL.
      $dist = is_numeric(end($args)) ? array_pop($args) : $contextual_filter
        ->getDefaultDist();
      $loc = implode(', ', $args);
    }
    $geofield['distance']['#value'] = $dist;
    $geofield['origin']['#value'] = $loc;
  }
}