Sonata\PaymentBundle\DependencyInjection\SonataPaymentExtension::configurePayment PHP Method

configurePayment() public method

public configurePayment ( ContainerBuilder $container, array $config )
$container Symfony\Component\DependencyInjection\ContainerBuilder
$config array
    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);
            }
        }
    }