diff options
author | nornholdj <nornholdj@gmail.com> | 2014-11-14 16:27:25 -0500 |
---|---|---|
committer | nornholdj <nornholdj@gmail.com> | 2014-11-14 16:27:25 -0500 |
commit | 345d96c00617acb585e8093a90b16ccb0c2d1856 (patch) | |
tree | 6934c8cf3d9c91852a76e57314246e17c81b4f80 /lib | |
parent | a91660135323f01376bb860a5ad9abaedebf9f4f (diff) | |
parent | 2ca3b8764d9e7ad8c7436e53b6676e9eb6591f28 (diff) | |
download | php-sparkpost-345d96c00617acb585e8093a90b16ccb0c2d1856.zip php-sparkpost-345d96c00617acb585e8093a90b16ccb0c2d1856.tar.gz php-sparkpost-345d96c00617acb585e8093a90b16ccb0c2d1856.tar.bz2 |
Merge branch 'release/0.1.1'
Diffstat (limited to 'lib')
-rw-r--r-- | lib/SendGridCompatibility/Email.php | 199 | ||||
-rw-r--r-- | lib/SendGridCompatibility/SendGrid.php | 22 | ||||
-rw-r--r-- | lib/SparkPost/SparkPost.php | 11 | ||||
-rw-r--r-- | lib/SparkPost/Transmission.php | 69 |
4 files changed, 268 insertions, 33 deletions
diff --git a/lib/SendGridCompatibility/Email.php b/lib/SendGridCompatibility/Email.php new file mode 100644 index 0000000..5351324 --- /dev/null +++ b/lib/SendGridCompatibility/Email.php @@ -0,0 +1,199 @@ +<?php +namespace SparkPost\SendGridCompatibility; + +class Email { + public $model; + + + /** + * @desc Sets up the model for saving the configuration + */ + public function __construct() { + $this->model = array(); + } + + /** + * @desc adds addresses as recipients + * @param string $address + * @param string $name optional + * @return \SparkPost\SendGridCompatibility\Email + */ + public function addTo($address, $name = null) { + if (!isset($this->model['recipients'])) { + $this->model['recipients'] = array(); + } + + if(isset($name)) { + $address = array('address'=>array('email'=>$address, 'name'=>$name)); + } else { + $address = array('address'=>array('email'=>$address)); + } + + array_push($this->model['recipients'], $address); + return $this; + } + + /** + * @desc explicitly sets a list of addresses + * @param array $addresses + * @return \SparkPost\SendGridCompatibility\Email + */ + public function setTos(array $addresses) { + $this->model['recipients'] = $addresses; + return $this; + } + + /** + * @desc sets the from address + * @param string $address + * @return \MessageSystems\SendGridCompatibility\Email + */ + public function setFrom($address) { + $this->model['from'] = array('email' => $address); + return $this; + } + + /** + * @desc sets the name for the from address + * @param string $name + */ + public function setFromName($name) { + if(!isset($this->model['from'])){ + throw new \Exception('Must set "From" prior to setting "From Name".'); + } + $this->model['from']['name'] = $name; + return $this; + } + + /** + * @desc sets the reply to field + * @param string $address + * @return \MessageSystems\SendGridCompatibility\Email + */ + public function setReplyTo ($address) { + $this->model['replyTo'] = $address; + return $this; + } + + /** + * @desc throws an error because bcc fields are not yet implemented. + * @throws \Exception + * @param string $address + * @return \MessageSystems\SendGridCompatibility\Email + */ + public function addBcc($address) { + throw new \Exception('Adding bcc recipients is not yet supported, try adding them as a "to" address'); + } + + /** + * @desc sets the subject header + * @param string $subject + * @return \SparkPost\SendGridCompatibility\Email + */ + public function setSubject($subject) { + $this->model['subject'] = $subject; + return $this; + } + + /** + * @desc sets the text body + * @param string $text + * @return \SparkPost\SendGridCompatibility\Email + */ + public function setText($text) { + $this->model['text'] = $text; + return $this; + } + + /** + * @desc sets the html body + * @param string $html + * @return \SparkPost\SendGridCompatibility\Email + */ + public function setHtml($html) { + $this->model['html'] = $html; + return $this; + } + + /** + * @desc Throws an exception since adding categories is not yet supported + * @throws \Exception + * @param string $category + * @throws \Exception + */ + public function addCategory($category) { + throw new \Exception('Adding categories is not yet supported'); + } + + /** + * @desc Throws an exception since adding attachments is not yet supported + * @throws Exception + * @param mixed $attachment + */ + public function addAttachment($attachment) { + throw new \Exception('Adding attachments is not yet supported'); + } + + /** + * @desc Adds transmission level substitution data + * @param string $name + * @param mixed $values + * @return \SparkPost\SendGridCompatibility\Email + */ + public function addSubstitution($name, $values) { + if (!isset($this->model['substitutionData'])) { + $this->model['substitutionData'] = array(); + } + $this->model['substitutionData'][$name] = $values; + + return $this; + } + + /** + * @desc Adds transmission level substitution data + * @param string $name + * @param mixed $values + */ + public function addSection($name, $values) { + $this->addSubstitution($name, $values); + } + + /** + * @desc Throws an exception because arguments for third party systems is not supported + * @throws Exception + * @param mixed $value + */ + public function addUniqueArg($key, $value) { + throw new \Exception('Adding Unique Arguments is not yet supported'); + } + + /** + * @desc Throws an exception because arguments for third party systems is not supported + * @throws Exception + * @param mixed $values + */ + public function setUniqueArgs(array $values) { + throw new \Exception('Setting Unique Arguments is not yet supported'); + } + + /** + * @desc Adds custom headers to the email header + * @param string $name + * @param string $value + */ + public function addHeader($name, $value) { + if (!isset($this->model['customHeaders'])) { + $this->model['customHeaders'] = array(); + } + $this->model['customHeaders'][$name] = $value; + } + + /** + * @desc converts this object to a configuration for a SparkPost transmission + * @return array + */ + public function toSparkPostTransmission() { + return $this->model; + } +} +?>
\ No newline at end of file diff --git a/lib/SendGridCompatibility/SendGrid.php b/lib/SendGridCompatibility/SendGrid.php new file mode 100644 index 0000000..a85337a --- /dev/null +++ b/lib/SendGridCompatibility/SendGrid.php @@ -0,0 +1,22 @@ +<?php +namespace SparkPost\SendGridCompatibility; + +use SparkPost\Transmission; +use SparkPost\SendGridCompatibility\Email; +use SparkPost\Configuration; + +class SendGrid{ + public function __construct($username, $password, $options = null) { + //username isn't used in our system + $opts = array('key'=>$password); + if (!is_null($options)) { + $opts = array_merge($opts, $options); + } + Configuration::setConfig($opts); + } + + public function send(Email $email) { + Trasmission::send($email->toSparkPostTransmission()); + } +} +?>
\ No newline at end of file diff --git a/lib/SparkPost/SparkPost.php b/lib/SparkPost/SparkPost.php index 14af3cd..5c2a554 100644 --- a/lib/SparkPost/SparkPost.php +++ b/lib/SparkPost/SparkPost.php @@ -4,14 +4,14 @@ namespace SparkPost; class SparkPost { private static $config; - private static $defaults = [ + private static $defaults = array( 'host'=>'api.sparkpost.com', 'protocol'=>'https', 'port'=>443, 'strictSSL'=>true, 'key'=>'', 'version'=>'v1' - ]; + ); /** * Enforce that this object can't be instansiated @@ -25,7 +25,12 @@ class SparkPost { */ public static function setConfig(array $configMap) { //check for API key because its required - if (!isset($configMap['key']) || empty(trim($configMap['key']))){ + if (isset($configMap['key'])){ + $key = trim($configMap['key']); + if(empty($key)){ + throw new \Exception('You must provide an API key'); + } + } else { throw new \Exception('You must provide an API key'); } self::$config = self::$defaults; diff --git a/lib/SparkPost/Transmission.php b/lib/SparkPost/Transmission.php index 185f64b..c083825 100644 --- a/lib/SparkPost/Transmission.php +++ b/lib/SparkPost/Transmission.php @@ -1,7 +1,7 @@ <?php namespace SparkPost; -use GuzzleHttp\Client; -use GuzzleHttp\Exception\RequestException; +use Guzzle\Http\Client; +use Guzzle\Http\Exception\ClientErrorResponseException; /** * @desc SDK interface for managing transmissions @@ -17,7 +17,7 @@ class Transmission { * @desc Mapping for values passed into the send method to the values needed for the Transmission API * @var array */ - private static $parameterMappings = [ + private static $parameterMappings = array( 'campaign'=>'campaign_id', 'metadata'=>'metadata', 'substitutionData'=>'substitution_data', @@ -28,7 +28,7 @@ class Transmission { 'from'=>'content.from', 'html'=>'content.html', 'text'=>'content.text', - 'rfc822Part'=>'content.email_rfc822', + 'rfc822'=>'content.email_rfc822', 'customHeaders'=>'content.headers', 'recipients'=>'recipients', 'recipientList'=>'recipients.list_id', @@ -36,25 +36,25 @@ class Transmission { 'trackOpens'=>'options.open_tracking', 'trackClicks'=>'options.click_tracking', 'useDraftTemplate'=>'use_draft_template' - ]; + ); /** * @desc Sets up default structure and default values for the model that is acceptable by the API * @var array */ - private static $structure = [ + private static $structure = array( 'return_path'=>"default@sparkpostmail.com", - 'content'=>[ + 'content'=>array( 'html'=>null, 'text'=>null, 'email_rfc822'=>null - ], - 'options'=>[ + ), + 'options'=>array( 'open_tracking'=>true, 'click_tracking'=>true - ], + ), 'use_draft_template'=>false - ]; + ); /** * @desc Ensure that this class cannot be instansiated @@ -113,7 +113,7 @@ class Transmission { * 'from': string, * 'html': string, * 'text': string, - * 'rfc822Part': string, + * 'rfc822': string, * 'customHeaders': array, * 'recipients': array, * 'recipientList': string, @@ -136,19 +136,23 @@ class Transmission { //send the request try { - $response = $request->post(self::getBaseUrl($hostConfig), [ - 'json'=>$model, - "headers"=>['authorization' => $hostConfig['key']], - "verify"=>$hostConfig['strictSSL'] - ]); + $response = $request->post(self::getBaseUrl($hostConfig), array('authorization' => $hostConfig['key']), json_encode($model), array("verify"=>$hostConfig['strictSSL']))->send(); return $response->json(); - } catch (RequestException $exception) { + } + /* + * Handles 4XX responses + */ + catch (ClientErrorResponseException $exception) { $response = $exception->getResponse(); - throw new \Exception(json_encode($response->json()['errors'])); - } catch (\Exception $exception) { + $responseArray = $response->json(); + throw new \Exception(json_encode($responseArray['errors'])); + } + /* + * Handles 5XX Errors, Configuration Errors, and a catch all for other errors + */ + catch (\Exception $exception) { throw new \Exception('Unable to contact Transmissions API: '. $exception->getMessage()); } - } /** @@ -174,19 +178,24 @@ class Transmission { //make request try { - $response = $request->get($url, [ - "headers"=>['authorization' => $hostConfig['key']], - "verify"=>$hostConfig['strictSSL'] - ]); + $response = $request->get($url, array('authorization' => $hostConfig['key']), array("verify"=>$hostConfig['strictSSL']))->send(); return $response->json(); - } catch (RequestException $exception) { + } + /* + * Handles 4XX responses + */ + catch (ClientErrorResponseException $exception) { $response = $exception->getResponse(); - if($response->getStatusCode() === '404') { + $statusCode = $response->getStatusCode(); + if($statusCode === 404) { throw new \Exception("The specified Transmission ID does not exist", 404); - } else { - throw new \Exception("Received bad response from Transmission API: ". $response->getStatusCode()); } - } catch (\Exception $exception) { + throw new \Exception("Received bad response from Transmission API: ". $statusCode); + } + /* + * Handles 5XX Errors, Configuration Errors, and a catch all for other errors + */ + catch (\Exception $exception) { throw new \Exception('Unable to contact Transmissions API: '. $exception->getMessage()); } } |