You are here

public function global_filter_plugin_argument_default_global_filter_proximity::get_argument in Views Global Filter 7

Same name and namespace in other branches
  1. 8 views/global_filter_plugin_argument_default_global_filter_proximity.inc \global_filter_plugin_argument_default_global_filter_proximity::get_argument()

Get argument.

Overrides views_plugin_argument_default::get_argument

File

views/global_filter_plugin_argument_default_global_filter_proximity.inc, line 43
global_filter_plugin_argument_default_global_filter_proximity.inc

Class

global_filter_plugin_argument_default_global_filter_proximity
Default argument plugin to extract the global View filter proximity value set for this contextual filter.

Code

public function get_argument() {
  $exception_value = $this->argument->options['exception']['value'];
  $proximity_field_name = isset($this->argument->definition['field_name']) ? $this->argument->definition['field_name'] : $this->argument->field;
  if (global_filter_key_by_name($proximity_field_name)) {
    $arg = global_filter_get_session_value($proximity_field_name);
    if (!empty($arg)) {
      if (is_object($arg)) {

        // Return in this format: lat,lon_dist
        $latlon = $arg->latitude . ',' . $arg->longitude;
        $distance = trim(empty($arg->distance) && $arg->distance != 0 ? $this->options['global_filter_proximity_distance'] : $arg->distance);
        return empty($distance) ? $latlon : $latlon . '_' . $distance;
      }
      if (is_array($arg)) {
        $arg = reset($arg);
      }
      $arg = trim($arg);
      if (!empty($arg)) {

        // Allow $arg to contain distance as second arg. If not specified
        // fall back on the admin default.
        // Allowed patterns: lat,lon_dist and postcode_dist
        // Instead of an underscore a space may be used.
        if (strpos($arg, '_')) {

          // This is the Location module native format.
          return $arg;
        }

        // Allow a space as a separator: "lat,lon dist" or "lat, lon dist"
        if (($pos_space = strrpos($arg, ' ')) && drupal_substr($arg, $pos_space - 1, 1) != ',') {
          $arg = drupal_substr($arg, 0, $pos_space) . '_' . drupal_substr($arg, $pos_space + 1);
        }
        else {

          // No distance specified, append the admin default.
          if ($distance = trim($this->options['global_filter_proximity_distance'])) {
            $arg .= '_' . $distance;
          }
        }
        return $arg;
      }
    }
    return $exception_value;
  }
  $view_name = empty($this->view->human_name) ? $this->view->name : $this->view->human_name;
  drupal_set_message(t('The view %view specifies a global filter location proximity field, %name, as its default contextual filter. However there is no associated <strong>Global Filter block</strong> for it. Please configure a global filter <a href="admin/structure/block">here</a> or remove this contextual filter default from the view.', array(
    '%view' => $view_name,
    '%name' => $proximity_field_name,
  )), 'warning', FALSE);
  return $exception_value;
}