function _form_builder_add_element in Form Builder 6
Same name and namespace in other branches
- 7.2 includes/form_builder.admin.inc \_form_builder_add_element()
- 7 includes/form_builder.admin.inc \_form_builder_add_element()
Menu callback helper for adding or cloning a field.
If the $element_id parameter is provided, the new field will be cloned from the corresponding field (and the $element_type parameter will be ignored). Otherwise, a new field of type $element_type will be added from scratch.
2 calls to _form_builder_add_element()
- form_builder_add_page in includes/
form_builder.admin.inc - Menu callback for adding a field.
- form_builder_clone_page in includes/
form_builder.admin.inc - Menu callback for cloning a field.
File
- includes/
form_builder.admin.inc, line 58 - form_builder.admin.inc Administrative interface for editing forms.
Code
function _form_builder_add_element($form_type, $form_id, $element_type, $element_id = NULL) {
module_load_include('inc', 'form_builder', 'includes/form_builder.api');
module_load_include('inc', 'form_builder', 'includes/form_builder.cache');
$fields = form_builder_get_form_type($form_type);
$cache = form_builder_cache_load($form_type, $form_id);
$element = NULL;
// If the field is being cloned, copy the original from the current form
// structure.
if (isset($element_id)) {
$element = form_builder_get_elements($cache, array(
$element_id,
));
if ($element) {
// We expect a one-element array since we only passed one element ID to
// form_builder_get_elements().
$element = array_shift($element);
// Remove the key so that a new one will be generated.
unset($element['#key']);
// Change the title to avoid confusion, and to avoid duplicate
// auto-generated machine names.
if (isset($element['#title'])) {
$element['#title'] = t('Copy of !title', array(
'!title' => $element['#title'],
));
}
// Set the element type to the correct value so it will be used
// consistently throughout this function.
$element_type = $element['#type'];
}
}
elseif (isset($fields[$element_type]['default'])) {
$element = $fields[$element_type]['default'];
}
if ($element) {
$element_id = isset($_REQUEST['element_id']) ? $_REQUEST['element_id'] : 'new_' . time();
// Set the element ID to a hard-coded value if a unique field type.
if (isset($fields[$element_type]['unique']) && $fields[$element_type]['unique']) {
$element_id = $element_type;
}
$element['#form_builder']['element_id'] = $element_id;
$element['#form_builder']['is_new'] = TRUE;
$element = form_builder_add_default_properties($element, $form_type, $element_id);
$element['#weight'] = count(element_children($cache));
drupal_alter('form_builder_add_element', $element, $form_type, $form_id);
// Save any element ID set by the hook_form_builder_add_element_alter().
$element_id = $element['#form_builder']['element_id'];
form_builder_cache_field_save($form_type, $form_id, $element);
if (isset($_REQUEST['js'])) {
$element = form_builder_cache_field_load($form_type, $form_id, $element_id);
$form_cache = form_builder_cache_load($form_type, $form_id);
$data = array(
'formType' => $form_type,
'formId' => $form_id,
'elementId' => $element_id,
'html' => form_builder_field_render($form_type, $form_id, $element_id),
'positionForm' => drupal_get_form('form_builder_positions', $form_cache, $form_type, $form_id),
);
form_builder_json_output($data);
exit;
}
}
// Otherwise return to the previous page.
drupal_goto();
}