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();
}
}
}