Completed
Push — dev ( 854686...1d55ed )
by Андрей
04:48
created

Executor::setContextInitializer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
/**
3
 * @link    https://github.com/nnx-framework/doctrine-fixture-module
4
 * @author  Malofeykin Andrey  <[email protected]>
5
 */
6
namespace Nnx\DoctrineFixtureModule\Executor;
7
8
use Doctrine\Fixture\Loader\Loader;
9
use Doctrine\Fixture\Filter\Filter;
10
use Doctrine\Fixture\Configuration;
11
use Doctrine\Fixture\Loader\ChainLoader;
12
use Doctrine\Fixture\Filter\ChainFilter;
13
use Doctrine\Fixture\Executor as FixtureExecutor;
14
use Nnx\DoctrineFixtureModule\FixtureInitializer\FixtureInitializerManagerInterface;
15
16
/**
17
 * Class Executor
18
 *
19
 * @package Nnx\DoctrineFixtureModule\Executor
20
 */
21
class Executor implements ExecutorInterface
22
{
23
    /**
24
     * Загрузчик фикстур
25
     *
26
     * @var Loader
27
     */
28
    protected $loader;
29
30
    /**
31
     * Фильтр фикстур
32
     *
33
     * @var Filter
34
     */
35
    protected $filter;
36
37
    /**
38
     * Конфигурация компонета отвечающего за выполнение фикстур
39
     *
40
     * @var Configuration
41
     */
42
    protected $configuration;
43
44
    /**
45
     * Компонент отвечающий за выполение фикстур
46
     *
47
     * @var FixtureExecutor
48
     */
49
    protected $fixtureExecutor;
50
51
    /**
52
     * Имя
53
     *
54
     * @var string
55
     */
56
    protected $name = Executor::class;
57
58
    /**
59
     * Сервис, отвечающий за создание компонента выполняющего фикстуры
60
     *
61
     *
62
     * @var FixtureExecutorBuilderInterface
63
     */
64
    protected $fixtureExecutorBuilder;
65
66
    /**
67
     * Инициалайзеры, создаваемые заново перед каждым запуском фикстур. При создание этих инициайзеров, им передаются
68
     * данные контекста
69
     *
70
     * @var array
71
     */
72
    protected $contextInitializer = [];
73
74
    /**
75
     * Менеджер Initializer'ов
76
     *
77
     * @var FixtureInitializerManagerInterface
78
     */
79
    protected $fixtureInitializerManager;
80
81
    /**
82
     * Executor constructor.
83
     *
84
     * @param Configuration                      $configuration
85
     * @param FixtureExecutorBuilderInterface    $fixtureExecutorBuilder
86
     * @param FixtureInitializerManagerInterface $fixtureInitializerManager
87
     */
88
    public function __construct(
89
        Configuration $configuration,
90
        FixtureExecutorBuilderInterface $fixtureExecutorBuilder,
91
        FixtureInitializerManagerInterface $fixtureInitializerManager
92
    ) {
93
        $this->setFixtureInitializerManager($fixtureInitializerManager);
94
        $this->setConfiguration($configuration);
95
        $this->setFixtureExecutorBuilder($fixtureExecutorBuilder);
96
    }
97
98
    /**
99
     * Возвращает компонент отвечающий за выполение фикстур
100
     *
101
     * @return FixtureExecutor
102
     */
103
    public function getFixtureExecutor()
104
    {
105
        if (null !== $this->fixtureExecutor) {
106
            $this->fixtureExecutor;
107
        }
108
        $configuration = $this->getConfiguration();
109
        $this->fixtureExecutor = $this->getFixtureExecutorBuilder()->build($configuration, $this);
110
111
        return $this->fixtureExecutor;
112
    }
113
114
    /**
115
     * Возвращает загрузчик фикстур
116
     *
117
     * @return Loader
118
     */
119
    public function getLoader()
120
    {
121
        if (null === $this->loader) {
122
            $this->loader = new ChainLoader();
123
        }
124
        return $this->loader;
125
    }
126
127
    /**
128
     * Устанавливает загрузчик фикстур
129
     *
130
     * @param Loader $loader
131
     *
132
     * @return $this
133
     */
134
    public function setLoader(Loader $loader)
135
    {
136
        $this->loader = $loader;
137
138
        return $this;
139
    }
140
141
    /**
142
     * Возвращает фильтр фикстур
143
     *
144
     * @return Filter
145
     */
146
    public function getFilter()
147
    {
148
        if (null === $this->filter) {
149
            $this->filter = new ChainFilter();
150
        }
151
        return $this->filter;
152
    }
153
154
    /**
155
     * Устанавливает фильтр фикстур
156
     *
157
     * @param Filter $filter
158
     *
159
     * @return $this
160
     */
161
    public function setFilter(Filter $filter)
162
    {
163
        $this->filter = $filter;
164
165
        return $this;
166
    }
167
168
    /**
169
     * Возвращает конфигурацию компонета отвечающего за выполнение фикстур
170
     *
171
     * @return Configuration
172
     */
173
    public function getConfiguration()
174
    {
175
        return $this->configuration;
176
    }
177
178
    /**
179
     * Устанавливает конфигурацию компонета отвечающего за выполнение фикстур
180
     *
181
     * @param Configuration $configuration
182
     *
183
     * @return $this
184
     */
185
    public function setConfiguration(Configuration $configuration)
186
    {
187
        $this->configuration = $configuration;
188
189
        return $this;
190
    }
191
192
193
194
    /**
195
     * @inheritdoc
196
     *
197
     * @return void
198
     */
199
    public function import(array $contextData = [])
200
    {
201
        $this->execute(FixtureExecutor::IMPORT, $contextData);
202
    }
203
204
    /**
205
     * Запускает фикстуры
206
     *
207
     * @param       $method
208
     * @param array $contextData
209
     *
210
     * @return void
211
     */
212
    protected function execute($method, array $contextData = [])
213
    {
214
        $loader = $this->getLoader();
215
        $filter = $this->getFilter();
216
217
        $contextInitializer = $this->getContextInitializer();
218
        $fixtureInitializerManager = $this->getFixtureInitializerManager();
219
        $eventManager = $this->getConfiguration()->getEventManager();
220
        $initializers = [];
221
        foreach ($contextInitializer as $initializerName) {
222
            $initializer = $fixtureInitializerManager->get($initializerName, $contextData);
0 ignored issues
show
Unused Code introduced by
The call to FixtureInitializerManagerInterface::get() has too many arguments starting with $contextData.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
223
            $initializers[] = $initializer;
224
            $eventManager->addEventSubscriber($initializer);
225
        }
226
227
        $this->getFixtureExecutor()->execute($loader, $filter, $method);
228
229
        foreach ($initializers as $initializer) {
230
            $eventManager->removeEventSubscriber($initializer);
231
        }
232
    }
233
234
235
    /**
236
     * @inheritdoc
237
     *
238
     * @return void
239
     */
240
    public function purge(array $contextData = [])
241
    {
242
        $this->execute(FixtureExecutor::PURGE, $contextData);
243
    }
244
245
    /**
246
     * Возвращает имя
247
     *
248
     * @return string
249
     */
250
    public function getName()
251
    {
252
        return $this->name;
253
    }
254
255
    /**
256
     * Устанавливает имя
257
     *
258
     * @param string $name
259
     *
260
     * @return $this
261
     */
262
    public function setName($name)
263
    {
264
        $this->name = (string)$name;
265
266
        return $this;
267
    }
268
269
    /**
270
     * Возвращает сервис, отвечающий за создание компонента выполняющего фикстуры
271
     *
272
     * @return FixtureExecutorBuilderInterface
273
     */
274
    public function getFixtureExecutorBuilder()
275
    {
276
        return $this->fixtureExecutorBuilder;
277
    }
278
279
    /**
280
     * Устанавливает сервис, отвечающий за создание компонента выполняющего фикстуры
281
     *
282
     * @param FixtureExecutorBuilderInterface $fixtureExecutorBuilder
283
     *
284
     * @return $this
285
     */
286
    public function setFixtureExecutorBuilder(FixtureExecutorBuilderInterface $fixtureExecutorBuilder)
287
    {
288
        $this->fixtureExecutorBuilder = $fixtureExecutorBuilder;
289
290
        return $this;
291
    }
292
293
294
    /**
295
     * Возвращает инициалайзеры, создаваемые заново перед каждым запуском фикстур. При создание этих инициайзеров, им передаются
296
     * данные контекста
297
     *
298
     * @return array
299
     */
300
    public function getContextInitializer()
301
    {
302
        return $this->contextInitializer;
303
    }
304
305
    /**
306
     * Устанавлиает инициалайзеры, создаваемые заново перед каждым запуском фикстур. При создание этих инициайзеров, им передаются
307
     * данные контекста
308
     *
309
     * @param array $contextInitializer
310
     *
311
     * @return $this
312
     */
313
    public function setContextInitializer($contextInitializer)
314
    {
315
        $this->contextInitializer = $contextInitializer;
316
317
        return $this;
318
    }
319
320
    /**
321
     * Возвращает менеджер Initializer'ов
322
     *
323
     * @return FixtureInitializerManagerInterface
324
     */
325
    public function getFixtureInitializerManager()
326
    {
327
        return $this->fixtureInitializerManager;
328
    }
329
330
    /**
331
     * Устанавливает менеджер Initializer'ов
332
     *
333
     * @param FixtureInitializerManagerInterface $fixtureInitializerManager
334
     *
335
     * @return $this
336
     */
337
    public function setFixtureInitializerManager(FixtureInitializerManagerInterface $fixtureInitializerManager)
338
    {
339
        $this->fixtureInitializerManager = $fixtureInitializerManager;
340
341
        return $this;
342
    }
343
}
344