function node_access_rebuild_progressive_process_chunk in Node Access Rebuild Progressive 8
Same name and namespace in other branches
- 7 node_access_rebuild_progressive.module \node_access_rebuild_progressive_process_chunk()
- 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,
];
}