Test Failed
Push — develop ( d382d0...28e0cd )
by Daniel
10:59
created

CollectionModifier::process()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 12
nc 2
nop 2
dl 0
loc 17
rs 9.8666
c 0
b 0
f 0
1
<?php
2
3
namespace Silverback\ApiComponentBundle\DataModifier;
4
5
use ApiPlatform\Core\DataProvider\ContextAwareCollectionDataProviderInterface;
6
use Psr\Container\ContainerInterface;
7
use Silverback\ApiComponentBundle\Entity\Component\Collection\Collection;
8
use Symfony\Component\HttpFoundation\Request;
9
use Symfony\Component\HttpFoundation\RequestStack;
10
11
class CollectionModifier extends AbstractModifier
12
{
13
    private $enabledParameterName;
14
    private $itemsPerPageParameterName;
15
16
    public function __construct(ContainerInterface $container, string $enabledParameterName = 'pagination', string $itemsPerPageParameterName = 'itemsPerPage')
17
    {
18
        parent::__construct($container);
19
20
        $this->enabledParameterName = $enabledParameterName;
21
        $this->itemsPerPageParameterName = $itemsPerPageParameterName;
22
    }
23
24
    /**
25
     * @param Collection $collectionEntity
26
     * @param array $context
27
     * @return object|void
28
     */
29
    public function process($collectionEntity, array $context = array())
30
    {
31
        /** @var ContextAwareCollectionDataProviderInterface $dataProvider */
32
        $dataProvider = $this->container->get(ContextAwareCollectionDataProviderInterface::class);
33
        $dataProviderContext = [];
34
35
        /** @var RequestStack $requestStack */
36
        $requestStack = $this->container->get(RequestStack::class);
37
        $originalRequest = $requestStack->getCurrentRequest();
38
        $dummyRequest = new Request();
39
        $dummyRequest->request->set($this->enabledParameterName, true);
40
        $dummyRequest->attributes->set('_api_pagination', [ $this->itemsPerPageParameterName => $collectionEntity->getPerPage() ]);
41
        $requestStack->push($dummyRequest);
42
        $collection = $dataProvider->getCollection($collectionEntity->getResource(), Request::METHOD_GET, $dataProviderContext);
43
        $collectionEntity->setCollection($collection);
44
        if ($originalRequest) {
45
            $requestStack->push($originalRequest);
46
        }
47
    }
48
49
    public function supportsData($data): bool
50
    {
51
        return $data instanceof Collection;
52
    }
53
54
    public static function getSubscribedServices(): array
55
    {
56
        return [
57
            '?' . ContextAwareCollectionDataProviderInterface::class,
58
            RequestStack::class
59
        ];
60
    }
61
}
62