-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathDbToolsPass.php
More file actions
92 lines (73 loc) · 3.85 KB
/
DbToolsPass.php
File metadata and controls
92 lines (73 loc) · 3.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
declare(strict_types=1);
namespace MakinaCorpus\DbToolsBundle\Bridge\Symfony\DependencyInjection\Compiler;
use MakinaCorpus\DbToolsBundle\Anonymization\Config\Loader\ArrayLoader;
use MakinaCorpus\DbToolsBundle\Anonymization\Config\Loader\AttributesLoader;
use MakinaCorpus\DbToolsBundle\Anonymization\Config\Loader\YamlLoader;
use MakinaCorpus\DbToolsBundle\Bridge\Symfony\DependencyInjection\DbToolsConfiguration;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Parameter;
use Symfony\Component\DependencyInjection\Reference;
class DbToolsPass implements CompilerPassInterface
{
#[\Override]
public function process(ContainerBuilder $container): void
{
$config = $this->getProcessedConfiguration($container);
if ($container->has('db_tools.anonymization.anonymizator.factory')) {
$anonymazorFactoryDef = $container->getDefinition('db_tools.anonymization.anonymizator.factory');
if ($container->has('doctrine.orm.command.entity_manager_provider')) {
$loaderId = $this->registerAttributesLoader($container);
$anonymazorFactoryDef->addMethodCall('addConfigurationLoader', [new Reference($loaderId)]);
}
if (isset($config['anonymization_files'])) {
foreach ($config['anonymization_files'] as $connectionName => $file) {
$loaderId = $this->registerYamlLoader($file, $connectionName, $container);
$anonymazorFactoryDef->addMethodCall('addConfigurationLoader', [new Reference($loaderId)]);
}
}
if (isset($config['anonymization'])) {
foreach ($config['anonymization'] as $connectionName => $data) {
$loaderId = $this->registerArrayLoader($data, $connectionName, $container);
$anonymazorFactoryDef->addMethodCall('addConfigurationLoader', [new Reference($loaderId)]);
}
}
}
}
private function registerArrayLoader(array $data, string $connectionName, ContainerBuilder $container): string
{
$definition = new Definition();
$definition->setClass(ArrayLoader::class);
$definition->setArguments([$data, $connectionName, new Parameter('kernel.project_dir')]);
$loaderId = 'db_tools.anonymization.loader.array.' . $connectionName;
$container->setDefinition($loaderId, $definition);
return $loaderId;
}
private function registerYamlLoader(string $file, string $connectionName, ContainerBuilder $container): string
{
$definition = new Definition();
$definition->setClass(YamlLoader::class);
$definition->setArguments([$file, $connectionName, new Parameter('kernel.project_dir')]);
$loaderId = 'db_tools.anonymization.loader.yaml.' . $connectionName;
$container->setDefinition($loaderId, $definition);
return $loaderId;
}
private function registerAttributesLoader(ContainerBuilder $container): string
{
$definition = new Definition();
$definition->setClass(AttributesLoader::class);
$definition->setArguments([new Reference('doctrine.orm.command.entity_manager_provider'), new Parameter('kernel.project_dir')]);
$loaderId = 'db_tools.anonymization.loader.attributes';
$container->setDefinition($loaderId, $definition);
return $loaderId;
}
private function getProcessedConfiguration(ContainerBuilder $container)
{
$processor = new Processor();
$rawConfig = $container->getExtensionConfig('db_tools');
return $processor->processConfiguration(new DbToolsConfiguration(), $rawConfig);
}
}