Completed
Pull Request — master (#9)
by Iakov
06:43
created

BuildSelectQueryStep   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 37
rs 10
c 0
b 0
f 0
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A requiresBefore() 0 6 1
A execute() 0 16 3
A __construct() 0 3 1
1
<?php
2
3
namespace Kami\ApiCoreBundle\RequestProcessor\Step\Common;
4
5
6
use Doctrine\ORM\QueryBuilder;
7
use Kami\ApiCoreBundle\RequestProcessor\Step\AbstractStep;
8
use Kami\ApiCoreBundle\Security\AccessManager;
9
10
class BuildSelectQueryStep extends AbstractStep
11
{
12
    /**
13
     * @var AccessManager
14
     */
15
    private $accessManager;
16
17
    public function __construct(AccessManager $accessManager)
18
    {
19
        $this->accessManager = $accessManager;
20
    }
21
22
    public function execute()
23
    {
24
        /** @var \ReflectionClass $reflection */
25
        $reflection = $this->getFromResponse('reflection');
26
        /** @var QueryBuilder $queryBuilder */
27
        $queryBuilder = $this->getFromResponse('query_builder');
28
        $queryBuilder->from($reflection->getName(), 'e');
29
30
        foreach ($reflection->getProperties() as $property) {
31
            if ($this->accessManager->canAccessProperty($property)) {
32
                $queryBuilder
33
                    ->addSelect('e.'.$property->getName());
34
            }
35
        }
36
37
        return $this->createResponse(['query_builder' => $queryBuilder]);
38
    }
39
40
41
    public function requiresBefore()
42
    {
43
        return [
44
            GetReflectionFromRequestStep::class,
45
            ValidateResourceAccessStep::class,
46
            GetQueryBuilderStep::class
47
        ];
48
    }
49
}