MdiyakovDoctrineSolrExtension::load()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 18
rs 9.6666
c 0
b 0
f 0
cc 2
nc 2
nop 2
1
<?php
2
3
namespace Mdiyakov\DoctrineSolrBundle\DependencyInjection;
4
5
use Symfony\Component\DependencyInjection\ContainerBuilder;
6
use Symfony\Component\Config\FileLocator;
7
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
8
use Symfony\Component\DependencyInjection\Loader;
9
10
class MdiyakovDoctrineSolrExtension extends Extension
11
{
12
    /**
13
     * {@inheritdoc}
14
     */
15
    public function load(array $configs, ContainerBuilder $container)
16
    {
17
18
        $configuration = new Configuration();
19
        $config = $this->processConfiguration($configuration, $configs);
20
21
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
22
        $loader->load('services.yml');
23
        $loader->load('entity-field-filters.yml');
24
25
        if (!empty($config['indexed_entities'])) {
26
            $configDefinition = $container->getDefinition('mdiyakov_doctrine_solr.config.config');
27
            $configDefinition->replaceArgument(0, $config['indexed_entities']);
28
            $configDefinition->replaceArgument(1, $config['schemes']);
29
            $configDefinition->replaceArgument(2, $config['filters']);
30
            $configDefinition->replaceArgument(3, $config['solarium_clients']);
31
32
            $this->initializeDoctrineEntityListener($container, $config);
33
        }
34
    }
35
36
    /**
37
     * @param ContainerBuilder $container
38
     * @param $config
39
     */
40
    private function initializeDoctrineEntityListener(ContainerBuilder $container, $config)
41
    {
42
        $doctrineEntityListenerDefinition = $container->getDefinition('mdiyakov_doctrine_solr.event_listener.doctrine_entity');
43
44
        $indexedEntitiesClasses = array_map(
45
            function($entityConfig) {
46
                return $entityConfig['class'];
47
            },
48
            $config['indexed_entities']
49
        );
50
51
        foreach ($config['indexed_entities'] as $entityConfig) {
52
53
            $parents = class_parents($entityConfig['class']);
54
            if (array_intersect($indexedEntitiesClasses, $parents)) {
55
                continue;
56
            }
57
58
            $events = ['postUpdate', 'postPersist', 'preRemove'];
59
            foreach ($events as $event) {
60
                $doctrineEntityListenerDefinition->addTag(
61
                    'doctrine.orm.entity_listener',
62
                    [
63
                        'entity' => $entityConfig['class'],
64
                        'event' => $event
65
                    ]
66
                );
67
            }
68
        }
69
    }
70
}
71