You are here

private function RadioactivityProcessor::processFieldDecay in Radioactivity 8.3

Same name and namespace in other branches
  1. 4.0.x src/RadioactivityProcessor.php \Drupal\radioactivity\RadioactivityProcessor::processFieldDecay()

Update entities attached to given field storage.

Parameters

\Drupal\field\FieldStorageConfigInterface $fieldConfig: Configuration of the field to be processed.

Return value

int The number of processed entities.

1 call to RadioactivityProcessor::processFieldDecay()
RadioactivityProcessor::processDecay in src/RadioactivityProcessor.php
Apply decay to entities.

File

src/RadioactivityProcessor.php, line 165

Class

RadioactivityProcessor
Class RadioactivityProcessor.

Namespace

Drupal\radioactivity

Code

private function processFieldDecay(FieldStorageConfigInterface $fieldConfig) {
  $fieldName = $fieldConfig
    ->get('field_name');
  $entityType = $fieldConfig
    ->getTargetEntityTypeId();
  $query = $this->entityTypeManager
    ->getStorage($entityType)
    ->getQuery()
    ->condition($fieldName . '.timestamp', $this->requestTime, ' <= ')
    ->condition($fieldName . '.energy', NULL, 'IS NOT NULL')
    ->condition($fieldName . '.energy', 0, '>')
    ->AccessCheck(FALSE);
  $entityIds = $query
    ->execute();

  // Delegate processing to a queue worker to prevent memory errors when large
  // number of entities are processed.
  $chunks = array_chunk($entityIds, self::QUEUE_CHUNK_SIZE, TRUE);
  foreach ($chunks as $chunk) {
    $queue = $this->queue
      ->get(self::QUEUE_WORKER_DECAY);
    $queue
      ->createItem([
      'field_config' => $fieldConfig,
      'entity_ids' => $chunk,
    ]);
  }
  return count($entityIds);
}