From 70d8345add364fab5e6345de5ed59d4f91dce35f Mon Sep 17 00:00:00 2001 From: John Holt Date: Fri, 3 Nov 2023 16:48:30 +0000 Subject: [PATCH] put search code in a function --- api/src/Database/DatabaseQueryBuilder.php | 12 +++++++++++ api/src/Page/Contact.php | 11 +++------- .../Database/DatabaseQueryBuilderTest.php | 20 +++++++++++++++++-- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/api/src/Database/DatabaseQueryBuilder.php b/api/src/Database/DatabaseQueryBuilder.php index 1a41ba920..122a1ea99 100644 --- a/api/src/Database/DatabaseQueryBuilder.php +++ b/api/src/Database/DatabaseQueryBuilder.php @@ -164,4 +164,16 @@ private function addBoundVariable($value): int array_push($this->query_bound_values, $value); return sizeof($this->query_bound_values); } + + public static function getWhereSearch($searchValue, $fields, &$query_bound_values) + { + $where = " AND (0=1"; + + foreach ($fields as $field) { + array_push($query_bound_values, $searchValue); + $where .= " OR lower(" . $field . ") LIKE lower(CONCAT('%', :" . sizeof($query_bound_values) . ", '%'))"; + } + $where .= ")"; + return $where; + } } diff --git a/api/src/Page/Contact.php b/api/src/Page/Contact.php index f43b69c4e..6b65fa0d6 100644 --- a/api/src/Page/Contact.php +++ b/api/src/Page/Contact.php @@ -3,6 +3,7 @@ namespace SynchWeb\Page; use SynchWeb\Page; +use SynchWeb\Database\DatabaseQueryBuilder; class Contact extends Page { @@ -48,16 +49,10 @@ function _get_contacts() { } if ($this->has_arg('s')) { - $st = sizeof($args) + 1; $fields = array('pe.givenname', 'pe.familyname', 'c.cardname', 'l.name', 'l.address', 'l.city', 'l.country', 'pe.phonenumber', 'l.postcode'); - $where .= " AND (0=1"; - - foreach ($fields as $i => $field) { - $where .= " OR lower(" . $field . ") LIKE lower(CONCAT('%', :" . ($st + $i) . ", '%'))"; - array_push($args, $this->arg('s')); - } - $where .= ")"; + $where = $where . DatabaseQueryBuilder::getWhereSearch($this->arg('s'), $fields, $args); + error_log($where); } $tot = $this->db->pq("SELECT count(c.labcontactid) as tot FROM labcontact c diff --git a/api/tests/Database/DatabaseQueryBuilderTest.php b/api/tests/Database/DatabaseQueryBuilderTest.php index 4a95ecc26..dfe6fbbde 100644 --- a/api/tests/Database/DatabaseQueryBuilderTest.php +++ b/api/tests/Database/DatabaseQueryBuilderTest.php @@ -6,11 +6,13 @@ use SynchWeb\Database\DatabaseParent; use SynchWeb\Database\DatabaseQueryBuilder; -final class DatabaseHelperTest extends TestCase +use function PHPUnit\Framework\assertEquals; + +final class DatabaseQueryBuilderTest extends TestCase { use \phpmock\phpunit\PHPMock; - private function create_database_helper($fields, $expected_sql, $expected_id_value = null) + private function create_database_helper($fields, $expected_sql=null, $expected_id_value = null) { $expected_values = []; foreach ($fields as $field) @@ -168,4 +170,18 @@ public function testWithTwoValuesWhenInsertingDBInsertIsCorrect() } $dbh->insert($expected_table); } + + public function testWithSingleIdWhereClauseGetWhereClauseReturnIt() { + $fields = ["a.field1", "b.field2"]; + $expected_sql = " AND (0=1 OR lower({$fields[0]}) LIKE lower(CONCAT('%', :2, '%')) OR lower({$fields[1]}) LIKE lower(CONCAT('%', :3, '%')))"; + $expectedSearchValue = "searchVal"; + + $element1 = "first"; + $args=[$element1]; + $sql = DatabaseQueryBuilder::getWhereSearch($expectedSearchValue, $fields, $args); + + assertEquals($expected_sql, $sql); + assertEquals([$element1, $expectedSearchValue, $expectedSearchValue], $args); + } + }