From 0bd40490dd9142a299a744267c10bc70ce88bd8e Mon Sep 17 00:00:00 2001 From: Travis Swientek Date: Fri, 2 Aug 2013 10:48:57 -0700 Subject: [PATCH] Addition of campaigns, logs, lists, and routes --- src/Mailgun/Campaigns/Campaigns.php | 93 +++++++++++++++++++ .../Campaigns/Exceptions/InvalidParameter.php | 6 ++ src/Mailgun/Lists/Lists.php | 26 ++++++ src/Mailgun/Logs/Logs.php | 4 +- src/Mailgun/MailgunClient.php | 17 +++- .../Routes/Exceptions/InvalidParameter.php | 6 ++ src/Mailgun/Routes/Routes.php | 86 +++++++++++++++++ .../Mailgun/Tests/Campaigns/CampaignsTest.php | 78 ++++++++++++++++ tests/Mailgun/Tests/Routes/RoutesTest.php | 46 +++++++++ 9 files changed, 360 insertions(+), 2 deletions(-) create mode 100644 src/Mailgun/Campaigns/Campaigns.php create mode 100644 src/Mailgun/Campaigns/Exceptions/InvalidParameter.php create mode 100644 src/Mailgun/Lists/Lists.php create mode 100644 src/Mailgun/Routes/Exceptions/InvalidParameter.php create mode 100644 src/Mailgun/Routes/Routes.php create mode 100644 tests/Mailgun/Tests/Campaigns/CampaignsTest.php create mode 100644 tests/Mailgun/Tests/Routes/RoutesTest.php diff --git a/src/Mailgun/Campaigns/Campaigns.php b/src/Mailgun/Campaigns/Campaigns.php new file mode 100644 index 0000000..ab36994 --- /dev/null +++ b/src/Mailgun/Campaigns/Campaigns.php @@ -0,0 +1,93 @@ +httpBroker = $httpBroker; + $this->endpointUrl = $this->httpBroker->returnWorkingDomain() . "/campaigns"; + } + + public function getCampaigns($limit, $skip){ + $response = $this->httpBroker->getRequest($this->endpointUrl, array($limit, $skip)); + return $response; + } + + public function getCampaign($campaignId){ + $updatedUrl = $this->endpointUrl . "/" . $campaignId; + $response = $this->httpBroker->getRequest($updatedUrl); + return $response; + } + + public function addCampaign($name, $id){ + if(isset($id) && strlen($id) > 64){ + throw new InvalidParameter("The message ID is too long. Limit is 64 characters."); + } + $postData = array('name' => $name, 'id' => $id); + $response = $this->httpBroker->postRequest($this->endpointUrl, $postData); + return $response; + } + + public function updateCampaign($campaignId, $name, $id){ + if(isset($id) && strlen($id) > 64){ + throw new InvalidParameter("The message ID is too long. Limit is 64 characters."); + } + $updatedUrl = $this->endpointUrl . "/" . $campaignId; + $postData = array('name' => $name, 'id' => $id); + $response = $this->httpBroker->putRequest($updatedUrl, $postData); + return $response; + } + + public function deleteCampaign($campaignId){ + $updatedUrl = $this->endpointUrl . "/" . $campaignId; + $response = $this->httpBroker->deleteCampaign($updatedUrl); + return $response; + } + + public function getCampaignEvents($campaignId, $filterParams = array()){ + $updatedUrl = $this->endpointUrl . "/" . $campaignId . "/events"; + $response = $this->httpBroker->getRequest($updatedUrl, $filterParams); + return $response; + } + + public function getCampaignStats($campaignId, $filterParams = array()){ + $updatedUrl = $this->endpointUrl . "/" . $campaignId . "/stats"; + $response = $this->httpBroker->getRequest($updatedUrl, $filterParams); + return $response; + } + + public function getCampaignClicks($campaignId, $filterParams = array()){ + $updatedUrl = $this->endpointUrl . "/" . $campaignId . "/clicks"; + $response = $this->httpBroker->getRequest($updatedUrl, $filterParams); + return $response; + } + + public function getCampaignOpens($campaignId, $filterParams = array()){ + $updatedUrl = $this->endpointUrl . "/" . $campaignId . "/opens"; + $response = $this->httpBroker->getRequest($updatedUrl, $filterParams); + return $response; + } + + public function getCampaignUnsubscribes($campaignId, $filterParams = array()){ + $updatedUrl = $this->endpointUrl . "/" . $campaignId . "/unsubscribes"; + $response = $this->httpBroker->getRequest($updatedUrl, $filterParams); + return $response; + } + + public function getCampaignComplaints($campaignId, $filterParams = array()){ + $updatedUrl = $this->endpointUrl . "/" . $campaignId . "/clicks"; + $response = $this->httpBroker->getRequest($updatedUrl, $filterParams); + return $response; + } +} + +?> \ No newline at end of file diff --git a/src/Mailgun/Campaigns/Exceptions/InvalidParameter.php b/src/Mailgun/Campaigns/Exceptions/InvalidParameter.php new file mode 100644 index 0000000..7df21a1 --- /dev/null +++ b/src/Mailgun/Campaigns/Exceptions/InvalidParameter.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/src/Mailgun/Lists/Lists.php b/src/Mailgun/Lists/Lists.php new file mode 100644 index 0000000..066782c --- /dev/null +++ b/src/Mailgun/Lists/Lists.php @@ -0,0 +1,26 @@ +httpBroker = $httpBroker; + $this->endpointUrl = $this->httpBroker->returnWorkingDomain() . "/lists"; + } + + public function getLists($limit, $skip){ + $response = $this->httpBroker->getRequest($this->endpointUrl, array($limit, $skip)); + return $response; + } +} + +?> \ No newline at end of file diff --git a/src/Mailgun/Logs/Logs.php b/src/Mailgun/Logs/Logs.php index 0e2b9a5..7d21e50 100644 --- a/src/Mailgun/Logs/Logs.php +++ b/src/Mailgun/Logs/Logs.php @@ -21,4 +21,6 @@ class Logs{ $response = $this->httpBroker->getRequest($this->endpointUrl, array($limit, $skip)); return $response; } -} \ No newline at end of file +} + +?> \ No newline at end of file diff --git a/src/Mailgun/MailgunClient.php b/src/Mailgun/MailgunClient.php index cb3a82d..87cea27 100644 --- a/src/Mailgun/MailgunClient.php +++ b/src/Mailgun/MailgunClient.php @@ -4,8 +4,11 @@ namespace Mailgun; use Mailgun\Logs\Logs; use Mailgun\Stats\Stats; +use Mailgun\Lists\Lists; +use Mailgun\Routes\Routes; use Mailgun\Bounces\Bounces; use Mailgun\Messages\Messages; +use Mailgun\Campaigns\Campaigns; use Mailgun\Complaints\Complaints; use Mailgun\Connection\HttpBroker; use Mailgun\Unsubscribes\Unsubscribes; @@ -48,7 +51,19 @@ class MailgunClient{ public function Logs(){ return new Logs($this->httpBroker); - } + } + + public function Routes(){ + return new Routes($this->httpBroker); + } + + public function Campaigns(){ + return new Campaigns($this->httpBroker); + } + + public function Lists(){ + return new Lists($this->httpBroker); + } } ?> \ No newline at end of file diff --git a/src/Mailgun/Routes/Exceptions/InvalidParameter.php b/src/Mailgun/Routes/Exceptions/InvalidParameter.php new file mode 100644 index 0000000..76bb9a7 --- /dev/null +++ b/src/Mailgun/Routes/Exceptions/InvalidParameter.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/src/Mailgun/Routes/Routes.php b/src/Mailgun/Routes/Routes.php new file mode 100644 index 0000000..c964ff0 --- /dev/null +++ b/src/Mailgun/Routes/Routes.php @@ -0,0 +1,86 @@ +httpBroker = $httpBroker; + $this->endpointUrl = $this->httpBroker->returnWorkingDomain() . "/routes"; + } + + public function getRoutes($limit, $skip){ + $response = $this->httpBroker->getRequest($this->endpointUrl, array($limit, $skip)); + return $response; + } + + public function getRoute($routeId){ + $updatedUrl = $this->endpointUrl . "/" . $routeId; + $response = $this->httpBroker->getRequest($updatedUrl); + return $response; + } + + public function addRoute($priority, $description, $expression, $action){ + + if(!is_int($priority) || $priority < 0){ + throw new InvalidParameter("The priority is not a positive integer."); + } + + if(!isset($description)){ + throw new InvalidParameter("The description seems to be missing."); + } + + if(!isset($expression)){ + throw new InvalidParameter("The expression seems to be missing."); + } + if(!isset($action)){ + throw new InvalidParameter("The action seems to be missing."); + } + + $postData = array('priority' => $priority, 'description' => $description, 'expression' => $expression, 'action' => $action); + + $response = $this->httpBroker->postRequest($this->endpointUrl, $postData); + return $response; + } + + public function updateRoute($routeId, $priority, $description, $expression, $action){ + if(!is_int($priority) || $priority < 0){ + throw new InvalidParameter("The priority is not a positive integer."); + } + + if(!isset($description)){ + throw new InvalidParameter("The description seems to be missing."); + } + + if(!isset($expression)){ + throw new InvalidParameter("The expression seems to be missing."); + } + if(!isset($action)){ + throw new InvalidParameter("The action seems to be missing."); + } + + $postData = array('priority' => $priority, 'description' => $description, 'expression' => $expression, 'action' => $action); + + $updatedUrl = $this->endpointUrl . "/" . $routeId; + + $response = $this->httpBroker->putRequest($updatedUrl, $postData); + return $response; + } + + public function deleteRoute($routeId){ + $updatedUrl = $this->endpointUrl . "/" . $routeId; + $response = $this->httpBroker->deleteRequest($updatedUrl); + return $response; + } +} + +?> \ No newline at end of file diff --git a/tests/Mailgun/Tests/Campaigns/CampaignsTest.php b/tests/Mailgun/Tests/Campaigns/CampaignsTest.php new file mode 100644 index 0000000..7e65a2a --- /dev/null +++ b/tests/Mailgun/Tests/Campaigns/CampaignsTest.php @@ -0,0 +1,78 @@ +client = new MailgunClientTest("My-Super-Awesome-API-Key", "samples.mailgun.org", false); + + } + + public function testGetCampaigns(){ + $client = $this->client->Campaigns(); + $response = $client->getCampaigns("1", "30"); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + + public function testGetCampaign(){ + $client = $this->client->Campaigns(); + $response = $client->getCampaign(12345); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + + public function testAddCampaign(){ + $client = $this->client->Campaigns(); + $response = $client->addCampaign("MyCampaign", "TheID"); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + + public function testUpdateCampaign(){ + $client = $this->client->Campaigns(); + $response = $client->updateCampaign(12345, "MyCampaign", "TheID"); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + + public function testDeleteCampaign(){ + $client = $this->client->Campaigns(); + $response = $client->deleteCampaign(12345); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + + public function testGetCampaignEvents(12345, array()){ + $client = $this->client->Campaigns(); + $response = $client->getCampaignEvents(12345); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + + public function testGetCampaignStats(12345, array()){ + $client = $this->client->Campaigns(); + $response = $client->getCampaignStats(12345); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + + public function testGetCampaignStats(12345, array()){ + $client = $this->client->Campaigns(); + $response = $client->getCampaignClicks(12345); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + + public function testGetCampaignStats(12345, array()){ + $client = $this->client->Campaigns(); + $response = $client->getCampaignOpens(12345); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } +} \ No newline at end of file diff --git a/tests/Mailgun/Tests/Routes/RoutesTest.php b/tests/Mailgun/Tests/Routes/RoutesTest.php new file mode 100644 index 0000000..ecc9d0d --- /dev/null +++ b/tests/Mailgun/Tests/Routes/RoutesTest.php @@ -0,0 +1,46 @@ +client = new MailgunClientTest("My-Super-Awesome-API-Key", "samples.mailgun.org", false); + + } + public function testAddRoute(){ + $client = $this->client->Routes(); + $response = $client->addRoute(10, "This is the description", "match_recipient('.*@gmail.com')", "forward('alex@mailgun.net')"); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + public function testDeleteRoute(){ + $client = $this->client->Routes(); + $response = $client->deleteRoute(12345); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + public function testGetRoute(){ + $client = $this->client->Routes(); + $response = $client->getRoute(12345); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + public function testGetRoutes(){ + $client = $this->client->Routes(); + $response = $client->getRoutes("5", "10"); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + public function testUpdateRoute(){ + $client = $this->client->Routes(); + $response = $client->updateRoute(12345, 10, "This is the description", "match_recipient('.*@gmail.com')", "forward('alex@mailgun.net')"); + $httpCode = $response->http_response_code; + $this->assertEquals(200, $httpCode); + } + +} \ No newline at end of file