Provider   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 97
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 4
Bugs 0 Features 0
Metric Value
wmc 4
eloc 57
c 4
b 0
f 0
dl 0
loc 97
ccs 0
cts 31
cp 0
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B register() 0 90 4
1
<?php
2
3
namespace App;
4
5
use App\Provider\Factory;
6
use App\Provider\Github;
7
use App\Security\Manager;
8
use App\Twig\GlobalsExtension;
9
use App\Twig\ProjectExtension;
10
use App\Twig\UserExtension;
11
use Monolog\Handler\StreamHandler;
12
use Monolog\Logger;
13
use Monolog\Registry;
14
use PDO;
15
use Psr\Container\ContainerInterface;
16
use Psr\Log\LoggerInterface;
17
use Ronanchilvers\Container\Container;
18
use Ronanchilvers\Container\ServiceProviderInterface;
19
use Ronanchilvers\Foundation\Config;
20
use Ronanchilvers\Foundation\Filesystem\Disk;
21
use Ronanchilvers\Foundation\Filesystem\DiskRegistry;
22
use Ronanchilvers\Sessions\Session;
23
use Ronanchilvers\Sessions\Storage\CookieStorage;
24
use Ronanchilvers\Utility\File;
25
use Slim\Views\Twig;
26
use Slim\Views\TwigExtension;
27
use Symfony\Component\Yaml\Yaml;
28
29
/**
30
 * App service provider
31
 *
32
 * @author Ronan Chilvers <[email protected]>
33
 */
34
class Provider implements ServiceProviderInterface
35
{
36
    /**
37
     * {@inheritdoc}
38
     *
39
     * @author Ronan Chilvers <[email protected]>
40
     */
41
    public function register(Container $container)
42
    {
43
        // Logger
44
        $container->set(LoggerInterface::class, function(ContainerInterface $c) {
45
            $settings = $c->get('settings');
46
            $loggerSettings = $settings['logger'];
47
            $logger = new Logger('default');
48
            if (isset($loggerSettings['filename']) && false !== $loggerSettings['filename']) {
49
                if (DIRECTORY_SEPARATOR !== substr($loggerSettings['filename'], 0, 1)) {
50
                    $loggerSettings['filename'] = File::join(
51
                        __DIR__,
52
                        '/../',
53
                        $loggerSettings['filename']
54
                    );
55
                }
56
                $logger->pushHandler(
57
                    new StreamHandler(
58
                        $loggerSettings['filename'],
59
                        Logger::DEBUG
60
                    )
61
                );
62
            }
63
            Registry::clear();
64
            Registry::addLogger($logger);
65
66
            return $logger;
67
        });
68
69
        // Twig
70
        $container->set(Twig::class, function(ContainerInterface $c) {
71
            $settings = $c->get('settings')['twig'];
72
            $view = new Twig(
73
                $settings['templates'],
74
                [
75
                    'cache' => $settings['cache']
76
                ]
77
            );
78
            $uri = \Slim\Http\Uri::createFromEnvironment(new \Slim\Http\Environment($_SERVER));
79
            $view->addExtension(
80
                new TwigExtension(
81
                    $c->get('router'),
82
                    $uri
83
                )
84
            );
85
            $view->addExtension(
86
                new GlobalsExtension([
87
                    'debug'    => $c->get('settings')['displayErrorDetails'],
88
                    'session'  => $c->get('session'),
89
                    'request'  => $c->get('request'),
90
                    'security' => $c->get(Manager::class),
91
                    'php' => [
92
                        'version' => phpversion(),
93
                    ],
94
                ])
95
            );
96
            $view->addExtension(
97
                new ProjectExtension($c->get(Factory::class))
98
            );
99
            $view->addExtension(
100
                new UserExtension()
101
            );
102
103
            return $view;
104
        });
105
106
        // Session
107
        $container->set('session.storage.options', function($c) {
108
            return $c->get('settings')['session'];
109
        });
110
        $container->share('session.storage', function($c) {
111
            $options = $c->get('session.storage.options');
112
113
            return new CookieStorage(
114
                $options
115
            );
116
        });
117
        $container->share('session', function($c) {
118
            return new Session(
119
                $c->get('session.storage')
120
            );
121
        });
122
123
        // Database
124
        $container->share(PDO::class, function($c) {
125
            $settings = $c->get('settings')['database'];
126
            return new PDO(
127
                $settings['dsn'],
128
                $settings['username'],
129
                $settings['password'],
130
                $settings['options']
131
            );
132
        });
133
    }
134
}
135