-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
[Notifier][WebProfilerBundle][FrameworkBundle] Add notifier section to profiler #36479
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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') %} | ||
<span class="sf-toolbar-value">{{ events.messages|length }}</span> | ||
{% endset %} | ||
|
||
{% set text %} | ||
<div class="sf-toolbar-info-piece"> | ||
<b>Sent notifications</b> | ||
<span class="sf-toolbar-status">{{ events.messages|length }}</span> | ||
</div> | ||
|
||
{% for transport in events.transports %} | ||
<div class="sf-toolbar-info-piece"> | ||
<b>{{ transport }}</b> | ||
<span class="sf-toolbar-status">{{ events.messages(transport)|length }}</span> | ||
</div> | ||
{% endfor %} | ||
{% endset %} | ||
|
||
{{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { 'link': profiler_url }) }} | ||
{% endif %} | ||
{% endblock %} | ||
|
||
{% block head %} | ||
{{ parent() }} | ||
<style type="text/css"> | ||
/* utility classes */ | ||
.m-t-0 { margin-top: 0 !important; } | ||
.m-t-10 { margin-top: 10px !important; } | ||
|
||
/* basic grid */ | ||
.row { | ||
display: flex; | ||
flex-wrap: wrap; | ||
margin-right: -15px; | ||
margin-left: -15px; | ||
} | ||
.col { | ||
flex-basis: 0; | ||
flex-grow: 1; | ||
max-width: 100%; | ||
position: relative; | ||
width: 100%; | ||
min-height: 1px; | ||
padding-right: 15px; | ||
padding-left: 15px; | ||
} | ||
.col-4 { | ||
flex: 0 0 33.333333%; | ||
max-width: 33.333333%; | ||
} | ||
|
||
/* small tabs */ | ||
.sf-tabs-sm .tab-navigation li { | ||
font-size: 14px; | ||
padding: .3em .5em; | ||
} | ||
</style> | ||
{% endblock %} | ||
|
||
{% block menu %} | ||
{% set events = collector.events %} | ||
|
||
<span class="label {{ events.messages|length ? '' : 'disabled' }}"> | ||
<span class="icon">{{ include('@WebProfiler/Icon/mailer.svg') }}</span> | ||
|
||
<strong>Notifications</strong> | ||
{% if events.messages|length > 0 %} | ||
<span class="count"> | ||
<span>{{ events.messages|length }}</span> | ||
</span> | ||
{% endif %} | ||
</span> | ||
{% endblock %} | ||
|
||
{% block panel %} | ||
{% set events = collector.events %} | ||
|
||
<h2>Notifications</h2> | ||
|
||
{% if not events.messages|length %} | ||
<div class="empty"> | ||
<p>No notifications were sent.</p> | ||
</div> | ||
{% endif %} | ||
|
||
<div class="metrics"> | ||
{% for transport in events.transports %} | ||
<div class="metric"> | ||
<span class="value">{{ events.messages(transport)|length }}</span> | ||
<span class="label">{{ transport }}</span> | ||
</div> | ||
{% endfor %} | ||
</div> | ||
|
||
{% for transport in events.transports %} | ||
<h3>{{ transport }}</h3> | ||
|
||
<div class="card-block"> | ||
<div class="sf-tabs sf-tabs-sm"> | ||
{% for event in events.events(transport) %} | ||
{% set message = event.message %} | ||
<div class="tab"> | ||
<h3 class="tab-title">Message #{{ loop.index }} <small>({{ event.isQueued() ? 'queued' : 'sent' }})</small></h3> | ||
<div class="tab-content"> | ||
<div class="card"> | ||
<div class="card-block"> | ||
<span class="label">Subject</span> | ||
<h2 class="m-t-10">{{ message.getSubject() ?? '(empty)' }}</h2> | ||
</div> | ||
{% if message.getNotification is defined %} | ||
<div class="card-block"> | ||
<div class="row"> | ||
<div class="col"> | ||
<span class="label">Content</span> | ||
<pre class="prewrap">{{ message.getNotification().getContent() ?? '(empty)' }}</pre> | ||
<span class="label">Importance</span> | ||
<pre class="prewrap">{{ message.getNotification().getImportance() }}</pre> | ||
</div> | ||
</div> | ||
</div> | ||
{% endif %} | ||
<div class="card-block"> | ||
<div class="sf-tabs sf-tabs-sm"> | ||
{% if message.getNotification is defined %} | ||
<div class="tab"> | ||
<h3 class="tab-title">Notification</h3> | ||
{% set notification = event.message.getNotification() %} | ||
<div class="tab-content"> | ||
<pre class="prewrap" style="max-height: 600px"> | ||
{{- 'Subject: ' ~ notification.getSubject() }}<br/> | ||
{{- 'Content: ' ~ notification.getContent() }}<br/> | ||
{{- 'Importance: ' ~ notification.getImportance() }}<br/> | ||
{{- 'Emoji: ' ~ (notification.getEmoji() is empty ? '(empty)' : notification.getEmoji()) }}<br/> | ||
{{- 'Exception: ' ~ notification.getException() ?? '(empty)' }}<br/> | ||
{{- 'ExceptionAsString: ' ~ (notification.getExceptionAsString() is empty ? '(empty)' : notification.getExceptionAsString()) }} | ||
</pre> | ||
</div> | ||
</div> | ||
{% endif %} | ||
<div class="tab"> | ||
<h3 class="tab-title">Message Options</h3> | ||
<div class="tab-content"> | ||
<pre class="prewrap" style="max-height: 600px"> | ||
{%- if message.getOptions() is null %} | ||
{{- '(empty)' }} | ||
{%- else %} | ||
{{- message.getOptions()|json_encode(constant('JSON_PRETTY_PRINT')) }} | ||
{%- endif %} | ||
</pre> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
{% endfor %} | ||
</div> | ||
</div> | ||
{% endfor %} | ||
{% endblock %} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -25,4 +25,6 @@ public function getSubject(): string; | |
public function getOptions(): ?MessageOptionsInterface; | ||
|
||
public function getTransport(): ?string; | ||
|
||
public function transport(string $transport): self; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not a big fan, but I don't have any better idea for now. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe we could decorate the message with a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like this idea and gave it a try: #38474 WDYT? |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,6 +34,10 @@ public function __construct(EventDispatcherInterface $dispatcher = null) | |
|
||
public function send(MessageInterface $message): SentMessage | ||
{ | ||
if (null === $message->getTransport()) { | ||
$message->transport((string) $this); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I needed to make sure that every transport has a name to show this name in the profiler panel. |
||
} | ||
|
||
if (null !== $this->dispatcher) { | ||
$this->dispatcher->dispatch(new MessageEvent($message)); | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@javiereguiluz Can you work on an icon for the notifier profiler?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for being late, but our designer just sent us the icon for the notifier. It uses the "bell icon" which is universal for notifications:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@javiereguiluz as this PR is already merged, it might be better if you create a new PR with the new icon instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you @javiereguiluz I created a new PR: #38545