public function LazySubscriber::onInitImport in Feeds 8.3
Adds import plugins as event listeners.
File
- src/
EventSubscriber/ LazySubscriber.php, line 61
Class
- LazySubscriber
- Event listener that registers Feeds plugins as event listeners.
Namespace
Drupal\feeds\EventSubscriberCode
public function onInitImport(InitEvent $event, $event_name, EventDispatcherInterface $dispatcher) {
$stage = $event
->getStage();
if (isset($this->importInited[$stage])) {
return;
}
$this->importInited[$stage] = TRUE;
switch ($stage) {
case 'fetch':
$dispatcher
->addListener(FeedsEvents::FETCH, function (FetchEvent $event) {
$feed = $event
->getFeed();
$result = $feed
->getType()
->getFetcher()
->fetch($feed, $feed
->getState(StateInterface::FETCH));
$event
->setFetcherResult($result);
});
break;
case 'parse':
$dispatcher
->addListener(FeedsEvents::PARSE, function (ParseEvent $event) {
$feed = $event
->getFeed();
$result = $feed
->getType()
->getParser()
->parse($feed, $event
->getFetcherResult(), $feed
->getState(StateInterface::PARSE));
// Add data from source plugins to the parser result.
$source_plugins = $this
->getMappedSourcePlugins($feed
->getType());
if (!empty($source_plugins)) {
/** @var \Drupal\feeds\Feeds\Item\ItemInterface $item */
foreach ($result as $item) {
/** @var \Drupal\feeds\Plugin\Type\Source\SourceInterface $source_plugin */
foreach ($source_plugins as $source => $source_plugin) {
$item
->set($source, $source_plugin
->getSourceElement($feed, $item));
}
}
}
// Finally set the parser result on the event.
$event
->setParserResult($result);
});
break;
case 'process':
$dispatcher
->addListener(FeedsEvents::PROCESS, function (ProcessEvent $event) {
$feed = $event
->getFeed();
$feed
->getType()
->getProcessor()
->process($feed, $event
->getItem(), $feed
->getState(StateInterface::PROCESS));
});
break;
case 'clean':
foreach ($event
->getFeed()
->getType()
->getPlugins() as $plugin) {
if (!$plugin instanceof CleanableInterface) {
continue;
}
$dispatcher
->addListener(FeedsEvents::CLEAN, function (CleanEvent $event) use ($plugin) {
try {
$feed = $event
->getFeed();
$plugin
->clean($feed, $event
->getEntity(), $feed
->getState(StateInterface::CLEAN));
} catch (Exception $e) {
watchdog_exception('feeds', $e);
}
});
}
break;
}
}