--- hs_content_taxonomy.info Wed Dec 03 07:06:44 2008 +++ hs_content_taxonomy.info Wed Jan 14 15:05:17 2009 @@ -4 +4,3 @@ -dependencies = hierarchical_select content_taxonomy hs_taxonomy +dependencies[] = hierarchical_select +dependencies[] = content_taxonomy +dependencies[] = hs_taxonomy @@ -6,7 +8 @@ - -; Information added by drupal.org packaging script on 2008-12-03 -version = "6.x-3.x-dev" -core = "6.x" -project = "hierarchical_select" -datestamp = "1228306004" - +core = 6.x --- hs_content_taxonomy.module Sun Nov 30 21:21:18 2008 +++ hs_content_taxonomy.module Wed Jan 14 15:05:17 2009 @@ -20,3 +19,0 @@ -define('HS_CONTENT_TAXONOMY_SEPARATOR', ''); - - @@ -29,2 +26,11 @@ -function hs_content_taxonomy_menu($may_cache) { - $items = array(); +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; +} @@ -32,4 +38 @@ - if (!$may_cache) { - $context = _hs_content_taxonomy_parse_context_from_url(); - if (is_array($context)) { - list($content_type_name, $field_name) = $context; +function hs_content_taxonomy_form_submit(&$form, &$form_state){ @@ -37 +40,2 @@ - $content_type = content_types($content_type_name); + foreach ($form['#field_info'] as $field_name=>&$field_info){ + if ($field_info['widget']['type'] == 'content_taxonomy_hs'){ @@ -39,7 +43,15 @@ - $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, + /* + @todo: Loze: the majority of my edits are here in this function. + there is probably a more elegant way of doing this, + but the array of tids we not being set to the content_taxonomy module it the format it expected. + + // i think this is right, now. + + [field_name] + [0] = array('value' => $tid) + [1] = array('value' => $tid) + [2] = array('value' => $tid) + [tids] = array( + [0] = array('value' => $tid) + [1] = array('value' => $tid) + [2] = array('value' => $tid) @@ -46,0 +59,17 @@ + + + */ + + 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; + } @@ -49,2 +77,0 @@ - return $items; -} @@ -51,0 +79 @@ +} @@ -56,21 +84,7 @@ -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){ + 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; + } @@ -85,78 +98,0 @@ -/** - * 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. - */ -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); - - $form['#submit']['hs_content_taxonomy_common_config_form_submit'] = array($content_type_name, $field_name); - - return $form; -} @@ -167 +103 @@ -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) { @@ -171,2 +107,2 @@ - $content_type = content_types($content_type_name); - $field = $content_type['fields'][$field_name]; + $content_type = content_types($form['#content_type_name']); + $field = $content_type['fields'][$form['#field_name']]; @@ -188 +124 @@ - 'field_name' => $field_name, + 'field_name' => $form['#field_name'], @@ -190,2 +126,2 @@ - 'module' => 'content_taxonomy, hs_content_taxonomy', - 'form_id' => '_content_admin_field', + 'module' => 'content_taxonomy, hs_content_taxonomy, content', + 'form_id' => 'content_field_edit_form', @@ -194 +130,2 @@ - 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['values'], $field['type_name'], $form['#field_name']); @@ -202 +139 @@ - * Implementation of hook_widget_info(). + * Implementation of hook_field_info(). @@ -208,0 +146,4 @@ + 'multiple values' => CONTENT_HANDLE_MODULE, + 'callbacks' => array( + 'default value' => CONTENT_CALLBACK_NONE, + ), @@ -212,0 +154 @@ + @@ -220 +161,0 @@ - @@ -223 +163,0 @@ - $content_type = content_types($content_type_name); @@ -225 +165 @@ - $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'; @@ -230,3 +170 @@ - settings.", - array('!url' => url($url)) - ); + settings.",array('!url' => url($url))); @@ -265,2 +203 @@ -function hs_content_taxonomy_widget($op, &$node, $field, &$node_field) { - if ($field['widget']['type'] == 'content_taxonomy_hs') { +function hs_content_taxonomy_widget(&$form, &$form_state, $field, $items, $delta = 0) { @@ -271,3 +207,0 @@ - - switch ($op) { - case 'form': @@ -274,0 +209,5 @@ + $node = &$form['#node']; + //dsm($node); + foreach($items as $item){ + $selected_items[] = $item['value']; + } @@ -275,0 +215 @@ + $node_field = &$node->$field_name; @@ -276,0 +217,2 @@ + $form[$field_name]['#weight'] = $field['widget']['weight']; + @@ -291,56 +233 @@ - // 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; - } - } -} - -/** - * Implementation of hook_field_formatter_info(). - */ -function hs_content_taxonomy_field_formatter_info() { - return array( - 'hierarchical_text' => array( - 'label' => 'As hierarchical text', - 'field types' => array('content_taxonomy'), - ), - 'hierarchical_links' => array( - 'label' => 'As hierarchical links', - 'field types' => array('content_taxonomy'), - ), + '#default_value' => !empty($selected_items) ? array_values($selected_items) : array(), @@ -348 +234,0 @@ -} @@ -350,5 +235,0 @@ -/** - * Implemenation of hook_field_formatter(). - */ -function hs_content_taxonomy_field_formatter($field, $item, $formatter, $node) { - $output = ''; @@ -356,3 +236,0 @@ - if (!is_array($item)) { - return $output; - } @@ -360,5 +238,2 @@ - // Extract required field information. - $field_name = $field['field_name']; - $vid = $field['vid']; - $tid = $field['tid']; - $depth = (empty($field['depth'])) ? 0 : $field['depth']; + 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. @@ -366,41 +241,2 @@ - // 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); - $config += array( - 'module' => 'hs_content_taxonomy', - 'params' => array( - 'vid' => $vid, - 'tid' => $tid, - 'depth' => $depth, - ), - ); - - // 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); - } - - // Add the CSS. - drupal_add_css(drupal_get_path('module', 'hierarchical_select') .'/hierarchical_select.css'); + hierarchical_select_common_config_apply($form[$field_name]['tids'], "content-taxonomy-$field_name"); + return $form; @@ -408 +243,0 @@ - return $output; @@ -431 +266,2 @@ - $terms = _hs_taxonomy_hierarchical_select_get_tree($params['vid'], $params['tid'], -1, 1); + $tid = $params['tid']?$params['tid']:0; + $terms = _hs_taxonomy_hierarchical_select_get_tree($params['vid'], $tid, -1, 1); @@ -440 +275,0 @@ - @@ -547 +382 @@ - $vocabulary = taxonomy_get_vocabulary($field['vid']); + $vocabulary = taxonomy_vocabulary_load($field['vid']); @@ -558 +393 @@ - '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", @@ -581 +416 @@ - if (arg(0) == 'admin' && arg(1) == 'content' && arg(2) == 'types') { + if (arg(0) == 'admin' && arg(1) == 'content' && arg(2) == 'node-type') { @@ -583 +417,0 @@ - $type = node_get_types('types', $content_type['type']);