Completed
Push — master ( 7d6194...2913bc )
by Mark
07:43 queued 02:36
created

IonicPushMessage::sound()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 2
Bugs 1 Features 0
Metric Value
c 2
b 1
f 0
dl 0
loc 6
ccs 3
cts 3
cp 1
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
crap 1
1
<?php
2
3
namespace NotificationChannels\IonicPushNotifications;
4
5
use DateTime;
6
7
class IonicPushMessage
8
{
9
    /** @var string */
10
    public $sendTo = 'tokens';
11
12
    /** @var string */
13
    public $profile;
14
15
    /** @var string */
16
    public $title = '';
17
18
    /** @var string */
19
    public $message = '';
20
21
    /** @var string */
22
    public $sound = '';
23
24
    /** @var DateTime */
25
    public $scheduled = '';
26
27
    /** @var array */
28
    public $payload = [];
29
30
    /** @var array */
31
    public $iosData = [];
32
33
    /** @var array */
34
    public $androidData = [];
35
36
    /**
37
     * @param array $data
0 ignored issues
show
Bug introduced by
There is no parameter named $data. 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...
38
     *
39
     * @return static
40
     */
41 4
    public static function create($profile)
42
    {
43 4
        return new static($profile);
44
    }
45
46
    /**
47
     * @param string $profile
48
     */
49 16
    public function __construct($profile)
50
    {
51 16
        $this->profile = $profile;
52 16
    }
53
54
    /**
55
     * Set the method of targeting users - tokens (default), user_ids, or emails.
56
     *
57
     * @param  string  $profile
0 ignored issues
show
Bug introduced by
There is no parameter named $profile. 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...
58
     *
59
     * @return $this
60
     */
61 1
    public function sendTo($sendTo)
62
    {
63 1
        $this->sendTo = $sendTo;
64
65 1
        return $this;
66
    }
67
68
    /**
69
     * Set the title.
70
     *
71
     * @param  string  $title
72
     *
73
     * @return $this
74
     */
75 1
    public function title($title)
76
    {
77 1
        $this->title = $title;
78
79 1
        return $this;
80
    }
81
82
    /**
83
     * Set the message.
84
     *
85
     * @param  string  $message
86
     *
87
     * @return $this
88
     */
89 4
    public function message($message)
90
    {
91 4
        $this->message = $message;
92
93 4
        return $this;
94
    }
95
96
    /**
97
     * Set the security sound to use.
98
     *
99
     * @param  string  $sound
100
     *
101
     * @return $this
102
     */
103 1
    public function sound($sound)
104
    {
105 1
        $this->sound = $sound;
106
107 1
        return $this;
108
    }
109
110
    /**
111
     * Send custom key/value data with your notifications.
112
     *
113
     * @param  array  $payload
114
     *
115
     * @return $this
116
     */
117 1
    public function payload($payload)
118
    {
119 1
        $this->payload = $payload;
120
121 1
        return $this;
122
    }
123
124
    /**
125
     * Schedule the message for later delivery.
126
     * 
127
     * @param  string|DateTime $date
128
     * @return $this
129
     */
130 2
    public function scheduled($date)
131
    {
132 2
        if (! $date instanceof DateTime) {
133 1
            $date = new DateTime($date);
134 1
        }
135
136 2
        $this->scheduled = $date->format(DateTime::RFC3339);
0 ignored issues
show
Documentation Bug introduced by
It seems like $date->format(\DateTime::RFC3339) of type string is incompatible with the declared type object<DateTime> of property $scheduled.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
137
138 2
        return $this;
139
    }
140
141
    /**
142
     * Dynamically add device specific data.
143
     *
144
     * @param string $method
145
     * @param array  $args
146
     *
147
     * @return object
148
     */
149 7
    public function __call($method, $args)
150
    {
151 7
        if (substr($method, 0, 3) == 'ios') {
152 6
            $key = snake_case(substr($method, 3));
153
154 6
            if (in_array($key, $this->allowediOSOptions())) {
155 5
                $this->iosData[$key] = $args[0];
156 5
            }
157 7
        } elseif (substr($method, 0, 7) == 'android') {
158 1
            $key = snake_case(substr($method, 7));
159
160 1
            if (in_array($key, $this->allowedAndroidOptions())) {
161 1
                $this->androidData[$key] = $args[0];
162 1
            }
163 1
        }
164
165 7
        return $this;
166
    }
167
168
    /**
169
     * Get the method we want to use to send messages.
170
     *
171
     * @return string
172
     */
173 4
    public function getSendToType()
174
    {
175 4
        return $this->sendTo;
176
    }
177
178
    /**
179
     * List of allowed Android options.
180
     *
181
     * @return array
182
     */
183 1
    public function allowedAndroidOptions()
184
    {
185
        return [
186 1
            'collapse_key',
187 1
            'content_available',
188 1
            'data',
189 1
            'delay_while_idle',
190 1
            'icon',
191 1
            'icon_color',
192 1
            'message',
193 1
            'priortiy',
194 1
            'sound',
195 1
            'tag',
196 1
            'time_to_live',
197 1
            'title',
198 1
        ];
199
    }
200
201
    /**
202
     * List of allowed iOS options.
203
     *
204
     * @return array
205
     */
206 6
    public function allowediOSOptions()
207
    {
208
        return [
209 6
            'message',
210 6
            'title',
211 6
            'badge',
212 6
            'payload',
213 6
            'sound',
214 6
            'priortiy',
215 6
            'expire',
216 6
            'content_available',
217 6
        ];
218
    }
219
220
    /**
221
     * @return array
222
     */
223 15
    public function toArray()
224
    {
225
        $data = [
226 15
            'profile' => $this->profile,
227
            'notification' => [
228 15
                'message' => $this->message,
229 15
            ],
230 15
        ];
231
232 15
        if (! empty($this->scheduled)) {
233 2
            $data['scheduled'] = $this->scheduled;
234 2
        }
235
236 15
        if (! empty($this->title)) {
237 1
            $data['notification']['title'] = $this->title;
238 1
        }
239
240 15
        if (! empty($this->sound)) {
241 1
            $data['notification']['sound'] = $this->sound;
242 1
        }
243
244 15
        if (! empty($this->iosData)) {
245 5
            $data['notification']['ios'] = $this->iosData;
246 5
        }
247
248 15
        if (! empty($this->androidData)) {
249 1
            $data['notification']['android'] = $this->androidData;
250 1
        }
251
252 15
        if (! empty($this->payload)) {
253 1
            $data['notification']['payload'] = $this->payload;
254 1
        }
255
256 15
        return $data;
257
    }
258
}
259