function NodeBulkUpdate::batchProcess

Executes a batch operation for processing a node bulk update.

Parameters

array $nodes: An array of node IDs.

array $updates: Associative array of updates.

string|null $langcode: The language updates should be applied to. If none is specified all available languages are processed.

bool $load: TRUE if $nodes contains an array of node IDs to be loaded, FALSE if it contains fully loaded nodes.

bool $revisions: (optional) TRUE if $nodes contains an array of revision IDs instead of node IDs. Defaults to FALSE; will be ignored if $load is FALSE.

array|\ArrayAccess $context: An array of contextual key/values.

File

core/modules/node/src/NodeBulkUpdate.php, line 122

Class

NodeBulkUpdate
Provides a service to update nodes in bulk.

Namespace

Drupal\node

Code

public static function batchProcess(array $nodes, array $updates, ?string $langcode, bool $load, bool $revisions, array|\ArrayAccess &$context) : void {
  if (!isset($context['sandbox']['progress'])) {
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['max'] = count($nodes);
    $context['sandbox']['nodes'] = $nodes;
  }
  // Process nodes by groups of 5.
  $storage = \Drupal::entityTypeManager()->getStorage('node');
  $count = min(5, count($context['sandbox']['nodes']));
  for ($i = 1; $i <= $count; $i++) {
    // For each nid, load the node, reset the values, and save it.
    $node = array_shift($context['sandbox']['nodes']);
    if ($load) {
      $node = $revisions ? $storage->loadRevision($node) : $storage->load($node);
    }
    $node = static::processNode($node, $updates, $langcode);
    // Store result for post-processing in the finished callback.
    $context['results'][] = $node->toLink()
      ->toString();
    // Update our progress information.
    $context['sandbox']['progress']++;
  }
  // Inform the batch engine that we are not finished, and provide an
  // estimation of the completion level we reached.
  if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.