function subform_element_value in Subform 7
Value callback for the subform element.
1 string reference to 'subform_element_value'
- subform_element_info in ./
subform.module - Implements hook_element_info().
File
- ./
subform.module, line 129 - Defines a subform element type.
Code
function subform_element_value(&$element, $input, &$form_state) {
$element['#name'] = $subform_name = (isset($form_state['subform_name']) ? $form_state['subform_name'] : 'subform') . '-' . implode('-', $element['#parents']);
if (!isset($form_state['temporary']['subform'][$subform_name])) {
$form_state['temporary']['subform'][$subform_name] = array();
}
$subform_state =& $form_state['temporary']['subform'][$subform_name];
// Ensure some defaults; if already set they will not be overridden.
$subform_state += form_state_defaults();
$subform_state['subform_name'] = $subform_name;
$subform_state['subform_element_parents'] = $element['#array_parents'];
$subform_state['subform_parent'] = array(
'form_id' => $form_state['complete form']['#form_id'],
'build_id' => $form_state['complete form']['#build_id'],
);
$subform_state['temporary']['subform_parent_state'] =& $form_state;
// Pass in subform arguments.
if (!empty($element['#subform_arguments'])) {
$subform_state['build_info']['args'] = $element['#subform_arguments'];
}
// Load subform files.
if (!empty($element['#subform_file'])) {
$file = $element['#subform_file'];
if (is_array($file)) {
$file += array(
'type' => 'inc',
'name' => $file['module'],
);
module_load_include($file['type'], $file['module'], $file['name']);
}
elseif (file_exists($file)) {
require_once DRUPAL_ROOT . '/' . $file;
}
$subform_state['build_info']['files'][] = $element['#subform_file'];
}
// The subform inherits certain properties from the subform element.
foreach (array(
'#access',
'#disabled',
'#allow_focus',
'#subform_default_triggering_element',
) as $property) {
if (isset($element[$property]) && !isset($subform[$property])) {
$subform_state['subform_properties'][$property] = $element[$property];
}
}
if (isset($form_state['input'][$subform_name]) && is_array($form_state['input'][$subform_name])) {
$input = $form_state['input'][$subform_name];
}
elseif (isset($element['#default_value']) && is_array($element['#default_value'])) {
$input = $element['#default_value'];
// Prevent default value from triggering form validation/submission.
unset($input['form_id']);
}
// Include nested subform input.
if (!empty($form_state['input'])) {
foreach ($form_state['input'] as $name => $value) {
if (strpos($name, $subform_name . '-') === 0) {
$input[$name] = $value;
}
}
}
return $input;
}