/** * Record events for entity changes. * * Note: this method is registered as an Doctrine event listener in the settings of this package. * * TODO: Update/Delete of Entities * * @param OnFlushEventArgs $eventArgs * @return void * @throws Exception */ public function onFlush(OnFlushEventArgs $eventArgs) { if (!$this->eventEmittingService->isEnabled()) { return; } $entityManager = $eventArgs->getEntityManager(); $unitOfWork = $entityManager->getUnitOfWork(); foreach ($unitOfWork->getScheduledEntityInsertions() as $entity) { $className = get_class($entity); if (isset($this->monitorEntitiesSetting[$className])) { $entityMonitoringConfiguration = $this->monitorEntitiesSetting[$className]; if (isset($entityMonitoringConfiguration['events']['created'])) { $this->initializeAccountIdentifier(); $data = array(); foreach ($entityMonitoringConfiguration['data'] as $key => $eelExpression) { $data[$key] = Utility::evaluateEelExpression($eelExpression, $this->eelEvaluator, array('entity' => $entity)); } $event = $this->eventEmittingService->emit($entityMonitoringConfiguration['events']['created'], $data); $unitOfWork->computeChangeSet($entityManager->getClassMetadata(Event::class), $event); } } } foreach ($unitOfWork->getScheduledEntityDeletions() as $entity) { $className = get_class($entity); if (isset($this->monitorEntitiesSetting[$className])) { $entityMonitoringConfiguration = $this->monitorEntitiesSetting[$className]; if (isset($entityMonitoringConfiguration['events']['deleted'])) { $this->initializeAccountIdentifier(); $data = array(); foreach ($entityMonitoringConfiguration['data'] as $key => $eelExpression) { $data[$key] = Utility::evaluateEelExpression($eelExpression, $this->eelEvaluator, array('entity' => $entity)); } $event = $this->eventEmittingService->emit($entityMonitoringConfiguration['events']['deleted'], $data); $unitOfWork->computeChangeSet($entityManager->getClassMetadata(Event::class), $event); } } } }