Skip to content

Commit 6097ac3

Browse files
committed
feat(feedback): add option to show sentry user feedback button
1 parent 61bcd45 commit 6097ac3

File tree

6 files changed

+93
-56
lines changed

6 files changed

+93
-56
lines changed

Block/SentryScript.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,14 @@ public function useSessionReplay(): bool
110110
return $this->dataHelper->useSessionReplay();
111111
}
112112

113+
/**
114+
* Whether to enable session replay.
115+
*/
116+
public function isFeedbackButtonEnabled(): bool
117+
{
118+
return $this->dataHelper->isFeedbackButtonEnabled();
119+
}
120+
113121
/**
114122
* Get the session replay sample rate.
115123
*/

Helper/Data.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,15 @@ public function useScriptTag()
506506
*/
507507
public function useSessionReplay(): bool
508508
{
509-
return $this->scopeConfig->isSetFlag(static::XML_PATH_SRS.'enable_session_replay', ScopeInterface::SCOPE_STORE);
509+
return $this->scopeConfig->isSetFlag(static::XML_PATH_SRS . 'enable_session_replay', ScopeInterface::SCOPE_STORE);
510+
}
511+
512+
/**
513+
* Whether to enable the user feedback button
514+
*/
515+
public function isFeedbackButtonEnabled(): bool
516+
{
517+
return $this->scopeConfig->isSetFlag(static::XML_PATH_SRS . 'enable_feedback_button', ScopeInterface::SCOPE_STORE);
510518
}
511519

512520
/**

etc/adminhtml/system.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@
4141
<field id="enable_script_tag">1</field>
4242
</depends>
4343
</field>
44+
<field id="enable_feedback_button" translate="label" type="select" sortOrder="40" showInDefault="1" showInStore="1" showInWebsite="1" canRestore="1">
45+
<label>Enable Customer Feedback button</label>
46+
<comment>Enabling the feedback button will also enable session replay and tracing</comment>
47+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
48+
<depends>
49+
<field id="enable_script_tag">1</field>
50+
</depends>
51+
</field>
4452
<field id="replay_session_sample_rate" translate="label" type="text" sortOrder="50" showInDefault="1" showInStore="1" showInWebsite="1" canRestore="1">
4553
<label>Session Sample Rate</label>
4654
<depends>

view/frontend/layout/default.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<?xml version="1.0"?>
22
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
33
<body>
4-
<!-- <referenceBlock name="head.additional">
4+
<referenceBlock name="head.additional">
55
<block class="JustBetter\Sentry\Block\SentryScript" before="-" template="JustBetter_Sentry::script/sentry.phtml" name="sentry.head.additional" />
66
</referenceBlock>
77

88
<referenceContainer name="before.body.end">
99
<block class="JustBetter\Sentry\Block\SentryScript" before="-" template="JustBetter_Sentry::script/sentry.phtml" name="sentry.before.body.end" />
10-
</referenceContainer> -->
10+
</referenceContainer>
1111
</body>
1212
</page>

view/frontend/templates/script/sentry.phtml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@ if (!$block->canUseScriptTag($block->getNameInLayout())) {
1111
<?php
1212
$bundleFile = 'bundle';
1313

14-
if ($block->isTracingEnabled()) {
14+
if ($block->isTracingEnabled() || $block->isFeedbackButtonEnabled()) {
1515
$bundleFile .= '.tracing';
1616
}
1717

18-
if ($block->useSessionReplay()) {
18+
if ($block->useSessionReplay() || $block->isFeedbackButtonEnabled()) {
1919
$bundleFile .= '.replay';
2020
}
2121

22+
if ($block->isFeedbackButtonEnabled()) {
23+
$bundleFile .= '.feedback';
24+
}
25+
2226
$bundleFile .= '.min.js';
2327

2428
$remoteFile = sprintf(
Lines changed: 60 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,66 @@
1-
<?php /** @var \JustBetter\Sentry\Block\SentryScript $block */ ?>
2-
if (typeof Sentry !== 'undefined') {
3-
Sentry.init({
4-
dsn: '<?= $escaper->escapeUrl(trim($block->getDSN())) ?>',
5-
release: '<?= $escaper->escapeHtml(trim($block->getVersion())) ?>',
6-
environment: '<?= $escaper->escapeHtml(trim($block->getEnvironment())) ?>',
7-
integrations: [
8-
<?php if ($block->isTracingEnabled()): ?>
9-
Sentry.browserTracingIntegration({
10-
enableInp: true,
11-
}),
12-
<?php endif ?>
13-
<?php if ($block->useSessionReplay()): ?>
14-
Sentry.replayIntegration({
15-
blockAllMedia: <?= $escaper->escapeHtml($block->getReplayBlockMedia() ? 'true' : 'false') ?>,
16-
maskAllText: <?= $escaper->escapeHtml($block->getReplayMaskText() ? 'true' : 'false') ?>,
17-
})
18-
<?php endif ?>
19-
],
20-
<?php if ($block->isTracingEnabled()): ?>
21-
tracesSampleRate: <?= $escaper->escapeHtml($block->getTracingSampleRate()) ?>,
22-
<?php endif ?>
23-
<?php if ($block->useSessionReplay()): ?>
24-
replaysSessionSampleRate: <?= $escaper->escapeHtml($block->getReplaySessionSampleRate()) ?>,
25-
replaysOnErrorSampleRate: <?= $escaper->escapeHtml($block->getReplayErrorSampleRate()) ?>,
26-
<?php endif ?>
27-
ignoreErrors: <?= /** @noEscape */ $block->getIgnoreJsErrors() ?>,
28-
<?php if ($block->stripStaticContentVersion() || $block->stripStoreCode()): ?>
29-
beforeSend: function(event) {
30-
event.exception.values.map(function (value) {
31-
if (value.stacktrace === undefined || ! value.stacktrace) {
32-
return value;
33-
}
1+
<?php
342

35-
<?php if ($block->stripStaticContentVersion()): ?>
36-
value.stacktrace.frames.map(function (frame) {
37-
frame.filename = frame.filename.replace(/version[0-9]{10}\//, '');
38-
return frame;
39-
});
40-
<?php endif; ?>
3+
/** @var \JustBetter\Sentry\Block\SentryScript $block */ ?>
4+
if (typeof Sentry !== 'undefined') {
5+
Sentry.init({
6+
dsn: '<?= $escaper->escapeUrl(trim($block->getDSN())) ?>',
7+
release: '<?= $escaper->escapeHtml(trim($block->getVersion())) ?>',
8+
environment: '<?= $escaper->escapeHtml(trim($block->getEnvironment())) ?>',
9+
integrations: [
10+
<?php if ($block->isTracingEnabled()): ?>
11+
Sentry.browserTracingIntegration({
12+
enableInp: true,
13+
}),
14+
<?php endif ?>
15+
<?php if ($block->useSessionReplay()): ?>
16+
Sentry.replayIntegration({
17+
blockAllMedia: <?= $escaper->escapeHtml($block->getReplayBlockMedia() ? 'true' : 'false') ?>,
18+
maskAllText: <?= $escaper->escapeHtml($block->getReplayMaskText() ? 'true' : 'false') ?>,
19+
}),
20+
<?php endif ?>
21+
<?php if ($block->isFeedbackButtonEnabled()): ?>
22+
Sentry.feedbackIntegration({}),
23+
<?php endif ?>
24+
],
25+
<?php if ($block->isTracingEnabled()): ?>
26+
tracesSampleRate: <?= $escaper->escapeHtml($block->getTracingSampleRate()) ?>,
27+
<?php endif ?>
28+
<?php if ($block->useSessionReplay()): ?>
29+
replaysSessionSampleRate: <?= $escaper->escapeHtml($block->getReplaySessionSampleRate()) ?>,
30+
replaysOnErrorSampleRate: <?= $escaper->escapeHtml($block->getReplayErrorSampleRate()) ?>,
31+
<?php endif ?>
32+
ignoreErrors: <?=
33+
/** @noEscape */
34+
$block->getIgnoreJsErrors() ?>,
35+
<?php if ($block->stripStaticContentVersion() || $block->stripStoreCode()): ?>
36+
beforeSend: function(event) {
37+
event.exception.values.map(function (value) {
38+
if (value.stacktrace === undefined || ! value.stacktrace) {
39+
return value;
40+
}
4141

42-
<?php if ($block->stripStoreCode()): ?>
43-
value.stacktrace.frames.map(function (frame) {
44-
<?php // phpcs:disable Generic.Files.LineLength ?>
45-
frame.filename = frame.filename.replace('/<?= $escaper->escapeHtml($block->getStoreCode()); ?>/', '/');
46-
<?php // phpcs:enable Generic.Files.LineLength ?>
47-
return frame;
48-
});
49-
<?php endif; ?>
42+
<?php if ($block->stripStaticContentVersion()): ?>
43+
value.stacktrace.frames.map(function (frame) {
44+
frame.filename = frame.filename.replace(/version[0-9]{10}\//, '');
45+
return frame;
46+
});
47+
<?php endif; ?>
5048

51-
return value;
49+
<?php if ($block->stripStoreCode()): ?>
50+
value.stacktrace.frames.map(function (frame) {
51+
<?php // phpcs:disable Generic.Files.LineLength
52+
?>
53+
frame.filename = frame.filename.replace('/<?= $escaper->escapeHtml($block->getStoreCode()); ?>/', '/');
54+
<?php // phpcs:enable Generic.Files.LineLength
55+
?>
56+
return frame;
5257
});
53-
return event;
54-
}
5558
<?php endif; ?>
59+
60+
return value;
5661
});
57-
}
62+
return event;
63+
}
64+
<?php endif; ?>
65+
});
66+
}

0 commit comments

Comments
 (0)