AddTransactionCommand   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 86.36%

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 3
dl 0
loc 63
ccs 19
cts 22
cp 0.8636
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A generate() 0 23 2
A checkOptionalParams() 0 8 2
A addParam() 0 9 2
1
<?php
2
3
namespace ByTIC\GoogleAnalytics\Tracking\Renderer\Script\AnalyticsJs\Ecommerce;
4
5
use ByTIC\GoogleAnalytics\Tracking\Data\Ecommerce\Transaction;
6
use ByTIC\GoogleAnalytics\Tracking\Data\Tracker;
7
use ByTIC\GoogleAnalytics\Tracking\Renderer\Script\AnalyticsJs;
8
use ByTIC\GoogleAnalytics\Tracking\Renderer\Script\AnalyticsJs\MethodCall;
9
use InvalidArgumentException;
10
11
/**
12
 * Class AddTransactionCommand
13
 * @package ByTIC\GoogleAnalytics\Tracking\Renderer\Script\AnalyticsJs\Ecommerce
14
 */
15
class AddTransactionCommand
16
{
17
18
    /**
19
     * @param Tracker $tracker
20
     * @param Transaction $transaction
21
     * @param $functionName
22
     * @return string
23
     */
24 2
    public static function generate($tracker, $transaction, $functionName = AnalyticsJs::DEFAULT_FUNCTION_NAME)
25
    {
26 2
        $transactionId = $transaction->getId();
27 2
        if (empty($transactionId)) {
28
            throw new InvalidArgumentException(
29
                sprintf(
30
                    'Cannot add transaction without id'
31
                )
32
            );
33
        }
34
        $transactionParams = [
35 2
            'id' => $transaction->getId(),
36
        ];
37
38 2
        $transactionParams = static::checkOptionalParams($transaction, $transactionParams);
39
40
        $params = [
41 2
            $tracker->getCommandAlias() . 'ecommerce:addTransaction',
42 2
            $transactionParams,
43
        ];
44
45 2
        return MethodCall::generate($params, $functionName);
46
    }
47
48
    /**
49
     * @param $transaction
50
     * @param array $params
51
     * @return array|mixed
52
     */
53 2
    protected static function checkOptionalParams($transaction, $params = [])
54
    {
55 2
        $paramsLabels = ['affiliation', 'revenue', 'shipping', 'tax', 'currency'];
56 2
        foreach ($paramsLabels as $paramName) {
57 2
            $params = static::addParam($transaction, $paramName, $params);
58
        }
59 2
        return $params;
60
    }
61
62
    /**
63
     * @param $transaction
64
     * @param $paramName
65
     * @param $params
66
     * @return mixed
67
     */
68 2
    protected static function addParam($transaction, $paramName, $params = [])
69
    {
70 2
        $functionName = 'get' . ucfirst($paramName);
71 2
        $value = $transaction->$functionName();
72 2
        if ($value !== null) {
73 1
            $params[$paramName] = $value;
74
        }
75 2
        return $params;
76
    }
77
}
78