You are here

function aggregator_cron in Drupal 7

Same name and namespace in other branches
  1. 8 core/modules/aggregator/aggregator.module \aggregator_cron()
  2. 4 modules/aggregator.module \aggregator_cron()
  3. 5 modules/aggregator/aggregator.module \aggregator_cron()
  4. 6 modules/aggregator/aggregator.module \aggregator_cron()
  5. 9 core/modules/aggregator/aggregator.module \aggregator_cron()

Implements hook_cron().

Queues news feeds for updates once their refresh interval has elapsed.

File

modules/aggregator/aggregator.module, line 311
Used to aggregate syndicated content (RSS, RDF, and Atom).

Code

function aggregator_cron() {
  $result = db_query('SELECT * FROM {aggregator_feed} WHERE queued = 0 AND checked + refresh < :time AND refresh <> :never', array(
    ':time' => REQUEST_TIME,
    ':never' => AGGREGATOR_CLEAR_NEVER,
  ));
  $queue = DrupalQueue::get('aggregator_feeds');
  foreach ($result as $feed) {
    if ($queue
      ->createItem($feed)) {

      // Add timestamp to avoid queueing item more than once.
      db_update('aggregator_feed')
        ->fields(array(
        'queued' => REQUEST_TIME,
      ))
        ->condition('fid', $feed->fid)
        ->execute();
    }
  }

  // Remove queued timestamp after 6 hours assuming the update has failed.
  db_update('aggregator_feed')
    ->fields(array(
    'queued' => 0,
  ))
    ->condition('queued', REQUEST_TIME - 3600 * 6, '<')
    ->execute();
}