FileManagerServiceProvider::createManager()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 2
1
<?php namespace Nord\Lumen\FileManager;
2
3
use Illuminate\Contracts\Config\Repository as ConfigRepository;
4
use Illuminate\Contracts\Container\Container;
5
use Illuminate\Support\ServiceProvider;
6
use Nord\Lumen\FileManager\Adapters\LocalAdapter;
7
use Nord\Lumen\FileManager\Contracts\IdGenerator as FileIdGeneratorContract;
8
use Nord\Lumen\FileManager\Contracts\FileManager as FileManagerContract;
9
use Nord\Lumen\FileManager\Contracts\FileFactory as FileFactoryContract;
10
use Nord\Lumen\FileManager\Contracts\FileStorage as FileStorageContract;
11
use Nord\Lumen\FileManager\Facades\FileManager as FileManagerFacade;
12
13
class FileManagerServiceProvider extends ServiceProvider
14
{
15
    private static $defaultAdapters = [
16
        ['class' => LocalAdapter::class],
17
    ];
18
19
20
    /**
21
     * @inheritdoc
22
     */
23
    public function register()
24
    {
25
        $this->registerContainerBindings($this->app, $this->app['config']);
26
        $this->registerFacades();
27
    }
28
29
30
    /**
31
     * @param Container        $container
32
     * @param ConfigRepository $config
33
     */
34
    protected function registerContainerBindings(Container $container, ConfigRepository $config)
35
    {
36
        $container->alias(FileManager::class, FileManagerContract::class);
37
38
        $container->singleton(FileManagerContract::class, function () use ($container, $config) {
39
            return $this->createManager($container, $config);
40
        });
41
    }
42
43
44
    /**
45
     * Registers facades.
46
     */
47
    protected function registerFacades()
48
    {
49
        if (!class_exists('FileManager')) {
50
            class_alias(FileManagerFacade::class, 'FileManager');
51
        }
52
    }
53
54
55
    /**
56
     * @param Container        $container
57
     * @param ConfigRepository $config
58
     *
59
     * @return FileManager
60
     */
61
    protected function createManager(Container $container, ConfigRepository $config)
62
    {
63
        $filesystem = $container->make('filesystem');
64
        $factory    = $container->make(FileFactoryContract::class);
65
        $storage    = $container->make(FileStorageContract::class);
66
67
        $fileManager = new FileManager($filesystem, $factory, $storage);
68
69
        $this->configureManager($fileManager, $container, $config->get('filemanager', []));
70
71
        return $fileManager;
72
    }
73
74
75
    /**
76
     * @param FileManager $fileManager
77
     * @param Container   $container
78
     * @param array       $config
79
     */
80
    protected function configureManager(FileManager $fileManager, Container $container, array $config)
81
    {
82
        $idGenerator = $this->createIdGenerator($container, array_get($config, 'idGenerator', []));
83
84
        $fileManager->setIdGenerator($idGenerator);
85
86
        $adapterConfigs = array_merge(self::$defaultAdapters, array_get($config, 'adapters', []));
87
88
        foreach ($adapterConfigs as $adapterConfig) {
89
            $className = array_pull($adapterConfig, 'class');
90
91
            $adapter = new $className($adapterConfig);
92
93
            $fileManager->addAdapter($adapter);
94
        }
95
    }
96
97
98
    /**
99
     * @param Container $container
100
     * @param array     $config
101
     *
102
     * @return FileIdGeneratorContract
103
     */
104
    protected function createIdGenerator(Container $container, array $config)
105
    {
106
        $className = array_pull($config, 'class', IdGenerator::class);
107
108
        return $container->make($className);
109
    }
110
}
111