Issue #1369200 by chris.leversuch, acouch: Define constants for taxonomy hierarchy.

8.0.x
catch 2011-12-23 12:42:04 +09:00
parent 0f3b394f11
commit b100374e3c
2 changed files with 37 additions and 20 deletions

View File

@ -115,7 +115,7 @@ function taxonomy_form_vocabulary($form, &$form_state, $edit = array()) {
'name' => '', 'name' => '',
'machine_name' => '', 'machine_name' => '',
'description' => '', 'description' => '',
'hierarchy' => 0, 'hierarchy' => TAXONOMY_HIERARCHY_DISABLED,
'weight' => 0, 'weight' => 0,
); );
foreach ($defaults as $key => $value) { foreach ($defaults as $key => $value) {
@ -368,7 +368,7 @@ function taxonomy_overview_terms($form, &$form_state, $vocabulary) {
} }
$form[$key]['view'] = array('#type' => 'link', '#title' => $term->name, '#href' => "taxonomy/term/$term->tid"); $form[$key]['view'] = array('#type' => 'link', '#title' => $term->name, '#href' => "taxonomy/term/$term->tid");
if ($vocabulary->hierarchy < 2 && count($tree) > 1) { if ($vocabulary->hierarchy != TAXONOMY_HIERARCHY_MULTIPLE && count($tree) > 1) {
$form['#parent_fields'] = TRUE; $form['#parent_fields'] = TRUE;
$form[$key]['tid'] = array( $form[$key]['tid'] = array(
'#type' => 'hidden', '#type' => 'hidden',
@ -402,7 +402,7 @@ function taxonomy_overview_terms($form, &$form_state, $vocabulary) {
$form['#forward_step'] = $forward_step; $form['#forward_step'] = $forward_step;
$form['#empty_text'] = t('No terms available. <a href="@link">Add term</a>.', array('@link' => url('admin/structure/taxonomy/' . $vocabulary->machine_name . '/add'))); $form['#empty_text'] = t('No terms available. <a href="@link">Add term</a>.', array('@link' => url('admin/structure/taxonomy/' . $vocabulary->machine_name . '/add')));
if ($vocabulary->hierarchy < 2 && count($tree) > 1) { if ($vocabulary->hierarchy != TAXONOMY_HIERARCHY_MULTIPLE && count($tree) > 1) {
$form['actions'] = array('#type' => 'actions', '#tree' => FALSE); $form['actions'] = array('#type' => 'actions', '#tree' => FALSE);
$form['actions']['submit'] = array( $form['actions']['submit'] = array(
'#type' => 'submit', '#type' => 'submit',
@ -449,7 +449,8 @@ function taxonomy_overview_terms_submit($form, &$form_state) {
uasort($form_state['values'], 'drupal_sort_weight'); uasort($form_state['values'], 'drupal_sort_weight');
$vocabulary = $form['#vocabulary']; $vocabulary = $form['#vocabulary'];
$hierarchy = 0; // Update the current hierarchy type as we go. // Update the current hierarchy type as we go.
$hierarchy = TAXONOMY_HIERARCHY_DISABLED;
$changed_terms = array(); $changed_terms = array();
$tree = taxonomy_get_tree($vocabulary->vid); $tree = taxonomy_get_tree($vocabulary->vid);
@ -468,7 +469,7 @@ function taxonomy_overview_terms_submit($form, &$form_state) {
$changed_terms[$term['tid']] = $term; $changed_terms[$term['tid']] = $term;
} }
$weight++; $weight++;
$hierarchy = $term['parents'][0] != 0 ? 1 : $hierarchy; $hierarchy = $term['parents'][0] != 0 ? TAXONOMY_HIERARCHY_SINGLE : $hierarchy;
$term = (array) $tree[$weight]; $term = (array) $tree[$weight];
} }
@ -495,7 +496,7 @@ function taxonomy_overview_terms_submit($form, &$form_state) {
$term['parent'] = $values['parent']; $term['parent'] = $values['parent'];
$changed_terms[$term['tid']] = $term; $changed_terms[$term['tid']] = $term;
} }
$hierarchy = $term['parent'] != 0 ? 1 : $hierarchy; $hierarchy = $term['parent'] != 0 ? TAXONOMY_HIERARCHY_SINGLE : $hierarchy;
$weight++; $weight++;
} }
} }
@ -508,7 +509,7 @@ function taxonomy_overview_terms_submit($form, &$form_state) {
$term['weight'] = $weight; $term['weight'] = $weight;
$changed_terms[$term['tid']] = $term; $changed_terms[$term['tid']] = $term;
} }
$hierarchy = $term['parents'][0] != 0 ? 1 : $hierarchy; $hierarchy = $term['parents'][0] != 0 ? TAXONOMY_HIERARCHY_SINGLE : $hierarchy;
} }
// Save all updated terms. // Save all updated terms.
@ -702,7 +703,7 @@ function taxonomy_form_term($form, &$form_state, $edit = array(), $vocabulary =
'#type' => 'fieldset', '#type' => 'fieldset',
'#title' => t('Relations'), '#title' => t('Relations'),
'#collapsible' => TRUE, '#collapsible' => TRUE,
'#collapsed' => $vocabulary->hierarchy < 2, '#collapsed' => ($vocabulary->hierarchy != TAXONOMY_HIERARCHY_MULTIPLE),
'#weight' => 10, '#weight' => 10,
); );
@ -840,8 +841,8 @@ function taxonomy_form_term_submit($form, &$form_state) {
} }
// If we've increased the number of parents and this is a single or flat // If we've increased the number of parents and this is a single or flat
// hierarchy, update the vocabulary immediately. // hierarchy, update the vocabulary immediately.
elseif ($current_parent_count > $previous_parent_count && $form['#vocabulary']->hierarchy < 2) { elseif ($current_parent_count > $previous_parent_count && $form['#vocabulary']->hierarchy != TAXONOMY_HIERARCHY_MULTIPLE) {
$form['#vocabulary']->hierarchy = $current_parent_count == 1 ? 1 : 2; $form['#vocabulary']->hierarchy = $current_parent_count == 1 ? TAXONOMY_HIERARCHY_SINGLE : TAXONOMY_HIERARCHY_MULTIPLE;
taxonomy_vocabulary_save($form['#vocabulary']); taxonomy_vocabulary_save($form['#vocabulary']);
} }

View File

@ -5,6 +5,21 @@
* Enables the organization of content into categories. * Enables the organization of content into categories.
*/ */
/**
* Denotes that no term in the vocabulary has a parent.
*/
const TAXONOMY_HIERARCHY_DISABLED = 0;
/**
* Denotes that one or more terms in the vocabulary has a single parent.
*/
const TAXONOMY_HIERARCHY_SINGLE = 1;
/**
* Denotes that one or more terms in the vocabulary have multiple parents.
*/
const TAXONOMY_HIERARCHY_MULTIPLE = 2;
/** /**
* Users can create new terms in a free-tagging vocabulary when * Users can create new terms in a free-tagging vocabulary when
* submitting a taxonomy_autocomplete_widget. We store a term object * submitting a taxonomy_autocomplete_widget. We store a term object
@ -51,11 +66,11 @@ function taxonomy_help($path, $arg) {
case 'admin/structure/taxonomy/%': case 'admin/structure/taxonomy/%':
$vocabulary = taxonomy_vocabulary_machine_name_load($arg[3]); $vocabulary = taxonomy_vocabulary_machine_name_load($arg[3]);
switch ($vocabulary->hierarchy) { switch ($vocabulary->hierarchy) {
case 0: case TAXONOMY_HIERARCHY_DISABLED:
return '<p>' . t('You can reorganize the terms in %capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', array('%capital_name' => drupal_ucfirst($vocabulary->name), '%name' => $vocabulary->name)) . '</p>'; return '<p>' . t('You can reorganize the terms in %capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', array('%capital_name' => drupal_ucfirst($vocabulary->name), '%name' => $vocabulary->name)) . '</p>';
case 1: case TAXONOMY_HIERARCHY_SINGLE:
return '<p>' . t('%capital_name contains terms grouped under parent terms. You can reorganize the terms in %capital_name using their drag-and-drop handles.', array('%capital_name' => drupal_ucfirst($vocabulary->name), '%name' => $vocabulary->name)) . '</p>'; return '<p>' . t('%capital_name contains terms grouped under parent terms. You can reorganize the terms in %capital_name using their drag-and-drop handles.', array('%capital_name' => drupal_ucfirst($vocabulary->name), '%name' => $vocabulary->name)) . '</p>';
case 2: case TAXONOMY_HIERARCHY_MULTIPLE:
return '<p>' . t('%capital_name contains terms with multiple parents. Drag and drop of terms with multiple parents is not supported, but you can re-enable drag-and-drop support by editing each term to include only a single parent.', array('%capital_name' => drupal_ucfirst($vocabulary->name))) . '</p>'; return '<p>' . t('%capital_name contains terms with multiple parents. Drag and drop of terms with multiple parents is not supported, but you can re-enable drag-and-drop support by editing each term to include only a single parent.', array('%capital_name' => drupal_ucfirst($vocabulary->name))) . '</p>';
} }
} }
@ -519,10 +534,11 @@ function taxonomy_taxonomy_vocabulary_update($vocabulary) {
* *
* Checks the current parents of all terms in a vocabulary and updates the * Checks the current parents of all terms in a vocabulary and updates the
* vocabulary's hierarchy setting to the lowest possible level. If no term * vocabulary's hierarchy setting to the lowest possible level. If no term
* has parent terms then the vocabulary will be given a hierarchy of 0. * has parent terms then the vocabulary will be given a hierarchy of
* If any term has a single parent then the vocabulary will be given a * TAXONOMY_HIERARCHY_DISABLED. If any term has a single parent then the
* hierarchy of 1. If any term has multiple parents then the vocabulary * vocabulary will be given a hierarchy of TAXONOMY_HIERARCHY_SINGLE. If any
* will be given a hierarchy of 2. * term has multiple parents then the vocabulary will be given a hierarchy of
* TAXONOMY_HIERARCHY_MULTIPLE.
* *
* @param $vocabulary * @param $vocabulary
* A vocabulary object. * A vocabulary object.
@ -534,7 +550,7 @@ function taxonomy_taxonomy_vocabulary_update($vocabulary) {
*/ */
function taxonomy_check_vocabulary_hierarchy($vocabulary, $changed_term) { function taxonomy_check_vocabulary_hierarchy($vocabulary, $changed_term) {
$tree = taxonomy_get_tree($vocabulary->vid); $tree = taxonomy_get_tree($vocabulary->vid);
$hierarchy = 0; $hierarchy = TAXONOMY_HIERARCHY_DISABLED;
foreach ($tree as $term) { foreach ($tree as $term) {
// Update the changed term with the new parent value before comparison. // Update the changed term with the new parent value before comparison.
if ($term->tid == $changed_term['tid']) { if ($term->tid == $changed_term['tid']) {
@ -543,11 +559,11 @@ function taxonomy_check_vocabulary_hierarchy($vocabulary, $changed_term) {
} }
// Check this term's parent count. // Check this term's parent count.
if (count($term->parents) > 1) { if (count($term->parents) > 1) {
$hierarchy = 2; $hierarchy = TAXONOMY_HIERARCHY_MULTIPLE;
break; break;
} }
elseif (count($term->parents) == 1 && 0 !== array_shift($term->parents)) { elseif (count($term->parents) == 1 && 0 !== array_shift($term->parents)) {
$hierarchy = 1; $hierarchy = TAXONOMY_HIERARCHY_SINGLE;
} }
} }
if ($hierarchy != $vocabulary->hierarchy) { if ($hierarchy != $vocabulary->hierarchy) {