diff --git a/src/DependencyInjection/StofDoctrineExtensionsExtension.php b/src/DependencyInjection/StofDoctrineExtensionsExtension.php index 0777f427..19861008 100644 --- a/src/DependencyInjection/StofDoctrineExtensionsExtension.php +++ b/src/DependencyInjection/StofDoctrineExtensionsExtension.php @@ -109,12 +109,17 @@ private function processObjectManagerConfigurations(array $configs, ContainerBui $listenerPriorities = [ 'translatable' => -10, 'loggable' => 5, + + # TODO check if this is a good new default + #'timestampable' => 10, + #'blameable' => 10, + 'uploadable' => -5, ]; foreach ($configs as $name => $listeners) { - foreach ($listeners as $ext => $enabled) { - if (!$enabled) { + foreach ($listeners as $ext => $settingValue) { + if (false === $settingValue) { continue; } @@ -129,6 +134,11 @@ private function processObjectManagerConfigurations(array $configs, ContainerBui $attributes['priority'] = $listenerPriorities[$ext]; } + # overwrite ListenerPriorities if they are numeric (instead of bool values) + if (is_numeric($settingValue)) { + $attributes['priority'] = $settingValue; + } + $definition = $container->getDefinition(sprintf('stof_doctrine_extensions.listener.%s', $ext)); $definition->addTag($doctrineSubscriberTag, $attributes); diff --git a/tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php b/tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php index 95666dba..6189d001 100644 --- a/tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php +++ b/tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php @@ -134,4 +134,45 @@ public function testSettingCustomCache(): void (string) $container->getAlias('stof_doctrine_extensions.cache.pool.default') ); } + + public function testConfigWithCustomListenerPriorities(): void + { + $extension = new StofDoctrineExtensionsExtension(); + $container = new ContainerBuilder(); + + $config = [ + 'orm' => ['default' => [ + 'blameable' => 0, + 'loggable' => -1, + 'uploadable' => true, + 'sortable' => false, + ]], + 'mongodb' => ['default' => [ + 'blameable' => 0, + 'loggable' => -1, + 'uploadable' => true, + 'sortable' => false, + ]], + ]; + + $extension->load([$config], $container); + + # blameable + $def = $container->getDefinition('stof_doctrine_extensions.listener.blameable'); + $this->assertTrue($def->hasTag('doctrine.event_subscriber')); + + $this->assertSame(0, $def->getTag('doctrine.event_subscriber')[0]['priority']); + + # loggable + $def = $container->getDefinition('stof_doctrine_extensions.listener.loggable'); + $this->assertTrue($def->hasTag('doctrine.event_subscriber')); + $this->assertSame(-1, $def->getTag('doctrine.event_subscriber')[0]['priority']); + + # uploadable + $def = $container->getDefinition('stof_doctrine_extensions.listener.uploadable'); + $this->assertTrue($def->hasTag('doctrine.event_subscriber')); + $this->assertSame(-5, $def->getTag('doctrine.event_subscriber')[0]['priority']); + + $this->assertFalse($container->hasDefinition('stof_doctrine_extensions.listener.sortable')); + } }