Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
6.67% covered (danger)
6.67%
1 / 15
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
collection_pass
6.67% covered (danger)
6.67%
1 / 15
0.00% covered (danger)
0.00%
0 / 1
35.27
0.00% covered (danger)
0.00%
0 / 1
 process
6.67% covered (danger)
6.67%
1 / 15
0.00% covered (danger)
0.00%
0 / 1
35.27
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14namespace phpbb\di\pass;
15
16use Symfony\Component\DependencyInjection\ContainerBuilder;
17use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
18
19/**
20* Appends an add method call to the definition of each collection service for
21* the services tagged with the appropriate name defined in the collection's
22* service_collection tag.
23*/
24class collection_pass implements CompilerPassInterface
25{
26    /**
27    * Modify the container before it is passed to the rest of the code
28    *
29    * @param ContainerBuilder $container ContainerBuilder object
30    * @return void
31    */
32    public function process(ContainerBuilder $container)
33    {
34        foreach ($container->findTaggedServiceIds('service_collection') as $id => $data)
35        {
36            $definition = $container->getDefinition($id);
37            $is_ordered_collection = (substr($definition->getClass(), -strlen('ordered_service_collection')) === 'ordered_service_collection');
38            $is_class_name_aware = (isset($data[0]['class_name_aware']) && $data[0]['class_name_aware']);
39
40            foreach ($container->findTaggedServiceIds($data[0]['tag']) as $service_id => $service_data)
41            {
42                if ($is_ordered_collection)
43                {
44                    $arguments = array($service_id, $service_data[0]['order']);
45                }
46                else
47                {
48                    $arguments = array($service_id);
49                }
50
51                if ($is_class_name_aware)
52                {
53                    $service_definition = $container->getDefinition($service_id);
54                    $definition->addMethodCall('add_service_class', array(
55                        $service_id,
56                        $service_definition->getClass()
57                    ));
58                }
59
60                $definition->addMethodCall('add', $arguments);
61            }
62        }
63    }
64}