diff --git a/sms.routing.yml b/sms.routing.yml index 6e629d1..fed183a 100644 --- a/sms.routing.yml +++ b/sms.routing.yml @@ -98,7 +98,7 @@ sms.bootstrap_admin: _permission: 'administer smsframework' sms.delivery_report: - path: '/sms/deliveryreport/{gateway_id}' + path: '/sms/deliveryreport/{gateway}' defaults: _controller: '\Drupal\sms\DeliveryReportController::acknowledgeDelivery' requirements: diff --git a/src/DeliveryReportController.php b/src/DeliveryReportController.php index 9d089f1..8ccd7b1 100644 --- a/src/DeliveryReportController.php +++ b/src/DeliveryReportController.php @@ -66,17 +66,17 @@ class DeliveryReportController implements ContainerInjectionInterface { /** * Acknowledges delivery reports and passes them to the correct gateway. * - * @param string $gateway_id + * @param string $gateway * The ID of the SMS Gateway that is to handle the delivery report. * * @return \Symfony\Component\HttpFoundation\Response */ - public function acknowledgeDelivery($gateway_id) { + public function acknowledgeDelivery($gateway) { // The response that will be sent back to the server API. The gateway plugin // can alter this response as needed. $response = new Response(''); /** @var \Drupal\sms\Entity\SmsGateway $sms_gateway */ - $sms_gateway = SmsGateway::load($gateway_id); + $sms_gateway = SmsGateway::load($gateway); $reports = $sms_gateway ->getPlugin() ->parseDeliveryReports($this->requestStack->getCurrentRequest(), $response); diff --git a/src/Message/SmsDeliveryReport.php b/src/Message/SmsDeliveryReport.php index 669b050..49d6d13 100644 --- a/src/Message/SmsDeliveryReport.php +++ b/src/Message/SmsDeliveryReport.php @@ -6,7 +6,6 @@ */ namespace Drupal\sms\Message; -use Drupal\Component\Utility\Random; /** * A value object that holds the SMS delivery report. @@ -28,14 +27,14 @@ class SmsDeliveryReport implements SmsDeliveryReportInterface { * * @var string */ - protected $sendTime; + protected $timeSent; /** * The UNIX timestamp when the message was delivered. * * @var string */ - protected $deliveredTime; + protected $timeDelivered; /** * The recipient of the message. @@ -100,8 +99,8 @@ class SmsDeliveryReport implements SmsDeliveryReportInterface { 'gateway_status' => 'SENT', 'gateway_error_code' => '', 'gateway_error_message' => '', - 'send_time' => REQUEST_TIME, - 'delivered_time' => REQUEST_TIME, + 'time_sent' => REQUEST_TIME, + 'time_delivered' => REQUEST_TIME, ]; /** @@ -123,8 +122,8 @@ class SmsDeliveryReport implements SmsDeliveryReportInterface { $data += static::$defaults; $this->messageId = $data['message_id']; $this->recipient = $data['recipient']; - $this->deliveredTime = $data['delivered_time']; - $this->sendTime = $data['send_time']; + $this->timeDelivered = $data['time_delivered']; + $this->timeSent = $data['time_sent']; $this->status = $data['status']; $this->errorCode = $data['error_code']; $this->errorMessage = $data['error_message']; @@ -150,15 +149,15 @@ class SmsDeliveryReport implements SmsDeliveryReportInterface { /** * {@inheritdoc} */ - public function getDeliveredTime() { - return $this->deliveredTime; + public function getTimeDelivered() { + return $this->timeDelivered; } /** * {@inheritdoc} */ - public function getSendTime() { - return $this->sendTime; + public function getTimeSent() { + return $this->timeSent; } /** diff --git a/src/Message/SmsDeliveryReportInterface.php b/src/Message/SmsDeliveryReportInterface.php index 1c83c72..2323af7 100644 --- a/src/Message/SmsDeliveryReportInterface.php +++ b/src/Message/SmsDeliveryReportInterface.php @@ -151,7 +151,7 @@ interface SmsDeliveryReportInterface { * @return int * The UNIX timestamp when the message was sent. */ - public function getSendTime(); + public function getTimeSent(); /** * Gets the time the message was delivered. @@ -159,7 +159,7 @@ interface SmsDeliveryReportInterface { * @return int * The UNIX timestamp when the message was delivered. */ - public function getDeliveredTime(); + public function getTimeDelivered(); /** * Returns the delivery report as a keyed array. diff --git a/src/Plugin/SmsGatewayPluginBase.php b/src/Plugin/SmsGatewayPluginBase.php index 31a76c0..d534c78 100644 --- a/src/Plugin/SmsGatewayPluginBase.php +++ b/src/Plugin/SmsGatewayPluginBase.php @@ -132,8 +132,8 @@ abstract class SmsGatewayPluginBase extends PluginBase implements SmsGatewayPlug } public function getDeliveryReportPath($absolute = TRUE) { - if (isset($this->configuration['name'])) { - return Url::fromRoute('sms.delivery_report', ['gateway_id' => $this->configuration['name']], ['absolute' => $absolute])->toString(); + if (isset($this->configuration['gateway_name'])) { + return Url::fromRoute('sms.delivery_report', ['gateway' => $this->configuration['gateway_name']], ['absolute' => $absolute])->toString(); } else { return ''; diff --git a/src/Tests/SmsFrameworkWebTest.php b/src/Tests/SmsFrameworkWebTest.php index 3b4e0ff..a60aeac 100644 --- a/src/Tests/SmsFrameworkWebTest.php +++ b/src/Tests/SmsFrameworkWebTest.php @@ -132,43 +132,47 @@ class SmsFrameworkWebTest extends SmsFrameworkWebTestBase { */ public function testDeliveryReports() { $user = $this->drupalCreateUser(); - $this->drupalLogin($this->drupalCreateUser($user)); + $this->drupalLogin($user); $sms_message = $this->randomSmsMessage($user->id()); $result = $this->defaultSmsProvider->send($sms_message, ['gateway' => $this->testGateway->id()]); $this->assertTrue($result instanceof SmsMessageResultInterface); $this->assertEqual(count($sms_message->getRecipients()), count($result->getReports())); - $first_report = $result->getReports()[0]; + $reports = $result->getReports(); + $first_report = reset($reports); $this->assertTrue($first_report instanceof SmsDeliveryReportInterface); $this->assertEqual($first_report->getStatus(), SmsDeliveryReportInterface::STATUS_SENT); // Get the delivery reports url and simulate push delivery report. $url = $this->testGateway->getPlugin()->getDeliveryReportPath(); + $delivered_time = REQUEST_TIME; $delivery_report =<<getMessageId()}", - "recipient":"41793026731", - "sent_time":"2015-02-12T09:51:43.123+0100", - "delivered_time":"2015-02-12T09:51:43.127+0100", - "status": "DELIVERED", - "gateway_status": "DELIVERED" - "gateway_status_code": "200" + "recipient":"{$first_report->getRecipient()}", + "time_sent":{$first_report->getTimeSent()}, + "time_delivered": $delivered_time, + "status": "800", + "gateway_status": "THIS_HAS_BEEN_DELIVERED", + "gateway_status_code": "202", "gateway_status_description": "Delivered to Handset" - }, + } ] } EOF; - $this->drupalPost($url, 'application/json', ['content' => $delivery_report]); + $this->drupalPost($url, 'application/json', ['delivery_report' => $delivery_report]); $this->assertText('custom response content'); + \Drupal::state()->resetCache(); // Get the stored report and verify that it was properly parsed. $second_report = $this->getTestMessageReport($first_report->getMessageId()); $this->assertEqual($first_report->getMessageId(), $second_report->getMessageId()); - $this->assertEqual("DELIVERED", $second_report->getStatus()); - + $this->assertEqual("800", $second_report->getStatus()); + $this->assertEqual("THIS_HAS_BEEN_DELIVERED", $second_report->getGatewayStatus()); + $this->assertEqual($delivered_time, $second_report->getTimeDelivered()); } /** diff --git a/tests/modules/sms_test_gateway/src/Plugin/SmsGateway/Memory.php b/tests/modules/sms_test_gateway/src/Plugin/SmsGateway/Memory.php index 86b12f2..ccdaf36 100644 --- a/tests/modules/sms_test_gateway/src/Plugin/SmsGateway/Memory.php +++ b/tests/modules/sms_test_gateway/src/Plugin/SmsGateway/Memory.php @@ -84,30 +84,27 @@ class Memory extends SmsGatewayPluginBase { * {@inheritdoc} */ public function parseDeliveryReports(Request $request, Response $response) { - $body = $request->getContent(); - $response = Json::decode($body); + $data = Json::decode($request->request->get('delivery_report')); $latest_reports = []; - foreach ($response['results'] as $result) { - $latest_reports[$result['message_id']] = new SmsDeliveryReport([ - 'recipient' => $result['recipient'], - 'message_id' => $result['message_id'], - 'send_time' => $result['send_time'], - 'delivered_time' => $result['delivered_time'], - 'status' => $result['status'], + foreach ($data['reports'] as $report) { + $latest_reports[$report['message_id']] = new SmsDeliveryReport([ + 'recipient' => $report['recipient'], + 'message_id' => $report['message_id'], + 'time_sent' => $report['time_sent'], + 'time_delivered' => $report['time_delivered'], + 'status' => $report['status'], 'gateway' => $this->configuration['gateway_name'], - 'gateway_status' => $result['gateway_status'], - 'gateway_status_code' => $result['gateway_status_code'], - 'gateway_status_description' => $result['gateway_status_description'], + 'gateway_status' => $report['gateway_status'], + 'gateway_status_code' => $report['gateway_status_code'], + 'gateway_status_description' => $report['gateway_status_description'], ]); } - // Update the latest reports in \Drupal::state(). + // Update the latest delivery reports in \Drupal::state(). $reports = \Drupal::state()->get('sms_test_gateway.memory.report', []); - // Update the delivery reports. $reports = $latest_reports + $reports; \Drupal::state()->set('sms_test_gateway.memory.report', $reports); - // Set the response. $response->setContent('custom response content'); return $latest_reports; @@ -130,8 +127,8 @@ class Memory extends SmsGatewayPluginBase { $reports[$message_id] = new SmsDeliveryReport([ 'recipient' => $number, 'message_id' => $message_id, - 'send_time' => time(), - 'delivered_time' => time() + rand(0, 10), + 'time_sent' => time(), + 'time_delivered' => time() + rand(0, 10), 'status' => SmsDeliveryReportInterface::STATUS_SENT, 'gateway' => $this->configuration['gateway_name'], 'gateway_status' => 'SENT',