diff --git a/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php b/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php index 5829681767c7088a23e66be091ffd96bade76d92..7778153b96b44a77b4c8492d7e28ca836cb0a7e5 100644 --- a/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php +++ b/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php @@ -181,6 +181,9 @@ protected function valueForm(&$form, FormStateInterface $form_state) { if ($tree) { foreach ($tree as $term) { + if (!$term->isPublished()) { + continue; + } $choice = new \stdClass(); $choice->option = [$term->id() => str_repeat('-', $term->depth) . \Drupal::service('entity.repository')->getTranslationFromContext($term)->label()]; $options[] = $choice; @@ -190,6 +193,7 @@ protected function valueForm(&$form, FormStateInterface $form_state) { else { $options = []; $query = \Drupal::entityQuery('taxonomy_term') + ->condition('status', 1) // @todo Sorting on vocabulary properties - // https://www.drupal.org/node/1821274. ->sort('weight') diff --git a/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyIndexTidUiTest.php b/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyIndexTidUiTest.php index 3655369a29baf45a30b62cd46dc2cca968ecb3e3..0540196282004493ea83b90f267be348f37c5ef0 100644 --- a/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyIndexTidUiTest.php +++ b/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyIndexTidUiTest.php @@ -231,4 +231,34 @@ public function testExposedFilter() { $this->assertTrue(empty($preview), 'No results.'); } + /** + * Tests that an exposed taxonomy filter doesn't show unpublished terms. + */ + public function testExposedUnpublishedFilterOptions() { + $this->terms[1][0]->setUnpublished()->save(); + // Expose the filter. + $this->drupalPostForm('admin/structure/views/nojs/handler/test_filter_taxonomy_index_tid/default/filter/tid', [], 'Expose filter'); + $edit = ['options[expose_button][checkbox][checkbox]' => TRUE]; + $this->drupalPostForm(NULL, $edit, 'Apply'); + $this->drupalPostForm(NULL, [], 'Save'); + $this->drupalLogout(); + $this->drupalGet('test-filter-taxonomy-index-tid'); + // Make sure the unpublished term isn't shown to the anonymous user. + $this->assertNotEmpty($this->cssSelect('option[value="' . $this->terms[0][0]->id() . '"]')); + $this->assertEmpty($this->cssSelect('option[value="' . $this->terms[1][0]->id() . '"]')); + + // Tests that the term also isn't shown when not showing hierarchy. + $this->drupalLogin($this->adminUser); + $edit = [ + 'options[hierarchy]' => FALSE, + ]; + $this->drupalPostForm('admin/structure/views/nojs/handler-extra/test_filter_taxonomy_index_tid/default/filter/tid', $edit, 'Apply'); + $this->drupalPostForm(NULL, [], 'Save'); + $this->drupalLogout(); + $this->drupalGet('test-filter-taxonomy-index-tid'); + // Make sure the unpublished term isn't shown to the anonymous user. + $this->assertNotEmpty($this->cssSelect('option[value="' . $this->terms[0][0]->id() . '"]')); + $this->assertEmpty($this->cssSelect('option[value="' . $this->terms[1][0]->id() . '"]')); + } + }