Skip to content

Commit c6e0e22

Browse files
committed
- (Feature) Added Twilio SMS service
1 parent e872fa3 commit c6e0e22

8 files changed

Lines changed: 140 additions & 5 deletions

File tree

bootstrap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
'Craft\Plugins\Postmaster\Services\CraftService',
66
'Craft\Plugins\Postmaster\Services\MandrillService',
77
'Craft\Plugins\Postmaster\Services\MailchimpService',
8+
'Craft\Plugins\Postmaster\Services\TwilioService',
89
'Craft\Plugins\Postmaster\Services\TestService',
910
'Craft\Plugins\Postmaster\Services\PingService',
1011
));

controllers/Postmaster_ParcelController.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ public function actionCreateParcel()
1111
'model' => $model
1212
));
1313

14-
craft()->templates->includeJsResource('postmaster/js/postmaster.js');
15-
1614
$this->renderTemplate('postmaster/_parcel', array(
1715
'header' => Craft::t('New Parcel'),
1816
'parcel' => $parcel
@@ -29,8 +27,6 @@ public function actionEditParcel()
2927
'model' => $model
3028
));
3129

32-
craft()->templates->includeJsResource('postmaster/js/postmaster.js');
33-
3430
$this->renderTemplate('postmaster/_parcel', array(
3531
'header' => Craft::t('Edit Parcel'),
3632
'parcel' => $parcel

core/parcel_types/UserEmailParcelType.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public function init()
2121
$this->craft()->on($event, function(\Craft\Event $event) use ($parcelType)
2222
{
2323
$user = $event->params['user'];
24+
2425
$isNewUser = isset($event->params['isNewUser']) ? $event->params['isNewUser'] : false;
2526

2627
$parcelType->settings->parse(array_merge($event->params, array(

core/services/PingService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function send(Postmaster_TransportModel $model)
3636
else
3737
{
3838
$response->setSuccess(false);
39-
$response->addError(Craft::t('The ping url is empty.'));
39+
$response->addError(\Craft::t('The ping url is empty.'));
4040
}
4141

4242
return $response;

core/services/TwilioService.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
namespace Craft\Plugins\Postmaster\Services;
3+
4+
use Craft\Postmaster_TransportModel;
5+
use Craft\Plugins\Postmaster\Components\BaseService;
6+
use Craft\Plugins\Postmaster\Responses\TransportResponse;
7+
use \Guzzle\Http\Client;
8+
9+
class TwilioService extends BaseService {
10+
11+
public $name = 'Twilio';
12+
13+
public $id = 'twilio';
14+
15+
public function send(Postmaster_TransportModel $model)
16+
{
17+
$response = new TransportResponse($model);
18+
19+
try
20+
{
21+
$client = new Client();
22+
23+
$data = array(
24+
'From' => $this->settings->from,
25+
'To' => $this->settings->to,
26+
'Body' => $this->settings->message,
27+
);
28+
29+
if(!empty($this->settings->mediaUrl))
30+
{
31+
$data['Message'] = $this->settings->mediaUrl;
32+
}
33+
34+
$request = $client->post($this->getApiUrl('Messages'), array(), $data);
35+
36+
$request->send();
37+
}
38+
catch(\Exception $e)
39+
{
40+
$errorResponse = json_decode($e->getResponse()->getBody());
41+
42+
$response->addError($errorResponse->message());
43+
$response->setSuccess(false);
44+
}
45+
46+
return $response;
47+
}
48+
49+
public function getApiUrl($endpoint)
50+
{
51+
return $this->settings->getApiUrl($endpoint);
52+
}
53+
54+
public function getInputHtml(Array $data = array())
55+
{
56+
return $this->craft()->templates->render('postmaster/services/twilio/settings', $data);
57+
}
58+
59+
public function getSettingsModelClassName()
60+
{
61+
return '\Craft\Postmaster_TwilioServiceSettingsModel';
62+
}
63+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
namespace Craft;
3+
4+
class Postmaster_TwilioServiceSettingsModel extends Postmaster_ServiceSettingsModel
5+
{
6+
public function getApiUrl($endpoint)
7+
{
8+
return 'https://'.$this->accountSid.':'.$this->authToken.'@api.twilio.com/2010-04-01/Accounts/' . $this->accountSid . '/' . $endpoint . '.json';
9+
}
10+
11+
protected function defineAttributes()
12+
{
13+
return array(
14+
'accountSid' => array(AttributeType::String),
15+
'authToken' => array(AttributeType::String),
16+
'from' => array(AttributeType::String),
17+
'to' => array(AttributeType::String),
18+
'message' => array(AttributeType::String),
19+
'mediaUrl' => array(AttributeType::String)
20+
);
21+
}
22+
}

templates/_parcel.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
{ label: parcel.model.id ? 'Edit Parcel' : 'New Parcel', url: parcel.model.id ? url('postmaster/parcel/'~parcel.model.id) : url('postmaster/parcel/new') }
1212
] %}
1313

14+
{% includeJsResource "postmaster/js/postmaster.js" %}
15+
1416
{% set content %}
1517

1618
<form method="post" action="" accept-charset="UTF-8">
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{% import "_includes/forms" as forms %}
2+
3+
{{ forms.textField({
4+
label: "AccountSID"|t,
5+
instructions: "Your Twilio AccountSID"|t,
6+
id: 'twilio_account_sid',
7+
name: 'settings[serviceSettings][twilio][accountSid]',
8+
value: settings.accountSid
9+
}) }}
10+
11+
{{ forms.textField({
12+
label: "AuthToken"|t,
13+
instructions: "Your Twilio AuthToken"|t,
14+
id: 'twilio_authtoken',
15+
name: 'settings[serviceSettings][twilio][authToken]',
16+
value: settings.authToken
17+
}) }}
18+
19+
{{ forms.textField({
20+
label: "From Number"|t,
21+
instructions: "The number sending the SMS message"|t,
22+
id: 'twilio_from_number',
23+
name: 'settings[serviceSettings][twilio][from]',
24+
value: settings.from
25+
}) }}
26+
27+
{{ forms.textField({
28+
label: "To Number"|t,
29+
instructions: "The number receiving the SMS message"|t,
30+
id: 'twilio_to_number',
31+
name: 'settings[serviceSettings][twilio][to]',
32+
value: settings.to
33+
}) }}
34+
35+
{{ forms.textField({
36+
label: "Media URL"|t,
37+
instructions: "The URL of the media you wish to send out with the message. gif , png and jpeg content is currently supported and will be formatted correctly on the recipient's device."|t,
38+
id: 'twilio_media_url',
39+
name: 'settings[serviceSettings][twilio][mediaUrl]',
40+
value: settings.mediaUrl
41+
}) }}
42+
43+
{{ forms.textareaField({
44+
label: "Message"|t,
45+
instructions: "The message contents."|t,
46+
id: 'twilio_message',
47+
name: 'settings[serviceSettings][twilio][message]',
48+
value: settings.message,
49+
rows: 5
50+
}) }}

0 commit comments

Comments
 (0)