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

CollectionModifier   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 22
dl 0
loc 48
rs 10
c 0
b 0
f 0
wmc 5

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A getSubscribedServices() 0 5 1
A process() 0 17 2
A supportsData() 0 3 1
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