diff --git a/Block/SentryScript.php b/Block/SentryScript.php
index 81e2657..afecd45 100644
--- a/Block/SentryScript.php
+++ b/Block/SentryScript.php
@@ -110,6 +110,14 @@ public function useSessionReplay(): bool
return $this->dataHelper->useSessionReplay();
}
+ /**
+ * Whether to enable session replay.
+ */
+ public function isFeedbackButtonEnabled(): bool
+ {
+ return $this->dataHelper->isFeedbackButtonEnabled();
+ }
+
/**
* Get the session replay sample rate.
*/
diff --git a/Helper/Data.php b/Helper/Data.php
index 8e72f94..dcff87c 100644
--- a/Helper/Data.php
+++ b/Helper/Data.php
@@ -509,6 +509,14 @@ public function useSessionReplay(): bool
return $this->scopeConfig->isSetFlag(static::XML_PATH_SRS.'enable_session_replay', ScopeInterface::SCOPE_STORE);
}
+ /**
+ * Whether to enable the user feedback button.
+ */
+ public function isFeedbackButtonEnabled(): bool
+ {
+ return $this->scopeConfig->isSetFlag(static::XML_PATH_SRS.'enable_feedback_button', ScopeInterface::SCOPE_STORE);
+ }
+
/**
* Get the session replay sample rate.
*/
diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml
index 8b97a42..1b3316c 100755
--- a/etc/adminhtml/system.xml
+++ b/etc/adminhtml/system.xml
@@ -41,6 +41,14 @@
1
+
+
+ Enabling the feedback button will also include session replay and tracing in the javascript bundle, to use it also enable the options accordingly
+ Magento\Config\Model\Config\Source\Yesno
+
+ 1
+
+
diff --git a/view/frontend/layout/default.xml b/view/frontend/layout/default.xml
index 32b5e08..ed5dfd9 100755
--- a/view/frontend/layout/default.xml
+++ b/view/frontend/layout/default.xml
@@ -1,12 +1,12 @@
-
+
diff --git a/view/frontend/templates/script/sentry.phtml b/view/frontend/templates/script/sentry.phtml
index aec6b32..e153cdc 100644
--- a/view/frontend/templates/script/sentry.phtml
+++ b/view/frontend/templates/script/sentry.phtml
@@ -11,14 +11,18 @@ if (!$block->canUseScriptTag($block->getNameInLayout())) {
isTracingEnabled()) {
+ if ($block->isTracingEnabled() || $block->isFeedbackButtonEnabled()) {
$bundleFile .= '.tracing';
}
- if ($block->useSessionReplay()) {
+ if ($block->useSessionReplay() || $block->isFeedbackButtonEnabled()) {
$bundleFile .= '.replay';
}
+ if ($block->isFeedbackButtonEnabled()) {
+ $bundleFile .= '.feedback';
+ }
+
$bundleFile .= '.min.js';
$remoteFile = sprintf(
diff --git a/view/frontend/templates/script/sentry_init.phtml b/view/frontend/templates/script/sentry_init.phtml
index c3a6777..d24124e 100644
--- a/view/frontend/templates/script/sentry_init.phtml
+++ b/view/frontend/templates/script/sentry_init.phtml
@@ -1,57 +1,66 @@
-
-if (typeof Sentry !== 'undefined') {
- Sentry.init({
- dsn: '= $escaper->escapeUrl(trim($block->getDSN())) ?>',
- release: '= $escaper->escapeHtml(trim($block->getVersion())) ?>',
- environment: '= $escaper->escapeHtml(trim($block->getEnvironment())) ?>',
- integrations: [
- isTracingEnabled()): ?>
- Sentry.browserTracingIntegration({
- enableInp: true,
- }),
-
- useSessionReplay()): ?>
- Sentry.replayIntegration({
- blockAllMedia: = $escaper->escapeHtml($block->getReplayBlockMedia() ? 'true' : 'false') ?>,
- maskAllText: = $escaper->escapeHtml($block->getReplayMaskText() ? 'true' : 'false') ?>,
- })
-
- ],
- isTracingEnabled()): ?>
- tracesSampleRate: = $escaper->escapeHtml($block->getTracingSampleRate()) ?>,
-
- useSessionReplay()): ?>
- replaysSessionSampleRate: = $escaper->escapeHtml($block->getReplaySessionSampleRate()) ?>,
- replaysOnErrorSampleRate: = $escaper->escapeHtml($block->getReplayErrorSampleRate()) ?>,
-
- ignoreErrors: = /** @noEscape */ $block->getIgnoreJsErrors() ?>,
- stripStaticContentVersion() || $block->stripStoreCode()): ?>
- beforeSend: function(event) {
- event.exception.values.map(function (value) {
- if (value.stacktrace === undefined || ! value.stacktrace) {
- return value;
- }
+stripStaticContentVersion()): ?>
- value.stacktrace.frames.map(function (frame) {
- frame.filename = frame.filename.replace(/version[0-9]{10}\//, '');
- return frame;
- });
-
+/** @var \JustBetter\Sentry\Block\SentryScript $block */ ?>
+if (typeof Sentry !== 'undefined') {
+Sentry.init({
+dsn: '= $escaper->escapeUrl(trim($block->getDSN())) ?>',
+release: '= $escaper->escapeHtml(trim($block->getVersion())) ?>',
+environment: '= $escaper->escapeHtml(trim($block->getEnvironment())) ?>',
+integrations: [
+isTracingEnabled()): ?>
+ Sentry.browserTracingIntegration({
+ enableInp: true,
+ }),
+
+useSessionReplay()): ?>
+ Sentry.replayIntegration({
+ blockAllMedia: = $escaper->escapeHtml($block->getReplayBlockMedia() ? 'true' : 'false') ?>,
+ maskAllText: = $escaper->escapeHtml($block->getReplayMaskText() ? 'true' : 'false') ?>,
+ }),
+
+isFeedbackButtonEnabled()): ?>
+ Sentry.feedbackIntegration({}),
+
+],
+isTracingEnabled()): ?>
+ tracesSampleRate: = $escaper->escapeHtml($block->getTracingSampleRate()) ?>,
+
+useSessionReplay()): ?>
+ replaysSessionSampleRate: = $escaper->escapeHtml($block->getReplaySessionSampleRate()) ?>,
+ replaysOnErrorSampleRate: = $escaper->escapeHtml($block->getReplayErrorSampleRate()) ?>,
+
+ignoreErrors: =
+ /** @noEscape */
+ $block->getIgnoreJsErrors() ?>,
+stripStaticContentVersion() || $block->stripStoreCode()): ?>
+ beforeSend: function(event) {
+ event.exception.values.map(function (value) {
+ if (value.stacktrace === undefined || ! value.stacktrace) {
+ return value;
+ }
- stripStoreCode()): ?>
- value.stacktrace.frames.map(function (frame) {
-
- frame.filename = frame.filename.replace('/= $escaper->escapeHtml($block->getStoreCode()); ?>/', '/');
-
- return frame;
- });
-
+ stripStaticContentVersion()): ?>
+ value.stacktrace.frames.map(function (frame) {
+ frame.filename = frame.filename.replace(/version[0-9]{10}\//, '');
+ return frame;
+ });
+
- return value;
+ stripStoreCode()): ?>
+ value.stacktrace.frames.map(function (frame) {
+
+ frame.filename = frame.filename.replace('/= $escaper->escapeHtml($block->getStoreCode()); ?>/', '/');
+
+ return frame;
});
- return event;
- }
+
+ return value;
});
-}
+ return event;
+ }
+
+});
+}
\ No newline at end of file