Completed
Push — master ( 8ecce1...93afa7 )
by Nikola
03:26
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 0
Metric Value
dl 0
loc 8
ccs 0
cts 4
cp 0
rs 9.4285
c 0
b 0
f 0
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 1
    public function getAlias()
32
    {
33 1
        return "run_open_code_exchange_rate";
34
    }
35
36
    /**
37
     * {@inheritdoc}
38
     */
39
    public function load(array $config, ContainerBuilder $container)
40
    {
41
42
        $configuration = new TreeConfiguration();
43
        $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
            ->configureForeignCurrencyCodeType($config, $container)
66
            ->configureRateType($config, $container)
67
            ->configureNotifications($config, $container)
68
        ;
69
    }
70
71
    /**
72
     * Configure base currency.
73
     *
74
     * @param array $config Configuration parameters.
75
     * @param ContainerBuilder $container Service container.
76
     * @return Extension $this Fluent interface.
77
     */
78
    protected function configureBaseCurrency(array $config, ContainerBuilder $container)
79
    {
80
        $baseCurrency = CurrencyCodeUtil::clean($config['base_currency']);
81
        $container->setParameter('run_open_code.exchange_rate.base_currency', $baseCurrency);
82
83
        return $this;
84
    }
85
86
    /**
87
     * Configure rates.
88
     *
89
     * @param array $config Configuration parameters.
90
     * @param ContainerBuilder $container Service container.
91
     * @return Extension $this Fluent interface.
92
     */
93
    protected function configureRates(array $config, ContainerBuilder $container)
94
    {
95
        if (count($config['rates']) === 0) {
96
            throw new \RuntimeException('You have to configure which rates you would like to use in your project.');
97
        }
98
99
        $container->setParameter('run_open_code.exchange_rate.registered_rates', $config['rates']);
100
        return $this;
101
    }
102
103
    /**
104
     * Configure required processors.
105
     *
106
     * @param array $config Configuration parameters.
107
     * @param ContainerBuilder $container Service container.
108
     * @return Extension $this Fluent interface.
109
     */
110
    protected function configureRepository(array $config, ContainerBuilder $container)
111
    {
112
        $container->setParameter('run_open_code.exchange_rate.repository', $config['repository']);
113
        return $this;
114
    }
115
116
    /**
117
     * Configure file repository, if used.
118
     *
119
     * @param array $config Configuration parameters.
120
     * @param ContainerBuilder $container Service container.
121
     * @return Extension $this Fluent interface.
122
     */
123
    protected function configureFileRepository(array $config, ContainerBuilder $container)
124
    {
125
        $container->setParameter('run_open_code.exchange_rate.repository.file_repository.path', $config['file_repository']['path']);
126
        return $this;
127
    }
128
129
    /**
130
     * Configure controller.
131
     *
132
     * @param array $config Configuration parameters.
133
     * @param ContainerBuilder $container Service container.
134
     * @return Extension $this Fluent interface.
135
     */
136
    protected function configureController(array $config, ContainerBuilder $container)
137
    {
138
        $container->setParameter(
139
            'run_open_code.exchange_rate.controller.view_configuration',
140
            $config['view']
141
        );
142
143
        $container->setParameter(
144
            'run_open_code.exchange_rate.controller.access_roles_configuration',
145
            $config['access_roles']
146
        );
147
148
        return $this;
149
    }
150
151
    /**
152
     * Configure simple sources which does not have to be explicitly added to service container.
153
     *
154
     * @param array $config Configuration parameters.
155
     * @param ContainerBuilder $container Service container.
156
     * @return Extension $this Fluent interface.
157
     */
158
    protected function configureSimpleSources(array $config, ContainerBuilder $container)
159
    {
160
        if (!empty($config['sources']) && count($config['sources']) > 0) {
161
            $container->setParameter('run_open_code.exchange_rate.source.registered_simple_sources', $config['sources']);
162
        }
163
164
        return $this;
165
    }
166
167
    /**
168
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\SourceType" default settings.
169
     *
170
     * @param array $config Configuration parameters.
171
     * @param ContainerBuilder $container Service container.
172
     * @return Extension $this Fluent interface.
173
     */
174 View Code Duplication
    protected function configureSourceType(array $config, ContainerBuilder $container)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
175
    {
176
        $defaults = array_merge($config['form_types']['source_type'], array('choices' => array()));
177
178
        foreach ($config['rates'] as $rate) {
179
            $defaults['choices'][sprintf('exchange_rate.source.%s', $rate['source'])] = $rate['source'];
180
        }
181
182
        $container->setParameter('run_open_code.exchange_rate.form_type.source_type', $defaults);
183
184
        return $this;
185
    }
186
187
    /**
188
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\RateTypeType" default settings.
189
     *
190
     * @param array $config Configuration parameters.
191
     * @param ContainerBuilder $container Service container.
192
     * @return Extension $this Fluent interface.
193
     */
194
    protected function configureRateTypeType(array $config, ContainerBuilder $container)
195
    {
196
        $defaults = array_merge($config['form_types']['rate_type_type'], array('choices' => array()));
197
198
        foreach ($config['rates'] as $rate) {
199
            $defaults['choices'][$rate['rate_type']] = sprintf('exchange_rate.rate_type.%s.%s', $rate['source'], $rate['rate_type']);
200
        }
201
202
        $defaults['choices'] = array_flip($defaults['choices']);
203
204
        $container->setParameter('run_open_code.exchange_rate.form_type.rate_type_type', $defaults);
205
206
        return $this;
207
    }
208
209
    /**
210
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\CurrencyCodeType" default settings.
211
     *
212
     * @param array $config Configuration parameters.
213
     * @param ContainerBuilder $container Service container.
214
     * @return Extension $this Fluent interface.
215
     */
216
    protected function configureCurrencyCodeType(array $config, ContainerBuilder $container)
217
    {
218
        $defaults = array_merge($config['form_types']['currency_code_type'], array('choices' => array()));
219
220
        foreach ($config['rates'] as $rate) {
221
            $defaults['choices'][$rate['currency_code']] = $rate['currency_code'];
222
        }
223
224
        asort($defaults['choices']);
225
226
        $defaults['choices'] = array_merge(array($config['base_currency'] => $config['base_currency']), $defaults['choices']);
227
228
        $container->setParameter('run_open_code.exchange_rate.form_type.currency_code_type', $defaults);
229
230
        return $this;
231
    }
232
233
    /**
234
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\ForeignCurrencyCodeType" default settings.
235
     *
236
     * @param array $config Configuration parameters.
237
     * @param ContainerBuilder $container Service container.
238
     * @return Extension $this Fluent interface.
239
     */
240 View Code Duplication
    protected function configureForeignCurrencyCodeType(array $config, ContainerBuilder $container)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
241
    {
242
        $defaults = array_merge($config['form_types']['currency_code_type'], array('choices' => array()));
243
244
        foreach ($config['rates'] as $rate) {
245
            $defaults['choices'][$rate['currency_code']] = $rate['currency_code'];
246
        }
247
248
        asort($defaults['choices']);
249
250
        $container->setParameter('run_open_code.exchange_rate.form_type.foreign_currency_code_type', $defaults);
251
252
        return $this;
253
    }
254
255
    /**
256
     * Configure "RunOpenCode\\Bundle\\ExchangeRate\\Form\\Type\\RateType" default settings.
257
     *
258
     * @param array $config Configuration parameters.
259
     * @param ContainerBuilder $container Service container.
260
     * @return Extension $this Fluent interface.
261
     */
262
    protected function configureRateType(array $config, ContainerBuilder $container)
263
    {
264
        $container->setParameter('run_open_code.exchange_rate.form_type.rate_type', $config['form_types']['rate_type']);
265
266
        return $this;
267
    }
268
269
    /**
270
     * Configure internal notifications.
271
     *
272
     * @param array $config Configuration parameters.
273
     * @param ContainerBuilder $container Service container.
274
     * @return Extension $this Fluent interface.
275
     */
276
    protected function configureNotifications(array $config, ContainerBuilder $container)
277
    {
278
        if (!empty($config['notifications']['fetch']) && !empty($config['notifications']['fetch']['enabled'])) {
279
            $container->setParameter('run_open_code.exchange_rate.notifications.fetch', $config['notifications']['fetch']);
280
        }
281
282
        return $this;
283
    }
284
}
285