| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | 
							- <?php
 
- /**
 
-  * Implements hook_form_ID_alter().
 
-  */
 
- function content_taxonomy_form_field_ui_field_edit_form_alter(&$form, &$form_state, $form_id) {
 
-   $field = $form['#field'];
 
-   $instance = $form['#instance'];
 
-   // Add parent selctor to term reference fields,
 
-   // except to the autocomplete widget, as it ignores the parent setting.
 
-   if ($field['type'] == 'taxonomy_term_reference'
 
-     && !($instance['widget']['type'] == 'taxonomy_autocomplete' || $instance['widget']['type'] == 'autocomplete_deluxe_taxonomy')) {
 
-     // add parent form.
 
-     foreach ($field['settings']['allowed_values'] as $delta => $tree) {
 
-       $options[0] = '---';
 
-       // todo this might break with huge vocs
 
-       $voc = taxonomy_vocabulary_machine_name_load($tree['vocabulary']);
 
-       foreach (taxonomy_get_tree($voc->vid) as $term) {
 
-         $options[$term->tid] = str_repeat('- ', $term->depth) . $term->name;
 
-       }
 
-       $form['field']['settings']['allowed_values'][$delta]['parent']  = array(
 
-         '#type' => 'select',
 
-         '#title' => t('Parent'),
 
-         '#options' => $options,
 
-         '#default_value' => isset($tree['parent']) ? $tree['parent'] : 0,
 
-       );
 
-       $form['field']['settings']['allowed_values'][$delta]['depth']  = array(
 
-         '#type' => 'textfield',
 
-         '#title' => t('Tree depth'),
 
-         '#default_value' => isset($tree['depth']) ? $tree['depth'] : '',
 
-         '#description' => t('Set the depth of the tree. Leave empty to load all terms.'),
 
-         '#element_validate' => array('_element_validate_integer_positive'),
 
-       );
 
-     } 
 
-   }
 
- }
 
- /**
 
-  * Implements hook_field_info_alter().
 
-  */
 
- function content_taxonomy_field_info_alter(&$info) {
 
-   // Use own options callback for handling additional configuration options.
 
-   $info['taxonomy_term_reference']['settings']['options_list_callback'] = 'content_taxonomy_allowed_values';
 
-   // Add depth option.
 
-   foreach ($info['taxonomy_term_reference']['settings']['allowed_values'] as $key => $values) {
 
-     $info['taxonomy_term_reference']['settings']['allowed_values'][$key]['depth'] = 0;
 
-   }
 
- }
 
- /**
 
-  * Returns the set of valid terms for a taxonomy field.
 
-  * Extends taxonomy_allowed_values() with the tree depth option.
 
-  *
 
-  * @param $field
 
-  *   The field definition.
 
-  * @return
 
-  *   The array of valid terms for this field, keyed by term id.
 
-  */
 
- function content_taxonomy_allowed_values($field) {
 
-   $options = array();
 
-   foreach ($field['settings']['allowed_values'] as $tree) {
 
-     if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary'])) {
 
-       $max_depth = (isset($tree['depth']) && !empty($tree['depth'])) ? $tree['depth'] : NULL;
 
-       if ($terms = taxonomy_get_tree($vocabulary->vid, $tree['parent'], $max_depth)) {
 
-         foreach ($terms as $term) {
 
-           $options[$term->tid] = str_repeat('-', $term->depth) . $term->name;
 
-         }
 
-       }
 
-     }
 
-   }
 
-   return $options;
 
- }
 
 
  |