Completed
Pull Request — master (#31)
by Rafał
05:27
created

ObtainBankAccountAction::createBankAccountForm()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PH\Bundle\PayumBundle\Action;
6
7
use Payum\Core\Action\ActionInterface;
8
use Payum\Core\Bridge\Symfony\Reply\HttpResponse;
9
use Payum\Core\Exception\LogicException;
10
use Payum\Core\Exception\RequestNotSupportedException;
11
use Payum\Core\GatewayAwareInterface;
12
use Payum\Core\GatewayAwareTrait;
13
use Payum\Core\Model\BankAccountInterface;
14
use Payum\Core\Request\RenderTemplate;
15
use PH\Bundle\PayumBundle\Factory\BankAccountFormFactoryInterface;
16
use PH\Bundle\PayumBundle\Request\ObtainBankAccount;
17
use Symfony\Component\HttpFoundation\RequestStack;
18
use Symfony\Component\HttpFoundation\Response;
19
20
class ObtainBankAccountAction implements ActionInterface, GatewayAwareInterface
21
{
22
    use GatewayAwareTrait;
23
24
    /**
25
     * @var BankAccountFormFactoryInterface
26
     */
27
    protected $bankAccountFormFactory;
28
29
    /**
30
     * @var RequestStack
31
     */
32
    protected $httpRequestStack;
33
34
    /**
35
     * @var string
36
     */
37
    protected $templateName;
38
39
    /**
40
     * ObtainBankAccountAction constructor.
41
     *
42
     * @param BankAccountFormFactoryInterface $bankAccountFormFactory
43
     * @param string                          $templateName
44
     */
45
    public function __construct(BankAccountFormFactoryInterface $bankAccountFormFactory, string $templateName)
46
    {
47
        $this->bankAccountFormFactory = $bankAccountFormFactory;
48
        $this->templateName = $templateName;
49
    }
50
51
    /**
52
     * @param RequestStack|null $requestStack
53
     */
54
    public function setRequestStack(?RequestStack $requestStack)
55
    {
56
        $this->httpRequestStack = $requestStack;
57
    }
58
59
    /**
60
     * {@inheritdoc}
61
     *
62
     * @param ObtainBankAccount $request
63
     *
64
     * @throws \Payum\Core\Bridge\Symfony\Reply\HttpResponse
65
     */
66
    public function execute($request)
67
    {
68
        RequestNotSupportedException::assertSupports($this, $request);
69
        $httpRequest = $this->httpRequestStack->getMasterRequest();
70
71
        if (false == $httpRequest) {
72
            throw new LogicException('The action can be run only when http request is set.');
73
        }
74
75
        $form = $this->bankAccountFormFactory->createBankAccountForm($request->getModel()['type']);
76
77
        $form->handleRequest($httpRequest);
78
        if ($form->isSubmitted()) {
79
            /** @var BankAccountInterface $bankAccount */
80
            $bankAccount = $form->getData();
81
82
            if ($form->isValid()) {
83
                $request->set($bankAccount);
84
85
                return;
86
            }
87
        }
88
89
        $renderTemplate = new RenderTemplate($this->templateName, [
90
            'model' => $request->getModel(),
91
            'firstModel' => $request->getFirstModel(),
92
            'form' => $form->createView(),
93
            'actionUrl' => $request->getToken() ? $request->getToken()->getTargetUrl() : null,
94
        ]);
95
96
        $this->gateway->execute($renderTemplate);
97
98
        throw new HttpResponse(new Response($renderTemplate->getResult(), 200, [
99
            'Cache-Control' => 'no-store, no-cache, max-age=0, post-check=0, pre-check=0',
100
            'X-Status-Code' => 200,
101
            'Pragma' => 'no-cache',
102
        ]));
103
    }
104
105
    /**
106
     * {@inheritdoc}
107
     */
108
    public function supports($request)
109
    {
110
        return $request instanceof ObtainBankAccount;
111
    }
112
}
113