You are here

private function RadioactivityProcessor::processFieldDecay in Radioactivity 4.0.x

Same name and namespace in other branches
  1. 8.3 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.

bool $isReference: The field is a radioactivity_reference field.

Return value

int The number of processed entities.

2 calls to RadioactivityProcessor::processFieldDecay()
RadioactivityProcessor::processRadioactivityDecay in src/RadioactivityProcessor.php
Process decay of 'radioactivity' type field.
RadioactivityProcessor::processRadioactivityReferenceDecay in src/RadioactivityProcessor.php
Process decay of 'radioactivity_reference' type field.

File

src/RadioactivityProcessor.php, line 247

Class

RadioactivityProcessor
Processes Radioactivity incidents and and energy decay.

Namespace

Drupal\radioactivity

Code

private function processFieldDecay(FieldStorageConfigInterface $fieldConfig, $isReference = FALSE) {
  $fieldName = $fieldConfig
    ->get('field_name');
  $entityType = $fieldConfig
    ->getTargetEntityTypeId();
  if ($isReference) {
    $query = $this->entityTypeManager
      ->getStorage($entityType)
      ->getQuery()
      ->condition($fieldName . '.entity', NULL, 'IS NOT NULL')
      ->condition($fieldName . '.entity.timestamp', $this->requestTime, ' <= ')
      ->condition($fieldName . '.entity.energy', 0, '>')
      ->AccessCheck(FALSE);
  }
  else {
    $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);
}