Index::log()   A
last analyzed

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 1
1
<?php
2
3
/**
4
 * PAYONE Magento 2 Connector is free software: you can redistribute it and/or modify
5
 * it under the terms of the GNU Lesser General Public License as published by
6
 * the Free Software Foundation, either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * PAYONE Magento 2 Connector is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public License
15
 * along with PAYONE Magento 2 Connector. If not, see <http://www.gnu.org/licenses/>.
16
 *
17
 * PHP version 5
18
 *
19
 * @category  Payone
20
 * @package   Payone_Magento2_Plugin
21
 * @author    FATCHIP GmbH <[email protected]>
22
 * @copyright 2003 - 2016 Payone GmbH
23
 * @license   <http://www.gnu.org/licenses/> GNU Lesser General Public License
24
 * @link      http://www.payone.de
25
 */
26
27
namespace Payone\Core\Controller\Transactionstatus;
28
29
use Magento\Sales\Model\Order;
30
31
/**
32
 * TransactionStatus receiver
33
 */
34
class Index extends \Magento\Framework\App\Action\Action
35
{
36
    /**
37
     * Contect object
38
     *
39
     * @var \Magento\Framework\App\Action\Context
40
     */
41
    protected $context;
42
43
    /**
44
     * TransactionStatus model
45
     *
46
     * @var \Payone\Core\Model\ResourceModel\TransactionStatus
47
     */
48
    protected $transactionStatus;
49
50
    /**
51
     * PAYONE toolkit helper
52
     *
53
     * @var \Payone\Core\Helper\Toolkit
54
     */
55
    protected $toolkitHelper;
56
57
    /**
58
     * PAYONE environment helper
59
     *
60
     * @var \Payone\Core\Helper\Environment
61
     */
62
    protected $environmentHelper;
63
64
    /**
65
     * PAYONE order helper
66
     *
67
     * @var \Payone\Core\Helper\Order
68
     */
69
    protected $orderHelper;
70
71
    /**
72
     * PAYONE TransactionStatus Mapping
73
     *
74
     * @var \Payone\Core\Model\TransactionStatus\Mapping
75
     */
76
    protected $statusMapping;
77
78
    /**
79
     * PAYONE TransactionStatus Forwarding
80
     *
81
     * @var \Payone\Core\Model\TransactionStatus\Forwarding
82
     */
83
    protected $statusForwarding;
84
85
    /**
86
     * Result factory for file-download
87
     *
88
     * @var \Magento\Framework\Controller\Result\RawFactory
89
     */
90
    protected $resultRawFactory;
91
92
    /**
93
     * Event manager object
94
     *
95
     * @var \Magento\Framework\Event\ManagerInterface
96
     */
97
    protected $eventManager;
98
99
    /**
100
     * Constructor
101
     *
102
     * @param \Magento\Framework\App\Action\Context              $context
103
     * @param \Payone\Core\Model\ResourceModel\TransactionStatus $transactionStatus
104
     * @param \Payone\Core\Helper\Toolkit                        $toolkitHelper
105
     * @param \Payone\Core\Helper\Environment                    $environmentHelper
106
     * @param \Payone\Core\Helper\Order                          $orderHelper
107
     * @param \Payone\Core\Model\TransactionStatus\Mapping       $statusMapping
108
     * @param \Payone\Core\Model\TransactionStatus\Forwarding    $statusForwarding
109
     * @param \Magento\Framework\Controller\Result\RawFactory    $resultRawFactory
110
     */
111
    public function __construct(
112
        \Magento\Framework\App\Action\Context $context,
113
        \Payone\Core\Model\ResourceModel\TransactionStatus $transactionStatus,
114
        \Payone\Core\Helper\Toolkit $toolkitHelper,
115
        \Payone\Core\Helper\Environment $environmentHelper,
116
        \Payone\Core\Helper\Order $orderHelper,
117
        \Payone\Core\Model\TransactionStatus\Mapping $statusMapping,
118
        \Payone\Core\Model\TransactionStatus\Forwarding $statusForwarding,
119
        \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
120
    ) {
121
        parent::__construct($context);
122
        $this->context = $context;
123
        $this->transactionStatus = $transactionStatus;
124
        $this->toolkitHelper = $toolkitHelper;
125
        $this->environmentHelper = $environmentHelper;
126
        $this->orderHelper = $orderHelper;
127
        $this->statusMapping = $statusMapping;
128
        $this->statusForwarding = $statusForwarding;
129
        $this->resultRawFactory = $resultRawFactory;
130
        $this->eventManager = $context->getEventManager();
131
    }
132
133
    /**
134
     * Return request parameter value
135
     *
136
     * @param  string $sKey
137
     * @return string
138
     */
139
    protected function getParam($sKey)
140
    {
141
        return $this->context->getRequest()->getParam($sKey, '');
142
    }
143
144
    /**
145
     * Return Post array
146
     *
147
     * @return array
148
     */
149
    protected function getPostArray()
150
    {
151
        return $this->context->getRequest()->getPost()->toArray();
0 ignored issues
show
Bug introduced by
It seems like you code against a concrete implementation and not the interface Magento\Framework\App\RequestInterface as the method getPost() does only exist in the following implementations of said interface: Magento\Framework\App\Request\Http, Magento\Framework\Webapi\Request, Magento\Framework\Webapi\Rest\Request.

Let’s take a look at an example:

interface User
{
    /** @return string */
    public function getPassword();
}

class MyUser implements User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different implementation of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the interface:

    interface User
    {
        /** @return string */
        public function getPassword();
    
        /** @return string */
        public function getDisplayName();
    }
    
Loading history...
152
    }
153
154
    /**
155
     * Write the TransactionStatus to the database
156
     *
157
     * @param  Order $oOrder
158
     * @return void
159
     */
160
    protected function log(Order $oOrder = null)
161
    {
162
        $this->transactionStatus->addTransactionLogEntry($this->context, $oOrder);
163
    }
164
165
    /**
166
     * Order processing
167
     *
168
     * @param  Order $oOrder
169
     * @return void
170
     */
171
    protected function handleOrder(Order $oOrder)
172
    {
173
        $sAction = $this->getParam('txaction');
174
        $oOrder->setPayoneTransactionStatus($sAction);
175
        $oOrder->save();
176
    }
177
178
    /**
179
     * Main method for executing all needed actions for the incoming TransactionStatus
180
     *
181
     * @return string
182
     */
183
    protected function handleTransactionStatus()
184
    {
185
        if (!$this->environmentHelper->isRemoteIpValid()) {
186
            return 'Access denied';
187
        }
188
        if ($this->toolkitHelper->isKeyValid($this->getParam('key'))) {
189
            $oOrder = $this->orderHelper->getOrderByTxid($this->getParam('txid'));
190
            $this->log($oOrder);
191
            if ($oOrder) {
192
                $this->handleOrder($oOrder);
193
                $this->statusMapping->handleMapping($oOrder, $this->getParam('txaction'));
194
            }
195
            $this->statusForwarding->handleForwardings($this->getPostArray());
196
197
            $aParams = [
198
                'order' => $oOrder,
199
                'transactionstatus' => $this->getPostArray(),
200
            ];
201
202
            $this->eventManager->dispatch('payone_core_transactionstatus_all', $aParams);
203
            $this->eventManager->dispatch('payone_core_transactionstatus_'.$this->getParam('txaction'), $aParams);
204
205
            return 'TSOK';
206
        }
207
        return 'Key wrong or missing!';
208
    }
209
210
    /**
211
     * Executing TransactionStatus handling
212
     *
213
     * @return \Magento\Framework\Controller\Result\Raw
214
     */
215
    public function execute()
216
    {
217
        $sOutput = $this->handleTransactionStatus();
218
        $oResultRaw = $this->resultRawFactory->create();
219
        $oResultRaw->setContents($sOutput);
220
        return $oResultRaw;
221
    }
222
}
223