Index: modules/hs_content_taxonomy.admin.inc =================================================================== RCS file: modules/hs_content_taxonomy.admin.inc diff -N modules/hs_content_taxonomy.admin.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ modules/hs_content_taxonomy.admin.inc 30 Jul 2009 08:00:28 -0000 @@ -0,0 +1,85 @@ + $vid, + 'tid' => $tid, + 'depth' => $depth, + ); + $config_id = "content-taxonomy-$field_name"; + $vocabulary = taxonomy_vocabulary_load($vid); + $defaults = array( + // Enable the save_lineage setting by default if the multiple parents + // vocabulary option is enabled. + 'save_lineage' => (int) ($vocabulary->hierarchy == 2), + 'editability' => array( + 'max_levels' => min($depth, _hs_taxonomy_hierarchical_select_get_depth($vid)), + ), + ); + // If this config is being created (not edited), then enable the dropbox if + // this is a "multiple values" field. This allows for an intuitive + // transition to a Hierarchical Select widget. + if (variable_get('hs_config_'. $config_id, FALSE) === FALSE) { + $defaults['dropbox']['status'] = $field['multiple']; + } + $strings = array( + 'hierarchy' => t('vocabulary'), + 'hierarchies' => t('vocabularies'), + 'item' => t('term'), + 'items' => t('terms'), + 'item_type' => t('term type'), + 'entity' => t('node'), + 'entities' => t('nodes'), + ); + $max_hierarchy_depth = min(($depth == 0) ? 9 : $depth, _hs_taxonomy_hierarchical_select_get_depth($vid)); + $preview_is_required = $field['required']; + $form['hierarchical_select_config'] = hierarchical_select_common_config_form($module, $params, $config_id, $defaults, $strings, $max_hierarchy_depth, $preview_is_required); + + $form['link'] = array( + '#value' => l('Back to the field configuration', 'admin/content/node-type/'. $content_type['type'] .'/fields/'. $field_name), + '#prefix' => '', + '#weight' => -5, + ); + + $form['save'] = array( + '#type' => 'submit', + '#value' => t('Save'), + ); + $form['#content_type_name'] = $content_type_name; + $form['#field_name'] = $field_name; + + // Add the the submit handler for the Hierarchical Select config form. + //$parents = array('hierarchical_select_config'); + $parents = array('hierarchical_select_config'); + $form['#submit'][] = 'hierarchical_select_common_config_form_submit'; + $form['#hs_common_config_form_parents'] = $parents; + + $form['#submit'][]='hs_content_taxonomy_common_config_form_submit'; + // = array($content_type_name, $field_name); + + return $form; +} Index: modules/hs_content_taxonomy.info =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/hierarchical_select/modules/hs_content_taxonomy.info,v retrieving revision 1.2 diff -u -F^f -r1.2 hs_content_taxonomy.info --- modules/hs_content_taxonomy.info 28 Jun 2008 18:25:28 -0000 1.2 +++ modules/hs_content_taxonomy.info 30 Jul 2009 08:00:28 -0000 @@ -1,5 +1,14 @@ ; $Id: hs_content_taxonomy.info,v 1.2 2008/06/28 18:25:28 wimleers Exp $ name = Hierarchical Select Content Taxonomy description = Use Hierarchical Select as the widget for Content Taxonomy CCK fields. -dependencies = hierarchical_select content_taxonomy hs_taxonomy +dependencies[] = hierarchical_select +dependencies[] = content_taxonomy +dependencies[] = hs_taxonomy package = Form Elements + +; Information added by drupal.org packaging script on 2009-04-07 +version = "6.x-3.x-dev" +core = "6.x" +project = "hierarchical_select" +datestamp = "1239063202" + Index: modules/hs_content_taxonomy.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/hierarchical_select/modules/hs_content_taxonomy.module,v retrieving revision 1.33 diff -u -F^f -r1.33 hs_content_taxonomy.module --- modules/hs_content_taxonomy.module 1 Dec 2008 02:21:17 -0000 1.33 +++ modules/hs_content_taxonomy.module 30 Jul 2009 08:00:29 -0000 @@ -1,5 +1,5 @@ ›'); - - //---------------------------------------------------------------------------- // Core hooks. /** * Implementation of hook_menu(). */ -function hs_content_taxonomy_menu($may_cache) { - $items = array(); - - if (!$may_cache) { - $context = _hs_content_taxonomy_parse_context_from_url(); - if (is_array($context)) { - list($content_type_name, $field_name) = $context; - - $content_type = content_types($content_type_name); - - $items[] = array( - 'path' => 'admin/content/types/'. $content_type['url_str'] .'/fields/'. $field_name .'/hs_config', - 'title' => t('Hierarchical Select configuration for !field', array('!field' => $content_type['fields'][$field_name]['widget']['label'])), - 'callback' => 'drupal_get_form', - 'callback arguments' => array('hs_content_taxonomy_config_form', $content_type['type'], $field_name), - 'access' => user_access('administer content types'), - 'type' => MENU_CALLBACK, - ); - } - } +function hs_content_taxonomy_menu() { + $items['admin/content/node-type/%/fields/%/hs_config'] = array( + 'title' => t('HS config'), + 'access arguments' => array('administer site configuration'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('hs_content_taxonomy_config_form', 3, 5), + 'type' => MENU_NORMAL_ITEM, + 'file' => 'hs_content_taxonomy.admin.inc', + ); return $items; } - /** * Implementation of hook_form_alter(). */ -function hs_content_taxonomy_form_alter($form_id, &$form) { - if ($form_id == '_content_admin_field') { - if ($form['widget']['widget_type']['#default_value'] == 'content_taxonomy_hs') { - // Hide the "multiple values" setting, so the user can't change it. - $form['field']['multiple']['#type'] = 'hidden'; - - // Add a fake checkbox form item to indicate the current state of this - // setting. Because this checkbox is disabled, it won't be submitted, - // and that's why we have to add a fake form item. - $split = array_search('multiple', array_keys($form['field'])) + 1; - $first_part = array_slice($form['field'], 0, $split); - $second_part = array_slice($form['field'], $split); - $form['field'] = $first_part; - $form['field']['fake_multiple'] = $form['field']['multiple']; - $form['field']['fake_multiple']['#type'] = 'checkbox'; - $form['field']['fake_multiple']['#attributes'] = array('disabled' => 'disabled'); - $form['field']['fake_multiple']['#description'] = t( - 'This setting is now managed by the Hierarchical Select widget - configuration!' - ); - $form['field'] += $second_part; +function hs_content_taxonomy_form_alter(&$form, &$form_state, $form_id) { + if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { + if (sizeof($form['#field_info']) > 0) { + foreach ($form['#field_info'] as $field_name => &$field_info) { + if ($field_info['widget']['type'] == 'content_taxonomy_hs') { + $form['#submit'][] = 'hs_content_taxonomy_form_submit'; + break; + } + } } } } - -//---------------------------------------------------------------------------- -// Forms API callbacks. - /** - * Form definition; configuration form for Hierarchical Select as the widget - * for a content_taxonomy field. - * - * @param $content_type_name - * Name of a content type. Provides necessary context. - * @param $field_name - * Name of a field. Provides necessary context. + * Implementation of hook_form_FORM_ID_alter() */ -function hs_content_taxonomy_config_form($content_type_name, $field_name) { - require_once(drupal_get_path('module', 'hierarchical_select') .'/includes/common.inc'); - - drupal_add_css(drupal_get_path('module', 'hs_content_taxonomy') .'/hs_content_taxonomy.css'); - - $content_type = content_types($content_type_name); - $field = $content_type['fields'][$field_name]; - - // Extract the necessary context from the $field array. - $vid = $field['vid']; - $tid = $field['tid']; - $depth = (empty($field['depth'])) ? 0 : $field['depth']; - - // Add the Hierarchical Select config form. - $module = 'hs_content_taxonomy'; - $params = array( - 'vid' => $vid, - 'tid' => $tid, - 'depth' => $depth, - ); - $config_id = "content-taxonomy-$field_name"; - $vocabulary = taxonomy_get_vocabulary($vid); - $defaults = array( - // Enable the save_lineage setting by default if the multiple parents - // vocabulary option is enabled. - 'save_lineage' => (int) ($vocabulary->hierarchy == 2), - 'editability' => array( - 'max_levels' => min($depth, _hs_taxonomy_hierarchical_select_get_depth($vid)), - ), - ); - // If this config is being created (not edited), then enable the dropbox if - // this is a "multiple values" field. This allows for an intuitive - // transition to a Hierarchical Select widget. - if (variable_get('hs_config_'. $config_id, FALSE) === FALSE) { - $defaults['dropbox']['status'] = $field['multiple']; - } - $strings = array( - 'hierarchy' => t('vocabulary'), - 'hierarchies' => t('vocabularies'), - 'item' => t('term'), - 'items' => t('terms'), - 'item_type' => t('term type'), - 'entity' => t('node'), - 'entities' => t('nodes'), - ); - $max_hierarchy_depth = min(($depth == 0) ? 9 : $depth, _hs_taxonomy_hierarchical_select_get_depth($vid)); - $preview_is_required = $field['required']; - $form['hierarchical_select_config'] = hierarchical_select_common_config_form($module, $params, $config_id, $defaults, $strings, $max_hierarchy_depth, $preview_is_required); - - $form['link'] = array( - '#value' => l('Back to the field configuration', 'admin/content/types/'. $content_type['url_str'] .'/fields/'. $field_name), - '#prefix' => '', - '#weight' => -5, - ); - - $form['save'] = array( - '#type' => 'submit', - '#value' => t('Save'), - ); - - // Add the the submit handler for the Hierarchical Select config form. - $parents = array('hierarchical_select_config'); - $form['#submit']['hierarchical_select_common_config_form_submit'] = array($parents); +function hs_content_taxonomy_form_content_field_edit_form_alter(&$form, &$form_state) { + if ($form['#field']['widget']['type'] == 'content_taxonomy_hs') { + $form['field']['multiple']['#attributes'] = array('disabled' => 'disabled'); + $form['field']['multiple']['#description'] = t( + 'This setting is now managed by the Hierarchical Select widget configuration!' + ); + } +} - $form['#submit']['hs_content_taxonomy_common_config_form_submit'] = array($content_type_name, $field_name); - return $form; -} +//---------------------------------------------------------------------------- +// Forms API callbacks. /** * Additional submit callback to update the multiple values field setting. */ -function hs_content_taxonomy_common_config_form_submit($form_id, $form_state['values'], $content_type_name, $field_name) { +function hs_content_taxonomy_common_config_form_submit( &$form, &$form_state) { $config = $form_state['values']['hierarchical_select_config']; $multiple_values = ($config['save_lineage'] | $config['dropbox']['status']); - - $content_type = content_types($content_type_name); - $field = $content_type['fields'][$field_name]; - - $form_state['values'] = array( - 'widget_type' => 'content_taxonomy_hs', - 'label' => $field['widget']['label'], - 'weight' => $field['widget']['weight'], - 'description' => $field['widget']['description'], - 'required' => $field['required'], + $content_type = content_types($form['#content_type_name']); + $field = $content_type['fields'][$form['#field_name']]; + $form_state_new = array(); + $form_state_new['values'] = array( 'multiple' => $multiple_values, - 'save' => $field['save'], - 'vid' => $field['vid'], - 'tid' => $field['tid'], - 'depth' => $field['depth'], - 'op' => t('Save field settings'), - 'submit' => t('Save field settings'), - 'type_name' => $field['type_name'], - 'field_name' => $field_name, - 'field_type' => 'content_taxonomy', - 'module' => 'content_taxonomy, hs_content_taxonomy', - 'form_id' => '_content_admin_field', ); - - drupal_execute('_content_admin_field', $form_state['values'], $field['type_name'], $field_name); + require_once(drupal_get_path('module', 'content') .'/includes/content.admin.inc'); + drupal_execute('content_field_edit_form', $form_state_new, $field['type_name'], $form['#field_name']); } +/** + * Submit handler for HS CT field form + */ + +function hs_content_taxonomy_form_submit(&$form, &$form_state){ + foreach ($form['#field_info'] as $field_name => $field_info) { + if ($field_info['widget']['type'] == 'content_taxonomy_hs') { + if (is_array($form_state['values'][$field_name]['tids'])) { + $values = array(); + foreach($form_state['values'][$field_name]['tids'] as $tid) { + $values[] = array('value' => $tid); + array_unshift($form_state['values'][$field_name], array('value' => $tid)); + } + $form_state['values'][$field_name]['tids'] = $values; + } + else { + $values[] = array('value' => $form_state['values'][$field_name]['tids']); + array_unshift($form_state['values'][$field_name],array('value' => $form_state['values'][$field_name]['tids'])); + $form_state['values'][$field_name]['tids'] = $values; + } + } + } +} + //---------------------------------------------------------------------------- // CCK hooks. @@ -203,9 +115,11 @@ function hs_content_taxonomy_common_conf */ function hs_content_taxonomy_widget_info() { return array( - 'content_taxonomy_hs' => array( // 'content_taxonomy_hs' instead of 'content_taxonomy_hierarchical_select' due to CCK limitations. + 'content_taxonomy_hs' => array( 'label' => 'Hierarchical Select', 'field types' => array('content_taxonomy'), + 'multiple values' => CONTENT_HANDLE_MODULE, + 'callbacks' => array('default value' => CONTENT_CALLBACK_NONE), ), ); } @@ -217,30 +131,25 @@ function hs_content_taxonomy_widget_sett switch ($op) { case 'form': drupal_add_css(drupal_get_path('module', 'hs_content_taxonomy') .'/hs_content_taxonomy.css'); - $context = _hs_content_taxonomy_parse_context_from_url(); list($content_type_name, $field_name) = $context; - $content_type = content_types($content_type_name); - $url = 'admin/content/types/'. $content_type['url_str'] .'/fields/'. $field_name .'/hs_config'; + $url = 'admin/content/node-type/'. $content_type_name .'/fields/'. $field_name .'/hs_config'; $items[] = t( - "Due to limitations of CCK, there is a separate form to - configure this Hierarchical Select widget's - settings.", - array('!url' => url($url)) + "Due to limitations of CCK, there is a separate form to + configure this Hierarchical Select widget's settings.",array('!url' => url($url)) ); + $placeholders = array( + '%multiple_values' => t('Multiple values'), + '%enable_the_dropbox' => t('Enable the dropbox'), + '%save_term_lineage' => t('Save term lineage'), + ); $items[] = t( 'The %multiple_values field setting is now managed by the Hierarchical Select module: it will be enabled when either the %enable_the_dropbox - or %save_term_lineage settings (or both) are enabled.', - array( - '%multiple_values' => t('Multiple values'), - '%enable_the_dropbox' => t('Enable the dropbox'), - '%save_term_lineage' => t('Save term lineage'), - ) + or %save_term_lineage settings (or both) are enabled.', $placeholders ); - $form['hs_config'] = array( '#type' => 'fieldset', '#title' => t('Hierarchical Select configuration'), @@ -249,86 +158,78 @@ function hs_content_taxonomy_widget_sett '

'. theme('item_list', $items), '#collapsible' => FALSE, ); - return $form; case 'callbacks': - return array( - 'default value' => CONTENT_CALLBACK_NONE, - ); - } + return array('default value' => CONTENT_CALLBACK_NONE); + } } /** * Implementation of hook_widget(). */ -function hs_content_taxonomy_widget($op, &$node, $field, &$node_field) { - if ($field['widget']['type'] == 'content_taxonomy_hs') { - $field_name = $field['field_name']; - $vid = $field['vid']; - $tid = $field['tid']; - $depth = (empty($field['depth'])) ? 0 : $field['depth']; - - switch ($op) { - case 'form': - require_once(drupal_get_path('module', 'hierarchical_select') .'/includes/common.inc'); - - $form[$field_name]['#tree'] = TRUE; - $form[$field_name]['tids'] = array( - '#title' => $field['widget']['label'], - '#type' => 'hierarchical_select', - '#weight' => $field['widget']['weight'], - '#config' => array( - 'module' => 'hs_content_taxonomy', - 'params' => array( - 'vid' => $vid, - 'tid' => $tid, - 'depth' => $depth, - ), - ), - '#required' => $field['required'], - '#description' => t($field['widget']['description']), - // The default value comes from $node_field (thus from the CCK - // storage), unless it's empty, then we check if $node->taxonomy - // (thus 'normal' Taxonomy storage) contains a value, and use that - // instead, unless that's empty too. - // The latter will only work reliably if only one content_taxonomy - // field is being used, because when you have multiple - // content_taxonomy fields that use the same vocabulary, there's no - // way to distinguish. - '#default_value' => ((is_array($node_field[$tid])) ? array_keys($node_field[$tid]) : ((is_array($node->taxonomy)) ? array_keys($node->taxonomy) : array())), - ); - hierarchical_select_common_config_apply($form[$field_name]['tids'], "content-taxonomy-$field_name"); - return $form; - - case 'process form values': - // TRICKY: this piece of utterly ugly, crappy and dysfunctional code - // is here thanks to the ugly internal works of the content_taxonomy - // module that don't make any sense at all. It's necessary to support - // the 'both' (and 'cck') "save option" of content_taxonomy. - if (isset($field['save']) && $field['save'] != 'tag') { - if ($field['multiple'] && is_array($node_field['tids'])) { - foreach ($node_field['tids'] as $key => $tid) { - if ($tid != 0) { - $keys[$tid] = $tid; - } - } - } - else { - $keys[$node_field['tids']] = $node_field['tids']; - } - $node_field = content_transpose_array_rows_cols(array('value' => $keys)); - } - else { - if (!$field['multiple']) { - $value = $node_field['tids']; - $node_field['tids'] = array(); - $node_field['tids'][0] = $value; - } - } - break; - } - } +function hs_content_taxonomy_widget(&$form, &$form_state, $field, $items, $delta = 0) { + $field_name = $field['field_name']; + $vid = $field['vid']; + $tid = content_taxonomy_field_get_parent($field); + $depth = (empty($field['depth'])) ? 0 : $field['depth']; + require_once(drupal_get_path('module', 'hierarchical_select') .'/includes/common.inc'); + $node = &$form['#node']; + //dsm($node); + foreach($items as $item){ + $selected_items[] = $item['value']; + } + + $node_field = &$node->$field_name; + $form[$field_name]['#tree'] = TRUE; + $form[$field_name]['#weight'] = $field['widget']['weight']; + + $form[$field_name]['tids'] = array( + '#title' => $field['widget']['label'], + '#type' => 'hierarchical_select', + '#weight' => $field['widget']['weight'], + '#config' => array( + 'module' => 'hs_content_taxonomy', + 'params' => array( + 'vid' => $vid, + 'tid' => $tid, + 'depth' => $depth, + ), + ), + '#required' => $field['required'], + '#description' => t($field['widget']['description']), + '#default_value' => !empty($selected_items) ? array_values($selected_items) : array(), + ); + + unset($form[$field_name]['#options']); // Unset to prevent passing around of possibly huge HTML. + unset($form[$field_name]['#theme']); // Unset to prevent theme_taxonomy_term_select() from running. + + hierarchical_select_common_config_apply($form[$field_name]['tids'], "content-taxonomy-$field_name"); + return $form; +} + + + +//------------------------------------------------------------------------------------------------------- +// HS Content Taxonomy CCK formatters + +/** + * Implementation of hook_theme(). + */ +function hs_content_taxonomy_theme() { + return array( + 'hs_content_taxonomy_formatter_hierarchical_text' => array( + 'arguments' => array('element' => NULL), + 'function' => 'theme_hs_content_taxonomy_formatter_hierarchical', + ), + 'hs_content_taxonomy_formatter_hierarchical_links' => array( + 'arguments' => array('element' => NULL), + 'function' => 'theme_hs_content_taxonomy_formatter_hierarchical', + ), + 'hs_content_taxonomy_row' => array( + 'arguments' => array('row' => NULL, 'type' => NULL), + ), + ); } /** @@ -337,33 +238,66 @@ function hs_content_taxonomy_widget($op, function hs_content_taxonomy_field_formatter_info() { return array( 'hierarchical_text' => array( - 'label' => 'As hierarchical text', + 'label' => t('As hierarchical text'), 'field types' => array('content_taxonomy'), + 'multiple values' => CONTENT_HANDLE_MODULE, ), 'hierarchical_links' => array( - 'label' => 'As hierarchical links', + 'label' => t('As hierarchical links'), 'field types' => array('content_taxonomy'), + 'multiple values' => CONTENT_HANDLE_MODULE, ), ); } /** - * Implemenation of hook_field_formatter(). + * Theme function to output single row (lineage) of CT field + * + * Giving levels different classes so some funny theming is possible: + * for example, different font size depending on level (like tagadelic) */ -function hs_content_taxonomy_field_formatter($field, $item, $formatter, $node) { +function theme_hs_content_taxonomy_row($row, $type) { + $separator = ''; $output = ''; - - if (!is_array($item)) { + if (empty($row)) { return $output; } + $items = array(); + foreach ($row as $level => $item ) { + $term = taxonomy_get_term($item['value']); + $line = ''; + // Depending on which formatter is active, create links or use labels. + switch ($type) { + case 'hierarchical_links': + $line .= l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => $term->description)); + break; + case 'hierarchical_text': + $line .= $item['label']; + break; + } + $line .= ''; + $items[] = $line; + } + $output = implode($separator , $items); + return $output; +} + +/** + * Theme function for HS Content Taxonomy formatters. + * + */ +function theme_hs_content_taxonomy_formatter_hierarchical($element) { + $output = ''; // Extract required field information. + // $element contains only field name so we use cck function to get more info + $field = content_fields($element['#field_name'], $element['#type_name']); $field_name = $field['field_name']; $vid = $field['vid']; - $tid = $field['tid']; + $tid = (empty($field['tid'])) ? 0 : $field['tid']; $depth = (empty($field['depth'])) ? 0 : $field['depth']; - // Get the config for this field. + // Get the config for this field require_once(drupal_get_path('module', 'hierarchical_select') .'/includes/common.inc'); $config_id = "content-taxonomy-$field_name"; $config = hierarchical_select_common_config_get($config_id); @@ -375,40 +309,51 @@ function hs_content_taxonomy_field_forma 'depth' => $depth, ), ); + $selection = array(); + + // Cycle through elements + foreach (element_children($element) as $key) { + if (isset($element[$key]['#item']['value'])) { + $selection[] = $element[$key]['#item']['value']; + } + } + // It is said that formatter theme function is called even if field is empty + if (empty($selection)) { + return $output; + } // Generate a dropbox out of the selection. This will automatically // calculate all lineages for us. - $selection = array_keys($item); $dropbox = _hierarchical_select_dropbox_generate($config, $selection); // Actual formatting. - $separator = HS_CONTENT_TAXONOMY_SEPARATOR; - foreach ($dropbox->lineages as $id => $lineage) { - if ($id > 0) { - $output .= '
'; - } - - $items = array(); - foreach ($lineage as $level => $item) { - // Depending on which formatter is active, create links or use labels. - if ($formatter == 'hierarchical_links') { - $term = taxonomy_get_term($item['value']); - $items[] = l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => $term->description)); - } - else { - $items[] = $item['label']; - } - } - $output .= implode($separator, $items); + // In 6.x formatter is fully themable + // We theme each lineage using additional theme function + $num_items = count($dropbox->lineages); + $flip = array('even' => 'odd', 'odd' => 'even'); + $class = 'even'; + + $output = ''; // Add the CSS. drupal_add_css(drupal_get_path('module', 'hierarchical_select') .'/hierarchical_select.css'); - return $output; } - //---------------------------------------------------------------------------- // Hierarchical Select hooks. @@ -428,7 +373,9 @@ function hs_content_taxonomy_hierarchica * Implementation of hook_hierarchical_select_root_level(). */ function hs_content_taxonomy_hierarchical_select_root_level($params) { - $terms = _hs_taxonomy_hierarchical_select_get_tree($params['vid'], $params['tid'], -1, 1); + //$tid = $params['tid']? $params['tid']: 0; + $tid = $params['tid']; + $terms = _hs_taxonomy_hierarchical_select_get_tree($params['vid'], $tid, -1, 1); return _hs_taxonomy_hierarchical_select_terms_to_options($terms); } @@ -437,13 +384,13 @@ function hs_content_taxonomy_hierarchica */ function hs_content_taxonomy_hierarchical_select_children($parent, $params) { static $tree; - - $vid = $params['vid']; - $tid = $params['tid']; + $vid = $params['vid']; + //$tid = $params['tid']? $params['tid']: 0; + $tid = $params['tid']; $depth = $params['depth']; // Keep a static cache of the entire tree, this allows us to quickly look up - // if a term is not to deep – because if it's too deep, we don't want to + // if a term is not to deep – because if it's too deep, we don't want t // return any children. if (!isset($tree[$vid][$tid])) { $raw_tree = _hs_taxonomy_hierarchical_select_get_tree($vid, $tid); @@ -452,6 +399,7 @@ function hs_content_taxonomy_hierarchica } } $terms = ($depth > 0 && $tree[$vid][$tid][$parent] + 1 >= $depth) ? array() : _hs_taxonomy_hierarchical_select_get_tree($vid, $parent, -1, 1); + //$terms = _hs_taxonomy_hierarchical_select_get_tree($vid, $parent, -1, 1); return _hs_taxonomy_hierarchical_select_terms_to_options($terms); } @@ -480,7 +428,6 @@ function hs_content_taxonomy_hierarchica array_shift($lineage); } } - return $lineage; } @@ -492,6 +439,8 @@ function hs_content_taxonomy_hierarchica return FALSE; } $term = taxonomy_get_term($item); + // Bug: tid isn't set to zero for some reason when root term is not set, so we make workaround for this + //$params['tid'] = $params['tid'] ? $params['tid']: 0; return ($term->vid == $params['vid'] && _hs_content_taxonomy_term_within_allowed_depth($term->tid, $term->vid, $params['tid'], $params['depth'])); } @@ -544,7 +493,7 @@ function hs_content_taxonomy_hierarchica if ($field['type'] == 'content_taxonomy') { foreach ($content_types as $content_type_name => $content_type) { if (isset($content_type['fields'][$field_name]) && $content_type['fields'][$field_name]['widget']['type'] == 'content_taxonomy_hs') { - $vocabulary = taxonomy_get_vocabulary($field['vid']); + $vocabulary = taxonomy_vocabulary_load($field['vid']); $config_id = "content-taxonomy-$field_name"; $config_info["$config_id|$content_type_name"] = array( @@ -555,14 +504,13 @@ function hs_content_taxonomy_hierarchica 'entity' => t($content_type['name']), 'context type' => t('Node form'), 'context' => '', - 'edit link' => "admin/content/types/$content_type_name/fields/$field_name/hs_config", + 'edit link' => "admin/content/node-type/$content_type_name/fields/$field_name/hs_config", ); } } } } } - return $config_info; } @@ -578,9 +526,8 @@ function hs_content_taxonomy_hierarchica * - array($content_type_name, $field_name) otherwise */ function _hs_content_taxonomy_parse_context_from_url() { - if (arg(0) == 'admin' && arg(1) == 'content' && arg(2) == 'types') { + if (arg(0) == 'admin' && arg(1) == 'content' && arg(2) == 'node-type') { $content_type = content_types(arg(3)); - $type = node_get_types('types', $content_type['type']); $field_name = arg(5);