You are here

function form_builder_webform_get_component in Form Builder 6

Save the contents of a form component into Webform's database tables.

1 call to form_builder_webform_get_component()
form_builder_webform_save_node in modules/webform/form_builder_webform.module
Save the current Form Builder interface changes for a webform node.

File

modules/webform/form_builder_webform.module, line 137
Form Builder integration for the Webform module.

Code

function form_builder_webform_get_component($node, $element_id, $form) {
  module_load_include('inc', 'form_builder_webform', 'form_builder_webform.components');
  $element = form_builder_get_element($form, $element_id);
  $type = isset($element['#webform_component']['type']) ? $element['#webform_component']['type'] : $element['#form_builder']['element_type'];

  // Check for existing components.
  $cid = substr($element_id, 4);
  if (isset($node->webform['components'][$cid])) {
    $component = $node->webform['components'][$cid];
  }
  elseif (isset($element['#webform_component']['is_new'])) {
    if ($component = webform_component_invoke($type, 'defaults')) {
      $component['type'] = $type;
    }
  }

  // If the component type isn't found, don't try to save anything.
  if (!isset($component)) {
    return;
  }

  // Set typical component settings.
  $component['name'] = $element['#title'];
  $component['weight'] = $element['#weight'];
  $component['form_key'] = $element['#key'];
  $component['mandatory'] = isset($element['#required']) ? $element['#required'] : 0;
  $component['email'] = 0;
  $component['nid'] = $node->nid;

  // Set the parent ID to default to the form base.
  $component['pid'] = 0;

  // Set the parent ID for the component if it is nested inside another component.
  $parent = form_builder_get_element($form, $element['#form_builder']['parent_id']);
  if ($parent && isset($parent['#webform_component']['cid'])) {
    $component['pid'] = $parent['#webform_component']['cid'];
  }

  // Set the component's value. If the form element doesn't have a default,
  // then new components should not be modified (they should use whatever the
  // component default is), but existing components should have their stored
  // value removed.
  if (isset($element['#default_value'])) {
    $component['value'] = is_array($element['#default_value']) ? implode(',', $element['#default_value']) : $element['#default_value'];
  }
  elseif (empty($element['#webform_component']['is_new'])) {
    $component['value'] = NULL;
  }

  // Set all properties based on property maps.
  $component = _form_builder_webform_save_mapped_component($component, $element);

  // Allow each component to set any specific settings that can't be mapped.
  if ($saved_component = form_builder_webform_component_invoke($type, 'form_builder_save', $component, $element)) {
    $component = $saved_component;
  }
  return $component;
}