function _feed_import_base_process_feed in Feed Import 7.3
Same name and namespace in other branches
- 8 feed_import_base/feed_import_base.module \_feed_import_base_process_feed()
Imports a feed.
3 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()
- feed_import_base_cron in feed_import_base/
feed_import_base.module - Implements hook_cron().
- feed_import_process_feed in ./
feed_import.module - Process a feed
File
- feed_import_base/
feed_import_base.module, line 98 - Basic settings for feed import base module
Code
function _feed_import_base_process_feed($feed, $recheck = FALSE) {
$running = _feed_import_base_variable_get('feed_import_import_running', array());
$invoke_hooks = variable_get('feed_import_invoke_hooks', FALSE);
if ($recheck) {
$overlap = variable_get('feed_import_let_overlap', array());
if (!in_array($feed->entity, $overlap) && !empty($running[$feed->entity]) && in_array($feed->machine_name, $running[$feed->entity])) {
// Invoke hooks.
$invoke_hooks && module_invoke_all('feed_import_error', FeedImport::FEED_OVERLAP_ERR, $feed, array());
return FeedImport::FEED_OVERLAP_ERR;
}
unset($overlap);
}
$running[$feed->entity][] = $feed->machine_name;
variable_set('feed_import_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 = variable_get('feed_import_reports', TRUE);
// 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.
watchdog('Feed Import', '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']),
), WATCHDOG_WARNING);
}
$report['expected'] = $d;
// Invoke hooks.
$invoke_hooks && module_invoke_all('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 && module_invoke_all('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.
watchdog('Feed Import', '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']),
), WATCHDOG_WARNING);
}
}
// Invoke hooks.
$invoke_hooks && module_invoke_all('feed_import_error', FeedImport::FEED_SOURCE_ERR, $feed, $report);
if ($ret) {
return FeedImport::FEED_SOURCE_ERR;
}
else {
$invoke_hooks = FALSE;
}
}
if ($report_errors) {
watchdog('Feed Import', 'Cannot process feed @name because is misconfigured. !errors', array(
'@name' => $feed->name,
'!errors' => '<br />' . _feed_import_base_get_error_table($report['errors']),
), WATCHDOG_WARNING);
}
// Invoke hooks.
$invoke_hooks && module_invoke_all('feed_import_error', FeedImport::FEED_CONFIG_ERR, $feed, $report);
return FeedImport::FEED_CONFIG_ERR;
}