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

TwigLoaderPass   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 7
lcom 0
cbo 3
dl 0
loc 40
ccs 0
cts 28
cp 0
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
C process() 0 34 7
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