function ItemsImporter::refresh
Same name in other branches
- 8.9.x core/modules/aggregator/src/ItemsImporter.php \Drupal\aggregator\ItemsImporter::refresh()
Overrides ItemsImporterInterface::refresh
File
-
core/
modules/ aggregator/ src/ ItemsImporter.php, line 84
Class
- ItemsImporter
- Defines an importer of aggregator items.
Namespace
Drupal\aggregatorCode
public function refresh(FeedInterface $feed) {
// Store feed URL to track changes.
$feed_url = $feed->getUrl();
// Fetch the feed.
try {
$success = $this->fetcherManager
->createInstance($this->config
->get('fetcher'))
->fetch($feed);
} catch (PluginException $e) {
$success = FALSE;
watchdog_exception('aggregator', $e);
}
// Store instances in an array so we don't have to instantiate new objects.
$processor_instances = [];
foreach ($this->config
->get('processors') as $processor) {
try {
$processor_instances[$processor] = $this->processorManager
->createInstance($processor);
} catch (PluginException $e) {
watchdog_exception('aggregator', $e);
}
}
// We store the hash of feed data in the database. When refreshing a
// feed we compare stored hash and new hash calculated from downloaded
// data. If both are equal we say that feed is not updated.
$hash = $success ? hash('sha256', $feed->source_string) : '';
$has_new_content = $success && $feed->getHash() != $hash;
if ($has_new_content) {
// Parse the feed.
try {
if ($this->parserManager
->createInstance($this->config
->get('parser'))
->parse($feed)) {
if (!$feed->getWebsiteUrl()) {
$feed->setWebsiteUrl($feed->getUrl());
}
$feed->setHash($hash);
// Update feed with parsed data.
$feed->save();
// Log if feed URL has changed.
if ($feed->getUrl() != $feed_url) {
$this->logger
->notice('Updated URL for feed %title to %url.', [
'%title' => $feed->label(),
'%url' => $feed->getUrl(),
]);
}
$this->logger
->notice('There is new syndicated content from %site.', [
'%site' => $feed->label(),
]);
// If there are items on the feed, let enabled processors process them.
if (!empty($feed->items)) {
foreach ($processor_instances as $instance) {
$instance->process($feed);
}
}
}
} catch (PluginException $e) {
watchdog_exception('aggregator', $e);
}
}
// Processing is done, call postProcess on enabled processors.
foreach ($processor_instances as $instance) {
$instance->postProcess($feed);
}
return $has_new_content;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.