diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_debug.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_debug.php index 16ae2ccb63..6147d34e4e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_debug.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/notifier_debug.php @@ -17,5 +17,6 @@ return static function (ContainerConfigurator $container) { $container->services() ->set('notifier.data_collector', NotificationDataCollector::class) ->args([service('notifier.logger_notification_listener')]) + ->tag('data_collector', ['template' => '@WebProfiler/Collector/notifier.html.twig', 'id' => 'notifier']) ; }; diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/notifier.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/notifier.html.twig new file mode 100644 index 0000000000..453f226992 --- /dev/null +++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/notifier.html.twig @@ -0,0 +1,168 @@ +{% extends '@WebProfiler/Profiler/layout.html.twig' %} + +{% block toolbar %} + {% set events = collector.events %} + + {% if events.messages|length %} + {% set icon %} + {% include('@WebProfiler/Icon/mailer.svg') %} + {{ events.messages|length }} + {% endset %} + + {% set text %} +
+ Sent notifications + {{ events.messages|length }} +
+ + {% for transport in events.transports %} +
+ {{ transport }} + {{ events.messages(transport)|length }} +
+ {% endfor %} + {% endset %} + + {{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { 'link': profiler_url }) }} + {% endif %} +{% endblock %} + +{% block head %} + {{ parent() }} + +{% endblock %} + +{% block menu %} + {% set events = collector.events %} + + + {{ include('@WebProfiler/Icon/mailer.svg') }} + + Notifications + {% if events.messages|length > 0 %} + + {{ events.messages|length }} + + {% endif %} + +{% endblock %} + +{% block panel %} + {% set events = collector.events %} + +

Notifications

+ + {% if not events.messages|length %} +
+

No notifications were sent.

+
+ {% endif %} + +
+ {% for transport in events.transports %} +
+ {{ events.messages(transport)|length }} + {{ transport }} +
+ {% endfor %} +
+ + {% for transport in events.transports %} +

{{ transport }}

+ +
+
+ {% for event in events.events(transport) %} + {% set message = event.message %} +
+

Message #{{ loop.index }} ({{ event.isQueued() ? 'queued' : 'sent' }})

+
+
+
+ Subject +

{{ message.getSubject() ?? '(empty)' }}

+
+ {% if message.getNotification is defined %} +
+
+
+ Content +
{{ message.getNotification().getContent() ?? '(empty)' }}
+ Importance +
{{ message.getNotification().getImportance() }}
+
+
+
+ {% endif %} +
+
+ {% if message.getNotification is defined %} +
+

Notification

+ {% set notification = event.message.getNotification() %} +
+
+                                                            {{- 'Subject: ' ~ notification.getSubject() }}
+ {{- 'Content: ' ~ notification.getContent() }}
+ {{- 'Importance: ' ~ notification.getImportance() }}
+ {{- 'Emoji: ' ~ (notification.getEmoji() is empty ? '(empty)' : notification.getEmoji()) }}
+ {{- 'Exception: ' ~ notification.getException() ?? '(empty)' }}
+ {{- 'ExceptionAsString: ' ~ (notification.getExceptionAsString() is empty ? '(empty)' : notification.getExceptionAsString()) }} +
+
+
+ {% endif %} +
+

Message Options

+
+
+                                                            {%- if message.getOptions() is null %}
+                                                                {{- '(empty)' }}
+                                                            {%- else %}
+                                                                {{- message.getOptions()|json_encode(constant('JSON_PRETTY_PRINT')) }}
+                                                            {%- endif %}
+                                                        
+
+
+
+
+
+
+
+ {% endfor %} +
+
+ {% endfor %} +{% endblock %} diff --git a/src/Symfony/Component/Notifier/Message/ChatMessage.php b/src/Symfony/Component/Notifier/Message/ChatMessage.php index 5fc1d94a3a..2c3cfe13cc 100644 --- a/src/Symfony/Component/Notifier/Message/ChatMessage.php +++ b/src/Symfony/Component/Notifier/Message/ChatMessage.php @@ -77,7 +77,7 @@ final class ChatMessage implements MessageInterface /** * @return $this */ - public function transport(?string $transport): self + public function transport(?string $transport): MessageInterface { $this->transport = $transport; diff --git a/src/Symfony/Component/Notifier/Message/EmailMessage.php b/src/Symfony/Component/Notifier/Message/EmailMessage.php index 199030e775..ab3efed253 100644 --- a/src/Symfony/Component/Notifier/Message/EmailMessage.php +++ b/src/Symfony/Component/Notifier/Message/EmailMessage.php @@ -102,7 +102,7 @@ final class EmailMessage implements MessageInterface /** * @return $this */ - public function transport(string $transport): self + public function transport(string $transport): MessageInterface { if (!$this->message instanceof Email) { throw new LogicException('Cannot set a Transport on a RawMessage instance.'); diff --git a/src/Symfony/Component/Notifier/Message/MessageInterface.php b/src/Symfony/Component/Notifier/Message/MessageInterface.php index 9684813465..146e721ff7 100644 --- a/src/Symfony/Component/Notifier/Message/MessageInterface.php +++ b/src/Symfony/Component/Notifier/Message/MessageInterface.php @@ -25,4 +25,6 @@ interface MessageInterface public function getOptions(): ?MessageOptionsInterface; public function getTransport(): ?string; + + public function transport(string $transport): self; } diff --git a/src/Symfony/Component/Notifier/Message/SmsMessage.php b/src/Symfony/Component/Notifier/Message/SmsMessage.php index 30d374f428..17f0b19a4e 100644 --- a/src/Symfony/Component/Notifier/Message/SmsMessage.php +++ b/src/Symfony/Component/Notifier/Message/SmsMessage.php @@ -83,7 +83,7 @@ final class SmsMessage implements MessageInterface /** * @return $this */ - public function transport(string $transport): self + public function transport(string $transport): MessageInterface { $this->transport = $transport; diff --git a/src/Symfony/Component/Notifier/Transport/NullTransport.php b/src/Symfony/Component/Notifier/Transport/NullTransport.php index 59638ca192..c271676537 100644 --- a/src/Symfony/Component/Notifier/Transport/NullTransport.php +++ b/src/Symfony/Component/Notifier/Transport/NullTransport.php @@ -34,6 +34,10 @@ class NullTransport implements TransportInterface public function send(MessageInterface $message): SentMessage { + if (null === $message->getTransport()) { + $message->transport((string) $this); + } + if (null !== $this->dispatcher) { $this->dispatcher->dispatch(new MessageEvent($message)); } diff --git a/src/Symfony/Component/Notifier/Transport/Transports.php b/src/Symfony/Component/Notifier/Transport/Transports.php index 3932db0dcf..da63d1f069 100644 --- a/src/Symfony/Component/Notifier/Transport/Transports.php +++ b/src/Symfony/Component/Notifier/Transport/Transports.php @@ -55,8 +55,10 @@ final class Transports implements TransportInterface public function send(MessageInterface $message): SentMessage { if (!$transport = $message->getTransport()) { - foreach ($this->transports as $transport) { + foreach ($this->transports as $transportName => $transport) { if ($transport->supports($message)) { + $message->transport($transportName); + return $transport->send($message); } }