ArrayProcessor::defaultFormat()   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
eloc 2
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
nc 1
nop 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Lampager\Cake;
6
7
use Cake\ORM\Entity;
8
use Lampager\ArrayProcessor as BaseArrayProcessor;
9
use Lampager\Cake\ORM\Query;
10
use Lampager\Query as LampagerQuery;
11
12
class ArrayProcessor extends BaseArrayProcessor
13
{
14
    /**
15
     * {@inheritdoc}
16
     */
17
    protected function defaultFormat($rows, array $meta, LampagerQuery $query)
18
    {
19
        return new PaginationResult($rows, $meta + [
20
            'limit' => $query->limit(),
21
        ]);
22
    }
23
24
    /**
25
     * Remove alias if prexied.
26
     * e.g., Foos.bar -> bar
27
     *
28
     * @param  string $column Current column
29
     * @param  string $alias  Current model alias
30
     * @return string Unaliased column where applicable
31
     */
32
    protected function removeAlias(string $column, string $alias): string
33
    {
34
        if (strpos($column, "{$alias}.") !== 0) {
35
            return $column;
36
        }
37
38
        return substr($column, strlen("{$alias}."));
39
    }
40
41
    /**
42
     * {@inheritdoc}
43
     */
44
    protected function field($row, $column)
45
    {
46
        if (!isset($row[$column]) && $row instanceof Entity) {
47
            $unaliased_column = $this->removeAlias($column, $row->getSource());
48
49
            if (isset($row[$unaliased_column])) {
50
                return $row[$unaliased_column];
51
            }
52
        }
53
54
        return parent::field($row, $column);
55
    }
56
57
    /**
58
     * {@inheritdoc}
59
     */
60
    protected function makeCursor(LampagerQuery $query, $row)
61
    {
62
        /** @var Query $builder */
63
        $builder = $query->builder();
64
        $alias = $builder->getRepository()->getAlias();
65
66
        /** @var string[] $cursor */
67
        $cursor = [];
68
69
        foreach ($query->orders() as $order) {
70
            if (isset($row[$order->column()])) {
71
                $cursor[$order->column()] = $row[$order->column()];
72
                continue;
73
            }
74
75
            $column = $this->removeAlias($order->column(), $alias);
76
77
            if (isset($row[$column])) {
78
                $cursor[$order->column()] = $row[$column];
79
                continue;
80
            }
81
        }
82
83
        return $cursor;
84
    }
85
}
86