SaxulumPaginationProvider   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 10

Importance

Changes 4
Bugs 1 Features 0
Metric Value
wmc 3
c 4
b 1
f 0
lcom 0
cbo 10
dl 0
loc 90
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B register() 0 87 3
1
<?php
2
3
namespace Saxulum\PaginationProvider\Provider;
4
5
use Knp\Component\Pager\Event\Subscriber\Paginate\PaginationSubscriber;
6
use Knp\Component\Pager\Event\Subscriber\Sortable\SortableSubscriber;
7
use Knp\Component\Pager\Paginator;
8
use Pimple\Container;
9
use Pimple\ServiceProviderInterface;
10
use Saxulum\PaginationProvider\Helper\Processor;
11
use Saxulum\PaginationProvider\Subscriber\SlidingPaginationSubscriber;
12
use Saxulum\PaginationProvider\Twig\PaginationExtension;
13
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
14
15
class SaxulumPaginationProvider implements ServiceProviderInterface
16
{
17
    public function register(Container $container)
18
    {
19
        $container['knp_paginator.default_options'] = array(
20
            'defaultPaginationOptions' => array(
21
                'pageParameterName' => 'page',
22
                'sortFieldParameterName' => 'sort',
23
                'sortDirectionParameterName' => 'direction',
24
                'filterFieldParameterName' => 'filterField',
25
                'filterValueParameterName' => 'filterValue',
26
                'distinct' => true,
27
            ),
28
            'subscriberOptions' => array(
29
                'defaultPaginationTemplate' => '@SaxulumPaginationProvider/sliding.html.twig',
30
                'defaultSortableTemplate' => '@SaxulumPaginationProvider/sortable_link.html.twig',
31
                'defaultFiltrationTemplate' => '@SaxulumPaginationProvider/filtration.html.twig',
32
                'defaultPageRange' => 5,
33
            )
34
        );
35
36
        $container['knp_paginator.options.initializer'] = $container->protect(function () use ($container) {
37
            static $initialized = false;
38
39
            if ($initialized) {
40
                return;
41
            }
42
43
            if (!isset($container['knp_paginator.options'])) {
44
                $container['knp_paginator.options'] = array();
45
            }
46
47
            $container['knp_paginator.options'] = array_replace_recursive(
48
                $container['knp_paginator.default_options'],
49
                $container['knp_paginator.options']
50
            );
51
        });
52
53
        $container['knp_paginator'] = function () use ($container) {
54
            $container['knp_paginator.options.initializer']();
55
56
            $paginator = new Paginator($container['dispatcher']);
57
            $paginator->setDefaultPaginatorOptions(
58
                $container['knp_paginator.options']['defaultPaginationOptions']
59
            );
60
61
            return $paginator;
62
        };
63
64
        $container['knp_paginator.processor'] = function () use ($container) {
65
            return new Processor(
66
                $container['url_generator'],
67
                $container['translator']
68
            );
69
        };
70
71
        $container['dispatcher'] = $container->extend('dispatcher', function (EventDispatcherInterface $dispatcher) use ($container) {
72
            $container['knp_paginator.options.initializer']();
73
74
            $slidingPaginationSubscriber = new SlidingPaginationSubscriber(
75
                $container['knp_paginator.options']['subscriberOptions']
76
            );
77
78
            $dispatcher->addListener('kernel.request', array(
79
                $slidingPaginationSubscriber, 'onKernelRequest'
80
            ));
81
82
            $dispatcher->addSubscriber(new PaginationSubscriber());
83
            $dispatcher->addSubscriber(new SortableSubscriber());
84
            $dispatcher->addSubscriber($slidingPaginationSubscriber);
85
86
            return $dispatcher;
87
        });
88
89
        $container['twig'] = $container->extend('twig', function (\Twig_Environment $twig) use ($container) {
90
            $twig->addExtension(new PaginationExtension($container['knp_paginator.processor']));
91
92
            return $twig;
93
        });
94
95
        $container['twig.loader.filesystem'] = $container->extend(
96
            'twig.loader.filesystem',
97
            function (\Twig_Loader_Filesystem $twigLoaderFilesystem) {
98
                $twigLoaderFilesystem->addPath(__DIR__. '/../Resources/views', 'SaxulumPaginationProvider');
99
100
                return $twigLoaderFilesystem;
101
            }
102
        );
103
    }
104
}
105