You are here

function node_access_rebuild_progressive_process_chunk in Node Access Rebuild Progressive 8

Same name and namespace in other branches
  1. 7 node_access_rebuild_progressive.module \node_access_rebuild_progressive_process_chunk()
  2. 2.x node_access_rebuild_progressive.module \node_access_rebuild_progressive_process_chunk()

Processes a chunk of nodes.

Return value

array An array with the following keys:

  • total: the number of nodes retrieved for processing.
  • processed: the number of nodes actually processed.
2 calls to node_access_rebuild_progressive_process_chunk()
node_access_rebuild_progressive_process_cron in ./node_access_rebuild_progressive.module
Processes a chunk of nodes at cron run.
_drush_node_access_rebuild_progressive_process in ./node_access_rebuild_progressive.module
Processes a pass of nodes.

File

./node_access_rebuild_progressive.module, line 76
Provides ability to rebuild node access silently.

Code

function node_access_rebuild_progressive_process_chunk() {
  $current = \Drupal::state()
    ->get('node_access_rebuild_progressive.current');
  $chunk_size = \Drupal::config('node_access_rebuild_progressive.settings')
    ->get('chunk');
  $nids = db_query("SELECT nid FROM {node} WHERE nid < :current ORDER BY nid DESC LIMIT 0,{$chunk_size}", [
    ':current' => $current,
  ])
    ->fetchCol();
  $total = count($nids);
  $processed = 0;
  if ($total) {
    $access_control_handler = \Drupal::entityManager()
      ->getAccessControlHandler('node');
    $node_storage = \Drupal::entityManager()
      ->getStorage('node');
    $nodes = $node_storage
      ->loadMultiple($nids);
    $node_storage
      ->resetCache();
    foreach ($nodes as $node) {

      // Make sure the node can be loaded properly.
      if (!empty($node
        ->id())) {
        $grants = $access_control_handler
          ->acquireGrants($node);
        \Drupal::service('node.grant_storage')
          ->write($node, $grants);
        $current = $node
          ->id();
        $processed++;
      }
    }
    \Drupal::state()
      ->set('node_access_rebuild_progressive.current', $current);
  }
  return [
    'total' => $total,
    'processed' => $processed,
  ];
}