From bebc0c953a76679bd5dbf57579c47ed428a1e5a1 Mon Sep 17 00:00:00 2001 From: colemanw Date: Sun, 3 Dec 2023 23:36:10 +0000 Subject: [PATCH] SearchKit - Ensure result autocompleted by id is excluded from subsequent pages --- Civi/Api4/Generic/AutocompleteAction.php | 2 ++ tests/phpunit/api/v4/Action/AutocompleteTest.php | 1 + 2 files changed, 3 insertions(+) diff --git a/Civi/Api4/Generic/AutocompleteAction.php b/Civi/Api4/Generic/AutocompleteAction.php index 183043e3a8..332ea6b426 100644 --- a/Civi/Api4/Generic/AutocompleteAction.php +++ b/Civi/Api4/Generic/AutocompleteAction.php @@ -169,6 +169,8 @@ class AutocompleteAction extends AbstractAction { // For subsequent pages when searching by id, subtract the "extra" first page elseif ($searchById && $this->page > 1) { $this->page -= 1; + // Record with that id was already returned on page one so exclude it from subsequent pages + $this->savedSearch['api_params']['where'][] = [$primaryKeys[0], '!=', $this->input]; } // If first line uses a rewrite, search on those fields too if (!$initialSearchById && !empty($this->display['settings']['columns'][0]['rewrite'])) { diff --git a/tests/phpunit/api/v4/Action/AutocompleteTest.php b/tests/phpunit/api/v4/Action/AutocompleteTest.php index da756de267..032ca9db3d 100644 --- a/tests/phpunit/api/v4/Action/AutocompleteTest.php +++ b/tests/phpunit/api/v4/Action/AutocompleteTest.php @@ -285,6 +285,7 @@ class AutocompleteTest extends Api4TestBase implements HookInterface, Transactio $cid = $contacts[11]['id']; Contact::save(FALSE) + ->addRecord(['id' => $contacts[11]['id'], 'last_name' => "Aaaac$cid"]) ->addRecord(['id' => $contacts[0]['id'], 'last_name' => "Aaaac$cid"]) ->addRecord(['id' => $contacts[14]['id'], 'last_name' => "Aaaab$cid"]) ->addRecord(['id' => $contacts[6]['id'], 'last_name' => "Aaaaa$cid"]) -- 2.25.1