/* vim: set expandtab sw=4 ts=4 sts=4: */ /** * general function, usually for data manipulation pages * */ var ErrorReport = { /** * @var object stores the last exception info */ _last_exception: null, /** * handles thrown error exceptions based on user preferences * * @return void */ error_handler: function (exception) { // issue: 14359 if (JSON.stringify(ErrorReport._last_exception) === JSON.stringify(exception)) { return; } if (exception.name === null || typeof(exception.name) === 'undefined') { exception.name = ErrorReport._extractExceptionName(exception); } ErrorReport._last_exception = exception; $.post('error_report.php', { ajax_request: true, server: PMA_commonParams.get('server'), get_settings: true, exception_type: 'js' }, function (data) { if (data.success !== true) { PMA_ajaxShowMessage(data.error, false); return; } if (data.report_setting === 'ask') { ErrorReport._showErrorNotification(); } else if (data.report_setting === 'always') { report_data = ErrorReport._get_report_data(exception); post_data = $.extend(report_data, { send_error_report: true, automatic: true }); $.post('error_report.php', post_data, function (data) { if (data.success === false) { // in the case of an error, show the error message returned. PMA_ajaxShowMessage(data.error, false); } else { PMA_ajaxShowMessage(data.message, false); } }); } }); }, /** * Shows the modal dialog previewing the report * * @param exception object error report info * * @return void */ _showReportDialog: function (exception) { var report_data = ErrorReport._get_report_data(exception); /* Remove the hidden dialogs if there are*/ if ($('#error_report_dialog').length !== 0) { $('#error_report_dialog').remove(); } var $div = $('<div id="error_report_dialog"></div>'); $div.css('z-index', '1000'); var button_options = {}; button_options[PMA_messages.strSendErrorReport] = function () { var $dialog = $(this); var post_data = $.extend(report_data, { send_error_report: true, description: $('#report_description').val(), always_send: $('#always_send_checkbox')[0].checked }); $.post('error_report.php', post_data, function (data) { $dialog.dialog('close'); if (data.success === false) { // in the case of an error, show the error message returned. PMA_ajaxShowMessage(data.error, false); } else { PMA_ajaxShowMessage(data.message, 3000); } }); }; button_options[PMA_messages.strCancel] = function () { $(this).dialog('close'); }; $.post('error_report.php', report_data, function (data) { if (data.success === false) { // in the case of an error, show the error message returned. PMA_ajaxShowMessage(data.error, false); } else { // Show dialog if the request was successful $div .append(data.message) .dialog({ title: PMA_messages.strSubmitErrorReport, width: 650, modal: true, buttons: button_options, close: function () { $(this).remove(); } }); } }); }, /** * Shows the small notification that asks for user permission * * @return void */ _showErrorNotification: function () { ErrorReport._removeErrorNotification(); var $div = $( '<div style="position:fixed;bottom:0;left:0;right:0;margin:0;' + 'z-index:1000" class="error" id="error_notification"></div>' ).append( PMA_getImage('s_error') + PMA_messages.strErrorOccurred ); var $buttons = $('<div class="floatright"></div>'); var button_html = '<button id="show_error_report">'; button_html += PMA_messages.strShowReportDetails; button_html += '</button>'; button_html += '<a id="change_error_settings">'; button_html += PMA_getImage('s_cog', PMA_messages.strChangeReportSettings); button_html += '</a>'; button_html += '<a href="#" id="ignore_error">'; button_html += PMA_getImage('b_close', PMA_messages.strIgnore); button_html += '</a>'; $buttons.html(button_html); $div.append($buttons); $div.appendTo(document.body); $(document).on('click', '#change_error_settings', ErrorReport._redirect_to_settings); $(document).on('click', '#show_error_report', ErrorReport._createReportDialog); $(document).on('click', '#ignore_error', ErrorReport._removeErrorNotification); }, /** * Removes the notification if it was displayed before * * @return void */ _removeErrorNotification: function (e) { if (e) { // don't remove the hash fragment by navigating to # e.preventDefault(); } $('#error_notification').fadeOut(function () { $(this).remove(); }); }, /** * Extracts Exception name from message if it exists * * @return String */ _extractExceptionName: function (exception) { if (exception.message === null || typeof(exception.message) === 'undefined') { return ''; } var reg = /([a-zA-Z]+):/; var regex_result = reg.exec(exception.message); if (regex_result && regex_result.length === 2) { return regex_result[1]; } return ''; }, /** * Shows the modal dialog previewing the report * * @return void */ _createReportDialog: function () { ErrorReport._removeErrorNotification(); ErrorReport._showReportDialog(ErrorReport._last_exception); }, /** * Redirects to the settings page containing error report * preferences * * @return void */ _redirect_to_settings: function () { window.location.href = 'prefs_forms.php'; }, /** * Returns the report data to send to the server * * @param exception object exception info * * @return object */ _get_report_data: function (exception) { if (exception && exception.stack && exception.stack.length) { for (var i = 0; i < exception.stack.length; i++) { var stack = exception.stack[i]; if (stack.context && stack.context.length) { for (var j = 0; j < stack.context.length; j++) { if (stack.context[j].length > 80) { stack.context[j] = stack.context[j].substring(-1, 75) + '//...'; } } } } } var report_data = { 'server': PMA_commonParams.get('server'), 'ajax_request': true, 'exception': exception, 'url': window.location.href, 'exception_type': 'js' }; if (AJAX.scriptHandler._scripts.length > 0) { report_data.scripts = AJAX.scriptHandler._scripts.map( function (script) { return script; } ); } return report_data; }, /** * Wraps all global functions that start with PMA_ * * @return void */ wrap_global_functions: function () { for (var key in window) { if (key.indexOf('PMA_') === 0) { var global = window[key]; if (typeof(global) === 'function') { window[key] = ErrorReport.wrap_function(global); } } } }, /** * Wraps given function in error reporting code and returns wrapped function * * @param func function to be wrapped * * @return function */ wrap_function: function (func) { if (!func.wrapped) { var new_func = function () { try { return func.apply(this, arguments); } catch (x) { TraceKit.report(x); } }; new_func.wrapped = true; // Set guid of wrapped function same as original function, so it can be removed // See bug#4146 (problem with jquery draggable and sortable) new_func.guid = func.guid = func.guid || new_func.guid || jQuery.guid++; return new_func; } else { return func; } }, /** * Automatically wraps the callback in AJAX.registerOnload * * @return void */ _wrap_ajax_onload_callback: function () { var oldOnload = AJAX.registerOnload; AJAX.registerOnload = function (file, func) { func = ErrorReport.wrap_function(func); oldOnload.call(this, file, func); }; }, /** * Automatically wraps the callback in $.fn.on * * @return void */ _wrap_$_on_callback: function () { var oldOn = $.fn.on; $.fn.on = function () { for (var i = 1; i <= 3; i++) { if (typeof(arguments[i]) === 'function') { arguments[i] = ErrorReport.wrap_function(arguments[i]); break; } } return oldOn.apply(this, arguments); }; }, /** * Wraps all global functions that start with PMA_ * also automatically wraps the callback in AJAX.registerOnload * * @return void */ set_up_error_reporting: function () { ErrorReport.wrap_global_functions(); ErrorReport._wrap_ajax_onload_callback(); ErrorReport._wrap_$_on_callback(); } }; AJAX.registerOnload('error_report.js', function () { TraceKit.report.subscribe(ErrorReport.error_handler); ErrorReport.set_up_error_reporting(); ErrorReport.wrap_global_functions(); });
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
codemirror | Folder | 0755 |
|
|
designer | Folder | 0755 |
|
|
jqplot | Folder | 0755 |
|
|
transformations | Folder | 0755 |
|
|
vendor | Folder | 0755 |
|
|
ajax.js | File | 30.51 KB | 0644 |
|
chart.js | File | 18.08 KB | 0644 |
|
common.js | File | 18.75 KB | 0644 |
|
config.js | File | 26.88 KB | 0644 |
|
console.js | File | 55.94 KB | 0644 |
|
cross_framing_protection.js | File | 471 B | 0644 |
|
db_central_columns.js | File | 10.86 KB | 0644 |
|
db_multi_table_query.js | File | 7.85 KB | 0644 |
|
db_operations.js | File | 6.21 KB | 0644 |
|
db_qbe.js | File | 2.47 KB | 0644 |
|
db_query_generator.js | File | 4.39 KB | 0644 |
|
db_search.js | File | 8.56 KB | 0644 |
|
db_structure.js | File | 15.43 KB | 0644 |
|
db_tracking.js | File | 3.57 KB | 0644 |
|
doclinks.js | File | 20.16 KB | 0644 |
|
error_report.js | File | 10.58 KB | 0644 |
|
export.js | File | 34.24 KB | 0644 |
|
export_output.js | File | 289 B | 0644 |
|
functions.js | File | 171.32 KB | 0644 |
|
gis_data_editor.js | File | 14.42 KB | 0644 |
|
import.js | File | 5.51 KB | 0644 |
|
indexes.js | File | 27.01 KB | 0644 |
|
keyhandler.js | File | 3.25 KB | 0644 |
|
makegrid.js | File | 96.42 KB | 0644 |
|
menu-resizer.js | File | 8.12 KB | 0644 |
|
messages.php | File | 40.42 KB | 0644 |
|
microhistory.js | File | 11.32 KB | 0644 |
|
multi_column_sort.js | File | 3.21 KB | 0644 |
|
navigation.js | File | 59.35 KB | 0644 |
|
normalization.js | File | 27.47 KB | 0644 |
|
page_settings.js | File | 1.71 KB | 0644 |
|
replication.js | File | 3.13 KB | 0644 |
|
rte.js | File | 46.57 KB | 0644 |
|
server_databases.js | File | 5.56 KB | 0644 |
|
server_plugins.js | File | 495 B | 0644 |
|
server_privileges.js | File | 18.58 KB | 0644 |
|
server_status_advisor.js | File | 3.63 KB | 0644 |
|
server_status_monitor.js | File | 84.47 KB | 0644 |
|
server_status_processes.js | File | 6.17 KB | 0644 |
|
server_status_queries.js | File | 1.13 KB | 0644 |
|
server_status_sorter.js | File | 1.96 KB | 0644 |
|
server_status_variables.js | File | 3.19 KB | 0644 |
|
server_user_groups.js | File | 1.34 KB | 0644 |
|
server_variables.js | File | 4.17 KB | 0644 |
|
shortcuts_handler.js | File | 3.19 KB | 0644 |
|
sql.js | File | 37.76 KB | 0644 |
|
tbl_change.js | File | 27.89 KB | 0644 |
|
tbl_chart.js | File | 13.8 KB | 0644 |
|
tbl_find_replace.js | File | 1.54 KB | 0644 |
|
tbl_gis_visualization.js | File | 10.7 KB | 0644 |
|
tbl_operations.js | File | 13.88 KB | 0644 |
|
tbl_relation.js | File | 8.83 KB | 0644 |
|
tbl_select.js | File | 15.44 KB | 0644 |
|
tbl_structure.js | File | 19.41 KB | 0644 |
|
tbl_tracking.js | File | 3.85 KB | 0644 |
|
tbl_zoom_plot_jqplot.js | File | 21.81 KB | 0644 |
|
u2f.js | File | 2.47 KB | 0644 |
|
whitelist.php | File | 1.26 KB | 0644 |
|