Passed
Push — master ( 195aeb...469104 )
by Romain
36s
created

ProfileSettings   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 155
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 1
dl 0
loc 155
ccs 39
cts 39
cp 1
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A addPersistentMenus() 0 6 1
A addStartButton() 0 10 1
A addGreetings() 0 6 1
A addWhitelistedDomains() 0 9 1
A addAccountLinkingUrl() 0 8 1
A addPaymentSettings() 0 6 1
A addTargetAudience() 0 6 1
A isValidDomains() 0 6 2
A jsonSerialize() 0 14 1
1
<?php
2
namespace Kerox\Messenger\Model;
3
4
use Kerox\Messenger\Helper\ValidatorTrait;
5
use Kerox\Messenger\Model\ProfileSettings\PaymentSettings;
6
use Kerox\Messenger\Model\ProfileSettings\TargetAudience;
7
8
class ProfileSettings implements \JsonSerializable
9
{
10
11
    use ValidatorTrait;
12
13
    /**
14
     * @var null|\Kerox\Messenger\Model\ProfileSettings\PersistentMenu[]
15
     */
16
    protected $persistentMenus;
17
18
    /**
19
     * @var null|array
20
     */
21
    protected $startButton;
22
23
    /**
24
     * @var null|\Kerox\Messenger\Model\ProfileSettings\Greeting[]
25
     */
26
    protected $greetings;
27
28
    /**
29
     * @var null|array
30
     */
31
    protected $whitelistedDomains;
32
33
    /**
34
     * @var null|string
35
     */
36
    protected $accountLinkingUrl;
37
38
    /**
39
     * @var null|\Kerox\Messenger\Model\ProfileSettings\PaymentSettings
40
     */
41
    protected $paymentSettings;
42
43
    /**
44
     * @var null|\Kerox\Messenger\Model\ProfileSettings\TargetAudience
45
     */
46
    protected $targetAudience;
47
48
    /**
49
     * @param \Kerox\Messenger\Model\ProfileSettings\PersistentMenu[] $persistentMenus
50
     * @return \Kerox\Messenger\Model\ProfileSettings
51
     */
52 1
    public function addPersistentMenus(array $persistentMenus): ProfileSettings
53
    {
54 1
        $this->persistentMenus = $persistentMenus;
55
56 1
        return $this;
57
    }
58
59
    /**
60
     * @param string $payload
61
     * @return \Kerox\Messenger\Model\ProfileSettings
62
     * @throws \InvalidArgumentException
63
     */
64 1
    public function addStartButton(string $payload): ProfileSettings
65
    {
66 1
        $this->isValidString($payload, 1000);
67
68 1
        $this->startButton = [
69 1
            'payload' => $payload,
70
        ];
71
72 1
        return $this;
73
    }
74
75
    /**
76
     * @param \Kerox\Messenger\Model\ProfileSettings\Greeting[] $greetings
77
     * @return \Kerox\Messenger\Model\ProfileSettings
78
     */
79 2
    public function addGreetings(array $greetings): ProfileSettings
80
    {
81 2
        $this->greetings = $greetings;
82
83 2
        return $this;
84
    }
85
86
    /**
87
     * @param array $whitelistedDomains
88
     * @return \Kerox\Messenger\Model\ProfileSettings
89
     */
90 1
    public function addWhitelistedDomains(array $whitelistedDomains): ProfileSettings
91
    {
92 1
        $this->isValidArray($whitelistedDomains, 10);
93 1
        $this->isValidDomains($whitelistedDomains);
94
95 1
        $this->whitelistedDomains = $whitelistedDomains;
96
97 1
        return $this;
98
    }
99
100
    /**
101
     * @param string $accountLinkingUrl
102
     * @return \Kerox\Messenger\Model\ProfileSettings
103
     */
104 1
    public function addAccountLinkingUrl(string $accountLinkingUrl): ProfileSettings
105
    {
106 1
        $this->isValidUrl($accountLinkingUrl);
107
108 1
        $this->accountLinkingUrl = $accountLinkingUrl;
109
110 1
        return $this;
111
    }
112
113
    /**
114
     * @param \Kerox\Messenger\Model\ProfileSettings\PaymentSettings $paymentSettings
115
     * @return \Kerox\Messenger\Model\ProfileSettings
116
     */
117 1
    public function addPaymentSettings(PaymentSettings $paymentSettings): ProfileSettings
118
    {
119 1
        $this->paymentSettings = $paymentSettings;
120
121 1
        return $this;
122
    }
123
124
    /**
125
     * @param \Kerox\Messenger\Model\ProfileSettings\TargetAudience $targetAudience
126
     * @return \Kerox\Messenger\Model\ProfileSettings
127
     */
128 1
    public function addTargetAudience(TargetAudience $targetAudience): ProfileSettings
129
    {
130 1
        $this->targetAudience = $targetAudience;
131
132 1
        return $this;
133
    }
134
135
    /**
136
     * @param array $domains
137
     */
138 1
    private function isValidDomains(array $domains)
139
    {
140 1
        foreach ($domains as $domain) {
141 1
            $this->isValidUrl($domain);
142
        }
143 1
    }
144
145
    /**
146
     * @return array
147
     */
148 8
    public function jsonSerialize(): array
149
    {
150
        $json = [
151 8
            'persistent_menu' => $this->persistentMenus,
152 8
            'get_started' => $this->startButton,
153 8
            'greeting' => $this->greetings,
154 8
            'whitelisted_domains' => $this->whitelistedDomains,
155 8
            'account_linking_url' => $this->accountLinkingUrl,
156 8
            'payment_settings' => $this->paymentSettings,
157 8
            'target_audience' => $this->targetAudience,
158
        ];
159
160 8
        return array_filter($json);
161
    }
162
}
163