You are here

function vertical_tabs_add_node_type_options in Vertical Tabs 6

1 call to vertical_tabs_add_node_type_options()
vertical_tabs_form_node_type_form_alter in ./vertical_tabs.module
Implements hook_form_FORM_ID_alter().

File

./vertical_tabs.admin.inc, line 25

Code

function vertical_tabs_add_node_type_options(&$form, $node_type) {
  module_load_include('inc', 'node', 'node.pages');

  // Build a psuedo-node for a sample node form.
  $node = (object) array(
    'type' => $node_type,
    'name' => '',
    'vid' => 0,
    'language' => '',
  );

  // Build a sample node form to find fieldsets.
  $node_form_state = array(
    'values' => array(),
  );
  $node_form_id = $node_type . '_node_form';
  $node_form = drupal_retrieve_form($node_form_id, $node_form_state, $node);
  $node_form['#post'] = $node_form_state['values'];
  drupal_prepare_form($node_form_id, $node_form, $node_form_state);
  uasort($node_form, 'element_sort');

  // Find all fieldsets.
  $elements = vertical_tabs_get_form_elements($node_form);
  $config = vertical_tabs_get_config($node_type . '_node_form');

  // Merge default values and correct non-key-matching values.
  // @todo Keep settings for non-accessible fieldsets set by more priviledged users?
  $defaults = is_array($config) ? $config : array();
  $options = array();
  foreach ($elements as $key => $element) {
    $options[$key] = $element['#title'];
    if (!isset($defaults[$key]) && !empty($element['#group'])) {
      $defaults[$key] = $key;
    }
  }
  $form['vertical_tabs_settings'] = array(
    '#type' => 'fieldset',
    '#title' => t('Vertical tabs'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#description' => t('The selected fieldsets will be rendered as vertical tabs for this content type. The tabs are rendered in the same version as the original form\'s fieldsets.'),
    '#group' => 'additional_settings',
    '#tree' => TRUE,
  );
  $form['vertical_tabs_settings']['form_id'] = array(
    '#type' => 'value',
    '#value' => $node_form_id,
  );
  $form['vertical_tabs_settings']['fieldsets'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Include the following elements in the vertical tabs'),
    '#options' => $options,
    '#default_value' => $defaults,
  );
  array_unshift($form['#submit'], 'vertical_tabs_node_type_form_submit');
}