You are here

function openlayers_use_geocoder_submit in Geofield 7.2

Submit callback for widget form.

1 string reference to 'openlayers_use_geocoder_submit'
openlayers_field_widget_form in ./geofield.widgets.openlayers.inc
Implements hook_field_widget_form().

File

./geofield.widgets.openlayers.inc, line 314
Provides widget hooks on behalf of Openlayers.

Code

function openlayers_use_geocoder_submit($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'];

  // Set the widget value based on geocoding results.
  $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state);
  $geocoder_field = $field_state['instance']['widget']['settings']['geocoder_field'];
  if ($field_value = geocoder_widget_get_field_value($element['#entity_type'], $field_state['instance'], NULL, $form_state['values'][$geocoder_field][$langcode])) {
    geophp_load();
    $geometry = geoPHP::load($field_value[$langcode][$delta]['geom']);
    $field_value[$langcode][$delta]['geom'] = $geometry
      ->out('wkt');

    // OpenLayers can only use WKT, so translate
    $field_value[$langcode][$delta]['input_format'] = 'wkt';

    // Override the field's value in the 'input' array to substitute the new
    // field value for the one that was submitted.
    drupal_array_set_nested_value($form_state, array_merge(array(
      'values',
    ), $parents, array(
      $field_name,
    )), $field_value);
  }
}