diff options
-rw-r--r-- | core/modules/views/src/Plugin/views/filter/FilterPluginBase.php | 9 | ||||
-rw-r--r-- | core/modules/views/tests/src/Kernel/Handler/FilterInOperatorTest.php | 33 |
2 files changed, 40 insertions, 2 deletions
diff --git a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php index a16c02562ed8..672802b6df51 100644 --- a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php +++ b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php @@ -1347,7 +1347,7 @@ abstract class FilterPluginBase extends HandlerBase implements CacheableDependen // Value can be optional, For example for 'empty' and 'not empty' filters. if (isset($this->options['group_info']['group_items'][$selected_group]['value']) && $this->options['group_info']['group_items'][$selected_group]['value'] !== '') { - $input[$this->options['expose']['identifier']] = $this->options['group_info']['group_items'][$selected_group]['value']; + $input[$this->options['group_info']['identifier']] = $this->options['group_info']['group_items'][$selected_group]['value']; } $this->options['expose']['use_operator'] = TRUE; @@ -1439,7 +1439,12 @@ abstract class FilterPluginBase extends HandlerBase implements CacheableDependen } if (!empty($this->options['expose']['identifier'])) { - $value = $input[$this->options['expose']['identifier']]; + if ($this->options['is_grouped']) { + $value = $input[$this->options['group_info']['identifier']]; + } + else { + $value = $input[$this->options['expose']['identifier']]; + } // Various ways to check for the absence of non-required input. if (empty($this->options['expose']['required'])) { diff --git a/core/modules/views/tests/src/Kernel/Handler/FilterInOperatorTest.php b/core/modules/views/tests/src/Kernel/Handler/FilterInOperatorTest.php index b7b76cef9743..08ab9cf6b4c8 100644 --- a/core/modules/views/tests/src/Kernel/Handler/FilterInOperatorTest.php +++ b/core/modules/views/tests/src/Kernel/Handler/FilterInOperatorTest.php @@ -164,6 +164,39 @@ class FilterInOperatorTest extends ViewsKernelTestBase { $this->assertIdenticalResultset($view, $expected_result, $this->columnMap); } + /** + * Tests that we can safely change the identifier on a grouped filter. + */ + public function testFilterGroupedChangedIdentifier() { + $filters = $this->getGroupedExposedFilters(); + $view = Views::getView('test_view'); + + $filters['age']['group_info']['default_group'] = 2; + $filters['age']['group_info']['identifier'] = 'not-age'; + $view->setDisplay(); + $view->displayHandlers->get('default')->overrideOption('filters', $filters); + + $this->executeView($view); + + $expected_result = [ + [ + 'name' => 'John', + 'age' => 25, + ], + [ + 'name' => 'George', + 'age' => 27, + ], + [ + 'name' => 'Ringo', + 'age' => 28, + ], + ]; + + $this->assertCount(3, $view->result); + $this->assertIdenticalResultset($view, $expected_result, $this->columnMap); + } + protected function getGroupedExposedFilters() { $filters = [ 'age' => [ |