Completed
Push — master ( 91bd08...d24b22 )
by Tomáš
11s
created

TwigLoaderPass::process()   C

Complexity

Conditions 7
Paths 17

Size

Total Lines 34
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 0
Metric Value
dl 0
loc 34
ccs 0
cts 28
cp 0
rs 6.7272
c 0
b 0
f 0
cc 7
eloc 20
nc 17
nop 1
crap 56
1
<?php
2
3
/*
4
 * This file is a part of Sculpin.
5
 *
6
 * (c) Dragonfly Development Inc.
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Symplify\PHP7_Sculpin\Bundle\TwigBundle\DependencyInjection\Compiler;
13
14
use Symfony\Component\DependencyInjection\Reference;
15
use Symfony\Component\DependencyInjection\ContainerBuilder;
16
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
17
18
final class TwigLoaderPass implements CompilerPassInterface
19
{
20
    /**
21
     * {@inheritdoc}
22
     */
23
    public function process(ContainerBuilder $container)
24
    {
25
        if (false === $container->hasDefinition('sculpin_twig.loader')) {
26
            return;
27
        }
28
29
        $definition = $container->getDefinition('sculpin_twig.loader');
30
        $arguments = $definition->getArguments();
31
        $loaders = $arguments[0];
32
33
        $prependedLoaders = [];
34
        $appendedLoaders = [];
35
36
        foreach ($container->findTaggedServiceIds('twig.loaders.prepend') as $id => $attributes) {
37
            $prependedLoaders[] = new Reference($id);
38
        }
39
40
        foreach ($container->findTaggedServiceIds('twig.loaders.append') as $id => $attributes) {
41
            $appendedLoaders[] = new Reference($id);
42
        }
43
44
        $sourceViewPaths = $container->getParameter('sculpin_twig.source_view_paths');
45
        foreach ($container->getParameter('kernel.bundles') as $class) {
46
            $reflection = new \ReflectionClass($class);
47
            foreach ($sourceViewPaths as $sourceViewPath) {
48
                if (is_dir($dir = dirname($reflection->getFilename()).'/Resources/'.$sourceViewPath)) {
49
                    $appendedLoaders[] = $dir;
50
                }
51
            }
52
        }
53
54
        $arguments[0] = array_merge($prependedLoaders, $loaders, $appendedLoaders);
55
        $definition->setArguments($arguments);
56
    }
57
}
58