Completed
Push — master ( bbcf4b...c3b775 )
by Derek Stephen
01:35
created

CollectionFilter::getPaginationFilter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
3
namespace Del\Filter;
4
5
use ArrayIterator;
6
use Del\Filter\Collection\FilterCollection;
7
use Del\Filter\Filter\PaginationFilter;
8
9
class CollectionFilter
10
{
11
    /** @var FilterCollection $filterCollection */
12
    private $filterCollection;
13
14
    /** @var PaginationFilter $paginationFilter */
15
    private $paginationFilter;
16
17 1
    public function __construct()
18
    {
19 1
        $this->paginationFilter = new PaginationFilter();
20 1
    }
21
22
    /**
23
     * @return FilterCollection
24
     */
25
    public function getFilterCollection(): FilterCollection
26
    {
27
        return $this->filterCollection;
28
    }
29
30
    /**
31
     * @param FilterCollection $filterCollection
32
     * @return CollectionFilter
33
     */
34
    public function setFilterCollection(FilterCollection $filterCollection): CollectionFilter
35
    {
36
        $this->filterCollection = $filterCollection;
37
        return $this;
38
    }
39
40
    /**
41
     * @param ArrayIterator $results
42
     * @return ArrayIterator
43
     */
44
    public function filterResults(ArrayIterator $results) : ArrayIterator
45
    {
46
        // Set the filters back to the first one
47
        $this->filterCollection->rewind();
48
49
        // loop through each filter
50
        while ($this->filterCollection->valid()) {
51
52
            // filter the results
53
            $results = $this->filterCollection->current()->filter($results);
54
55
            // move to the next filter
56
            $this->filterCollection->next();
57
        }
58
59
        // finally, if pagination is used, this will return the appropriate results
60
        $results = $this->paginationFilter->filter($results);
61
62
        return $results;
63
    }
64
65
    /**
66
     * @return PaginationFilter
67
     */
68
    public function getPaginationFilter(): PaginationFilter
69
    {
70
        return $this->paginationFilter;
71
    }
72
}