You are here

function xmlsitemap_rebuild_batch_fetch in XML sitemap 7.2

Same name and namespace in other branches
  1. 8 xmlsitemap.module \xmlsitemap_rebuild_batch_fetch()
  2. 6.2 xmlsitemap.generate.inc \xmlsitemap_rebuild_batch_fetch()
  3. 2.x xmlsitemap.module \xmlsitemap_rebuild_batch_fetch()

Batch callback; fetch and add the sitemap links for a specific entity.

1 string reference to 'xmlsitemap_rebuild_batch_fetch'
xmlsitemap_get_link_info in ./xmlsitemap.module
Returns information about supported sitemap link types.

File

./xmlsitemap.generate.inc, line 472
Sitemap generation and rebuilding functions for the xmlsitemap module.

Code

function xmlsitemap_rebuild_batch_fetch($entity, &$context) {
  if (!isset($context['sandbox']['info'])) {
    $context['sandbox']['info'] = xmlsitemap_get_link_info($entity);
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['last_id'] = 0;
  }
  $info = $context['sandbox']['info'];
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', $entity);
  $query
    ->entityCondition('entity_id', $context['sandbox']['last_id'], '>');
  $query
    ->addTag('xmlsitemap_link_bundle_access');
  $query
    ->addTag('xmlsitemap_rebuild');
  $query
    ->addMetaData('entity', $entity);
  $query
    ->addMetaData('entity_info', $info);
  if ($types = xmlsitemap_get_link_type_enabled_bundles($entity)) {
    $query
      ->entityCondition('bundle', $types, 'IN');
  }
  else {

    // If no enabled bundle types, skip everything else.
    return;
  }
  if (!isset($context['sandbox']['max'])) {
    $count_query = clone $query;
    $count_query
      ->count();
    $context['sandbox']['max'] = $count_query
      ->execute();
    if (!$context['sandbox']['max']) {

      // If there are no items to process, skip everything else.
      return;
    }
  }

  // PostgreSQL cannot have the ORDERED BY in the count query.
  $query
    ->entityOrderBy('entity_id');
  $limit = 20;
  $query
    ->range(0, $limit);
  $result = $query
    ->execute();
  $ids = array_keys($result[$entity]);
  $info['xmlsitemap']['process callback']($ids);
  $context['sandbox']['last_id'] = end($ids);
  $context['sandbox']['progress'] += count($ids);
  $context['message'] = t('Now processing %entity @last_id (@progress of @count).', array(
    '%entity' => $entity,
    '@last_id' => $context['sandbox']['last_id'],
    '@progress' => $context['sandbox']['progress'],
    '@count' => $context['sandbox']['max'],
  ));
  if ($context['sandbox']['progress'] >= $context['sandbox']['max']) {
    $context['finished'] = 1;
  }
  else {
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  }
}