AbstractDataSource::setPaginatorAdapter()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace ZfcDatagrid\DataSource;
4
5
use Zend\Paginator\Adapter\AdapterInterface as PaginatorAdapterInterface;
6
use ZfcDatagrid\Column;
7
use ZfcDatagrid\Filter;
8
9
abstract class AbstractDataSource implements DataSourceInterface
10
{
11
    /**
12
     * @var array
13
     */
14
    protected $columns = [];
15
16
    /**
17
     * @var array
18
     */
19
    protected $sortConditions = [];
20
21
    /**
22
     * @var array
23
     */
24
    protected $filters = [];
25
26
    /**
27
     * The data result.
28
     *
29
     * @var \Zend\Paginator\Adapter\AdapterInterface
30
     */
31
    protected $paginatorAdapter;
32
33
    /**
34
     * Set the data source
35
     * - array
36
     * - ZF2: Zend\Db\Sql\Select
37
     * - Doctrine2: Doctrine\ORM\QueryBuilder
38
     * - ...
39
     *
40
     * @param mixed $data
41
     *
42
     * @throws \Exception
43
     */
44
    public function __construct($data)
45
    {
46
        // we need this exception, because a abstract __construct, create a exception in php-unit for mocking
47
        throw new \Exception(sprintf('Missing __construct in %s', get_class($this)));
48
    }
49
50
    /**
51
     * Set the columns.
52
     *
53
     * @param array $columns
54
     */
55
    public function setColumns(array $columns)
56
    {
57
        $this->columns = $columns;
58
    }
59
60
    /**
61
     * @return Column\AbstractColumn[]
62
     */
63
    public function getColumns()
64
    {
65
        return $this->columns;
66
    }
67
68
    /**
69
     * Set sort conditions.
70
     *
71
     * @param Column\AbstractColumn $column
72
     * @param string                $sortDirection
73
     */
74
    public function addSortCondition(Column\AbstractColumn $column, $sortDirection = 'ASC')
75
    {
76
        $this->sortConditions[] = [
77
            'column' => $column,
78
            'sortDirection' => $sortDirection,
79
        ];
80
    }
81
82
    /**
83
     * @param array $sortConditions
84
     */
85
    public function setSortConditions(array $sortConditions)
86
    {
87
        $this->sortConditions = $sortConditions;
88
    }
89
90
    /**
91
     * @return array
92
     */
93
    public function getSortConditions()
94
    {
95
        return $this->sortConditions;
96
    }
97
98
    /**
99
     * Add a filter rule.
100
     *
101
     * @param Filter $filter
102
     */
103
    public function addFilter(Filter $filter)
104
    {
105
        $this->filters[] = $filter;
106
    }
107
108
    /**
109
     * @param array $filters
110
     */
111
    public function setFilters(array $filters)
112
    {
113
        $this->filters = $filters;
114
    }
115
116
    /**
117
     * @return \ZfcDatagrid\Filter[]
118
     */
119
    public function getFilters()
120
    {
121
        return $this->filters;
122
    }
123
124
    /**
125
     * @param PaginatorAdapterInterface $paginator
126
     */
127
    public function setPaginatorAdapter(PaginatorAdapterInterface $paginator)
128
    {
129
        $this->paginatorAdapter = $paginator;
130
    }
131
132
    /**
133
     * @return \Zend\Paginator\Adapter\AdapterInterface
134
     */
135
    public function getPaginatorAdapter()
136
    {
137
        return $this->paginatorAdapter;
138
    }
139
140
    /**
141
     * Get the data back from construct.
142
     *
143
     * @return mixed
144
     */
145
    abstract public function getData();
146
147
    /**
148
     * Execute the query and set the paginator
149
     * - with sort statements
150
     * - with filters statements.
151
     */
152
    abstract public function execute();
153
}
154