public function configurePayment(ContainerBuilder $container, array $config)
{
// create the payment method pool
$pool = $container->getDefinition('sonata.payment.pool');
$internal = array('debug' => 'sonata.payment.method.debug', 'pass' => 'sonata.payment.method.pass', 'check' => 'sonata.payment.method.check', 'scellius' => 'sonata.payment.method.scellius', 'ogone' => 'sonata.payment.method.ogone', 'paypal' => 'sonata.payment.method.paypal');
$configured = array();
// define the payment method
foreach ($config['services'] as $id => $settings) {
if (array_key_exists($id, $internal)) {
$id = $internal[$id];
$name = isset($settings['name']) ? $settings['name'] : 'n/a';
$options = isset($settings['options']) ? $settings['options'] : array();
$code = isset($settings['code']) ? $settings['code'] : false;
if (!$code) {
throw new \RuntimeException('Please provide a code for the payment handler');
}
$definition = $container->getDefinition($id);
$definition->addMethodCall('setName', array($name));
$definition->addMethodCall('setOptions', array($options));
$definition->addMethodCall('setCode', array($code));
foreach ((array) $settings['transformers'] as $name => $serviceId) {
$definition->addMethodCall('addTransformer', array($name, new Reference($serviceId)));
}
$configured[$code] = $id;
}
}
foreach ($config['methods'] as $code => $id) {
if (array_key_exists($code, $configured)) {
// Internal service
$id = $configured[$code];
}
if ($container->hasDefinition($id)) {
$definition = $container->getDefinition($id);
$definition->addMethodCall('setEnabled', array(true));
}
$pool->addMethodCall('addMethod', array(new Reference($id)));
}
if (isset($config['services']['debug'])) {
$container->getDefinition('sonata.payment.method.debug')->replaceArgument(1, new Reference($config['services']['debug']['browser']));
}
if (isset($config['services']['pass'])) {
$container->getDefinition('sonata.payment.method.pass')->replaceArgument(1, new Reference($config['services']['pass']['browser']));
}
if (isset($config['services']['check'])) {
$container->getDefinition('sonata.payment.method.check')->replaceArgument(2, new Reference($config['services']['check']['browser']));
}
if (isset($config['services']['scellius'])) {
$container->getDefinition('sonata.payment.method.scellius')->replaceArgument(3, new Reference($config['services']['scellius']['generator']));
}
// Remove unconfigured services
foreach ($internal as $code => $id) {
if (false === array_search($id, $configured)) {
$container->removeDefinition($id);
}
}
}