You are here

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;
}