1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
declare(strict_types=1); |
4
|
|
|
|
5
|
|
|
namespace HDNET\Importr\Service; |
6
|
|
|
|
7
|
|
|
use HDNET\Importr\Domain\Model\Import; |
8
|
|
|
use HDNET\Importr\Domain\Model\Strategy; |
9
|
|
|
use HDNET\Importr\Domain\Repository\ImportRepository; |
10
|
|
|
use HDNET\Importr\Exception\ReinitializeException; |
11
|
|
|
use HDNET\Importr\Processor\Configuration; |
12
|
|
|
use HDNET\Importr\Processor\Resource; |
13
|
|
|
use TYPO3\CMS\Extbase\Object\ObjectManager; |
14
|
|
|
use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager; |
15
|
|
|
use TYPO3\CMS\Extbase\SignalSlot\Dispatcher; |
16
|
|
|
|
17
|
|
|
/** |
18
|
|
|
* Service Manager |
19
|
|
|
* |
20
|
|
|
* @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later |
21
|
|
|
* @author Tim Lochmüller <[email protected]> |
22
|
|
|
*/ |
23
|
|
|
class Manager implements ManagerInterface |
24
|
|
|
{ |
25
|
|
|
|
26
|
|
|
/** |
27
|
|
|
* @var \HDNET\Importr\Domain\Repository\ImportRepository |
28
|
|
|
*/ |
29
|
|
|
protected $importRepository; |
30
|
|
|
|
31
|
|
|
/** |
32
|
|
|
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher |
33
|
|
|
*/ |
34
|
|
|
protected $signalSlotDispatcher; |
35
|
|
|
|
36
|
|
|
/** |
37
|
|
|
* @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager |
38
|
|
|
*/ |
39
|
|
|
protected $persistenceManager; |
40
|
|
|
|
41
|
|
|
/** |
42
|
|
|
* @var \TYPO3\CMS\Extbase\Object\ObjectManager |
43
|
|
|
*/ |
44
|
|
|
protected $objectManager; |
45
|
|
|
|
46
|
|
|
/** |
47
|
|
|
* @var \HDNET\Importr\Processor\Configuration |
48
|
|
|
*/ |
49
|
|
|
protected $configuration; |
50
|
|
|
|
51
|
|
|
/** |
52
|
|
|
* @var \HDNET\Importr\Processor\Resource |
53
|
|
|
*/ |
54
|
|
|
protected $resource; |
55
|
|
|
|
56
|
|
|
public function __construct( |
57
|
|
|
ImportRepository $importRepository, |
58
|
|
|
Dispatcher $signalSlotDispatcher, |
59
|
|
|
PersistenceManager $persistenceManager, |
60
|
|
|
ObjectManager $objectManager, |
61
|
|
|
Configuration $configuration, |
62
|
|
|
Resource $resource |
63
|
|
|
) { |
64
|
|
|
$this->importRepository = $importRepository; |
65
|
|
|
$this->signalSlotDispatcher = $signalSlotDispatcher; |
66
|
|
|
$this->persistenceManager = $persistenceManager; |
67
|
|
|
$this->objectManager = $objectManager; |
68
|
|
|
$this->configuration = $configuration; |
69
|
|
|
$this->resource = $resource; |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
/** |
73
|
|
|
* Update Interval |
74
|
|
|
* |
75
|
|
|
* @var int |
76
|
|
|
*/ |
77
|
|
|
protected $updateInterval = 1; |
78
|
|
|
|
79
|
|
|
/** |
80
|
|
|
* run the Importr |
81
|
|
|
*/ |
82
|
|
|
public function runImports() |
83
|
|
|
{ |
84
|
|
|
try { |
85
|
|
|
$imports = $this->importRepository->findWorkQueue(); |
86
|
|
|
foreach ($imports as $import) { |
87
|
|
|
$this->runImport($import); |
88
|
|
|
} |
89
|
|
|
} catch (ReinitializeException $exc) { |
90
|
|
|
$this->runImports(); |
91
|
|
|
} |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
/** |
95
|
|
|
* Get the preview |
96
|
|
|
* |
97
|
|
|
* @param string $filepath |
98
|
|
|
* @param \HDNET\Importr\Domain\Model\Strategy $strategy |
99
|
|
|
* |
100
|
|
|
* @return array |
101
|
|
|
*/ |
102
|
|
|
public function getPreview(Strategy $strategy, $filepath) |
103
|
|
|
{ |
104
|
|
|
$data = []; |
105
|
|
|
$resources = $this->initializeResources($strategy, $filepath); |
106
|
|
|
foreach ($resources as $resource) { |
107
|
|
|
/** @var \HDNET\Importr\Service\Resources\ResourceInterface $resource */ |
108
|
|
|
// Resourcen Object anhand der Datei auswählen |
109
|
|
|
if (\preg_match($resource->getFilepathExpression(), $filepath)) { |
110
|
|
|
// Resource "benutzen" |
111
|
|
|
$resource->parseResource(); |
112
|
|
|
// Durchlauf starten |
113
|
|
|
for ($pointer = 0; $pointer <= 20; $pointer++) { |
114
|
|
|
if ($resource->getEntry($pointer)) { |
115
|
|
|
$data[] = $resource->getEntry($pointer); |
116
|
|
|
} |
117
|
|
|
} |
118
|
|
|
break; |
119
|
|
|
} |
120
|
|
|
} |
121
|
|
|
return $data; |
122
|
|
|
} |
123
|
|
|
|
124
|
|
|
/** |
125
|
|
|
* Magic Runner |
126
|
|
|
* |
127
|
|
|
* @param \HDNET\Importr\Domain\Model\Import $import |
128
|
|
|
*/ |
129
|
|
|
protected function runImport(Import $import) |
130
|
|
|
{ |
131
|
|
|
$this->emitSignal('preImport', $import); |
132
|
|
|
|
133
|
|
|
$resources = $this->initializeResourcesByImport($import); |
134
|
|
|
$targets = $this->initializeTargets($import); |
135
|
|
|
$strategyConfiguration = $import->getStrategy() |
136
|
|
|
->getConfiguration(); |
137
|
|
|
|
138
|
|
|
foreach ($resources as $resource) { |
139
|
|
|
if ($this->resource->process($import, $targets, $strategyConfiguration, $resource, $this)) { |
140
|
|
|
break; |
141
|
|
|
} |
142
|
|
|
} |
143
|
|
|
|
144
|
|
|
$this->teardownTargets($import); |
145
|
|
|
|
146
|
|
|
$this->emitSignal('postImport', $import); |
147
|
|
|
} |
148
|
|
|
|
149
|
|
|
/** |
150
|
|
|
* @param \HDNET\Importr\Domain\Model\Import $import |
151
|
|
|
* |
152
|
|
|
* @return array |
153
|
|
|
*/ |
154
|
|
|
protected function initializeResourcesByImport(Import $import) |
155
|
|
|
{ |
156
|
|
|
return $this->initializeResources($import->getStrategy(), $import->getFilepath()); |
157
|
|
|
} |
158
|
|
|
|
159
|
|
|
/** |
160
|
|
|
* @param \HDNET\Importr\Domain\Model\Strategy $strategy |
161
|
|
|
* @param string $filepath |
162
|
|
|
* |
163
|
|
|
* @return array |
164
|
|
|
*/ |
165
|
|
|
protected function initializeResources(Strategy $strategy, $filepath) |
166
|
|
|
{ |
167
|
|
|
$resources = []; |
168
|
|
|
$resourceConfiguration = $strategy->getResources(); |
169
|
|
|
foreach ($resourceConfiguration as $resource => $configuration) { |
170
|
|
|
$object = $this->objectManager->get($resource); |
|
|
|
|
171
|
|
|
$object->start($strategy, $filepath); |
172
|
|
|
$object->setConfiguration($configuration); |
173
|
|
|
$resources[$resource] = $object; |
174
|
|
|
} |
175
|
|
|
return $resources; |
176
|
|
|
} |
177
|
|
|
|
178
|
|
|
/** |
179
|
|
|
* @param \HDNET\Importr\Domain\Model\Import $import |
180
|
|
|
* |
181
|
|
|
* @return array |
182
|
|
|
*/ |
183
|
|
|
protected function initializeTargets(Import $import) |
184
|
|
|
{ |
185
|
|
|
$targetConfiguration = $import->getStrategy() |
186
|
|
|
->getTargets(); |
187
|
|
|
return $this->addTargets($targetConfiguration, $import); |
188
|
|
|
} |
189
|
|
|
|
190
|
|
|
protected function addTargets(array $targetConfiguration, Import $import, array $targets = []): array |
191
|
|
|
{ |
192
|
|
|
foreach ($targetConfiguration as $target => $configuration) { |
193
|
|
|
if (\is_numeric($target)) { |
194
|
|
|
$targets = $this->addTargets($configuration, $import, $targets); |
195
|
|
|
continue; |
196
|
|
|
} |
197
|
|
|
$object = $this->objectManager->get($target); |
|
|
|
|
198
|
|
|
$object->setConfiguration($configuration); |
199
|
|
|
$object->getConfiguration(); |
200
|
|
|
$object->start($import->getStrategy()); |
201
|
|
|
$targets[] = $object; |
202
|
|
|
} |
203
|
|
|
return $targets; |
204
|
|
|
} |
205
|
|
|
|
206
|
|
|
/** |
207
|
|
|
* @param \HDNET\Importr\Domain\Model\Import $import |
208
|
|
|
*/ |
209
|
|
|
protected function teardownTargets(Import $import) |
210
|
|
|
{ |
211
|
|
|
$targetConfiguration = $import->getStrategy() |
212
|
|
|
->getTargets(); |
213
|
|
|
$this->endTargets($targetConfiguration, $import); |
214
|
|
|
} |
215
|
|
|
|
216
|
|
|
protected function endTargets(array $targetConfiguration, Import $import): void |
217
|
|
|
{ |
218
|
|
|
foreach ($targetConfiguration as $target => $configuration) { |
219
|
|
|
if (\is_numeric($target)) { |
220
|
|
|
$this->endTargets($configuration, $import); |
221
|
|
|
continue; |
222
|
|
|
} |
223
|
|
|
$object = $this->objectManager->get($target); |
|
|
|
|
224
|
|
|
$object->setConfiguration($configuration); |
225
|
|
|
$object->getConfiguration(); |
226
|
|
|
$object->end($import->getStrategy()); |
227
|
|
|
} |
228
|
|
|
} |
229
|
|
|
|
230
|
|
|
/** |
231
|
|
|
* @param int $interval |
232
|
|
|
*/ |
233
|
|
|
public function setUpdateInterval($interval) |
234
|
|
|
{ |
235
|
|
|
$this->updateInterval = $interval; |
236
|
|
|
} |
237
|
|
|
|
238
|
|
|
/** |
239
|
|
|
* @return int |
240
|
|
|
*/ |
241
|
|
|
public function getUpdateInterval() |
242
|
|
|
{ |
243
|
|
|
return $this->updateInterval; |
244
|
|
|
} |
245
|
|
|
|
246
|
|
|
/** |
247
|
|
|
* @param string $name |
248
|
|
|
* @param Import $import |
249
|
|
|
*/ |
250
|
|
|
protected function emitSignal($name, Import $import) |
251
|
|
|
{ |
252
|
|
|
$this->signalSlotDispatcher->dispatch( |
253
|
|
|
__CLASS__, |
254
|
|
|
$name, |
255
|
|
|
[$this, $import] |
256
|
|
|
); |
257
|
|
|
} |
258
|
|
|
} |
259
|
|
|
|
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.