You are here

function radioactivity_process_emits in Radioactivity 8.2

Process emits from the queue.

1 call to radioactivity_process_emits()
radioactivity_cron in ./radioactivity.module
Implements hook_cron().

File

./radioactivity.module, line 115
Contains radioactivity.module..

Code

function radioactivity_process_emits() {
  $entity_manager = \Drupal::service('entity.manager');

  // Get emits.
  $incidents = \Drupal::state()
    ->get('radioactivity_incidents');

  // Immediately empty the emits queue.
  \Drupal::state()
    ->set('radioactivity_incidents', []);

  // Process emits, group them for each entity
  $entity_types = [];
  foreach ($incidents as $incident) {
    $entity_type_id = $incident
      ->getEntityTypeId();
    $entity_id = $incident
      ->getEntityId();
    $field_name = $incident
      ->getFieldName();
    if (!isset($entity_types[$entity_type_id])) {
      $entity_types[$entity_type_id] = [];
    }
    if (!isset($entity_types[$entity_type_id][$entity_id])) {
      $entity_types[$entity_type_id][$entity_id] = [];
    }
    if (!isset($entity_types[$entity_type_id][$entity_id][$field_name])) {
      $entity_types[$entity_type_id][$entity_id][$field_name] = 0;
    }
    $entity_types[$entity_type_id][$entity_id][$field_name] += $incident
      ->getEnergy();
  }
  foreach ($entity_types as $entity_type => $emit_entities) {
    $entities = \Drupal::service('entity_type.manager')
      ->getStorage($entity_type)
      ->loadMultiple(array_keys($emit_entities));
    foreach ($entities as $entity) {
      foreach ($emit_entities[$entity
        ->id()] as $field_name => $energy) {
        $entity->{$field_name}->energy += $energy;
      }
      $entity
        ->save();
    }
  }
}