<?php namespace Lc\CaracoleBundle\EventSubscriber; use Doctrine\ORM\EntityManagerInterface; use Lc\CaracoleBundle\Doctrine\Extension\FilterMerchantInterface; use Lc\CaracoleBundle\Doctrine\Extension\FilterMultipleMerchantsInterface; use Lc\CaracoleBundle\Doctrine\Extension\FilterSectionInterface; use Lc\CaracoleBundle\Resolver\MerchantResolver; use Lc\CaracoleBundle\Resolver\SectionResolver; use Lc\SovBundle\Event\EntityManager\EntityManagerEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class MerchantSectionPropertyEventSubscriber implements EventSubscriberInterface { protected $em; protected $merchantResolver; protected $sectionResolver; public function __construct(EntityManagerInterface $entityManager, MerchantResolver $merchantResolver, SectionResolver $sectionResolver) { $this->em = $entityManager; $this->merchantResolver = $merchantResolver; $this->sectionResolver = $sectionResolver; } public static function getSubscribedEvents() { return [ EntityManagerEvent::PRE_CREATE_EVENT => ['setMerchantAndSectionProperties'], ]; } public function setMerchantAndSectionProperties(EntityManagerEvent $event) { // @TODO : toujours d'actualité ? /*$entity = $event->getEntity(); $entityRepository = $this->em->getRepository(get_class($entity)); if ($entity instanceof FilterSectionInterface) { $this->setSectionProperty($entity, $entityRepository); } if ($entity instanceof FilterMerchantInterface) { $this->setMerchantProperty($entity, $entityRepository); } if ($entity instanceof FilterMultipleMerchantsInterface) { $this->setMultipleMerchantProperty($entity, $entityRepository); }*/ } private function setSectionProperty($entity) { $entity->setSection($this->sectionResolver->getCurrent()); } private function setMerchantProperty($entity) { $entity->setMerchant($this->merchantResolver->getCurrent()); } private function setMultipleMerchantProperty($entity) { if ($entity->getMerchants()->isEmpty()) { $entity->addMerchant($this->merchantResolver->getCurrent()); } } }