diff --git a/core/modules/views/src/Plugin/views/filter/Combine.php b/core/modules/views/src/Plugin/views/filter/Combine.php index bffce7a8962c2b61ff98c36dbb361ecc5d16a63a..439888273817a182ce816ce0c2fc7ef341168594 100644 --- a/core/modules/views/src/Plugin/views/filter/Combine.php +++ b/core/modules/views/src/Plugin/views/filter/Combine.php @@ -210,7 +210,8 @@ protected function opNotLike($expression) { protected function opRegex($expression) { $placeholder = $this->placeholder(); - $this->query->addWhereExpression($this->options['group'], "$expression REGEXP $placeholder", [$placeholder => $this->value]); + $operator = $this->getConditionOperator('REGEXP'); + $this->query->addWhereExpression($this->options['group'], "$expression $operator $placeholder", [$placeholder => $this->value]); } protected function opEmpty($expression) { diff --git a/core/modules/views/tests/src/Kernel/Handler/FilterCombineTest.php b/core/modules/views/tests/src/Kernel/Handler/FilterCombineTest.php index ea079c488aa2077566a9c58cc8ae4c20f1473b6c..57a6d6d71d8a0eeca1f81c24dc5bd810607df8fd 100644 --- a/core/modules/views/tests/src/Kernel/Handler/FilterCombineTest.php +++ b/core/modules/views/tests/src/Kernel/Handler/FilterCombineTest.php @@ -98,6 +98,65 @@ public function testFilterCombineContains() { $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } + /** + * Tests the Combine field filter with the 'regular_expression' operator. + */ + public function testFilterCombineRegEx() { + $view = Views::getView('test_view'); + $view->setDisplay(); + + $fields = $view->displayHandlers->get('default')->getOption('fields'); + $view->displayHandlers->get('default')->overrideOption('fields', $fields + [ + 'job' => [ + 'id' => 'job', + 'table' => 'views_test_data', + 'field' => 'job', + 'relationship' => 'none', + ], + ]); + + // Change the filtering. + $view->displayHandlers->get('default')->overrideOption('filters', [ + 'age' => [ + 'id' => 'combine', + 'table' => 'views', + 'field' => 'combine', + 'relationship' => 'none', + 'operator' => 'regular_expression', + 'fields' => [ + 'name', + 'job', + ], + 'value' => '(ing|write)', + ], + ]); + + $this->executeView($view); + $resultset = [ + [ + 'name' => 'John', + 'job' => 'Singer', + ], + [ + 'name' => 'George', + 'job' => 'Singer', + ], + [ + 'name' => 'Ringo', + 'job' => 'Drummer', + ], + [ + 'name' => 'Paul', + 'job' => 'Songwriter', + ], + [ + 'name' => 'Ginger', + 'job' => NULL, + ], + ]; + $this->assertIdenticalResultset($view, $resultset, $this->columnMap); + } + /** * Tests the Combine field filter with the 'word' operator. */