Skip to content

Commit 58d2bf1

Browse files
committed
Merge pull request #41 from Payum/add-apis-before-actions
Add apis before actions
2 parents 28631b7 + 948f3af commit 58d2bf1

File tree

7 files changed

+312
-185
lines changed

7 files changed

+312
-185
lines changed

DependencyInjection/Factory/Payment/AbstractPaymentFactory.php

Lines changed: 96 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,17 @@ public function create(ContainerBuilder $container, $contextName, array $config)
1919
$paymentId = 'payum.context.'.$contextName.'.payment';
2020
$container->setDefinition($paymentId, $paymentDefinition);
2121

22-
foreach (array_reverse($config['apis']) as $apiId) {
23-
$paymentDefinition->addMethodCall(
24-
'addApi',
25-
array(new Reference($apiId), $forcePrepend = true)
26-
);
27-
}
28-
29-
foreach (array_reverse($config['actions']) as $actionId) {
30-
$paymentDefinition->addMethodCall(
31-
'addAction',
32-
array(new Reference($actionId), $forcePrepend = true)
33-
);
34-
}
22+
$this->addCommonApis($paymentDefinition, $container, $contextName, $config);
23+
$this->addApis($paymentDefinition, $container, $contextName, $config);
24+
$this->addCustomApis($paymentDefinition, $container, $contextName, $config);
3525

36-
foreach (array_reverse($config['extensions']) as $extensionId) {
37-
$paymentDefinition->addMethodCall(
38-
'addExtension',
39-
array(new Reference($extensionId), $forcePrepend = true)
40-
);
41-
}
42-
4326
$this->addCommonActions($paymentDefinition);
27+
$this->addActions($paymentDefinition, $container, $contextName, $config);
28+
$this->addCustomActions($paymentDefinition, $container, $contextName, $config);
29+
4430
$this->addCommonExtensions($paymentDefinition);
31+
$this->addExtensions($paymentDefinition, $container, $contextName, $config);
32+
$this->addCustomExtensions($paymentDefinition, $container, $contextName, $config);
4533

4634
return $paymentId;
4735
}
@@ -104,6 +92,94 @@ protected function createContextParameter(ContainerBuilder $container, $contextN
10492
return "%{$contextParameter}%";
10593
}
10694

95+
/**
96+
* @param Definition $paymentDefinition
97+
* @param ContainerBuilder $container
98+
* @param $contextName
99+
* @param array $config
100+
*/
101+
protected function addCustomApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
102+
{
103+
foreach (array_reverse($config['apis']) as $apiId) {
104+
$paymentDefinition->addMethodCall(
105+
'addApi',
106+
array(new Reference($apiId), $forcePrepend = true)
107+
);
108+
}
109+
}
110+
111+
/**
112+
* @param Definition $paymentDefinition
113+
* @param ContainerBuilder $container
114+
* @param $contextName
115+
* @param array $config
116+
*/
117+
protected function addCustomActions(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
118+
{
119+
foreach (array_reverse($config['actions']) as $actionId) {
120+
$paymentDefinition->addMethodCall(
121+
'addAction',
122+
array(new Reference($actionId), $forcePrepend = true)
123+
);
124+
}
125+
}
126+
127+
/**
128+
* @param Definition $paymentDefinition
129+
* @param ContainerBuilder $container
130+
* @param $contextName
131+
* @param array $config
132+
*/
133+
protected function addCustomExtensions(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
134+
{
135+
foreach (array_reverse($config['extensions']) as $extensionId) {
136+
$paymentDefinition->addMethodCall(
137+
'addExtension',
138+
array(new Reference($extensionId), $forcePrepend = true)
139+
);
140+
}
141+
}
142+
143+
/**
144+
* @param Definition $paymentDefinition
145+
* @param ContainerBuilder $container
146+
* @param $contextName
147+
* @param array $config
148+
*/
149+
protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
150+
{
151+
}
152+
153+
/**
154+
* @param Definition $paymentDefinition
155+
* @param ContainerBuilder $container
156+
* @param $contextName
157+
* @param array $config
158+
*/
159+
protected function addActions(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
160+
{
161+
}
162+
163+
/**
164+
* @param Definition $paymentDefinition
165+
* @param ContainerBuilder $container
166+
* @param $contextName
167+
* @param array $config
168+
*/
169+
protected function addExtensions(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
170+
{
171+
}
172+
173+
/**
174+
* @param Definition $paymentDefinition
175+
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
176+
* @param $contextName
177+
* @param array $config
178+
*/
179+
protected function addCommonApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
180+
{
181+
}
182+
107183
/**
108184
* @param Definition $paymentDefinition
109185
*/

DependencyInjection/Factory/Payment/AuthorizeNetAimPaymentFactory.php

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,32 +22,11 @@ public function create(ContainerBuilder $container, $contextName, array $config)
2222
if (false == class_exists('Payum\AuthorizeNet\Aim\PaymentFactory')) {
2323
throw new RuntimeException('Cannot find Authorize.net payment factory class. Have you installed payum/authorize-net-aim package?');
2424
}
25-
26-
$paymentId = parent::create($container, $contextName, $config);
27-
$paymentDefinition = $container->getDefinition($paymentId);
28-
25+
2926
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../../../Resources/config/payment'));
3027
$loader->load('authorize_net_aim.xml');
31-
32-
$apiDefinition = new DefinitionDecorator('payum.authorize_net_aim.api');
33-
$apiDefinition->replaceArgument(0, $config['api']['options']['login_id']);
34-
$apiDefinition->replaceArgument(1, $config['api']['options']['transaction_key']);
35-
$apiDefinition->addMethodCall('setSandbox', array($config['api']['options']['sandbox']));
36-
$apiId = 'payum.context.'.$contextName.'.api';
37-
$container->setDefinition($apiId, $apiDefinition);
38-
$paymentDefinition->addMethodCall('addApi', array(new Reference($apiId)));
39-
40-
$captureActionDefinition = new DefinitionDecorator('payum.authorize_net_aim.action.capture');
41-
$captureActionId = 'payum.context.'.$contextName.'.action.capture';
42-
$container->setDefinition($captureActionId, $captureActionDefinition);
43-
$paymentDefinition->addMethodCall('addAction', array(new Reference($captureActionId)));
44-
45-
$statusActionDefinition = new DefinitionDecorator('payum.authorize_net_aim.action.status');
46-
$statusActionId = 'payum.context.'.$contextName.'.action.status';
47-
$container->setDefinition($statusActionId, $statusActionDefinition);
48-
$paymentDefinition->addMethodCall('addAction', array(new Reference($statusActionId)));
4928

50-
return $paymentId;
29+
return parent::create($container, $contextName, $config);
5130
}
5231

5332
/**
@@ -75,4 +54,34 @@ public function addConfiguration(ArrayNodeDefinition $builder)
7554
->end()
7655
->end();
7756
}
57+
58+
/**
59+
* {@inheritDoc}
60+
*/
61+
protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
62+
{
63+
$apiDefinition = new DefinitionDecorator('payum.authorize_net_aim.api');
64+
$apiDefinition->replaceArgument(0, $config['api']['options']['login_id']);
65+
$apiDefinition->replaceArgument(1, $config['api']['options']['transaction_key']);
66+
$apiDefinition->addMethodCall('setSandbox', array($config['api']['options']['sandbox']));
67+
$apiId = 'payum.context.'.$contextName.'.api';
68+
$container->setDefinition($apiId, $apiDefinition);
69+
$paymentDefinition->addMethodCall('addApi', array(new Reference($apiId)));
70+
}
71+
72+
/**
73+
* {@inheritDoc}
74+
*/
75+
protected function addActions(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
76+
{
77+
$captureActionDefinition = new DefinitionDecorator('payum.authorize_net_aim.action.capture');
78+
$captureActionId = 'payum.context.'.$contextName.'.action.capture';
79+
$container->setDefinition($captureActionId, $captureActionDefinition);
80+
$paymentDefinition->addMethodCall('addAction', array(new Reference($captureActionId)));
81+
82+
$statusActionDefinition = new DefinitionDecorator('payum.authorize_net_aim.action.status');
83+
$statusActionId = 'payum.context.'.$contextName.'.action.status';
84+
$container->setDefinition($statusActionId, $statusActionDefinition);
85+
$paymentDefinition->addMethodCall('addAction', array(new Reference($statusActionId)));
86+
}
7887
}

DependencyInjection/Factory/Payment/Be2BillPaymentFactory.php

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,31 +23,10 @@ public function create(ContainerBuilder $container, $contextName, array $config)
2323
throw new RuntimeException('Cannot find be2bill payment factory class. Have you installed payum/be2bill package?');
2424
}
2525

26-
$paymentId = parent::create($container, $contextName, $config);
27-
$paymentDefinition = $container->getDefinition($paymentId);
28-
2926
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../../../Resources/config/payment'));
3027
$loader->load('be2bill.xml');
3128

32-
$apiDefinition = new DefinitionDecorator('payum.be2bill.api');
33-
$apiDefinition->replaceArgument(0, new Reference($config['api']['client']));
34-
$apiDefinition->replaceArgument(1, $config['api']['options']);
35-
$apiDefinition->setPublic(true);
36-
$apiId = 'payum.context.'.$contextName.'.api';
37-
$container->setDefinition($apiId, $apiDefinition);
38-
$paymentDefinition->addMethodCall('addApi', array(new Reference($apiId)));
39-
40-
$captureActionDefinition = new DefinitionDecorator('payum.be2bill.action.capture');
41-
$captureActionId = 'payum.context.'.$contextName.'.action.capture';
42-
$container->setDefinition($captureActionId, $captureActionDefinition);
43-
$paymentDefinition->addMethodCall('addAction', array(new Reference($captureActionId)));
44-
45-
$statusActionDefinition = new DefinitionDecorator('payum.be2bill.action.status');
46-
$statusActionId = 'payum.context.'.$contextName.'.action.status';
47-
$container->setDefinition($statusActionId, $statusActionDefinition);
48-
$paymentDefinition->addMethodCall('addAction', array(new Reference($statusActionId)));
49-
50-
return $paymentId;
29+
return parent::create($container, $contextName, $config);
5130
}
5231

5332
/**
@@ -76,4 +55,34 @@ public function addConfiguration(ArrayNodeDefinition $builder)
7655
->end()
7756
->end();
7857
}
58+
59+
/**
60+
* {@inheritDoc}
61+
*/
62+
protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
63+
{
64+
$apiDefinition = new DefinitionDecorator('payum.be2bill.api');
65+
$apiDefinition->replaceArgument(0, new Reference($config['api']['client']));
66+
$apiDefinition->replaceArgument(1, $config['api']['options']);
67+
$apiDefinition->setPublic(true);
68+
$apiId = 'payum.context.'.$contextName.'.api';
69+
$container->setDefinition($apiId, $apiDefinition);
70+
$paymentDefinition->addMethodCall('addApi', array(new Reference($apiId)));
71+
}
72+
73+
/**
74+
* {@inheritDoc}
75+
*/
76+
protected function addActions(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
77+
{
78+
$captureActionDefinition = new DefinitionDecorator('payum.be2bill.action.capture');
79+
$captureActionId = 'payum.context.'.$contextName.'.action.capture';
80+
$container->setDefinition($captureActionId, $captureActionDefinition);
81+
$paymentDefinition->addMethodCall('addAction', array(new Reference($captureActionId)));
82+
83+
$statusActionDefinition = new DefinitionDecorator('payum.be2bill.action.status');
84+
$statusActionId = 'payum.context.'.$contextName.'.action.status';
85+
$container->setDefinition($statusActionId, $statusActionDefinition);
86+
$paymentDefinition->addMethodCall('addAction', array(new Reference($statusActionId)));
87+
}
7988
}

DependencyInjection/Factory/Payment/OmnipayPaymentFactory.php

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,38 +28,7 @@ public function create(ContainerBuilder $container, $contextName, array $config)
2828
throw new RuntimeException('Cannot find GatewayInterface interface. Have you installed omnipay/omnipay package?');
2929
}
3030

31-
$paymentId = parent::create($container, $contextName, $config);
32-
$paymentDefinition = $container->getDefinition($paymentId);
33-
34-
$gatewayDefinition = new Definition();
35-
$gatewayDefinition->setClass('Omnipay\Common\GatewayInterface');
36-
$gatewayDefinition->setFactoryClass('Omnipay\Common\GatewayFactory');
37-
$gatewayDefinition->setFactoryMethod('create');
38-
$gatewayDefinition->addArgument($config['type']);
39-
$gatewayDefinition->setPublic(true);
40-
foreach ($config['options'] as $name => $value) {
41-
$gatewayDefinition->addMethodCall('set'.strtoupper($name), array($value));
42-
}
43-
44-
$gatewayId = 'payum.context.'.$contextName.'.gateway';
45-
$container->setDefinition($gatewayId, $gatewayDefinition);
46-
47-
//TODO: work around for current version. Do better fix in 0.6.x
48-
$methodCalls = $paymentDefinition->getMethodCalls();
49-
array_unshift($methodCalls, array('addApi', array(new Reference($gatewayId))));
50-
$paymentDefinition->setMethodCalls($methodCalls);
51-
52-
$captureActionDefinition = new Definition('Payum\Bridge\Omnipay\Action\CaptureAction');
53-
$captureActionId = 'payum.context.'.$contextName.'.action.capture';
54-
$container->setDefinition($captureActionId, $captureActionDefinition);
55-
$paymentDefinition->addMethodCall('addAction', array(new Reference($captureActionId)));
56-
57-
$statusActionDefinition = new Definition('Payum\Bridge\Omnipay\Action\StatusAction');
58-
$statusActionId = 'payum.context.'.$contextName.'.action.status';
59-
$container->setDefinition($statusActionId, $statusActionDefinition);
60-
$paymentDefinition->addMethodCall('addAction', array(new Reference($statusActionId)));
61-
62-
return $paymentId;
31+
return parent::create($container, $contextName, $config);
6332
}
6433

6534
/**
@@ -102,4 +71,41 @@ public function addConfiguration(ArrayNodeDefinition $builder)
10271
->thenInvalid('A message')
10372
;
10473
}
74+
75+
/**
76+
* {@inheritDoc}
77+
*/
78+
protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
79+
{
80+
$gatewayDefinition = new Definition();
81+
$gatewayDefinition->setClass('Omnipay\Common\GatewayInterface');
82+
$gatewayDefinition->setFactoryClass('Omnipay\Common\GatewayFactory');
83+
$gatewayDefinition->setFactoryMethod('create');
84+
$gatewayDefinition->addArgument($config['type']);
85+
$gatewayDefinition->setPublic(true);
86+
foreach ($config['options'] as $name => $value) {
87+
$gatewayDefinition->addMethodCall('set'.strtoupper($name), array($value));
88+
}
89+
90+
$gatewayId = 'payum.context.'.$contextName.'.gateway';
91+
$container->setDefinition($gatewayId, $gatewayDefinition);
92+
93+
$paymentDefinition->addMethodCall('addApi', array(new Reference($gatewayId)));
94+
}
95+
96+
/**
97+
* {@inheritDoc}
98+
*/
99+
protected function addActions(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config)
100+
{
101+
$captureActionDefinition = new Definition('Payum\Bridge\Omnipay\Action\CaptureAction');
102+
$captureActionId = 'payum.context.'.$contextName.'.action.capture';
103+
$container->setDefinition($captureActionId, $captureActionDefinition);
104+
$paymentDefinition->addMethodCall('addAction', array(new Reference($captureActionId)));
105+
106+
$statusActionDefinition = new Definition('Payum\Bridge\Omnipay\Action\StatusAction');
107+
$statusActionId = 'payum.context.'.$contextName.'.action.status';
108+
$container->setDefinition($statusActionId, $statusActionDefinition);
109+
$paymentDefinition->addMethodCall('addAction', array(new Reference($statusActionId)));
110+
}
105111
}

0 commit comments

Comments
 (0)