diff --git a/src/UnicaenImport/ORM/Event/Listeners/EntitySourceInjector.php b/src/UnicaenImport/ORM/Event/Listeners/EntitySourceInjector.php index bdd6ccaddc243869c3bb696ec9e46cf553f7b24f..01935322ea9d4a198285bb78407ccb48f26d1610 100644 --- a/src/UnicaenImport/ORM/Event/Listeners/EntitySourceInjector.php +++ b/src/UnicaenImport/ORM/Event/Listeners/EntitySourceInjector.php @@ -21,6 +21,22 @@ use UnicaenImport\Entity\Db\Source; */ class EntitySourceInjector implements EventSubscriber { + /** + * @var string + */ + protected $sourceEntityClass = Source::class; + + /** + * @param string $sourceEntityClass + * @return self + */ + public function setSourceEntityClass(string $sourceEntityClass): self + { + $this->sourceEntityClass = $sourceEntityClass; + + return $this; + } + /** * @var Source */ @@ -73,7 +89,7 @@ class EntitySourceInjector implements EventSubscriber // Injection de la source /** @var Source $source */ - $source = $args->getEntityManager()->getRepository(Source::class)->findOneBy([ + $source = $args->getEntityManager()->getRepository($this->sourceEntityClass)->findOneBy([ 'code' => $this->sourceCode ]); $entity->setSource($source); diff --git a/src/UnicaenImport/ORM/Event/Listeners/EntitySourceInjectorFactory.php b/src/UnicaenImport/ORM/Event/Listeners/EntitySourceInjectorFactory.php index 91f067d2599f5d5053ca8b40a4e3ae5e36fe8bf1..30369ecfe4117077812a89c80a1ca48a3dd06f97 100644 --- a/src/UnicaenImport/ORM/Event/Listeners/EntitySourceInjectorFactory.php +++ b/src/UnicaenImport/ORM/Event/Listeners/EntitySourceInjectorFactory.php @@ -2,31 +2,42 @@ namespace UnicaenImport\ORM\Event\Listeners; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; +use UnicaenImport\Entity\Db\Source; +use Zend\ServiceManager\ServiceLocatorInterface as ContainerInterface; -final class EntitySourceInjectorFactory implements FactoryInterface +final class EntitySourceInjectorFactory { /** * Create service * - * @param ServiceLocatorInterface $serviceLocator + * @param ContainerInterface $container * @return EntitySourceInjector */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke(ContainerInterface $container) { - $sourceCode = $this->getDefaultSourceCode($serviceLocator); + $config = $container->get('Config'); + + $sourceEntityClass = $this->getSourceEntityClass($config) ?: Source::class; + $sourceCode = $this->getDefaultSourceCode($config); $service = new EntitySourceInjector(); + $service->setSourceEntityClass($sourceEntityClass); $service->setSourceCode($sourceCode); return $service; } - private function getDefaultSourceCode(ServiceLocatorInterface $serviceLocator) + private function getSourceEntityClass(array $config) { - $config = $serviceLocator->get('Config'); + if (! isset($config['unicaen-import']['entity_source_injector']['source_entity_class'])) { + return null; + } + return $config['unicaen-import']['entity_source_injector']['source_entity_class']; + } + + private function getDefaultSourceCode(array $config) + { if (! isset($config['unicaen-import']['entity_source_injector']['source_code'])) { return null; }