You are here

function term_reference_tree_field_widget_form in Taxonomy Term Reference Tree Widget 7.2

Same name and namespace in other branches
  1. 7 term_reference_tree.widget.inc \term_reference_tree_field_widget_form()

Implements hook_field_widget_form().

File

./term_reference_tree.widget.inc, line 512

Code

function term_reference_tree_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
  $settings = $instance['widget']['settings'];
  $voc = taxonomy_vocabulary_machine_name_load($field['settings']['allowed_values'][0]['vocabulary']);
  $path = drupal_get_path('module', 'term_reference_tree');
  $value_key = key($field['columns']);
  $type = $instance['widget']['type'];
  $default_value = array();
  foreach ($items as $item) {
    $key = $item[$value_key];
    if ($key === 0) {
      $default_value[$key] = '0';
    }
    else {
      $default_value[$key] = $key;
    }
  }
  $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED;
  $properties = array();
  if (!array_key_exists('#value', $element)) {
    $element['#value'] = array();
  }

  // A switch statement, in case we ever add more widgets to this module.
  switch ($instance['widget']['type']) {
    case 'term_reference_tree':
      $element['#attached']['js'] = array(
        $path . '/term_reference_tree.js',
      );
      $element['#attached']['css'] = array(
        $path . '/term_reference_tree.css',
      );
      $element['#type'] = 'checkbox_tree';
      $element['#default_value'] = $multiple ? $default_value : array(
        reset($default_value) => reset($default_value),
      );
      $element['#max_choices'] = $field['cardinality'];
      $element['#max_depth'] = $settings['max_depth'];
      $element['#start_minimized'] = $settings['start_minimized'];
      $element['#leaves_only'] = $settings['leaves_only'];
      $element['#filter_view'] = module_exists('views') ? $settings['filter_view'] : '';
      $element['#select_parents'] = $settings['select_parents'];
      $element['#cascading_selection'] = $settings['cascading_selection'];
      $element['#track_list'] = $settings['track_list'];
      $element['#parent_tid'] = $settings['parent_term_id'] || $field['settings']['allowed_values'][0]['parent'];
      $element['#vocabulary'] = $voc ? $voc->vid : NULL;
      $element['#token_display'] = module_exists('token') ? $settings['token_display'] : '';
      break;
  }
  $element += array(
    '#value_key' => $value_key,
    '#element_validate' => array(
      '_term_reference_tree_widget_validate',
    ),
    '#properties' => $properties,
  );
  return $element;
}