Add Notifier SentMessage
This commit is contained in:
parent
1b41bdee86
commit
5a6f0537ec
@ -16,6 +16,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
|||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
@ -50,7 +51,7 @@ final class FirebaseTransport extends AbstractTransport
|
|||||||
return $message instanceof ChatMessage;
|
return $message instanceof ChatMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof ChatMessage) {
|
if (!$message instanceof ChatMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||||
@ -84,5 +85,12 @@ final class FirebaseTransport extends AbstractTransport
|
|||||||
if ($jsonContents && isset($jsonContents['results']['error'])) {
|
if ($jsonContents && isset($jsonContents['results']['error'])) {
|
||||||
throw new TransportException(sprintf('Unable to post the Firebase message: %s.', $jsonContents['error']), $response);
|
throw new TransportException(sprintf('Unable to post the Firebase message: %s.', $jsonContents['error']), $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$success = $response->toArray(false);
|
||||||
|
|
||||||
|
$message = new SentMessage($message, (string) $this);
|
||||||
|
$message->setMessageId($success['results'][0]['message_id']);
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.0"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Firebase\\": "" },
|
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Firebase\\": "" },
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\FreeMobile;
|
|||||||
use Symfony\Component\Notifier\Exception\LogicException;
|
use Symfony\Component\Notifier\Exception\LogicException;
|
||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
@ -51,7 +52,7 @@ final class FreeMobileTransport extends AbstractTransport
|
|||||||
return $message instanceof SmsMessage && $this->phone === $message->getPhone();
|
return $message instanceof SmsMessage && $this->phone === $message->getPhone();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$this->supports($message)) {
|
if (!$this->supports($message)) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given) and configured with your phone number.', __CLASS__, SmsMessage::class, \get_class($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given) and configured with your phone number.', __CLASS__, SmsMessage::class, \get_class($message)));
|
||||||
@ -75,5 +76,7 @@ final class FreeMobileTransport extends AbstractTransport
|
|||||||
|
|
||||||
throw new TransportException(sprintf('Unable to send the SMS: error %d: ', $response->getStatusCode()).($errors[$response->getStatusCode()] ?? ''), $response);
|
throw new TransportException(sprintf('Unable to send the SMS: error %d: ', $response->getStatusCode()).($errors[$response->getStatusCode()] ?? ''), $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new SentMessage($message, (string) $this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.1",
|
"symfony/http-client": "^4.3|^5.1",
|
||||||
"symfony/notifier": "^5.1"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\FreeMobile\\": "" },
|
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\FreeMobile\\": "" },
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
|||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
@ -50,7 +51,7 @@ final class MattermostTransport extends AbstractTransport
|
|||||||
/**
|
/**
|
||||||
* @see https://api.mattermost.com
|
* @see https://api.mattermost.com
|
||||||
*/
|
*/
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof ChatMessage) {
|
if (!$message instanceof ChatMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||||
@ -74,5 +75,12 @@ final class MattermostTransport extends AbstractTransport
|
|||||||
|
|
||||||
throw new TransportException(sprintf('Unable to post the Mattermost message: %s (%s).', $result['message'], $result['id']), $response);
|
throw new TransportException(sprintf('Unable to post the Mattermost message: %s (%s).', $result['message'], $result['id']), $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$success = $response->toArray(false);
|
||||||
|
|
||||||
|
$message = new SentMessage($message, (string) $this);
|
||||||
|
$message->setMessageId($success['id']);
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.0"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Mattermost\\": "" },
|
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Mattermost\\": "" },
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\Nexmo;
|
|||||||
use Symfony\Component\Notifier\Exception\LogicException;
|
use Symfony\Component\Notifier\Exception\LogicException;
|
||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
@ -51,7 +52,7 @@ final class NexmoTransport extends AbstractTransport
|
|||||||
return $message instanceof SmsMessage;
|
return $message instanceof SmsMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof SmsMessage) {
|
if (!$message instanceof SmsMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
||||||
@ -73,5 +74,12 @@ final class NexmoTransport extends AbstractTransport
|
|||||||
throw new TransportException('Unable to send the SMS: '.$msg['error-text'].sprintf(' (code %s).', $msg['status']), $response);
|
throw new TransportException('Unable to send the SMS: '.$msg['error-text'].sprintf(' (code %s).', $msg['status']), $response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$success = $response->toArray(false);
|
||||||
|
|
||||||
|
$message = new SentMessage($message, (string) $this);
|
||||||
|
$message->setMessageId($success['messages'][0]['message-id']);
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.0"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Nexmo\\": "" },
|
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Nexmo\\": "" },
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\OvhCloud;
|
|||||||
use Symfony\Component\Notifier\Exception\LogicException;
|
use Symfony\Component\Notifier\Exception\LogicException;
|
||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
@ -53,7 +54,7 @@ final class OvhCloudTransport extends AbstractTransport
|
|||||||
return $message instanceof SmsMessage;
|
return $message instanceof SmsMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof SmsMessage) {
|
if (!$message instanceof SmsMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
||||||
@ -90,6 +91,13 @@ final class OvhCloudTransport extends AbstractTransport
|
|||||||
|
|
||||||
throw new TransportException(sprintf('Unable to send the SMS: %s.', $error['message']), $response);
|
throw new TransportException(sprintf('Unable to send the SMS: %s.', $error['message']), $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$success = $response->toArray(false);
|
||||||
|
|
||||||
|
$message = new SentMessage($message, (string) $this);
|
||||||
|
$message->setMessageId($success['ids'][0]);
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.0"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\OvhCloud\\": "" },
|
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\OvhCloud\\": "" },
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
|||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
@ -55,7 +56,7 @@ final class RocketChatTransport extends AbstractTransport
|
|||||||
/**
|
/**
|
||||||
* @see https://rocket.chat/docs/administrator-guides/integrations/
|
* @see https://rocket.chat/docs/administrator-guides/integrations/
|
||||||
*/
|
*/
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof ChatMessage) {
|
if (!$message instanceof ChatMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||||
@ -86,5 +87,12 @@ final class RocketChatTransport extends AbstractTransport
|
|||||||
if (!$result['success']) {
|
if (!$result['success']) {
|
||||||
throw new TransportException(sprintf('Unable to post the RocketChat message: %s.', $result['error']), $response);
|
throw new TransportException(sprintf('Unable to post the RocketChat message: %s.', $result['error']), $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$success = $response->toArray(false);
|
||||||
|
|
||||||
|
$message = new SentMessage($message, (string) $this);
|
||||||
|
$message->setMessageId($success['message']['_id']);
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.0"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\RocketChat\\": "" },
|
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\RocketChat\\": "" },
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\Sinch;
|
|||||||
use Symfony\Component\Notifier\Exception\LogicException;
|
use Symfony\Component\Notifier\Exception\LogicException;
|
||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
@ -51,7 +52,7 @@ final class SinchTransport extends AbstractTransport
|
|||||||
return $message instanceof SmsMessage;
|
return $message instanceof SmsMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof SmsMessage) {
|
if (!$message instanceof SmsMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
||||||
@ -72,5 +73,12 @@ final class SinchTransport extends AbstractTransport
|
|||||||
|
|
||||||
throw new TransportException(sprintf('Unable to send the SMS: %s (%s).', $error['text'], $error['code']), $response);
|
throw new TransportException(sprintf('Unable to send the SMS: %s (%s).', $error['text'], $error['code']), $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$success = $response->toArray(false);
|
||||||
|
|
||||||
|
$message = new SentMessage($message, (string) $this);
|
||||||
|
$message->setMessageId($success['id']);
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.0"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Sinch\\": "" },
|
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Sinch\\": "" },
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
|||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
@ -58,7 +59,7 @@ final class SlackTransport extends AbstractTransport
|
|||||||
return $message instanceof ChatMessage && (null === $message->getOptions() || $message->getOptions() instanceof SlackOptions);
|
return $message instanceof ChatMessage && (null === $message->getOptions() || $message->getOptions() instanceof SlackOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof ChatMessage) {
|
if (!$message instanceof ChatMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||||
@ -86,5 +87,7 @@ final class SlackTransport extends AbstractTransport
|
|||||||
if ('ok' !== $result) {
|
if ('ok' !== $result) {
|
||||||
throw new TransportException('Unable to post the Slack message: '.$result, $response);
|
throw new TransportException('Unable to post the Slack message: '.$result, $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new SentMessage($message, (string) $this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.1"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/event-dispatcher": "^4.3|^5.0"
|
"symfony/event-dispatcher": "^4.3|^5.0"
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
|||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
@ -60,7 +61,7 @@ final class TelegramTransport extends AbstractTransport
|
|||||||
/**
|
/**
|
||||||
* @see https://core.telegram.org/bots/api
|
* @see https://core.telegram.org/bots/api
|
||||||
*/
|
*/
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof ChatMessage) {
|
if (!$message instanceof ChatMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, ChatMessage::class, get_debug_type($message)));
|
||||||
@ -82,5 +83,12 @@ final class TelegramTransport extends AbstractTransport
|
|||||||
|
|
||||||
throw new TransportException('Unable to post the Telegram message: '.$result['description'].sprintf(' (code %s).', $result['error_code']), $response);
|
throw new TransportException('Unable to post the Telegram message: '.$result['description'].sprintf(' (code %s).', $result['error_code']), $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$success = $response->toArray(false);
|
||||||
|
|
||||||
|
$message = new SentMessage($message, (string) $this);
|
||||||
|
$message->setMessageId($success['result']['message_id']);
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,9 +80,34 @@ final class TelegramTransportTest extends TestCase
|
|||||||
$response->expects($this->exactly(2))
|
$response->expects($this->exactly(2))
|
||||||
->method('getStatusCode')
|
->method('getStatusCode')
|
||||||
->willReturn(200);
|
->willReturn(200);
|
||||||
|
|
||||||
|
$content = <<<JSON
|
||||||
|
{
|
||||||
|
"ok": true,
|
||||||
|
"result": {
|
||||||
|
"message_id": 1,
|
||||||
|
"from": {
|
||||||
|
"id": 12345678,
|
||||||
|
"first_name": "YourBot",
|
||||||
|
"username": "YourBot"
|
||||||
|
},
|
||||||
|
"chat": {
|
||||||
|
"id": 1234567890,
|
||||||
|
"first_name": "John",
|
||||||
|
"last_name": "Doe",
|
||||||
|
"username": "JohnDoe",
|
||||||
|
"type": "private"
|
||||||
|
},
|
||||||
|
"date": 1459958199,
|
||||||
|
"text": "Hello from Bot!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JSON;
|
||||||
|
|
||||||
$response->expects($this->once())
|
$response->expects($this->once())
|
||||||
->method('getContent')
|
->method('getContent')
|
||||||
->willReturn('');
|
->willReturn($content)
|
||||||
|
;
|
||||||
|
|
||||||
$expectedBody = [
|
$expectedBody = [
|
||||||
'chat_id' => $channel,
|
'chat_id' => $channel,
|
||||||
@ -98,7 +123,10 @@ final class TelegramTransportTest extends TestCase
|
|||||||
|
|
||||||
$transport = new TelegramTransport('testToken', $channel, $client);
|
$transport = new TelegramTransport('testToken', $channel, $client);
|
||||||
|
|
||||||
$transport->send(new ChatMessage('testMessage'));
|
$sentMessage = $transport->send(new ChatMessage('testMessage'));
|
||||||
|
|
||||||
|
$this->assertEquals(1, $sentMessage->getMessageId());
|
||||||
|
$this->assertEquals('telegram://api.telegram.org?channel=testChannel', $sentMessage->getTransport());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSendWithChannelOverride(): void
|
public function testSendWithChannelOverride(): void
|
||||||
@ -109,9 +137,33 @@ final class TelegramTransportTest extends TestCase
|
|||||||
$response->expects($this->exactly(2))
|
$response->expects($this->exactly(2))
|
||||||
->method('getStatusCode')
|
->method('getStatusCode')
|
||||||
->willReturn(200);
|
->willReturn(200);
|
||||||
|
$content = <<<JSON
|
||||||
|
{
|
||||||
|
"ok": true,
|
||||||
|
"result": {
|
||||||
|
"message_id": 1,
|
||||||
|
"from": {
|
||||||
|
"id": 12345678,
|
||||||
|
"first_name": "YourBot",
|
||||||
|
"username": "YourBot"
|
||||||
|
},
|
||||||
|
"chat": {
|
||||||
|
"id": 1234567890,
|
||||||
|
"first_name": "John",
|
||||||
|
"last_name": "Doe",
|
||||||
|
"username": "JohnDoe",
|
||||||
|
"type": "private"
|
||||||
|
},
|
||||||
|
"date": 1459958199,
|
||||||
|
"text": "Hello from Bot!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JSON;
|
||||||
|
|
||||||
$response->expects($this->once())
|
$response->expects($this->once())
|
||||||
->method('getContent')
|
->method('getContent')
|
||||||
->willReturn('');
|
->willReturn($content)
|
||||||
|
;
|
||||||
|
|
||||||
$expectedBody = [
|
$expectedBody = [
|
||||||
'chat_id' => $channelOverride,
|
'chat_id' => $channelOverride,
|
||||||
@ -133,6 +185,9 @@ final class TelegramTransportTest extends TestCase
|
|||||||
->method('getRecipientId')
|
->method('getRecipientId')
|
||||||
->willReturn($channelOverride);
|
->willReturn($channelOverride);
|
||||||
|
|
||||||
$transport->send(new ChatMessage('testMessage', $messageOptions));
|
$sentMessage = $transport->send(new ChatMessage('testMessage', $messageOptions));
|
||||||
|
|
||||||
|
$this->assertEquals(1, $sentMessage->getMessageId());
|
||||||
|
$this->assertEquals('telegram://api.telegram.org?channel=defaultChannel', $sentMessage->getTransport());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.1"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/event-dispatcher": "^4.3|^5.0"
|
"symfony/event-dispatcher": "^4.3|^5.0"
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Bridge\Twilio;
|
|||||||
use Symfony\Component\Notifier\Exception\LogicException;
|
use Symfony\Component\Notifier\Exception\LogicException;
|
||||||
use Symfony\Component\Notifier\Exception\TransportException;
|
use Symfony\Component\Notifier\Exception\TransportException;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Message\SmsMessage;
|
use Symfony\Component\Notifier\Message\SmsMessage;
|
||||||
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
use Symfony\Component\Notifier\Transport\AbstractTransport;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
@ -51,7 +52,7 @@ final class TwilioTransport extends AbstractTransport
|
|||||||
return $message instanceof SmsMessage;
|
return $message instanceof SmsMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function doSend(MessageInterface $message): void
|
protected function doSend(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$message instanceof SmsMessage) {
|
if (!$message instanceof SmsMessage) {
|
||||||
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
throw new LogicException(sprintf('The "%s" transport only supports instances of "%s" (instance of "%s" given).', __CLASS__, SmsMessage::class, get_debug_type($message)));
|
||||||
@ -72,5 +73,12 @@ final class TwilioTransport extends AbstractTransport
|
|||||||
|
|
||||||
throw new TransportException('Unable to send the SMS: '.$error['message'].sprintf(' (see %s).', $error['more_info']), $response);
|
throw new TransportException('Unable to send the SMS: '.$error['message'].sprintf(' (see %s).', $error['more_info']), $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$success = $response->toArray(false);
|
||||||
|
|
||||||
|
$message = new SentMessage($message, (string) $this);
|
||||||
|
$message->setMessageId($success['sid']);
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/http-client": "^4.3|^5.0",
|
"symfony/http-client": "^4.3|^5.0",
|
||||||
"symfony/notifier": "^5.0"
|
"symfony/notifier": "^5.2"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Twilio\\": "" },
|
"psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Twilio\\": "" },
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
CHANGELOG
|
CHANGELOG
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
5.2.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* [BC BREAK] The `TransportInterface::send()` and `AbstractTransport::doSend()` methods changed to return a `SentMessage` instance instead of `void`.
|
||||||
|
|
||||||
5.1.0
|
5.1.0
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
|
|||||||
use Symfony\Component\Messenger\MessageBusInterface;
|
use Symfony\Component\Messenger\MessageBusInterface;
|
||||||
use Symfony\Component\Notifier\Event\MessageEvent;
|
use Symfony\Component\Notifier\Event\MessageEvent;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Transport\TransportInterface;
|
use Symfony\Component\Notifier\Transport\TransportInterface;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
|
|
||||||
@ -47,12 +48,10 @@ final class Chatter implements ChatterInterface
|
|||||||
return $this->transport->supports($message);
|
return $this->transport->supports($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function send(MessageInterface $message): void
|
public function send(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (null === $this->bus) {
|
if (null === $this->bus) {
|
||||||
$this->transport->send($message);
|
return $this->transport->send($message);
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null !== $this->dispatcher) {
|
if (null !== $this->dispatcher) {
|
||||||
|
50
src/Symfony/Component/Notifier/Message/SentMessage.php
Normal file
50
src/Symfony/Component/Notifier/Message/SentMessage.php
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Notifier\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Jérémy Romey <jeremy@free-agent.fr>
|
||||||
|
*
|
||||||
|
* @experimental in 5.2
|
||||||
|
*/
|
||||||
|
final class SentMessage
|
||||||
|
{
|
||||||
|
private $original;
|
||||||
|
private $transport;
|
||||||
|
private $messageId;
|
||||||
|
|
||||||
|
public function __construct(MessageInterface $original, string $transport)
|
||||||
|
{
|
||||||
|
$this->original = $original;
|
||||||
|
$this->transport = $transport;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getOriginalMessage(): MessageInterface
|
||||||
|
{
|
||||||
|
return $this->original;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTransport(): string
|
||||||
|
{
|
||||||
|
return $this->transport;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMessageId(string $id): void
|
||||||
|
{
|
||||||
|
$this->messageId = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMessageId(): ?string
|
||||||
|
{
|
||||||
|
return $this->messageId;
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,7 @@ use PHPUnit\Framework\TestCase;
|
|||||||
use Symfony\Component\Notifier\Exception\InvalidArgumentException;
|
use Symfony\Component\Notifier\Exception\InvalidArgumentException;
|
||||||
use Symfony\Component\Notifier\Exception\LogicException;
|
use Symfony\Component\Notifier\Exception\LogicException;
|
||||||
use Symfony\Component\Notifier\Message\ChatMessage;
|
use Symfony\Component\Notifier\Message\ChatMessage;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Transport\TransportInterface;
|
use Symfony\Component\Notifier\Transport\TransportInterface;
|
||||||
use Symfony\Component\Notifier\Transport\Transports;
|
use Symfony\Component\Notifier\Transport\Transports;
|
||||||
|
|
||||||
@ -30,9 +31,12 @@ class TransportsTest extends TestCase
|
|||||||
|
|
||||||
$one->method('supports')->with($message)->willReturn(true);
|
$one->method('supports')->with($message)->willReturn(true);
|
||||||
|
|
||||||
$one->expects($this->once())->method('send');
|
$one->expects($this->once())->method('send')->willReturn(new SentMessage($message, 'one'));
|
||||||
|
|
||||||
$transports->send($message);
|
$sentMessage = $transports->send($message);
|
||||||
|
|
||||||
|
$this->assertSame($message, $sentMessage->getOriginalMessage());
|
||||||
|
$this->assertSame('one', $sentMessage->getTransport());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSendToFirstSupportedTransportIfMessageDoesNotDefineATransport(): void
|
public function testSendToFirstSupportedTransportIfMessageDoesNotDefineATransport(): void
|
||||||
@ -47,10 +51,16 @@ class TransportsTest extends TestCase
|
|||||||
$one->method('supports')->with($message)->willReturn(false);
|
$one->method('supports')->with($message)->willReturn(false);
|
||||||
$two->method('supports')->with($message)->willReturn(true);
|
$two->method('supports')->with($message)->willReturn(true);
|
||||||
|
|
||||||
$one->expects($this->never())->method('send');
|
$one->method('send')->with($message)->willReturn(new SentMessage($message, 'one'));
|
||||||
$two->expects($this->once())->method('send');
|
$two->method('send')->with($message)->willReturn(new SentMessage($message, 'two'));
|
||||||
|
|
||||||
$transports->send($message);
|
$one->expects($this->never())->method('send');
|
||||||
|
$two->expects($this->once())->method('send')->willReturn(new SentMessage($message, 'two'));
|
||||||
|
|
||||||
|
$sentMessage = $transports->send($message);
|
||||||
|
|
||||||
|
$this->assertSame($message, $sentMessage->getOriginalMessage());
|
||||||
|
$this->assertSame('two', $sentMessage->getTransport());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testThrowExceptionIfNoSupportedTransportWasFound(): void
|
public function testThrowExceptionIfNoSupportedTransportWasFound(): void
|
||||||
|
@ -16,6 +16,7 @@ use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
|
|||||||
use Symfony\Component\Messenger\MessageBusInterface;
|
use Symfony\Component\Messenger\MessageBusInterface;
|
||||||
use Symfony\Component\Notifier\Event\MessageEvent;
|
use Symfony\Component\Notifier\Event\MessageEvent;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Component\Notifier\Transport\TransportInterface;
|
use Symfony\Component\Notifier\Transport\TransportInterface;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
|
|
||||||
@ -47,12 +48,10 @@ final class Texter implements TexterInterface
|
|||||||
return $this->transport->supports($message);
|
return $this->transport->supports($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function send(MessageInterface $message): void
|
public function send(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (null === $this->bus) {
|
if (null === $this->bus) {
|
||||||
$this->transport->send($message);
|
return $this->transport->send($message);
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null !== $this->dispatcher) {
|
if (null !== $this->dispatcher) {
|
||||||
|
@ -17,6 +17,7 @@ use Symfony\Component\HttpClient\HttpClient;
|
|||||||
use Symfony\Component\Notifier\Event\MessageEvent;
|
use Symfony\Component\Notifier\Event\MessageEvent;
|
||||||
use Symfony\Component\Notifier\Exception\LogicException;
|
use Symfony\Component\Notifier\Exception\LogicException;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
|
|
||||||
@ -69,16 +70,16 @@ abstract class AbstractTransport implements TransportInterface
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function send(MessageInterface $message): void
|
public function send(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (null !== $this->dispatcher) {
|
if (null !== $this->dispatcher) {
|
||||||
$this->dispatcher->dispatch(new MessageEvent($message));
|
$this->dispatcher->dispatch(new MessageEvent($message));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->doSend($message);
|
return $this->doSend($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract protected function doSend(MessageInterface $message): void;
|
abstract protected function doSend(MessageInterface $message): SentMessage;
|
||||||
|
|
||||||
protected function getEndpoint(): ?string
|
protected function getEndpoint(): ?string
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\EventDispatcher\Event;
|
|||||||
use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
|
use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
|
||||||
use Symfony\Component\Notifier\Event\MessageEvent;
|
use Symfony\Component\Notifier\Event\MessageEvent;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,11 +32,13 @@ class NullTransport implements TransportInterface
|
|||||||
$this->dispatcher = class_exists(Event::class) ? LegacyEventDispatcherProxy::decorate($dispatcher) : $dispatcher;
|
$this->dispatcher = class_exists(Event::class) ? LegacyEventDispatcherProxy::decorate($dispatcher) : $dispatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function send(MessageInterface $message): void
|
public function send(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (null !== $this->dispatcher) {
|
if (null !== $this->dispatcher) {
|
||||||
$this->dispatcher->dispatch(new MessageEvent($message));
|
$this->dispatcher->dispatch(new MessageEvent($message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new SentMessage($message, (string) $this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __toString(): string
|
public function __toString(): string
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\Notifier\Exception\LogicException;
|
|||||||
use Symfony\Component\Notifier\Exception\RuntimeException;
|
use Symfony\Component\Notifier\Exception\RuntimeException;
|
||||||
use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
|
use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Uses several Transports using a round robin algorithm.
|
* Uses several Transports using a round robin algorithm.
|
||||||
@ -63,13 +64,11 @@ class RoundRobinTransport implements TransportInterface
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function send(MessageInterface $message): void
|
public function send(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
while ($transport = $this->getNextTransport($message)) {
|
while ($transport = $this->getNextTransport($message)) {
|
||||||
try {
|
try {
|
||||||
$transport->send($message);
|
return $transport->send($message);
|
||||||
|
|
||||||
return;
|
|
||||||
} catch (TransportExceptionInterface $e) {
|
} catch (TransportExceptionInterface $e) {
|
||||||
$this->deadTransports[$transport] = microtime(true);
|
$this->deadTransports[$transport] = microtime(true);
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Notifier\Transport;
|
|||||||
|
|
||||||
use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
|
use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Fabien Potencier <fabien@symfony.com>
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
@ -24,7 +25,7 @@ interface TransportInterface
|
|||||||
/**
|
/**
|
||||||
* @throws TransportExceptionInterface
|
* @throws TransportExceptionInterface
|
||||||
*/
|
*/
|
||||||
public function send(MessageInterface $message): void;
|
public function send(MessageInterface $message): SentMessage;
|
||||||
|
|
||||||
public function supports(MessageInterface $message): bool;
|
public function supports(MessageInterface $message): bool;
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Notifier\Transport;
|
|||||||
use Symfony\Component\Notifier\Exception\InvalidArgumentException;
|
use Symfony\Component\Notifier\Exception\InvalidArgumentException;
|
||||||
use Symfony\Component\Notifier\Exception\LogicException;
|
use Symfony\Component\Notifier\Exception\LogicException;
|
||||||
use Symfony\Component\Notifier\Message\MessageInterface;
|
use Symfony\Component\Notifier\Message\MessageInterface;
|
||||||
|
use Symfony\Component\Notifier\Message\SentMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Fabien Potencier <fabien@symfony.com>
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
@ -51,17 +52,14 @@ final class Transports implements TransportInterface
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function send(MessageInterface $message): void
|
public function send(MessageInterface $message): SentMessage
|
||||||
{
|
{
|
||||||
if (!$transport = $message->getTransport()) {
|
if (!$transport = $message->getTransport()) {
|
||||||
foreach ($this->transports as $transport) {
|
foreach ($this->transports as $transport) {
|
||||||
if ($transport->supports($message)) {
|
if ($transport->supports($message)) {
|
||||||
$transport->send($message);
|
return $transport->send($message);
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new LogicException(sprintf('None of the available transports support the given message (available transports: "%s").', implode('", "', array_keys($this->transports))));
|
throw new LogicException(sprintf('None of the available transports support the given message (available transports: "%s").', implode('", "', array_keys($this->transports))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,6 +71,6 @@ final class Transports implements TransportInterface
|
|||||||
throw new LogicException(sprintf('The "%s" transport does not support the given message.', $transport));
|
throw new LogicException(sprintf('The "%s" transport does not support the given message.', $transport));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->transports[$transport]->send($message);
|
return $this->transports[$transport]->send($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user