You are here

function _composed_field_build_vertical_tab_elements in Composed Field 7

Populates each widget form vertical tab with their form elements.

Parameters

Array $form: The widget settings form.

Array $widget_form_state_values: It is either the form saved values or the form submitted values.

Array $form_control_structure: The form element's structure.

1 call to _composed_field_build_vertical_tab_elements()
_composed_field_build_form_controls_in_vertical_tabs in ./composed_field.module
Builds the widget form vertical tabs.

File

./composed_field.module, line 385
Defines composed field type.

Code

function _composed_field_build_vertical_tab_elements(&$form, $widget_form_state_values, $form_control_structure) {
  foreach ($form['#composed_field']['vertical_tab_settings'] as $setting_name => $setting_value) {
    ${$setting_name} = $setting_value;
  }
  $form_controls = _composed_field_form_controls_api();

  // Create as many form elements in each tab as there are subfields.
  for ($subfield = $subfield_start_from; $subfield <= $number_of_subfields; $subfield++) {
    $form['composed_field'][$tab_name][$subfield] = array(
      '#type' => 'fieldset',
    );
    foreach ($form_control_structure['widget_form'] as $form_element => $form_element_properties) {
      $title = empty($form_element_properties['#title']) ? '' : $form_element_properties['#title'];
      $form_element_properties['#title'] = $title . t('Subfield !subfield', array(
        '!subfield' => $subfield,
      ));
      $enable_this_attribute_element_is_not_available = TRUE;
      $enable_this_attribute_element_value = FALSE;

      // Inicial state of all form elements in the vertical tab.
      $form_element_properties['#disabled'] = TRUE;
      $form_element_properties['#default_value'] = $number_of_fields_not_set_message;
      $number_of_subfields_has_value = FALSE;
      if (isset($widget_form_state_values['number_of_subfields']) && $widget_form_state_values['number_of_subfields'] > 0) {
        $form_element_properties['#default_value'] = '';
        $number_of_subfields_has_value = TRUE;
        $selected_value_for_type_attribute = $widget_form_state_values['composed_field']['type'][$subfield]['value'];

        // 'enable_this_attribute' element.
        if (in_array($selected_value_for_type_attribute, (array) $form_control_structure['supported_types'])) {
          $enable_this_attribute_element_is_not_available = FALSE;
          if (isset($widget_form_state_values['composed_field'][$tab_name][$subfield]['enable_this_attribute'])) {
            $enable_this_attribute_element_value = $widget_form_state_values['composed_field'][$tab_name][$subfield]['enable_this_attribute'];
          }
        }
      }
      if ($enable_this_attribute_element_value) {
        $form_element_properties['#disabled'] = FALSE;
        $default_value = $widget_form_state_values['composed_field'][$tab_name][$subfield][$form_element];
        $form_element_properties['#default_value'] = $default_value;
      }

      // Determine which tab are we in.
      switch ($attribute_name) {
        case '#type':
          if ($number_of_subfields_has_value) {

            // Make all elements in the #type attribute tab selectable.
            $form_element_properties['#disabled'] = FALSE;
            $form_element_properties['#default_value'] = $widget_form_state_values['composed_field'][$tab_name][$subfield][$form_element];
          }
          else {

            // Set a message advising the user to enter a value into
            // number_of_subfields.
            $form_element_properties['#default_value'] = '';
            $form_element_properties['#options'] = array(
              '' => $number_of_fields_not_set_message,
            );
          }
          break;
        case '#default_value':
          if (!empty($selected_value_for_type_attribute)) {
            $form_element_properties = _composed_field_build_subfield_element($widget_form_state_values, $subfield, array(), $form_element);
          }
          break;
        default:
          $form['composed_field'][$tab_name][$subfield]['enable_this_attribute'] = array(
            '#type' => 'checkbox',
            '#title' => t('Enable !attribute attribute for Subfield !subfield.', array(
              '!attribute' => $attribute_name,
              '!subfield' => $subfield,
            )),
            '#disabled' => $enable_this_attribute_element_is_not_available,
            '#default_value' => $enable_this_attribute_element_value,
            '#ajax' => array(
              'callback' => '_composed_field_vertical_tabs_ajax_callback',
            ),
          );
      }
      $form['composed_field'][$tab_name][$subfield] += array(
        '#prefix' => "<div id='composed_field_" . "{$tab_name}-{$subfield}" . "_ajax_wrapper'>",
        '#suffix' => '</div>',
      );
      $form['composed_field'][$tab_name][$subfield][$form_element] = $form_element_properties;
    }
  }
}