Passed
Push — master ( 25fa1b...7353cf )
by Peter
02:22
created

ViewBootstrapper::getViewFactory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 1
dl 0
loc 13
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Framework\Bootstrappers\Http;
6
7
use Opulence\Framework\Configuration\Config;
8
use Opulence\Framework\Views\Bootstrappers\ViewBootstrapper as BaseBootstrapper;
9
use Opulence\Ioc\IContainer;
10
use Opulence\Views\Caching\ArrayCache;
11
use Opulence\Views\Caching\FileCache;
12
use Opulence\Views\Caching\ICache;
13
use Opulence\Views\Factories\IO\IViewNameResolver;
14
use Opulence\Views\Factories\IO\IViewReader;
15
use Opulence\Views\Factories\IO\FileViewNameResolver;
16
use Opulence\Views\Factories\IViewFactory;
17
use Opulence\Views\Factories\ViewFactory;
18
19
/**
20
 * Defines the view bootstrapper
21
 */
22
class ViewBootstrapper extends BaseBootstrapper
23
{
24
    const VIEWS_PATH = 'views/';
25
26
    /**
27
     * @SuppressWarnings(PHPMD.StaticAccess)
28
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
29
     *
30
     * Gets the view cache
31
     * To use a different view cache than the one returned here, extend this class and override this method
32
     *
33
     * @param IContainer $container The dependency injection container
34
     *
35
     * @return ICache The view cache
36
     */
37
    protected function getViewCache(IContainer $container): ICache
38
    {
39
        switch (Config::get('views', 'cache')) {
40
            case ArrayCache::class:
41
                return new ArrayCache();
42
            default:
43
                return new FileCache(
44
                    Config::get('paths', 'views.compiled'),
45
                    Config::get('views', 'cache.lifetime'),
0 ignored issues
show
Bug introduced by
It seems like Opulence\Framework\Confi...ews', 'cache.lifetime') can also be of type null; however, parameter $lifetime of Opulence\Views\Caching\FileCache::__construct() does only seem to accept integer, 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

45
                    /** @scrutinizer ignore-type */ Config::get('views', 'cache.lifetime'),
Loading history...
46
                    Config::get('views', 'gc.chance'),
0 ignored issues
show
Bug introduced by
It seems like Opulence\Framework\Confi...t('views', 'gc.chance') can also be of type null; however, parameter $gcChance of Opulence\Views\Caching\FileCache::__construct() does only seem to accept integer, 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

46
                    /** @scrutinizer ignore-type */ Config::get('views', 'gc.chance'),
Loading history...
47
                    Config::get('views', 'gc.divisor')
0 ignored issues
show
Bug introduced by
It seems like Opulence\Framework\Confi...('views', 'gc.divisor') can also be of type null; however, parameter $gcDivisor of Opulence\Views\Caching\FileCache::__construct() does only seem to accept integer, 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

47
                    /** @scrutinizer ignore-type */ Config::get('views', 'gc.divisor')
Loading history...
48
                );
49
        }
50
    }
51
52
    /**
53
     * Gets the view view factory
54
     * To use a different view factory than the one returned here, extend this class and override this method
55
     *
56
     * @param IContainer $container The dependency injection container
57
     * @return IViewFactory The view factory
58
     */
59
    protected function getViewFactory(IContainer $container) : IViewFactory
60
    {
61
        $resolver = new FileViewNameResolver();
62
        $resolver->registerExtension('fortune');
63
        $resolver->registerExtension('fortune.php');
64
        $resolver->registerExtension('php');
65
        $viewReader = $this->getViewReader($container);
66
        $container->bindInstance(IViewNameResolver::class, $resolver);
67
        $container->bindInstance(IViewReader::class, $viewReader);
68
69
        $this->registerPaths($resolver);
70
71
        return new ViewFactory($resolver, $viewReader);
72
    }
73
74
    /**
75
     * @param FileViewNameResolver $resolver
76
     */
77
    protected function registerPaths(FileViewNameResolver $resolver)
78
    {
79
        global $abterModuleManager;
80
81
        $globalPath = Config::get('paths', 'views.raw');
82
        if ($globalPath) {
83
            $resolver->registerPath($globalPath);
84
        }
85
86
        foreach ($abterModuleManager->getResourcePaths() as $path) {
87
            $modulePath = sprintf('%s/%s', $path, static::VIEWS_PATH);
88
89
            if (!is_dir($modulePath)) {
90
                continue;
91
            }
92
93
            $resolver->registerPath($modulePath);
94
        }
95
    }
96
}
97