public function RadioactivityProcessor::queueProcessIncidents in Radioactivity 4.0.x
Same name and namespace in other branches
- 8.3 src/RadioactivityProcessor.php \Drupal\radioactivity\RadioactivityProcessor::queueProcessIncidents()
Queue processing of Radioactivity emission incidents.
Parameters
string $entityType: Incident entity type.
\Drupal\radioactivity\IncidentInterface[][] $entityIncidents: Radioactivity incidents grouped per entity ID (1st) and incident ID (2nd).
Overrides RadioactivityProcessorInterface::queueProcessIncidents
File
- src/
RadioactivityProcessor.php, line 442
Class
- RadioactivityProcessor
- Processes Radioactivity incidents and and energy decay.
Namespace
Drupal\radioactivityCode
public function queueProcessIncidents($entityType, array $entityIncidents) {
/** @var \Drupal\Core\Entity\ContentEntityInterface[] $entities */
$entities = $this->entityTypeManager
->getStorage($entityType)
->loadMultiple(array_keys($entityIncidents));
foreach ($entities as $entity) {
$hostEntityUpdated = FALSE;
/** @var \Drupal\radioactivity\RadioactivityInterface[] $referencedEntities */
$referencedEntities = [];
/** @var \Drupal\radioactivity\IncidentInterface $incident */
foreach ($entityIncidents[$entity
->id()] as $incident) {
// Update the energy, but not the timestamp. The latter is used to
// calculate decay and should not be updated when saving the incident
// energy.
if ($incident
->getTargetId()) {
if (!isset($referencedEntities[$incident
->getTargetId()])) {
$referencedEntities[$incident
->getTargetId()] = $this->entityTypeManager
->getStorage('radioactivity')
->load($incident
->getTargetId());
}
$newEnergy = $referencedEntities[$incident
->getTargetId()]
->getEnergy() + $incident
->getEnergy();
$referencedEntities[$incident
->getTargetId()]
->setEnergy($newEnergy);
}
else {
$entity
->get($incident
->getFieldName())->energy += $incident
->getEnergy();
$hostEntityUpdated = TRUE;
}
}
if ($hostEntityUpdated) {
if ($entity
->getEntityType()
->isRevisionable()) {
$entity
->setNewRevision(FALSE);
}
// Set flag so we can identify this entity save as one that just updates
// the radioactivity value.
$entity->radioactivityUpdate = TRUE;
$entity
->save();
}
if ($referencedEntities) {
foreach ($referencedEntities as $referencedEntity) {
$referencedEntity
->save();
}
}
}
}