geofieldProximityGeocoder.inc 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. /**
  3. * @file
  4. * Contains geofieldProximityGeocoder.
  5. */
  6. class geofieldProximityGeocoder extends geofieldProximityBase implements geofieldProximityPluginInterface {
  7. public function option_definition(&$options, $views_plugin) {
  8. $options['geofield_proximity_geocoder'] = array('default' => '');
  9. $options['geofield_proximity_geocoder_engine'] = array('default' => 'google');
  10. }
  11. public function options_form(&$form, &$form_state, $views_plugin) {
  12. $form['geofield_proximity_geocoder'] = array(
  13. '#type' => 'textfield',
  14. '#title' => t('Source'),
  15. '#default_value' => $views_plugin->options['geofield_proximity_geocoder'],
  16. '#dependency' => array(
  17. 'edit-options-source' => array('geocoder'),
  18. ),
  19. '#proximity_plugin_value_element' => TRUE,
  20. );
  21. $geocoders_raw = geocoder_handler_info('text');
  22. $geocoder_options = array();
  23. foreach ($geocoders_raw as $key => $geocoder) {
  24. $geocoder_options[$key] = $geocoder['title'];
  25. }
  26. $form['geofield_proximity_geocoder_engine'] = array(
  27. '#type' => 'select',
  28. '#title' => t('Geocoding Service'),
  29. '#options' => $geocoder_options,
  30. '#default_value' => $views_plugin->options['geofield_proximity_geocoder_engine'],
  31. '#dependency' => array(
  32. 'edit-options-source' => array('geocoder'),
  33. ),
  34. );
  35. }
  36. public function options_validate(&$form, &$form_state, $views_plugin) {
  37. if (!empty($form_state['values']['options']['geofield_proximity_geocoder']) && !geocoder($form_state['values']['options']['geofield_proximity_geocoder_engine'], $form_state['values']['options']['geofield_proximity_geocoder'])) {
  38. form_set_error('options][geofield_proximity_geocoder', t('Geocoder cannot find this location. Check your connection or add a findable location.'));
  39. }
  40. }
  41. public function getSourceValue($views_plugin) {
  42. $geocoder_engine = $views_plugin->options['geofield_proximity_geocoder_engine'];
  43. $location = (isset($views_plugin->value)) ? $views_plugin->value['origin'] : $views_plugin->options['geofield_proximity_geocoder'];
  44. if ($location) {
  45. $geocoded_data_raw = geocoder($geocoder_engine, $location);
  46. if ($geocoded_data_raw) {
  47. return array(
  48. 'latitude' => $geocoded_data_raw->getY(),
  49. 'longitude' => $geocoded_data_raw->getX(),
  50. );
  51. }
  52. }
  53. return FALSE;
  54. }
  55. }