You are here

function better_field_descriptions_admin_settings_form in Better Field Descriptions 7

Implements hook_admin_settings_form().

1 string reference to 'better_field_descriptions_admin_settings_form'
better_field_descriptions_menu in ./better_field_descriptions.module
Implements hook_menu().

File

./better_field_descriptions.admin.inc, line 11
Functionality and helper functions for Better field descriptions.

Code

function better_field_descriptions_admin_settings_form($form, &$form_state) {
  $entity_types = entity_get_info();
  $entity_types_list = array();
  foreach ($entity_types as $key => $entity_type_data) {
    $entity_types_list[$key] = $key;
  }
  $entity_type = variable_get('better_field_descriptions_default_entity', 'node');
  $form['entity_types'] = array(
    '#type' => 'select',
    '#title' => 'Select entity type',
    '#options' => $entity_types_list,
    '#default_value' => $entity_type,
    '#ajax' => array(
      'callback' => 'better_field_descriptions_load_entity_type',
      'wrapper' => 'entity_type_fields-fieldset-wrapper',
    ),
  );
  $entity_type = !empty($form_state['values']['entity_types']) ? $form_state['values']['entity_types'] : variable_get('better_field_descriptions_default_entity', 'node');
  $form['entity_type_fields'] = array(
    '#type' => 'fieldset',
    '#title' => $entity_type,
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#prefix' => '<div id="entity_type_fields-fieldset-wrapper">',
    '#suffix' => '</div>',
  );

  // Get info on bundles.
  $bundles = field_info_bundles($entity_type);

  // Get list of fields selected for better descriptions.
  $bfds = variable_get('better_field_descriptions_settings', array());
  $form['entity_type_fields']['descriptions'] = array(
    '#type' => 'markup',
    '#markup' => t('Select fields that should have better descriptions.'),
  );
  $form['entity_type_fields']['bundles'] = array(
    '#type' => 'item',
    '#prefix' => '<div id="better-descriptions-form-id-wrapper">',
    '#suffix' => '</div>',
    '#tree' => TRUE,
  );
  foreach ($bundles as $bundle_machine_name => $bundle) {

    // Array to hold fields in the node.
    $fields_instances = array();

    // Get info on pseudo fields, like title.
    $extra_fields = field_info_extra_fields($entity_type, $bundle_machine_name, 'form');
    if (isset($extra_fields['title'])) {
      $fields_instances['title'] = $extra_fields['title']['label'];
    }

    // Get info on regular fields to the bundle.
    $fields = field_info_instances($entity_type, $bundle_machine_name);
    foreach ($fields as $field_machine_name => $field) {
      $fields_instances[$field_machine_name] = $field['label'] . ' (' . $field_machine_name . ')';
    }

    // Compute default values.
    $default_values = array();
    if (isset($bfds[$bundle_machine_name])) {
      $default_values = array_intersect_key($bfds[$bundle_machine_name], $fields_instances);
    }

    // Generate checkboxes.
    $form['entity_type_fields']['bundles'][$bundle_machine_name] = array(
      '#type' => 'checkboxes',
      '#title' => $bundle['label'],
      '#options' => $fields_instances,
      '#default_value' => $default_values,
      '#description' => t('Choose which fields should have better descriptions.'),
    );
  }
  $form['#submit'] = array(
    'better_field_descriptions_admin_settings_submit',
  );
  return system_settings_form($form);
}