Exemplo n.º 1
0
    /**
     * {@inheritDoc}
     */
    public function createConfig(array $config = array())
    {
        $config = ArrayObject::ensureArrayObject($config);
        $config->defaults(parent::createConfig((array) $config));

        $prependActions = array();
        foreach ($this->actionsTags as $id => $tagAttributes) {
            foreach ($tagAttributes as $attributes) {
                $name = isset($attributes['alias']) ? $attributes['alias'] : $id;

                if (isset($attributes['all']) && $attributes['all']) {
                    $config["payum.action.$name"] = $this->container->get($id);
                }

                if (
                    isset($attributes['factory']) &&
                    isset($config['payum.factory_name']) &&
                    $config['payum.factory_name'] === $attributes['factory']
                ) {
                    $config["payum.action.$name"] = $this->container->get($id);
                }

                if (
                    isset($attributes['payment']) &&
                    isset($config['payum.payment_name']) &&
                    $config['payum.payment_name'] === $attributes['payment']
                ) {
                    $config["payum.action.$name"] = $this->container->get($id);
                }

                if (isset($attributes['prepend'])) {
                    $prependActions[] = "payum.action.$name";
                }
            }
        }
        $config['payum.prepend_actions'] = $prependActions;


        $prependExtensions = array();
        foreach ($this->extensionsTags as $id => $tagAttributes) {
            foreach ($tagAttributes as $attributes) {
                $name = isset($attributes['alias']) ? $attributes['alias'] : $id;

                if (isset($attributes['all']) && $attributes['all']) {
                    $config["payum.extension.$name"] = $this->container->get($id);
                }

                if (
                    isset($attributes['factory']) &&
                    isset($config['payum.factory_name']) &&
                    $config['payum.factory_name'] === $attributes['factory']
                ) {
                    $config["payum.extension.$name"] = $this->container->get($id);
                }

                if (
                    isset($attributes['payment']) &&
                    isset($config['payum.payment_name']) &&
                    $config['payum.payment_name'] === $attributes['payment']
                ) {
                    $config["payum.extension.$name"] = $this->container->get($id);
                }

                if (isset($attributes['prepend'])) {
                    $prependExtensions[] = "payum.extension.$name";
                }
            }
        }
        $config['payum.prepend_extensions'] = $prependExtensions;

        $prependApis = array();
        foreach ($this->apisTags as $id => $tagAttributes) {
            foreach ($tagAttributes as $attributes) {
                $name = isset($attributes['alias']) ? $attributes['alias'] : $id;

                if (isset($attributes['all']) && $attributes['all']) {
                    $config["payum.api.$name"] = $this->container->get($id);
                }

                if (
                    isset($attributes['factory']) &&
                    isset($config['payum.factory_name']) &&
                    $config['payum.factory_name'] === $attributes['factory']
                ) {
                    $config["payum.api.$name"] = $this->container->get($id);
                }

                if (
                    isset($attributes['payment']) &&
                    isset($config['payum.payment_name']) &&
                    $config['payum.payment_name'] === $attributes['payment']
                ) {
                    $config["payum.api.$name"] = $this->container->get($id);
                }

                if (isset($attributes['prepend'])) {
                    $prependApis[] = "payum.api.$name";
                }
            }
        }
        $config['payum.prepend_apis'] = $prependApis;

        return (array) $config;
    }
Exemplo n.º 2
0
    /**
     * @test
     */
    public function shouldAllowPrependExtensions()
    {
        $firstExtension = $this->getMock('Payum\Core\Extension\ExtensionInterface');
        $secondExtension = $this->getMock('Payum\Core\Extension\ExtensionInterface');

        $factory = new PaymentFactory();

        $payment = $factory->create(array(
            'payum.extension.foo' => $firstExtension,
            'payum.extension.bar' => $secondExtension,
        ));

        $extensions = $this->readAttribute($this->readAttribute($payment, 'extensions'), 'extensions');
        $this->assertSame($firstExtension, $extensions[0]);
        $this->assertSame($secondExtension, $extensions[1]);

        $payment = $factory->create(array(
            'payum.extension.foo' => $firstExtension,
            'payum.extension.bar' => $secondExtension,
            'payum.prepend_extensions' => array(
                'payum.extension.bar'
            )
        ));

        $extensions = $this->readAttribute($this->readAttribute($payment, 'extensions'), 'extensions');
        $this->assertSame($secondExtension, $extensions[0]);
        $this->assertSame($firstExtension, $extensions[1]);
    }