1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Tylercd100\Monolog\Handler; |
4
|
|
|
|
5
|
|
|
use Exception; |
6
|
|
|
use Monolog\Logger; |
7
|
|
|
|
8
|
|
|
/** |
9
|
|
|
* Twilio - Monolog Handler |
10
|
|
|
* @url https://www.twilio.com/docs/api/rest/sending-messages |
11
|
|
|
*/ |
12
|
|
View Code Duplication |
class TwilioHandler extends SMSHandler |
|
|
|
|
13
|
|
|
{ |
14
|
|
|
/** |
15
|
|
|
* API version 1 |
16
|
|
|
*/ |
17
|
|
|
const API_V1 = '2010-04-01'; |
18
|
|
|
|
19
|
|
|
/** |
20
|
|
|
* @param string $secret Twilio API Secret Token |
21
|
|
|
* @param string $sid Twilio API SID |
22
|
|
|
* @param string $fromNumber The phone number that will be shown as the sender ID |
23
|
|
|
* @param string $toNumber The phone number to which the message will be sent |
24
|
|
|
* @param int $level The minimum logging level at which this handler will be triggered |
25
|
|
|
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not |
26
|
|
|
* @param bool $useSSL Whether to connect via SSL. |
27
|
|
|
* @param string $host The Twilio server hostname. |
28
|
|
|
* @param string $version The Twilio API version (default TwilioHandler::API_V1) |
29
|
|
|
* @param int $limit The character limit |
30
|
|
|
*/ |
31
|
18 |
|
public function __construct($secret, $sid, $fromNumber, $toNumber, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $host = 'api.twilio.com', $version = self::API_V1, $limit = 160) |
32
|
|
|
{ |
33
|
18 |
|
if ($version !== self::API_V1) { |
34
|
3 |
|
throw new Exception('API Version \'{$version}\' is not supported!'); |
35
|
|
|
} |
36
|
15 |
|
parent::__construct($secret, $sid, $fromNumber, $toNumber, $level, $bubble, $useSSL, $host, $version, $limit); |
37
|
15 |
|
} |
38
|
|
|
|
39
|
|
|
/** |
40
|
|
|
* {@inheritdoc} |
41
|
|
|
* |
42
|
|
|
* @param array $record |
43
|
|
|
* @return string |
44
|
|
|
*/ |
45
|
12 |
|
protected function buildContent($record) |
46
|
|
|
{ |
47
|
12 |
|
if (strlen($record['formatted']) > $this->limit) { |
48
|
|
|
$record['formatted'] = substr($record['formatted'], 0, $this->limit); |
49
|
|
|
} |
50
|
|
|
|
51
|
|
|
$dataArray = array( |
52
|
12 |
|
'From' => $this->fromNumber, |
53
|
12 |
|
'To' => $this->toNumber, |
54
|
12 |
|
'Body' => $record['formatted'], |
55
|
12 |
|
); |
56
|
12 |
|
return json_encode($dataArray); |
57
|
|
|
} |
58
|
|
|
|
59
|
|
|
/** |
60
|
|
|
* Builds the URL for the API call |
61
|
|
|
* |
62
|
|
|
* @return string |
63
|
|
|
*/ |
64
|
12 |
|
protected function buildRequestUrl() |
65
|
|
|
{ |
66
|
12 |
|
return "POST /{$this->version}/Accounts/{$this->authId}/Messages.json HTTP/1.1\r\n"; |
67
|
|
|
} |
68
|
|
|
} |
69
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.