diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php index 066e8f2d59bf474bee87523e66549711e6c352fa..acfd78f422e7f0ebf9332a1db3ab2062ab7921a8 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php @@ -157,9 +157,7 @@ public static function postDelete(EntityStorageControllerInterface $storage_cont foreach ($children as $child) { // If the term has multiple parents, we don't delete it. $parents = taxonomy_term_load_parents($child->id()); - // Because the parent has already been deleted, the parent count might - // be 0. - if (count($parents) <= 1) { + if (empty($parents)) { $orphans[] = $child->id(); } } diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermUnitTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermUnitTest.php index 4a81f0550794359ff4624a23a8673d3c1164a916..83132c36cbf36b62fcde6b15726baf75e7dbce02 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermUnitTest.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermUnitTest.php @@ -32,6 +32,27 @@ function testTermDelete() { entity_delete_multiple('taxonomy_term', array(42)); } + /** + * Deleting a parent of a term with multiple parents does not delete the term. + */ + function testMultipleParentDelete() { + $vocabulary = $this->createVocabulary(); + $parent_term1 = $this->createTerm($vocabulary); + $parent_term2 = $this->createTerm($vocabulary); + $child_term = $this->createTerm($vocabulary); + $child_term->parent = array($parent_term1->id(), $parent_term2->id()); + $child_term->save(); + $child_term_id = $child_term->id(); + + $parent_term1->delete(); + $child_term = entity_load('taxonomy_term', $child_term_id, TRUE); + $this->assertTrue(!empty($child_term), 'Child term is not deleted if only one of its parents is removed.'); + + $parent_term2->delete(); + $child_term = entity_load('taxonomy_term', $child_term_id, TRUE); + $this->assertTrue(empty($child_term), 'Child term is deleted if all of its parents are removed.'); + } + /** * Test a taxonomy with terms that have multiple parents of different depths. */