Completed
Pull Request — master (#150)
by Łukasz
18:54 queued 15:19
created

PageViewFactory::create()   B

Complexity

Conditions 2
Paths 1

Size

Total Lines 29
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 29
rs 8.8571
cc 2
eloc 20
nc 1
nop 3
1
<?php
2
3
namespace Sylius\ShopApiPlugin\Factory;
4
5
use Pagerfanta\Pagerfanta;
6
use Sylius\ShopApiPlugin\Request\PageViewRequestInterface;
7
use Sylius\ShopApiPlugin\View\PageLinksView;
8
use Sylius\ShopApiPlugin\View\PageView;
9
use Symfony\Component\Routing\RouterInterface;
10
11
final class PageViewFactory implements PageViewFactoryInterface
12
{
13
    /**
14
     * @var RouterInterface
15
     */
16
    private $router;
17
18
    public function __construct(RouterInterface $router)
19
    {
20
        $this->router = $router;
21
    }
22
23
    public function create(Pagerfanta $pagerfanta, string $route, array $parameters): PageView
24
    {
25
        $page = new PageView();
26
        $page->page = $pagerfanta->getCurrentPage();
27
        $page->limit = $pagerfanta->getMaxPerPage();
28
        $page->pages = $pagerfanta->getNbPages();
29
        $page->total = $pagerfanta->getNbResults();
30
31
        $page->links = new PageLinksView();
32
33
        $page->links->self = $this->router->generate($route, array_merge($parameters, [
34
            'page' => $pagerfanta->getCurrentPage(),
35
            'limit' => $pagerfanta->getMaxPerPage(),
36
        ]));
37
        $page->links->first = $this->router->generate($route, array_merge($parameters, [
38
            'page' => 1,
39
            'limit' => $pagerfanta->getMaxPerPage(),
40
        ]));
41
        $page->links->last = $this->router->generate($route, array_merge($parameters, [
42
            'page' => $pagerfanta->getNbPages(),
43
            'limit' => $pagerfanta->getMaxPerPage(),
44
        ]));
45
        $page->links->next = $this->router->generate($route, array_merge($parameters, [
46
            'page' => ($pagerfanta->getCurrentPage() < $pagerfanta->getNbPages()) ? $pagerfanta->getCurrentPage() + 1 : $pagerfanta->getCurrentPage(),
47
            'limit' => $pagerfanta->getMaxPerPage(),
48
        ]));
49
50
        return $page;
51
    }
52
}
53