public function process(ContainerBuilder $container)
{
if (!$container->hasDefinition('ezpublish.signalslot.signal_dispatcher.factory')) {
return;
}
$signalDispatcherFactoryDef = $container->getDefinition('ezpublish.signalslot.signal_dispatcher.factory');
$searchEngineSlotTagName = sprintf('ezpublish.search.%s.slot', $this->searchEngineAlias);
$tags = $container->findTaggedServiceIds('ezpublish.search.slot') + $container->findTaggedServiceIds($searchEngineSlotTagName);
$searchEngineSignalSlots = [];
foreach ($tags as $id => $attributes) {
foreach ($attributes as $attribute) {
if (!isset($attribute['signal'])) {
throw new LogicException("Could not find 'signal' attribute on '{$id}' service, " . "which is mandatory for services tagged as 'ezpublish.search.slot', " . "or the specific tags for given search engine, in this case '{$searchEngineSlotTagName}'.");
}
$searchEngineSignalSlots[$attribute['signal']][] = new Reference($id);
}
}
$signalDispatcherFactoryDef->addMethodCall('addSlotsForSearchEngine', [$this->searchEngineAlias, $searchEngineSignalSlots]);
}