Passed
Push — main ( 5fac80...79d5b0 )
by Peter
03:22
created

createAssetImgViewFunction()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 9
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Framework\Bootstrappers\Assets;
6
7
use AbterPhp\Framework\Assets\AssetManager;
8
use AbterPhp\Framework\Assets\CacheManager\ICacheManager;
9
use AbterPhp\Framework\Assets\Factory\Minifier as MinifierFactory;
10
use AbterPhp\Framework\Assets\UrlFixer;
11
use AbterPhp\Framework\Constant\Env;
12
use AbterPhp\Framework\Filesystem\FileFinder;
13
use League\Flysystem\Filesystem;
14
use League\Flysystem\Local\LocalFilesystemAdapter;
15
use Opulence\Environments\Environment;
16
use Opulence\Ioc\Bootstrappers\Bootstrapper;
17
use Opulence\Ioc\Bootstrappers\ILazyBootstrapper;
18
use Opulence\Ioc\IContainer;
19
use Opulence\Views\Compilers\Fortune\ITranspiler;
20
21
class AssetManagerBootstrapper extends Bootstrapper implements ILazyBootstrapper
22
{
23
    /**
24
     * @return array
25
     */
26
    public function getBindings(): array
27
    {
28
        return [
29
            AssetManager::class,
30
        ];
31
    }
32
33
    /**
34
     * @param IContainer $container
35
     */
36
    public function registerBindings(IContainer $container)
37
    {
38
        $this->registerAssets($container);
39
        $this->registerViewFunction($container);
40
    }
41
42
    /**
43
     * @param IContainer $container
44
     */
45
    private function registerAssets(IContainer $container)
46
    {
47
        /** @var FileFinder $fileFinder */
48
        $fileFinder = $container->resolve(FileFinder::class);
49
50
        /** @var ICacheManager $cacheManager */
51
        $cacheManager    = $container->resolve(ICacheManager::class);
52
        $minifierFactory = $container->resolve(MinifierFactory::class);
53
        $urlFixer        = $container->resolve(UrlFixer::class);
54
55
        $this->registerCachePaths($cacheManager);
56
57
        $assetManager = new AssetManager($minifierFactory, $fileFinder, $cacheManager, $urlFixer);
58
59
        $container->bindInstance(AssetManager::class, $assetManager);
60
    }
61
62
    /**
63
     * @param ICacheManager $cacheManager
64
     */
65
    private function registerCachePaths(ICacheManager $cacheManager)
66
    {
67
        $cacheDir = sprintf(
68
            '%s%s%s',
69
            rtrim(Environment::getVar(Env::DIR_MEDIA), DIRECTORY_SEPARATOR),
0 ignored issues
show
Bug introduced by
It seems like Opulence\Environments\En...onstant\Env::DIR_MEDIA) can also be of type null; however, parameter $string of rtrim() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

69
            rtrim(/** @scrutinizer ignore-type */ Environment::getVar(Env::DIR_MEDIA), DIRECTORY_SEPARATOR),
Loading history...
70
            DIRECTORY_SEPARATOR,
71
            rtrim(Environment::getVar(Env::CACHE_BASE_PATH), DIRECTORY_SEPARATOR)
72
        );
73
74
        $cacheManager->registerFilesystem(new Filesystem(new LocalFilesystemAdapter($cacheDir)));
75
    }
76
77
    /**
78
     * @param IContainer $container
79
     */
80
    private function registerViewFunction(IContainer $container)
81
    {
82
        /** @var AssetManager $assetManager */
83
        $assetManager = $container->resolve(AssetManager::class);
84
85
        /** @var ITranspiler $transpiler */
86
        $transpiler = $container->resolve(ITranspiler::class);
87
        $transpiler->registerViewFunction('assetJs', $this->createAssetJsViewFunction($assetManager));
88
        $transpiler->registerViewFunction('assetCss', $this->createAssetCssViewFunction($assetManager));
89
        $transpiler->registerViewFunction('assetImg', $this->createAssetImgViewFunction($assetManager));
90
    }
91
92
    /**
93
     * @param AssetManager $assetManager
94
     *
95
     * @return callable
96
     */
97
    public function createAssetJsViewFunction(AssetManager $assetManager): callable
98
    {
99
        return function ($keys, $type = '') use ($assetManager) {
100
            $callback = function ($key) use ($assetManager, $type) {
101
                $path = $assetManager->ensureJsWebPath($key);
102
                if (empty($path)) {
103
                    return '';
104
                }
105
106
                if ($type) {
107
                    return sprintf('<script type="%s" src="%s"></script>', $type, $path) . PHP_EOL;
108
                }
109
110
                return sprintf('<script src="%s"></script>', $path) . PHP_EOL;
111
            };
112
113
            return implode(PHP_EOL, array_filter(array_map($callback, (array)$keys)));
114
        };
115
    }
116
117
    /**
118
     * @param AssetManager $assetManager
119
     *
120
     * @return callable
121
     */
122
    public function createAssetCssViewFunction(AssetManager $assetManager): callable
123
    {
124
        return function ($keys) use ($assetManager) {
125
            $callback = function ($key) use ($assetManager) {
126
                $path = $assetManager->ensureCssWebPath($key);
127
                if (empty($path)) {
128
                    return '';
129
                }
130
131
                return sprintf('<link href="%s" rel="stylesheet">', $path) . PHP_EOL;
132
            };
133
134
            return implode("\n", array_filter(array_map($callback, (array)$keys)));
135
        };
136
    }
137
138
    /**
139
     * @param AssetManager $assetManager
140
     *
141
     * @return callable
142
     */
143
    public function createAssetImgViewFunction(AssetManager $assetManager): callable
144
    {
145
        return function ($key, $alt = '') use ($assetManager) {
146
            $path = $assetManager->ensureImgWebPath($key);
147
            if (empty($path)) {
148
                return '';
149
            }
150
151
            return sprintf('<img src="%s" alt="%s">', $path, $alt) . PHP_EOL;
152
        };
153
    }
154
}
155