Fixed incorrect search logic in last commit

Incorrect cross-entity pagination could lead to hidden entities.
This commit is contained in:
Dan Brown 2018-03-24 19:04:18 +00:00
parent f101c1a622
commit 1e015af3c9
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9

View File

@ -64,7 +64,7 @@ class SearchService
* @param string $searchString
* @param string $entityType
* @param int $page
* @param int $count
* @param int $count - Count of each entity to search, Total returned could can be larger and not guaranteed.
* @return array[int, Collection];
*/
public function searchEntities($searchString, $entityType = 'all', $page = 1, $count = 20)
@ -81,21 +81,26 @@ class SearchService
$results = collect();
$total = 0;
$hasMore = false;
foreach ($entityTypesToSearch as $entityType) {
if (!in_array($entityType, $entityTypes)) {
continue;
}
$search = $this->searchEntityTable($terms, $entityType, $page, $count + 1);
$total += $this->searchEntityTable($terms, $entityType, $page, $count + 1, true);
$search = $this->searchEntityTable($terms, $entityType, $page, $count);
$entityTotal = $this->searchEntityTable($terms, $entityType, $page, $count, true);
if ($entityTotal > $page * $count) {
$hasMore = true;
}
$total += $entityTotal;
$results = $results->merge($search);
}
return [
'total' => $total,
'count' => count($results),
'has_more' => $results->count() > $count,
'results' => $results->sortByDesc('score')->slice(0, $count)->values()
'has_more' => $hasMore,
'results' => $results->sortByDesc('score')->values()
];
}