You are here

function wsfields_storage_edit_field_form_submit in Web Service Data 7

Save changes to the field

File

modules/wsfields_storage/wsfields_storage.admin.inc, line 318
Defines the wsfields storage forms

Code

function wsfields_storage_edit_field_form_submit($form, &$form_state) {
  if (!isset($_GET['field'])) {
    return $form;
  }
  $field = $_GET['field'];
  $fields = field_info_fields();
  if (!isset($fields[$field])) {
    return $form;
  }
  $field = $fields[$field];
  $field['storage']['settings']['processor'] = $form_state['values']['processor'];
  $field['storage']['settings']['passaccepts'] = $form_state['values']['passaccepts'];
  $field['storage']['settings']['remotekey'] = $form_state['values']['remotekey'];
  $field['storage']['settings']['translation'] = (bool) $form_state['values']['translation'];
  $wsconfig_name = $field['storage']['settings']['wsconfig_name'] = $form_state['values']['wsconfig_name'];
  $field['storage']['settings']['propertymap'] = array();
  $wstokens = wsconfig_get_list_tokens();
  $wstokens = $wstokens[$wsconfig_name];
  foreach ($wstokens as $call => $tokens) {
    foreach ($tokens as $token) {
      $formfieldname = "{$wsconfig_name}-{$call}-{$token}";
      $field['storage']['settings']['propertymap'][$call][$token] = $form_state['values'][$formfieldname];
    }
  }
  field_update_field($field);
  drupal_set_message(t('WSField Storage settings for @field have been updated', array(
    '@field' => $field['field_name'],
  )));
  if ($form_state['values']['addinstance'] != 'none') {
    list($entity_type, $bundle_name) = explode(':', $form_state['values']['addinstance']);
    $bundles = field_info_bundles($entity_type);
    if (!isset($bundles[$bundle_name])) {
      return;
    }
    $bundle_info = $bundles[$bundle_name];
    if (isset($bundle_info['admin'])) {
      $admin_path = isset($bundle_info['admin']['real path']) ? $bundle_info['admin']['real path'] : $bundle_info['admin']['path'];
    }
    $instance = array(
      'field_name' => $field['field_name'],
      'entity_type' => $entity_type,
      'bundle' => $bundle_name,
    );
    try {
      $existing = field_info_instance($entity_type, $field['field_name'], $bundle_name);
      if (!isset($existing)) {
        field_create_instance($instance);
      }
      if (module_exists('field_ui')) {
        drupal_goto($admin_path . '/fields/' . $instance['field_name'] . '/edit');
      }
    } catch (Exception $e) {
      drupal_set_message(t('There was a problem creating field instance %label: @message.', array(
        '%label' => $instance['label'],
        '@message' => $e
          ->getMessage(),
      )), 'error');
    }
  }
}