/** * Collect activities changes * * @param OnFlushEventArgs $args */ public function onFlush(OnFlushEventArgs $args) { $entitiesToDelete = $args->getEntityManager()->getUnitOfWork()->getScheduledEntityDeletions(); $entitiesToUpdate = $args->getEntityManager()->getUnitOfWork()->getScheduledEntityUpdates(); if (!empty($entitiesToDelete) || !empty($entitiesToUpdate)) { foreach ($entitiesToDelete as $entity) { $class = $this->doctrineHelper->getEntityClass($entity); $id = $this->doctrineHelper->getSingleEntityIdentifier($entity); $key = $class . '_' . $id; if ($this->activityContactProvider->isSupportedEntity($class) && !isset($this->deletedEntities[$key])) { $targets = $entity->getActivityTargetEntities(); $targetsInfo = []; foreach ($targets as $target) { $targetsInfo[] = ['class' => $this->doctrineHelper->getEntityClass($target), 'id' => $this->doctrineHelper->getSingleEntityIdentifier($target), 'direction' => $this->activityContactProvider->getActivityDirection($entity, $target)]; } $this->deletedEntities[$key] = ['class' => $class, 'id' => $id, 'contactDate' => $this->activityContactProvider->getActivityDate($entity), 'targets' => $targetsInfo]; } } foreach ($entitiesToUpdate as $entity) { $class = $this->doctrineHelper->getEntityClass($entity); $id = $this->doctrineHelper->getSingleEntityIdentifier($entity); $key = $class . '_' . $id; if ($this->activityContactProvider->isSupportedEntity($class) && !isset($this->updatedEntities[$key])) { $changes = $args->getEntityManager()->getUnitOfWork()->getEntityChangeSet($entity); $isDirectionChanged = $this->activityContactProvider->getActivityDirectionProvider($entity)->isDirectionChanged($changes); $targets = $entity->getActivityTargetEntities(); $targetsInfo = []; foreach ($targets as $target) { $targetsInfo[] = ['class' => $this->doctrineHelper->getEntityClass($target), 'id' => $this->doctrineHelper->getSingleEntityIdentifier($target), 'direction' => $this->activityContactProvider->getActivityDirection($entity, $target), 'is_direction_changed' => $isDirectionChanged]; } $this->updatedEntities[$key] = ['class' => $class, 'id' => $id, 'contactDate' => $this->activityContactProvider->getActivityDate($entity), 'targets' => $targetsInfo]; } } } }