Completed
Push — master ( 72cf40...25f19f )
by Sullivan
02:36
created

NexyPayboxDirectExtension::processClient()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
rs 9.4285
cc 2
eloc 5
nc 2
nop 2
1
<?php
2
3
namespace Nexy\PayboxDirect\Bridge\Symfony\DependencyInjection;
4
5
use Nexy\PayboxDirect\Enum\Currency;
6
use Nexy\PayboxDirect\Enum\Version;
7
use Symfony\Component\Config\FileLocator;
8
use Symfony\Component\DependencyInjection\ContainerBuilder;
9
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
10
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
11
12
/**
13
 * @author Sullivan Senechal <[email protected]>
14
 */
15
final class NexyPayboxDirectExtension extends Extension
16
{
17
    /**
18
     * {@inheritdoc}
19
     */
20
    public function load(array $configs, ContainerBuilder $container)
21
    {
22
        $configuration = new Configuration();
23
        $config = $this->processConfiguration($configuration, $configs);
24
25
        $this->processOptions($config, $container);
26
27
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
28
        $loader->load('sdk.xml');
29
        $loader->load('http_clients.xml');
30
31
        $this->processClient($config, $container);
32
    }
33
34
    /**
35
     * @param array            $config
36
     * @param ContainerBuilder $container
37
     */
38
    private function processOptions(array $config, ContainerBuilder $container)
39
    {
40
        // Start with client option
41
        $options = $config['options'];
42
43
        // Paybox version and default_currency special hack: Get the number.
44
        $options['paybox_version'] = constant(Version::class.'::'.strtoupper($config['paybox']['version']));
45
        unset($config['paybox']['version']);
46
        if (array_key_exists('default_currency', $config['paybox'])) {
47
            $options['paybox_default_currency'] = constant(Currency::class.'::'.strtoupper($config['paybox']['default_currency']));
48
            unset($config['paybox']['default_currency']);
49
        }
50
51
        // Convert paybox option format
52
        foreach ($config['paybox'] as $key => $value) {
53
            $options['paybox_'.$key] = $value;
54
        }
55
56
        $container->setParameter('nexy_paybox_direct.options', $options);
57
    }
58
59
    /**
60
     * @param array            $config
61
     * @param ContainerBuilder $container
62
     */
63
    private function processClient(array $config, ContainerBuilder $container)
64
    {
65
        if (null === $config['client']) {
66
            return;
67
        }
68
69
        $container->findDefinition('nexy_paybox_direct.sdk')->addArgument(
70
            $container->findDefinition('nexy_paybox_direct.http_client.'.$config['client'])
71
        );
72
    }
73
}
74