diff --git a/modules/openlayers_geofield/openlayers_geofield.module b/modules/openlayers_geofield/openlayers_geofield.module index d36d72e..e9ba886 100644 --- a/modules/openlayers_geofield/openlayers_geofield.module +++ b/modules/openlayers_geofield/openlayers_geofield.module @@ -503,7 +503,7 @@ function openlayers_geofield_field_widget_form(&$form, &$form_state, $field, $in // of the geocoder field. '#limit_validation_errors' => array(), '#ajax' => array( - 'callback' => 'openlayers_widget_geocode', + 'callback' => 'openlayers_geofield_geocode_ajax_callback', 'wrapper' => $wrapper_id, 'effect' => 'fade', ), @@ -560,6 +560,29 @@ function openlayers_openlayers_use_geocoder_submit($form, &$form_state) { } /** + * Return the altered form element from an AJAX request. + * + * @see openlayers_geofield_field_widget_form() + */ +function openlayers_geofield_geocode_ajax_callback($form, $form_state) { + $button = $form_state['triggering_element']; + + // Go one level up in the form, to the widgets container. + $element = drupal_array_get_nested_value($form, array_slice($button['#array_parents'], 0, -1)); + $field_name = $element['#field_name']; + $langcode = $element['#language']; + $delta = $element['#delta']; + $parents = $element['#field_parents']; + + $value = drupal_array_get_nested_value($form_state, array_merge(array('values'), $parents, array($field_name))); + $element['geom']['#value'] = $value[$langcode][$delta]['geom']; + // Return the map, but remove the '_weight' element inserted + // by the field API. + unset($element['_weight']); + return $element; +} + +/** * Implements hook_geocoder_geocode_values_alter(). */ function openlayers_geofield_geocoder_geocode_values_alter(&$source_field_values, &$field_info, $handler_settings, $field_instance) {