Issues (28)

Security Analysis    no request data  

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

src/Iris/SaleWrapper/Partner.php (5 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Iris\SaleWrapper;
4
5
class Partner extends Base
6
{
7
    private $mappingClasses;
8
9
    /**
10
     * Gets an specific mapping classs
11
     *
12
     * @param string $mappingName
13
     */
14 6
    public function getMapping($mappingName)
15 1
    {
16 6
        if (!$this->mappingClasses[$mappingName]) {
17 3
            $mappingClass = '\Iris\Mapping\\' . $mappingName;
18 3
            $this->mappingClasses[$mappingName] =  $mappingClass::getInstance();
19 3
        }
20
21 6
        return $this->mappingClasses[$mappingName];
22
    }
23
24
    /**
25
     * Set an specific mapping classs
26
     *
27
     * @param string $mappingName
28
     * @param $mappingClass
29
     * @return \Iris\SaleWrapper\Partner
30
     */
31 3
    public function setMapping($mappingName, $mappingClass)
32
    {
33 3
        $this->mappingClasses[$mappingName] = $mappingClass;
34 3
        return $this;
35
    }
36
37
    /**
38
     * Gets Stock service.
39
     * @return \Iris\Interfaces\Stock
40
     */
41 2
    public function getStockService()
42
    {
43 2
        return $this->getManager()->getService(\Iris\Factory::STOCK);
44
    }
45
46
    /**
47
     * Gets Stock service.
48
     * @return \Iris\Interfaces\Catalog
49
     */
50 2
    public function getCatalogService()
51
    {
52 2
        return $this->getManager()->getService(\Iris\Factory::CATALOG);
53
    }
54
55
    //order
56
    /**
57
     * Send order to venture
58
     *
59
     * @param \Iris\Transfer\Sales\Order $order,
0 ignored issues
show
There is no parameter named $order,. Did you maybe mean $order?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
60
     * @param string $ventureCode
0 ignored issues
show
There is no parameter named $ventureCode. Did you maybe mean $venture?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
61
     * @return bool
62
     * @throws \Iris\Exceptions\OrderNotFound
63
     * @throws \Iris\Exceptions\RetryMessage
64
     */
65 1
    public function createOrderOnVenture(
66
        \Iris\Transfer\Sales\Order $order,
67
        \Iris\Transfer\Venture $venture
68
    ) {
69 1
        return $this->getPartnerApiClient()
70 1
            ->createOrderOnVenture($order, $venture->getVentureCode());
0 ignored issues
show
$order is of type object<Iris\Transfer\Sales\Order>, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
71
    }
72
73
    /**
74
     * As a Partner I expect to receive a reserve confirmation and quantity of stock for SalesOrderItem to remove its
75
     * reserve.
76
     *
77
     * @param integer $orderNr Partner order number
78
     * @return void
79
     * @throws \Iris\Exceptions\UnableToDropReserve
80
     */
81 1
    public function dropReserve($orderNr)
82
    {
83 1
        $this->getOrderService()->dropReserve($orderNr);
84 1
    }
85
86
    /**
87
     * Send a confirmation that the order is paid to the venture
88
     *
89
     * @param Iris\Transfer\Sales\Order $order
90
     * @param Iris\Transfer\Venture     $venture
91
     * @return bool
92
     * @throws \Iris\Exceptions\OrderNotFound
93
     * @throws \Iris\Exceptions\RetryMessage
94
     */
95 1
    public function confirmOrderPaidOnVenture(
96
        \Iris\Transfer\Sales\Order $order,
97
        \Iris\Transfer\Venture $venture
98
    ) {
99 1
        return $this->getPartnerApiClient()
100 1
            ->confirmPaymentOnVenture(
101 1
                $order->getOrderNr(),
102 1
                $venture->getVentureCode()
103 1
            );
104
    }
105
106
    /**
107
     * Sends a order cancel request to venture
108
     *
109
     * @param Iris\Transfer\Sales\Order $order
110
     * @param Iris\Transfer\Venture     $venture
111
     * @return bool
112
     * @throws \Iris\Exceptions\OrderNotFound
113
     * @throws \Iris\Exceptions\RetryMessage
114
     */
115 1
    public function cancelOrderOnVenture(
116
        \Iris\Transfer\Sales\Order $order,
117
        \Iris\Transfer\Venture $venture
118
    ) {
119 1
        return $this->getPartnerApiClient()
120 1
            ->cancelOrderOnVenture(
121 1
                $order->getOrderNr(),
122 1
                $venture->getVentureCode()
123 1
            );
124
    }
125
126
    /**
127
     * As a Partner I want to receive a Venture Order Number to bind it with my Order Number.
128
     *
129
     * @param string $orderNr Order number.
130
     * @param string $ventureCode Venture code
131
     * @param string $ventureOrderNr Venture Order Number
132
     * @return void
133
     */
134
    public function bindVentureOrder($orderNr, $ventureCode, $ventureOrderNr)
135
    {
136
        $this->getOrderService()
137
            ->bindPartnerOrderWithVentureOrder(
138
                $orderNr,
139
                $ventureCode,
140
                $ventureOrderNr
141
            );
142
    }
143
144
    //post payment
145
    /**
146
     * As a Partner I expect to receive a shipped notification from Venture.
147
     *
148
     * @param array $postPaymentData
149
     * @param string $ventureCode
150
     * @return array Returns an array as:
151
     *
152
     * [
153
     *     'order_data' = [
154
     *          'order_number' => '00000057',
155
     *          'items' => [
156
     *              [53 => [
157
     *                   'status' => true
158
     *              ]],
159
     *              [54 => [
160
     *                   'status' => false,
161
     *                   'message' => 'Some error'
162
     *              ]
163
     *          ]
164
     *     ]
165
     * ]
166
     */
167 1
    public function setOrderStatusToShippedFromVenture(
168
        array $postPaymentData,
169
        $ventureCode
170
    ) {
171 1
        $postPaymentCollection = $this->getMapping('ShippedFromVenture')
172 1
            ->assign($postPaymentData);
173
174 1
        foreach ($postPaymentCollection as $postPayment) {
175 1
            if (!$postPayment->getTrackingCode()) {
176 1
                $postPayment->setTrackingCode(md5($postPayment->getTrackingUrl()));
177 1
            }
178 1
        }
179
180 1
        return $this->getOrderService()
181 1
            ->shippedFromVenture($postPaymentCollection, $ventureCode);
182
    }
183
184
    /**
185
     * @param array $postPaymentData
186
     * @param string $ventureCode
187
     * @return array
188
     */
189 1
    public function cancelOrderFromVenture(
190
        array $postPaymentData,
191
        $ventureCode
192
    ) {
193 1
        $postPaymentCollection = $this->getMapping('CancelFromVenture')
194 1
            ->assign($postPaymentData);
195
196 1
        return $this->getOrderService()
197 1
            ->cancelorderFromVenture($postPaymentCollection, $ventureCode);
198
    }
199
200
    /**
201
     * As a Partner I expect to receive a delivered notification from Venture.
202
     *
203
     * @param array $postPaymentData
204
     * @param string $ventureCode
205
     * @return array Returns an array as:
206
     *
207
     * [
208
     *     'order_data' = [
209
     *          'order_number' => '00000057',
210
     *          'items' => [
211
     *              [53 => [
212
     *                   'status' => true
213
     *              ]],
214
     *              [54 => [
215
     *                   'status' => false,
216
     *                   'message' => 'Some error'
217
     *              ]
218
     *          ]
219
     *     ]
220
     * ]
221
     */
222 1
    public function setOrderStatusToDeliveredFromVenture(
223
        array $postPaymentData,
224
        $ventureCode
225
    ) {
226 1
        $postPaymentCollection = $this->getMapping('DeliveredFromVenture')
227 1
            ->assign($postPaymentData);
228
229 1
        return $this->getOrderService()
230 1
            ->deliveredFromVenture($postPaymentCollection, $ventureCode);
231
    }
232
233
    /**
234
     * As a Partner I expect to receive a delivery failed notification from Venture.
235
     * @param array $orderData
0 ignored issues
show
There is no parameter named $orderData. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
236
     * @param string $ventureCode
237
     * @return array Returns an array as:
238
     *
239
     * [
240
     *     'order_data' = [
241
     *          'order_number' => '00000057',
242
     *          'items' => [
243
     *              [53 => [
244
     *                   'status' => true
245
     *              ]],
246
     *              [54 => [
247
     *                   'status' => false,
248
     *                   'message' => 'Some error'
249
     *              ]
250
     *          ]
251
     *     ]
252
     * ]
253
     */
254 1
    public function setOrderStatusToDeliveryFailedFromVenture(
255
        array $postPaymentData,
256
        $ventureCode
257
    ) {
258 1
        $postPaymentCollection = $this->getMapping('DeliveryFailedFromVenture')
259 1
            ->assign($postPaymentData);
260
261 1
        return $this->getOrderService()
262 1
            ->deliveryFailedFromVenture($postPaymentCollection, $ventureCode);
263
    }
264
265
    //products
266
    /**
267
     * Create products from venture
268
     *
269
     * @param array $productsData
270
     * @param string $ventureCode
271
     * @return Iris\Transfer\Catalog\ConfigCollection
272
     */
273
    public function createProductsFromVenture(array $productsData, $ventureCode)
274
    {
275
        $configCollection = $this->getMapping('ConfigCollection')
276
            ->assign($productsData);
277
278
        return $this->getCatalogService()->createProducts($configCollection, $ventureCode);
279
    }
280
281
    /**
282
     * Send product creation status to venture
283
     *
284
     * @param \Iris\Transfer\Catalog\ConfigCollection $configCollection
285
     * @param \Iris\Transfer\Venture $venture
286
     * @return void
287
     */
288
    public function sendProductCreationConfirmationToVenture(
289
        \Iris\Transfer\Catalog\ConfigCollection $configCollection,
290
        \Iris\Transfer\Venture $venture
291
    ) {
292
        $productsData = $this->getMapping('ConfigCollection')
293
            ->map($configCollection);
294
295
        $this->getPartnerApiClient()
296
            ->sendProductCreationConfirmationToVenture(
297
                $productsData,
298
                $venture->getVentureCode()
299
            );
300
    }
301
302
    /**
303
     * Update products information from venture
304
     *
305
     * @param array $productsData
306
     * @param string $ventureCode
307
     * @return void
308
     */
309
    public function updateProductsFromVenture(array $productsData, $ventureCode)
310
    {
311
        $configCollection = $this->getMapping('ConfigCollection')
312
            ->assign($productsData);
313
314
        $this->getCatalogService()->updateProducts(
315
            $configCollection,
316
            $ventureCode
317
        );
318
    }
319
320
    /**
321
     * Update price in batch based on the config collection information sent by the venture
322
     *
323
     * @param array $productsData
324
     * @param string $ventureCode
325
     * @return void
326
     */
327 1
    public function updatePriceFromVenture(array $productsData, $ventureCode)
328
    {
329 1
        $configCollection = $this->getMapping('Price')
330 1
            ->assign($productsData);
331
332 1
        $this->getCatalogService()->updatePrice(
333 1
            $configCollection,
334
            $ventureCode
335 1
        );
336 1
    }
337
338
    /**
339
     * Update the stock of a product from the venture
340
     *
341
     * @param array $productsData
342
     * @param string $ventureCode
343
     * @return bool
344
     */
345 1
    public function updateStockFromVenture(array $productsData, $ventureCode)
0 ignored issues
show
The parameter $ventureCode is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
346
    {
347 1
        $simpleCollection = $this->getMapping('Stock')
348 1
            ->assign($productsData);
349
350 1
        return $this->getStockService()->update($simpleCollection);
351
    }
352
353
    /**
354
     * Update product images from venture
355
     *
356
     * @param array $productsData
357
     * @param string $ventureCode
358
     * @return void
359
     */
360
    public function updateProductImagesFromVenture(array $productsData, $ventureCode)
361
    {
362
        $configCollection = $this->getMapping('Image')->assign($productsData);
363
364
        return $this->getCatalogService()->updateImages(
365
            $configCollection,
366
            $ventureCode
367
        );
368
    }
369
}
370