Completed
Push — master ( 07b93b...cab65c )
by Nikola
15:22
created

Extension::configureSimpleSources()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 8
ccs 0
cts 5
cp 0
rs 9.4285
cc 3
eloc 4
nc 2
nop 2
crap 12
1
<?php
2
/*
3
 * This file is part of the Exchange Rate Bundle, an RunOpenCode project.
4
 *
5
 * (c) 2016 RunOpenCode
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
namespace RunOpenCode\Bundle\ExchangeRate\DependencyInjection;
11
12
use RunOpenCode\Bundle\ExchangeRate\DependencyInjection\Configuration as TreeConfiguration;
13
use RunOpenCode\ExchangeRate\Utils\CurrencyCodeUtil;
14
use Symfony\Component\Config\FileLocator;
15
use Symfony\Component\DependencyInjection\ContainerBuilder;
16
use Symfony\Component\DependencyInjection\Extension\Extension as BaseExtension;
17
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
18
19
/**
20
 * Class Extension
21
 *
22
 * Bundle extension.
23
 *
24
 * @package RunOpenCode\Bundle\ExchangeRate\DependencyInjection
25
 */
26
class Extension extends BaseExtension
27
{
28
    /**
29
     * {@inheritdoc}
30
     */
31 4
    public function getAlias()
32
    {
33 4
        return "run_open_code_exchange_rate";
34
    }
35
36
    /**
37
     * {@inheritdoc}
38
     */
39 2
    public function load(array $config, ContainerBuilder $container)
40
    {
41
42 2
        $configuration = new TreeConfiguration();
43 2
        $config = $this->processConfiguration($configuration, $config);
44
45
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config/services'));
46
        $loader->load('repository.xml');
47
        $loader->load('command.xml');
48
        $loader->load('controller.xml');
49
        $loader->load('form_type.xml');
50
        $loader->load('manager.xml');
51
        $loader->load('processor.xml');
52
        $loader->load('source.xml');
53
        $loader->load('validator.xml');
54
55
        $this
56
            ->configureBaseCurrency($config, $container)
57
            ->configureRepository($config, $container)
58
            ->configureFileRepository($config, $container)
59
            ->configureController($config, $container)
60
            ->configureRates($config, $container)
61
            ->configureSimpleSources($config, $container)
62
            ->configureSourceType($config, $container)
63
            ->configureRateTypeType($config, $container)
64
            ->configureCurrencyCodeType($config, $container)
65
            ->configureRateType($config, $container)
66
            ->configureNotifications($config, $container)
67
        ;
68
    }
69
70
    /**
71
     * Configure base currency.
72
     *
73
     * @param array $config Configuration parameters.
74
     * @param ContainerBuilder $container Service container.
75
     * @return Extension $this Fluent interface.
76
     */
77
    protected function configureBaseCurrency(array $config, ContainerBuilder $container)
78
    {
79
        $baseCurrency = CurrencyCodeUtil::clean($config['base_currency']);
80
        $container->setParameter('run_open_code.exchange_rate.base_currency', $baseCurrency);
81
82
        return $this;
83
    }
84
85
    /**
86
     * Configure rates.
87
     *
88
     * @param array $config Configuration parameters.
89
     * @param ContainerBuilder $container Service container.
90
     * @return Extension $this Fluent interface.
91
     */
92
    protected function configureRates(array $config, ContainerBuilder $container)
93
    {
94
        if (count($config['rates']) === 0) {
95
            throw new \RuntimeException('You have to configure which rates you would like to use in your project.');
96
        }
97
98
        $container->setParameter('run_open_code.exchange_rate.registered_rates', $config['rates']);
99
        return $this;
100
    }
101
102
    /**
103
     * Configure required processors.
104
     *
105
     * @param array $config Configuration parameters.
106
     * @param ContainerBuilder $container Service container.
107
     * @return Extension $this Fluent interface.
108
     */
109
    protected function configureRepository(array $config, ContainerBuilder $container)
110
    {
111
        $container->setParameter('run_open_code.exchange_rate.repository', $config['repository']);
112
        return $this;
113
    }
114
115
    /**
116
     * Configure file repository, if used.
117
     *
118
     * @param array $config Configuration parameters.
119
     * @param ContainerBuilder $container Service container.
120
     * @return Extension $this Fluent interface.
121
     */
122
    protected function configureFileRepository(array $config, ContainerBuilder $container)
123
    {
124
        $container->setParameter('run_open_code.exchange_rate.repository.file_repository.path', $config['file_repository']['path']);
125
        return $this;
126
    }
127
128
    /**
129
     * Configure controller.
130
     *
131
     * @param array $config Configuration parameters.
132
     * @param ContainerBuilder $container Service container.
133
     * @return Extension $this Fluent interface.
134
     */
135
    protected function configureController(array $config, ContainerBuilder $container)
136
    {
137
        $container->setParameter(
138
            'run_open_code.exchange_rate.controller.view_configuration',
139
            $config['view']
140
        );
141
142
        return $this;
143
    }
144
145
    /**
146
     * Configure simple sources which does not have to be explicitly added to service container.
147
     *
148
     * @param array $config Configuration parameters.
149
     * @param ContainerBuilder $container Service container.
150
     * @return Extension $this Fluent interface.
151
     */
152
    protected function configureSimpleSources(array $config, ContainerBuilder $container)
153
    {
154
        if (!empty($config['sources']) && count($config['sources']) > 0) {
155
            $container->setParameter('run_open_code.exchange_rate.source.registered_simple_sources', $config['sources']);
156
        }
157
158
        return $this;
159
    }
160
161
    /**
162
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\SourceType" default settings.
163
     *
164
     * @param array $config Configuration parameters.
165
     * @param ContainerBuilder $container Service container.
166
     * @return Extension $this Fluent interface.
167
     */
168
    protected function configureSourceType(array $config, ContainerBuilder $container)
169
    {
170
        $defaults = array_merge($config['form_types']['source_type'], array('choices' => array()));
171
172
        foreach ($config['rates'] as $rate) {
173
            $defaults['choices'][sprintf('exchange_rate.source.%s', $rate['source'])] = $rate['source'];
174
        }
175
176
        $container->setParameter('run_open_code.exchange_rate.form_type.source_type', $defaults);
177
178
        return $this;
179
    }
180
181
    /**
182
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\RateTypeType" default settings.
183
     *
184
     * @param array $config Configuration parameters.
185
     * @param ContainerBuilder $container Service container.
186
     * @return Extension $this Fluent interface.
187
     */
188
    protected function configureRateTypeType(array $config, ContainerBuilder $container)
189
    {
190
        $defaults = array_merge($config['form_types']['rate_type_type'], array('choices' => array()));
191
192
        foreach ($config['rates'] as $rate) {
193
            $defaults['choices'][$rate['rate_type']] = sprintf('exchange_rate.rate_type.%s.%s', $rate['source'], $rate['rate_type']);
194
        }
195
196
        $defaults['choices'] = array_flip($defaults['choices']);
197
198
        $container->setParameter('run_open_code.exchange_rate.form_type.rate_type_type', $defaults);
199
200
        return $this;
201
    }
202
203
    /**
204
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\CurrencyCodeType" default settings.
205
     *
206
     * @param array $config Configuration parameters.
207
     * @param ContainerBuilder $container Service container.
208
     * @return Extension $this Fluent interface.
209
     */
210
    protected function configureCurrencyCodeType(array $config, ContainerBuilder $container)
211
    {
212
        $defaults = array_merge($config['form_types']['currency_code_type'], array('choices' => array()));
213
214
        foreach ($config['rates'] as $rate) {
215
            $defaults['choices'][$rate['currency_code']] = $rate['currency_code'];
216
        }
217
218
        asort($defaults['choices']);
219
220
        $defaults['choices'] = array_merge(array($config['base_currency'] => $config['base_currency']), $defaults['choices']);
221
222
        $container->setParameter('run_open_code.exchange_rate.form_type.currency_code_type', $defaults);
223
224
        return $this;
225
    }
226
227
    /**
228
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\RateType" default settings.
229
     *
230
     * @param array $config Configuration parameters.
231
     * @param ContainerBuilder $container Service container.
232
     * @return Extension $this Fluent interface.
233
     */
234
    protected function configureRateType(array $config, ContainerBuilder $container)
235
    {
236
        $container->setParameter('run_open_code.exchange_rate.form_type.rate_type', $config['form_types']['rate_type']);
237
238
        return $this;
239
    }
240
241
    /**
242
     * Configure internal notifications.
243
     *
244
     * @param array $config Configuration parameters.
245
     * @param ContainerBuilder $container Service container.
246
     * @return Extension $this Fluent interface.
247
     */
248
    protected function configureNotifications(array $config, ContainerBuilder $container)
249
    {
250
        if (!empty($config['notifications']['fetch']) && !empty($config['notifications']['fetch']['enabled'])) {
251
            $container->setParameter('run_open_code.exchange_rate.notifications.fetch', $config['notifications']['fetch']);
252
        }
253
254
        return $this;
255
    }
256
}
257