function _feed_import_base_process_feed in Feed Import 8
Same name and namespace in other branches
- 7.3 feed_import_base/feed_import_base.module \_feed_import_base_process_feed()
Imports a feed.
2 calls to _feed_import_base_process_feed()
- drush_feed_import_base_feed in feed_import_base/
feed_import_base.drush.inc - Implements drush_COMMANDFILE_COMMANDNAME()
- FeedImportController::processFeed in src/
Controller/ FeedImportController.php - Process a feed
File
- feed_import_base/
feed_import_base.module, line 111 - Basic settings for feed import base module
Code
function _feed_import_base_process_feed($feed, $recheck = FALSE) {
$state = \Drupal::state();
$config = \Drupal::config('feed_import_base.settings');
$running = $state
->get('feed_import.running', array());
$invoke_hooks = $config
->get('invoke_hooks', FALSE);
$overlap = $config
->get('let_overlap');
if ($recheck) {
if (is_array($overlap) && !in_array($feed->entity, $overlap) && !empty($running[$feed->entity]) && in_array($feed->machine_name, $running[$feed->entity])) {
// Invoke hooks.
$invoke_hooks && \Drupal::moduleHandler()
->invokeAll('feed_import_error', [
FeedImport::FEED_OVERLAP_ERR,
$feed,
array(),
]);
return FeedImport::FEED_OVERLAP_ERR;
}
unset($overlap);
}
$running[$feed->entity][] = $feed->machine_name;
$state
->set('feed_import.running', $running);
unset($running);
register_shutdown_function('_feed_import_base_remove_running', $feed);
$report = FeedImport::import($feed, _feed_import_base_get_filters_dir());
_feed_import_base_remove_running($feed);
$feed->skip_remove_running = TRUE;
$report_errors = $config
->get('feed_import_reports');
// Check for errors.
if (empty($report['init_error'])) {
// Save last run and duration.
$feed->last_run = $report['started'];
$d = $report['finished'] - $report['started'];
$feed->last_run_duration = $d > 0 ? $d : 0;
// Check fewer items protection.
if (strlen($feed->settings['uniq_path']) && $feed->settings['feed']['protect_on_fewer_items']) {
$d = trim($feed->settings['feed']['protect_on_fewer_items']);
if (substr($d, -1) == '%') {
// Do not update last import items if percentage is used!
$d = rtrim($d, '%') * $feed->last_run_items / 100;
}
else {
$feed->last_run_items = $report['total'];
}
$d = (int) $d;
if ($report['total'] < $d) {
// Save import status.
FeedImport::saveFeedImportStatus($feed);
// Reschedul all.
$class = $feed->settings['hashes']['class'];
$class::rescheduleAll($feed->machine_name, $feed->settings['hashes']['options']['ttl']);
if ($report_errors) {
// Report base info.
_feed_import_base_save_report($report, $feed);
// Report rescheduled all.
\Drupal::logger('Feed Import')
->warning('Rescheduled all items for @name because source contained only @total items but expected @expected. !errors', array(
'@name' => $feed->name,
'@total' => $report['total'],
'@expected' => $d,
'!errors' => '<br />' . _feed_import_base_get_error_table($report['errors']),
));
}
$report['expected'] = $d;
// Invoke hooks.
$invoke_hooks && \Drupal::moduleHandler()
->invokeAll('feed_import_error', [
FeedImport::FEED_ITEMS_ERR,
$feed,
$report,
]);
return FeedImport::FEED_ITEMS_ERR;
}
}
$feed->last_run_items = $report['total'];
FeedImport::saveFeedImportStatus($feed);
// Save report if needed.
$report_errors && _feed_import_base_save_report($report, $feed);
// Invoke hooks.
$invoke_hooks && \Drupal::moduleHandler()
->invokeAll('feed_import_success', [
$feed,
$report,
]);
return FeedImport::FEED_OK;
}
else {
$ret = FALSE;
// Reader init problem.
if (strlen($feed->settings['uniq_path']) && $feed->settings['feed']['protect_on_invalid_source']) {
$ret = TRUE;
$feed->last_run = time();
$feed->last_run_duration = 0;
if (substr(trim($feed->settings['feed']['protect_on_fewer_items']), -1) != '%') {
$feed->last_run_items = 0;
}
FeedImport::saveFeedImportStatus($feed);
// Reschedule all.
$class = $feed->settings['hashes']['class'];
$class::rescheduleAll($feed->machine_name, $feed->settings['hashes']['options']['ttl']);
if ($report_errors) {
// Report reschedule all.
\Drupal::logger('Feed Import')
->warning('Rescheduled all items for @name due to a source problem. !errors', array(
'@name' => $feed->name,
':errors' => '<br />' . _feed_import_base_get_error_table($report['errors']),
));
}
}
// Invoke hooks.
$invoke_hooks && \Drupal::moduleHandler()
->invokeAll('feed_import_error', [
FeedImport::FEED_SOURCE_ERR,
$feed,
$report,
]);
if ($ret) {
return FeedImport::FEED_SOURCE_ERR;
}
else {
$invoke_hooks = FALSE;
}
}
if ($report_errors) {
dpm(_feed_import_base_get_error_table($report['errors']));
\Drupal::logger('Feed Import')
->warning('Cannot process feed @name because it is misconfigured. :errors', [
'@name' => $feed->name,
':errors' => _feed_import_base_get_error_table($report['errors']),
]);
}
// Invoke hooks.
$invoke_hooks && \Drupal::moduleHandler()
->invokeAll('feed_import_error', [
FeedImport::FEED_CONFIG_ERR,
$feed,
$report,
]);
return FeedImport::FEED_CONFIG_ERR;
}