UpdateManager::fetchDataBatch

public UpdateManager::fetchDataBatch(&$context)

Processes a step in batch for fetching available update data.

Parameters

array $context: Reference to an array used for Batch API storage.

Overrides UpdateManagerInterface::fetchDataBatch

File

core/modules/update/src/UpdateManager.php, line 185

Class

UpdateManager
Default implementation of UpdateManagerInterface.

Namespace

Drupal\update

Code

public function fetchDataBatch(&$context) {
  if (empty($context['sandbox']['max'])) {
    $context['finished'] = 0;
    $context['sandbox']['max'] = $this->updateProcessor->numberOfQueueItems();
    $context['sandbox']['progress'] = 0;
    $context['message'] = $this->t('Checking available update data ...');
    $context['results']['updated'] = 0;
    $context['results']['failures'] = 0;
    $context['results']['processed'] = 0;
  }

  // Grab another item from the fetch queue.
  for ($i = 0; $i < 5; $i++) {
    if ($item = $this->updateProcessor->claimQueueItem()) {
      if ($this->updateProcessor->processFetchTask($item->data)) {
        $context['results']['updated']++;
        $context['message'] = $this->t('Checked available update data for %title.', array('%title' => $item->data['info']['name']));
      }
      else {
        $context['message'] = $this->t('Failed to check available update data for %title.', array('%title' => $item->data['info']['name']));
        $context['results']['failures']++;
      }
      $context['sandbox']['progress']++;
      $context['results']['processed']++;
      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
      $this->updateProcessor->deleteQueueItem($item);
    }
    else {
      // If the queue is currently empty, we're done. It's possible that
      // another thread might have added new fetch tasks while we were
      // processing this batch. In that case, the usual 'finished' math could
      // get confused, since we'd end up processing more tasks that we thought
      // we had when we started and initialized 'max' with numberOfItems(). By
      // forcing 'finished' to be exactly 1 here, we ensure that batch
      // processing is terminated.
      $context['finished'] = 1;
      return;
    }
  }
}
doc_Drupal
2016-10-29 09:50:48
Comments
Leave a Comment

Please login to continue.