function _composed_field_build_subfield_element in Composed Field 7
Builds the form element for each subfield.
Parameters
Array $settings: Field widget settings.
Int $subfield: The subfield sequence number.
String $default_value: The field's serialized value.
String $form_control_element: The array key under widget_form array in $form_control.
Return value
Array The subfield form element.
2 calls to _composed_field_build_subfield_element()
- composed_field_field_widget_form in ./
composed_field.module - Implements hook_field_widget_form().
- _composed_field_build_vertical_tab_elements in ./
composed_field.module - Populates each widget form vertical tab with their form elements.
File
- ./
composed_field.module, line 265 - Defines composed field type.
Code
function _composed_field_build_subfield_element($settings, $subfield, $default_value = array(), $form_control_element = 'value') {
$form_controls = _composed_field_form_controls_api();
$form_control_attributes = array_keys($form_controls);
if (!empty($default_value)) {
// Check if value is serialized.
if (@unserialize($default_value) !== FALSE) {
// Turns it into an associative array of subfield values.
$default_value = unserialize($default_value);
}
}
$default_value = isset($default_value[$subfield]) ? $default_value[$subfield] : '';
$element = array();
// Go through all attributes and check if a setting value has been entered
// in each one of them.
foreach ($form_control_attributes as $form_control_attributes_name) {
$form_control_tab_name = str_replace('#', '', $form_control_attributes_name);
// Is there a value for this attribute?
if (!empty($settings['composed_field'][$form_control_tab_name][$subfield][$form_control_element])) {
$value = $settings['composed_field'][$form_control_tab_name][$subfield][$form_control_element];
// Does it need to be processed before using it?
if (!empty($form_controls[$form_control_attributes_name]['value process'])) {
$process_functions = $form_controls[$form_control_attributes_name]['value process'];
// Call each function sending the attribute value as argument.
foreach ($process_functions as $function_name) {
$value = $function_name($value);
}
}
$element[$form_control_attributes_name] = $value;
$is_php = $form_controls[$form_control_attributes_name]['widget_form']['value'];
$is_php = isset($is_php['#element_validate']) ? $is_php['#element_validate'] : array();
// If the field element has the validation function
// composed_field_php_permission set then its value must be php code.
$is_php = in_array('composed_field_php_permission', $is_php) ? TRUE : FALSE;
if ($is_php && !empty($value)) {
// Evaluate the php code.
$element[$form_control_attributes_name] = eval($value);
}
}
}
$element['#default_value'] = $default_value;
return $element;
}