Completed
Pull Request — master (#2657)
by Jeroen
06:22
created

ArticleEventSubscriber   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 5
dl 0
loc 44
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getSubscribedEvents() 0 6 1
A customizePageRender() 0 26 4
1
<?php
2
3
namespace Kunstmaan\ArticleBundle\EventSubscriber;
4
5
use Doctrine\ORM\EntityManagerInterface;
6
use Kunstmaan\ArticleBundle\Entity\AbstractArticleOverviewPage;
7
use Kunstmaan\NodeBundle\Event\Events;
8
use Kunstmaan\NodeBundle\Event\PageRenderEvent;
9
use Pagerfanta\Adapter\ArrayAdapter;
10
use Pagerfanta\Pagerfanta;
11
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
12
13
class ArticleEventSubscriber implements EventSubscriberInterface
14
{
15
    /** @var EntityManagerInterface */
16
    private $em;
17
18
    public function __construct(EntityManagerInterface $em)
19
    {
20
        $this->em = $em;
21
    }
22
23
    public static function getSubscribedEvents(): array
24
    {
25
        return [
26
            Events::PAGE_RENDER => 'customizePageRender',
27
        ];
28
    }
29
30
    public function customizePageRender(PageRenderEvent $event)
31
    {
32
        if (!$event->getPage() instanceof AbstractArticleOverviewPage) {
33
            return;
34
        }
35
36
        $request = $event->getRequest();
37
38
        $page = $event->getPage();
39
        $repository = $page->getArticleRepository($this->em);
40
        $pages = $repository->getArticles($request->getLocale());
41
42
        $adapter = new ArrayAdapter($pages);
43
        $pagerfanta = new Pagerfanta($adapter);
44
        $pagerfanta->setMaxPerPage(5);
45
46
        $pagenumber = $request->get('page');
47
        if (!$pagenumber || $pagenumber < 1) {
48
            $pagenumber = 1;
49
        }
50
51
        $pagerfanta->setCurrentPage($pagenumber);
52
53
        $renderContext = $event->getRenderContext();
54
        $renderContext['pagerfanta'] = $pagerfanta;
55
    }
56
}
57