/
ResultFactory.php
47 lines (38 loc) · 1.33 KB
/
ResultFactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
namespace Concrete\Core\Search\Result;
use Concrete\Core\Entity\Search\Query;
use Concrete\Core\Search\ItemList\Pager\PagerProviderInterface;
use Concrete\Core\Search\ProviderInterface;
use Symfony\Component\HttpFoundation\Request;
/**
* Class ResultFactory
*
* Responsible for creating Result objects from different sources, which are used in search views.
*
* @package Concrete\Core\Search\Result
*/
class ResultFactory
{
public function createFromQuery(ProviderInterface $searchProvider, Query $query)
{
$list = $searchProvider->getItemList();
foreach ($query->getFields() as $field) {
$field->filterList($list);
}
$columns = $query->getColumns();
if (is_object($columns)) {
$column = $columns->getDefaultSortColumn();
$list->sortBySearchColumn($column);
} else {
$columns = $searchProvider->getDefaultColumnSet();
}
if ($list instanceof PagerProviderInterface) {
$manager = $list->getPagerManager();
$manager->sortListByCursor($list, $list->getActiveSortDirection());
}
$list->setItemsPerPage($query->getItemsPerPage());
$result = $searchProvider->createSearchResultObject($columns, $list);
$result->setQuery($query);
return $result;
}
}