You are here

function location_views_handler_filter_proximity::value_form in Location 7.5

Same name and namespace in other branches
  1. 6.3 handlers/location_views_handler_filter_proximity.inc \location_views_handler_filter_proximity::value_form()
  2. 7.3 handlers/location_views_handler_filter_proximity.inc \location_views_handler_filter_proximity::value_form()
  3. 7.4 handlers/location_views_handler_filter_proximity.inc \location_views_handler_filter_proximity::value_form()

Options form subform for setting options.

This should be overridden by all child classes and it must define $form['value'].

Overrides views_handler_filter::value_form

See also

options_form()

File

handlers/location_views_handler_filter_proximity.inc, line 75

Class

location_views_handler_filter_proximity
General proximity filter for location latitude/longitude.

Code

function value_form(&$form, &$form_state) {
  $form['origin'] = array(
    '#type' => 'select',
    '#title' => t('Origin'),
    '#options' => array(
      'user' => t("User's Latitude / Longitude (blank if unset)"),
      'hybrid' => t("User's Latitude / Longitude (fall back to static if unset)"),
      'static' => t('Static  Latitude / Longitude'),
      'postal' => t('Postal Code / Country'),
      'postal_default' => t('Postal Code (assume default country)'),
      'php' => t('Use PHP code to determine latitude/longitude'),
      'nid_arg' => t("Node's Latitude / Longitude from views nid argument"),
      'uid_arg' => t("User's Latitude / Longitude from views uid argument"),
    ),
    '#description' => t('This will be the way the latitude/longitude of origin is determined.  If this filter is exposed, this will determine the default values. NOTE: The PHP code, nid argument and uid argument options will not be available when the filter is exposed and the use of map is only available when the filter is exposed.'),
    '#default_value' => $this->options['origin'] ? $this->options['origin'] : 'user',
  );
  if (module_exists('gmap')) {
    $form['origin']['#options']['latlon_gmap'] = t('Latitude / Longitude input (use map)');
  }

  // [11:44] <merlinofchaos> If you load the page from scratch, $input for your identifier will be empty.
  // [11:44] <merlinofchaos> So what's going on here is that for $_GET forms, there's no form id, no op button or anything, so they always appear to submit.
  // [11:45] <merlinofchaos> FAPI doesn't quite get along with that; sometimes it handles the input being empty right and sometimes it doesn't.
  // [11:45] <Bdragon> But if I set #default_value to a static string, it doesn't work either
  // [11:45] <merlinofchaos> Right, fapi thinks the empty input is actually input, thus it overrides the default value.
  // [11:45] <Bdragon> Ahh, hmm...
  // [11:46] <Bdragon> So where would I go to clean it up?
  // [11:55] <merlinofchaos> Bdragon: See views_handler_filter_string.inc line 174
  // [11:55] <merlinofchaos> Bdragon: That's how i address this problem.
  // [11:58] <Bdragon> Hmm, OK
  if (!empty($form_state['exposed'])) {
    $identifier = $this->options['expose']['identifier'];
    if (!isset($form_state['input'][$identifier])) {

      // We need to pretend the user already inputted the defaults, because
      // fapi will malfunction otherwise.
      $form_state['input'][$identifier] = $this->value;
    }
  }
  $form['value'] = array(
    '#tree' => TRUE,
  );
  $form['value']['latitude'] = array(
    '#type' => 'textfield',
    '#title' => t('Latitude'),
    '#default_value' => $this->value['latitude'],
    '#process' => array(
      'ctools_dependent_process',
    ),
    '#dependency' => array(
      'edit-options-origin' => array(
        'hybrid',
        'static',
        'latlon_gmap',
      ),
    ),
    '#weight' => 1,
  );
  $form['value']['longitude'] = array(
    '#type' => 'textfield',
    '#title' => t('Longitude'),
    '#default_value' => $this->value['longitude'],
    '#process' => array(
      'ctools_dependent_process',
    ),
    '#dependency' => array(
      'edit-options-origin' => array(
        'hybrid',
        'static',
        'latlon_gmap',
      ),
    ),
    '#weight' => 2,
  );
  $form['value']['postal_code'] = array(
    '#type' => 'textfield',
    '#title' => t('Postal code'),
    '#default_value' => $this->value['postal_code'],
    '#process' => array(
      'ctools_dependent_process',
    ),
    '#dependency' => array(
      'edit-options-origin' => array(
        'postal',
        'postal_default',
      ),
    ),
    '#weight' => 3,
    '#maxlength' => 16,
  );
  $form['value']['country'] = array(
    '#type' => 'select',
    '#title' => t('Country'),
    '#options' => array(
      '' => '',
    ) + location_get_iso3166_list(),
    '#default_value' => $this->value['country'],
    '#process' => array(
      'ctools_dependent_process',
    ),
    '#dependency' => array(
      'edit-options-origin' => array(
        'postal',
      ),
    ),
    '#weight' => 4,
  );
  $form['value']['php_code'] = array(
    '#type' => 'textarea',
    '#title' => t('PHP code for latitude, longitude'),
    '#default_value' => $this->value['php_code'],
    '#process' => array(
      'ctools_dependent_process',
    ),
    '#dependency' => array(
      'edit-options-origin' => array(
        'php',
      ),
    ),
    '#description' => t("Enter PHP code that returns a latitude/longitude.  Do not use &lt;?php ?&gt;. You must return only an array with float values set for the 'latitude' and 'longitude' keys."),
    '#weight' => 5,
  );
  list($nid_argument_options, $uid_argument_options) = location_views_proximity_get_argument_options($this->view);
  $nid_loc_field_options = location_views_proximity_get_location_field_options();
  $form['value']['nid_arg'] = array(
    '#type' => 'select',
    '#title' => t('Node ID argument to use'),
    '#options' => $nid_argument_options,
    '#default_value' => $this->value['nid_arg'],
    '#description' => empty($nid_argument_options) ? t("Select which of the view's arguments to use as the node ID.  The latitude / longitude of the first location of that node will be used as the origin. Use the 'Global: Null' argument if you don't want to also restrict results to that node ID. You must have added arguments to the view to use this option.") : t("Select which of the view's arguments to use as the node ID.  The latitude / longitude of the first location of that node will be used as the origin. Use the 'Global: Null' argument if you don't want to also restrict results to that node ID."),
    '#process' => array(
      'ctools_dependent_process',
    ),
    '#dependency' => array(
      'edit-options-origin' => array(
        'nid_arg',
      ),
    ),
    '#weight' => 6,
  );
  $form['value']['nid_loc_field'] = array(
    '#type' => 'select',
    '#title' => t('Location to use'),
    '#options' => $nid_loc_field_options,
    '#default_value' => $this->value['nid_loc_field'],
    '#description' => t("Select which of the node's locations to use as the origin.  Either the node locations or a CCK location field.  If the location supports multiple entries the first one will be used."),
    '#process' => array(
      'ctools_dependent_process',
    ),
    '#dependency' => array(
      'edit-options-origin' => array(
        'nid_arg',
      ),
    ),
    '#weight' => 7,
  );
  $form['value']['uid_arg'] = array(
    '#type' => 'select',
    '#title' => t('User ID argument to use'),
    '#options' => $uid_argument_options,
    '#default_value' => $this->value['uid_arg'],
    '#description' => empty($uid_argument_options) ? t("Select which of the view's arguments to use as the user ID.  The latitude / longitude of the first location of that user will be used as the origin. Use the 'Global: Null' argument if you don't want to also restrict results to that user ID. You must have added arguments to the view to use this option.") : t("Select which of the view's arguments to use as the user ID.  The latitude / longitude of the first location of that user will be used as the origin. Use the 'Global: Null' argument if you don't want to also restrict results to that user ID."),
    '#process' => array(
      'ctools_dependent_process',
    ),
    '#dependency' => array(
      'edit-options-origin' => array(
        'uid_arg',
      ),
    ),
    '#weight' => 8,
  );
  $form['value']['search_distance'] = array(
    '#type' => 'textfield',
    '#title' => t('Distance'),
    '#default_value' => $this->value['search_distance'],
    '#weight' => 9,
  );
  $form['value']['search_units'] = array(
    '#type' => 'select',
    '#options' => array(
      'mile' => t('Miles'),
      'km' => t('Kilometers'),
    ),
    '#default_value' => $this->value['search_units'],
    '#weight' => 10,
  );
}