<?php
namespace App\EventSubscriber;
use App\Entity\Edition;
use App\Entity\PracticalDossier;
use App\Entity\PracticalFile;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Tellaw\SunshineAdminBundle\Event\EntityEvent;
use Tellaw\SunshineAdminBundle\Event\SunshineEvents;
/**
* Ecoute les évènements déclencés lors de la création/MAJ d'une entité
*/
class EntitySubscriber implements EventSubscriberInterface
{
private $entityManager;
private $defaultEditionId;
public function __construct(EntityManagerInterface $entityManager, $defaultEditionId)
{
$this->entityManager = $entityManager;
$this->defaultEditionId = $defaultEditionId;
}
/**
* {@inheritdoc}
*
* @return array The event names to listen to
*/
public static function getSubscribedEvents()
{
return [
SunshineEvents::ENTITY_PRE_FLUSHED => ['updatePreFlushedEntity'],
];
}
/**
* Modification d'une entité avant flush
*
* @param EntityEvent $event
*/
public function updatePreFlushedEntity(EntityEvent $event)
{
$entity = $event->getEntity();
$entityClassMeta = new \ReflectionClass($entity);
$entityName = $entityClassMeta->getShortName();
$entityUpdateMethod = "updatePreFlushed$entityName";
if (method_exists($this, $entityUpdateMethod)) {
$this->$entityUpdateMethod($entity);
}
}
private function updatePreFlushedPracticalDossier(PracticalDossier $dossier): void
{
$defaultEdition = $this->entityManager->getRepository(Edition::class)->find($this->defaultEditionId);
if ($defaultEdition) {
$dossier->setEdition($defaultEdition);
}
}
private function updatePreFlushedPracticalFile(PracticalFile $dossier): void
{
$defaultEdition = $this->entityManager->getRepository(Edition::class)->find($this->defaultEditionId);
if ($defaultEdition) {
$dossier->setEdition($defaultEdition);
}
}
}