From 9e1ef95788c027451218adc7759ade935fd154a5 Mon Sep 17 00:00:00 2001 From: Ali Alam Date: Wed, 26 Feb 2025 10:57:18 +0800 Subject: [PATCH] System: fixed issue with search terms containing a : (special character) (#1904) Co-authored-by: Ali Alam --- src/Domain/QueryCriteria.php | 8 ++++---- tests/unit/Domain/QueryCriteriaTest.php | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Domain/QueryCriteria.php b/src/Domain/QueryCriteria.php index 65839433a8..92733d93da 100644 --- a/src/Domain/QueryCriteria.php +++ b/src/Domain/QueryCriteria.php @@ -230,7 +230,7 @@ public function searchBy($column, $text = null) */ private function applyAdvancedSearchFilters($text) { - $text = preg_replace_callback('/(\w*\:[\w\-]*|(?:"[^"]*"))+/', function ($matches) { + $text = preg_replace_callback('/(\w*\:\:[\w\-]*|(?:"[^"]*"))+/', function ($matches) { $this->filterBy($matches[0]); return ''; }, $text); @@ -309,8 +309,8 @@ public function filterBy($name, $value = null) { if (empty($name)) return $this; - if (stripos($name, ':') !== false) { - list($name, $value) = array_pad(explode(':', $name, 2), 2, ''); + if (stripos($name, '::') !== false) { + list($name, $value) = array_pad(explode('::', $name, 2), 2, ''); $value = str_replace('"', '', $value); } @@ -364,7 +364,7 @@ public function getFilterValue($name) public function getFilterString() { return implode(' ', array_map(function($value, $name) { - return stripos($value, ' ') !== false ? $name.':"'.$value .'"' : $name.':'.$value; + return stripos($value, ' ') !== false ? $name.'::"'.$value .'"' : $name.'::'.$value; }, $this->criteria['filterBy'], array_keys($this->criteria['filterBy']))); } diff --git a/tests/unit/Domain/QueryCriteriaTest.php b/tests/unit/Domain/QueryCriteriaTest.php index 630cb8d0b3..a1fed9ceaa 100644 --- a/tests/unit/Domain/QueryCriteriaTest.php +++ b/tests/unit/Domain/QueryCriteriaTest.php @@ -141,28 +141,28 @@ public function testCanGetAllSearches() public function testCanAddFilterToSearchString() { - $this->criteria->searchBy('columnName', 'foo bar active:Y'); + $this->criteria->searchBy('columnName', 'foo bar active::Y'); $this->assertTrue($this->criteria->hasFilter('active', 'Y')); if (method_exists($this, 'assertStringNotContainsString')) { // for newer phpunit versions - $this->assertStringNotContainsString('active:Y', $this->criteria->getSearchText()); + $this->assertStringNotContainsString('active::Y', $this->criteria->getSearchText()); } else { // for older phpunit versions - $this->assertNotContains('active:Y', $this->criteria->getSearchText()); + $this->assertNotContains('active::Y', $this->criteria->getSearchText()); } } public function testCanFilterByString() { - $this->criteria->filterBy('foo:bar'); + $this->criteria->filterBy('foo::bar'); $this->assertTrue($this->criteria->hasFilter('foo', 'bar')); } public function testCanFilterByQuotedString() { - $this->criteria->filterBy('foo:"bar baz"'); + $this->criteria->filterBy('foo::"bar baz"'); $this->assertTrue($this->criteria->hasFilter('foo', 'bar baz')); } @@ -186,24 +186,24 @@ public function testCanCheckIfCriteriaHasFilters() { $this->assertFalse($this->criteria->hasFilter()); - $this->criteria->filterBy('foo:bar'); + $this->criteria->filterBy('foo::bar'); $this->assertTrue($this->criteria->hasFilter()); } public function testCanGetAllFilters() { - $this->criteria->filterBy('foo:bar'); + $this->criteria->filterBy('foo::bar'); $this->assertTrue(is_array($this->criteria->getFilterBy())); } public function testCanGetAllFiltersAsString() { - $this->criteria->filterBy('foo:bar'); - $this->criteria->filterBy('baz:"some thing"'); + $this->criteria->filterBy('foo::bar'); + $this->criteria->filterBy('baz::"some thing"'); - $this->assertEquals('foo:bar baz:"some thing"', $this->criteria->getFilterString()); + $this->assertEquals('foo::bar baz::"some thing"', $this->criteria->getFilterString()); } public function testCanSortAscending()