RestRepository::getBaseQuery()
last analyzed

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 1
ccs 0
cts 0
cp 0
nc 1
1
<?php
2
3
namespace Pgs\RestfonyBundle\Repository;
4
5
use Doctrine\ORM\EntityRepository;
6
use Doctrine\ORM\QueryBuilder;
7
8
/**
9
 * @author Michał Sikora
10
 */
11
abstract class RestRepository extends EntityRepository
12
{
13
    /**
14
     * @return QueryBuilder
15
     */
16
    abstract public function getBaseQuery();
17
18 3
    public function getListQuery(array $sortConfiguration, $sortQuery)
19
    {
20 3
        $query = $this->getBaseQuery();
21 3
        $sorts = $this->prepareRequestSort($sortConfiguration, $sortQuery);
22 3
        foreach ($sorts as $sort) {
23 3
            $query->addOrderBy($sort['column'], $sort['order']);
24
        }
25
26 3
        return $query;
27
    }
28
29 3
    private function prepareRequestSort(array $sortConfiguration, $sortQuery)
30
    {
31 3
        $result = [];
32 3
        $columns = explode("|", $sortQuery);
33
34 3
        foreach ($columns as $column) {
35 3
            if ($column) {
36 3
                $sortOrder = 'asc';
37
38 3
                if ($column{0} === '-') {
39 2
                    $sortOrder = 'desc';
40 2
                    $column = ltrim($column, '-');
41
                }
42
43 3
                if (isset($sortConfiguration[$column])) {
44 3
                    $result[] = [
45 3
                        'column' => $sortConfiguration[$column],
46 3
                        'order' => $sortOrder,
47
                    ];
48
                }
49
            }
50
        }
51
52 3
        return $result;
53
    }
54
}
55