You are here

function term_reference_tree_field_widget_form in Taxonomy Term Reference Tree Widget 7

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

Implements hook_field_widget_form().

File

./term_reference_tree.widget.inc, line 507

Code

function term_reference_tree_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
  $settings = $instance['widget']['settings'];
  $vocabulary = taxonomy_vocabulary_machine_name_load($field['settings']['allowed_values'][0]['vocabulary']);
  $path = drupal_get_path('module', 'term_reference_tree');
  $value_key = key($field['columns']);
  $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['#use_ajax'] = isset($settings['use_ajax']) ? (bool) $settings['use_ajax'] : FALSE;
      $element['#track_list'] = $settings['track_list'];
      $element['#parent_tid'] = $settings['parent_term_id'] ? $settings['parent_term_id'] : $field['settings']['allowed_values'][0]['parent'];
      $element['#vocabulary'] = $vocabulary;
      $element['#token_display'] = module_exists('token') ? $settings['token_display'] : '';
      break;
  }
  if (isset($form_state['triggering_element']['#term'])) {
    $term = $form_state['triggering_element']['#term'];
    $form_state['children'][$term->tid] = $term->tid;
  }
  $element += array(
    '#value_key' => $value_key,
    '#element_validate' => array(
      '_term_reference_tree_widget_validate',
    ),
    '#properties' => $properties,
  );
  return $element;
}