1: <?php
2:
3: namespace PHPixie\PaginateORM\Loader;
4:
5: class Query implements \PHPixie\Paginate\Loader
6: {
7: protected $query;
8: protected $preload;
9:
10: public function __construct($query, $preload = array())
11: {
12: $this->query = $query;
13: $this->preload = $preload;
14:
15: $this->originalLimit = $query->getLimit();
16: $this->originalOffset = $query->getOffset();
17: }
18:
19: public function getCount()
20: {
21: $this->restoreLimitAndOffset();
22: return $this->query->count();
23: }
24:
25: public function getItems($offset, $limit)
26: {
27: if($this->originalOffset === null) {
28: $offset+= $this->originalOffset;
29: }
30:
31: $items = $this->query
32: ->limit($limit)
33: ->offset($offset)
34: ->find($this->preload);
35:
36: $this->restoreLimitAndOffset();
37: return $items;
38: }
39:
40: protected function restoreLimitAndOffset()
41: {
42: if($this->originalLimit !== null) {
43: $this->query->limit($this->originalLimit);
44: }else{
45: $this->query->clearLimit();
46: }
47:
48: if($this->originalOffset !== null) {
49: $this->query->offset($this->originalOffset);
50: }else{
51: $this->query->clearOffset();
52: }
53: }
54: }