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: 'escapeUrl(trim($block->getDSN())) ?>', - release: 'escapeHtml(trim($block->getVersion())) ?>', - environment: 'escapeHtml(trim($block->getEnvironment())) ?>', - integrations: [ - isTracingEnabled()): ?> - Sentry.browserTracingIntegration({ - enableInp: true, - }), - - useSessionReplay()): ?> - Sentry.replayIntegration({ - blockAllMedia: escapeHtml($block->getReplayBlockMedia() ? 'true' : 'false') ?>, - maskAllText: escapeHtml($block->getReplayMaskText() ? 'true' : 'false') ?>, - }) - - ], - isTracingEnabled()): ?> - tracesSampleRate: escapeHtml($block->getTracingSampleRate()) ?>, - - useSessionReplay()): ?> - replaysSessionSampleRate: escapeHtml($block->getReplaySessionSampleRate()) ?>, - replaysOnErrorSampleRate: escapeHtml($block->getReplayErrorSampleRate()) ?>, - - ignoreErrors: 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: 'escapeUrl(trim($block->getDSN())) ?>', +release: 'escapeHtml(trim($block->getVersion())) ?>', +environment: 'escapeHtml(trim($block->getEnvironment())) ?>', +integrations: [ +isTracingEnabled()): ?> + Sentry.browserTracingIntegration({ + enableInp: true, + }), + +useSessionReplay()): ?> + Sentry.replayIntegration({ + blockAllMedia: escapeHtml($block->getReplayBlockMedia() ? 'true' : 'false') ?>, + maskAllText: escapeHtml($block->getReplayMaskText() ? 'true' : 'false') ?>, + }), + +isFeedbackButtonEnabled()): ?> + Sentry.feedbackIntegration({}), + +], +isTracingEnabled()): ?> + tracesSampleRate: escapeHtml($block->getTracingSampleRate()) ?>, + +useSessionReplay()): ?> + replaysSessionSampleRate: escapeHtml($block->getReplaySessionSampleRate()) ?>, + replaysOnErrorSampleRate: escapeHtml($block->getReplayErrorSampleRate()) ?>, + +ignoreErrors: 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('/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('/escapeHtml($block->getStoreCode()); ?>/', '/'); + + return frame; }); - return event; - } + + return value; }); -} + return event; + } + +}); +} \ No newline at end of file