RepositorySearchResultBuilderTrait   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
wmc 8
lcom 0
cbo 0
dl 0
loc 63
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A addFiltersToCollection() 0 13 3
A addSortOrdersToCollection() 0 9 3
A addPagingToCollection() 0 7 1
A buildSearchResult() 0 10 1
1
<?php
2
declare(strict_types=1);
3
4
/**
5
 * File: RepositorySearchResultBuilderTrait.php
6
 *
7
 * @author      Maciej Sławik <[email protected]>
8
 * Github:      https://github.com/maciejslawik
9
 */
10
11
namespace MSlwk\RepositorySearchResultBuilder\Traits;
12
13
use Magento\Framework\Api\SearchCriteriaInterface;
14
use Magento\Framework\Api\SearchResultsInterface;
15
use Magento\Framework\Api\SortOrder;
16
use Magento\Framework\Data\Collection\AbstractDb;
17
18
/**
19
 * Trait RepositorySearchResultBuilderTrait
20
 * @package MSlwk\RepositorySearchResultBuilder\Traits
21
 */
22
trait RepositorySearchResultBuilderTrait
23
{
24
    /**
25
     * @param SearchCriteriaInterface $searchCriteria
26
     * @param AbstractDb $collection
27
     */
28
    protected function addFiltersToCollection(
29
        SearchCriteriaInterface $searchCriteria,
30
        AbstractDb $collection
31
    ): void {
32
        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
33
            $fields = $conditions = [];
34
            foreach ($filterGroup->getFilters() as $filter) {
35
                $fields[] = $filter->getField();
36
                $conditions[] = [$filter->getConditionType() => $filter->getValue()];
37
            }
38
            $collection->addFieldToFilter($fields, $conditions);
39
        }
40
    }
41
42
    /**
43
     * @param SearchCriteriaInterface $searchCriteria
44
     * @param AbstractDb $collection
45
     */
46
    protected function addSortOrdersToCollection(
47
        SearchCriteriaInterface $searchCriteria,
48
        AbstractDb $collection
49
    ): void {
50
        foreach ((array)$searchCriteria->getSortOrders() as $sortOrder) {
51
            $direction = $sortOrder->getDirection() === SortOrder::SORT_ASC ? 'asc' : 'desc';
52
            $collection->addOrder($sortOrder->getField(), $direction);
53
        }
54
    }
55
56
    /**
57
     * @param SearchCriteriaInterface $searchCriteria
58
     * @param AbstractDb $collection
59
     */
60
    protected function addPagingToCollection(
61
        SearchCriteriaInterface $searchCriteria,
62
        AbstractDb $collection
63
    ): void {
64
        $collection->setPageSize($searchCriteria->getPageSize());
65
        $collection->setCurPage($searchCriteria->getCurrentPage());
66
    }
67
68
    /**
69
     * @param SearchCriteriaInterface $searchCriteria
70
     * @param SearchResultsInterface $searchResults
71
     * @param AbstractDb $collection
72
     * @return SearchResultsInterface
73
     */
74
    protected function buildSearchResult(
75
        SearchCriteriaInterface $searchCriteria,
76
        SearchResultsInterface $searchResults,
77
        AbstractDb $collection
78
    ): SearchResultsInterface {
79
        $searchResults->setSearchCriteria($searchCriteria);
80
        $searchResults->setItems($collection->getItems());
81
        $searchResults->setTotalCount($collection->getSize());
82
        return $searchResults;
83
    }
84
}
85