Fixes: #16568 - Multiple Error Notifications and report requests
Signed-off-by: Saksham Gupta <shucon01@gmail.com> Add comment Signed-off-by: Saksham Gupta <shucon01@gmail.com> Use unique Key for error message buttons Signed-off-by: Saksham Gupta <shucon01@gmail.com> Fix Lint Signed-off-by: Saksham Gupta <shucon01@gmail.com>
This commit is contained in:
parent
b94e8964b9
commit
d13e7d5023
@ -10,11 +10,42 @@ var ErrorReport = {
|
||||
* @var object stores the last exception info
|
||||
*/
|
||||
lastException: null,
|
||||
/**
|
||||
* @var object stores the Error Report Data to prevent unnecessary data fetching
|
||||
*/
|
||||
errorReportData: null,
|
||||
/**
|
||||
* @var object maintains unique keys already used
|
||||
*/
|
||||
keyDict: {},
|
||||
/**
|
||||
* handles thrown error exceptions based on user preferences
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
errorDataHandler: function (data, exception) {
|
||||
if (data.success !== true) {
|
||||
Functions.ajaxShowMessage(data.error, false);
|
||||
return;
|
||||
}
|
||||
if (data.report_setting === 'ask') {
|
||||
ErrorReport.showErrorNotification();
|
||||
} else if (data.report_setting === 'always') {
|
||||
var reportData = ErrorReport.getReportData(exception);
|
||||
var postData = $.extend(reportData, {
|
||||
'send_error_report': true,
|
||||
'automatic': true
|
||||
});
|
||||
$.post('index.php?route=/error-report', postData, function (data) {
|
||||
if (data.success === false) {
|
||||
// in the case of an error, show the error message returned.
|
||||
Functions.ajaxShowMessage(data.error, false);
|
||||
} else {
|
||||
Functions.ajaxShowMessage(data.message, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
errorHandler: function (exception) {
|
||||
// issue: 14359
|
||||
if (JSON.stringify(ErrorReport.lastException) === JSON.stringify(exception)) {
|
||||
@ -24,34 +55,19 @@ var ErrorReport = {
|
||||
exception.name = ErrorReport.extractExceptionName(exception);
|
||||
}
|
||||
ErrorReport.lastException = exception;
|
||||
$.post('index.php?route=/error-report', {
|
||||
'ajax_request': true,
|
||||
'server': CommonParams.get('server'),
|
||||
'get_settings': true,
|
||||
'exception_type': 'js'
|
||||
}, function (data) {
|
||||
if (data.success !== true) {
|
||||
Functions.ajaxShowMessage(data.error, false);
|
||||
return;
|
||||
}
|
||||
if (data.report_setting === 'ask') {
|
||||
ErrorReport.showErrorNotification();
|
||||
} else if (data.report_setting === 'always') {
|
||||
var reportData = ErrorReport.getReportData(exception);
|
||||
var postData = $.extend(reportData, {
|
||||
'send_error_report': true,
|
||||
'automatic': true
|
||||
});
|
||||
$.post('index.php?route=/error-report', postData, function (data) {
|
||||
if (data.success === false) {
|
||||
// in the case of an error, show the error message returned.
|
||||
Functions.ajaxShowMessage(data.error, false);
|
||||
} else {
|
||||
Functions.ajaxShowMessage(data.message, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
if (ErrorReport.errorReportData === null) {
|
||||
$.post('index.php?route=/error-report', {
|
||||
'ajax_request': true,
|
||||
'server': CommonParams.get('server'),
|
||||
'get_settings': true,
|
||||
'exception_type': 'js'
|
||||
}, function (data) {
|
||||
ErrorReport.errorReportData = data;
|
||||
ErrorReport.errorDataHandler(data, exception);
|
||||
});
|
||||
} else {
|
||||
ErrorReport.errorDataHandler(ErrorReport.errorReportData, exception);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Shows the modal dialog previewing the report
|
||||
@ -82,7 +98,9 @@ var ErrorReport = {
|
||||
$.post('index.php?route=/error-report', reportData).done(function (data) {
|
||||
const $errorReportModal = $('#errorReportModal');
|
||||
$errorReportModal.on('show.bs.modal', function () {
|
||||
$('#errorReportModalConfirm').on('click', sendErrorReport);
|
||||
// Prevents multiple onClick events
|
||||
$('#errorReportModalConfirm').unbind('click', sendErrorReport);
|
||||
$('#errorReportModalConfirm').bind('click', sendErrorReport);
|
||||
this.querySelector('.modal-body').innerHTML = data.message;
|
||||
});
|
||||
$errorReportModal.modal('show');
|
||||
@ -97,14 +115,18 @@ var ErrorReport = {
|
||||
ErrorReport.removeErrorNotification();
|
||||
|
||||
var $div = $(
|
||||
'<div class="alert alert-danger userPermissionModal" role="alert" id="error_notification"></div>'
|
||||
'<div class="alert alert-danger userPermissionModal error_message" role="alert" id="error_notification"></div>'
|
||||
).append(
|
||||
Functions.getImage('s_error') + Messages.strErrorOccurred
|
||||
);
|
||||
|
||||
var $buttons = $('<div class="float-end"></div>');
|
||||
|
||||
var buttonHtml = '<button class="btn btn-primary" id="show_error_report">';
|
||||
var key = Math.random().toString(36).substring(2, 12);
|
||||
while (key in ErrorReport.keyDict) {
|
||||
key = Math.random().toString(36).substring(2, 12);
|
||||
}
|
||||
ErrorReport.keyDict[key] = 1;
|
||||
var buttonHtml = '<button class="btn btn-primary" id="show_error_report_' + key + '">';
|
||||
buttonHtml += Messages.strShowReportDetails;
|
||||
buttonHtml += '</button>';
|
||||
|
||||
@ -120,8 +142,8 @@ var ErrorReport = {
|
||||
|
||||
$div.append($buttons);
|
||||
$div.appendTo(document.body);
|
||||
$(document).on('click', '#show_error_report_' + key, ErrorReport.createReportDialog);
|
||||
$(document).on('click', '#change_error_settings', ErrorReport.redirectToSettings);
|
||||
$(document).on('click', '#show_error_report', ErrorReport.createReportDialog);
|
||||
$(document).on('click', '#ignore_error', ErrorReport.removeErrorNotification);
|
||||
},
|
||||
/**
|
||||
@ -134,7 +156,7 @@ var ErrorReport = {
|
||||
// don't remove the hash fragment by navigating to #
|
||||
e.preventDefault();
|
||||
}
|
||||
$('#error_notification').fadeOut(function () {
|
||||
$('.error_message').fadeOut(function () {
|
||||
$(this).remove();
|
||||
});
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user