123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <?php
- /* vim: set expandtab sw=4 ts=4 sts=4: */
- /**
- * Handle error report submission
- *
- * @package PhpMyAdmin
- */
- use PhpMyAdmin\ErrorReport;
- use PhpMyAdmin\Message;
- use PhpMyAdmin\Response;
- use PhpMyAdmin\UserPreferences;
- use PhpMyAdmin\Utils\HttpRequest;
- require_once 'libraries/common.inc.php';
- if (!isset($_POST['exception_type'])
- ||!in_array($_POST['exception_type'], array('js', 'php'))
- ) {
- die('Oops, something went wrong!!');
- }
- $response = Response::getInstance();
- $errorReport = new ErrorReport(new HttpRequest());
- if (isset($_POST['send_error_report'])
- && ($_POST['send_error_report'] == true
- || $_POST['send_error_report'] == '1')
- ) {
- if ($_POST['exception_type'] == 'php') {
- /**
- * Prevent infinite error submission.
- * Happens in case error submissions fails.
- * If reporting is done in some time interval,
- * just clear them & clear json data too.
- */
- if (isset($_SESSION['prev_error_subm_time'])
- && isset($_SESSION['error_subm_count'])
- && $_SESSION['error_subm_count'] >= 3
- && ($_SESSION['prev_error_subm_time']-time()) <= 3000
- ) {
- $_SESSION['error_subm_count'] = 0;
- $_SESSION['prev_errors'] = '';
- $response->addJSON('_stopErrorReportLoop', '1');
- } else {
- $_SESSION['prev_error_subm_time'] = time();
- $_SESSION['error_subm_count'] = (
- (isset($_SESSION['error_subm_count']))
- ? ($_SESSION['error_subm_count']+1)
- : (0)
- );
- }
- }
- $reportData = $errorReport->getData($_POST['exception_type']);
- // report if and only if there were 'actual' errors.
- if (count($reportData) > 0) {
- $server_response = $errorReport->send($reportData);
- if (! is_string($server_response)) {
- $success = false;
- } else {
- $decoded_response = json_decode($server_response, true);
- $success = !empty($decoded_response) ?
- $decoded_response["success"] : false;
- }
- /* Message to show to the user */
- if ($success) {
- if ((isset($_POST['automatic'])
- && $_POST['automatic'] === "true")
- || $GLOBALS['cfg']['SendErrorReports'] == 'always'
- ) {
- $msg = __(
- 'An error has been detected and an error report has been '
- . 'automatically submitted based on your settings.'
- );
- } else {
- $msg = __('Thank you for submitting this report.');
- }
- } else {
- $msg = __(
- 'An error has been detected and an error report has been '
- . 'generated but failed to be sent.'
- )
- . ' '
- . __(
- 'If you experience any '
- . 'problems please submit a bug report manually.'
- );
- }
- $msg .= ' ' . __('You may want to refresh the page.');
- /* Create message object */
- if ($success) {
- $msg = Message::notice($msg);
- } else {
- $msg = Message::error($msg);
- }
- /* Add message to response */
- if ($response->isAjax()) {
- if ($_POST['exception_type'] == 'js') {
- $response->addJSON('message', $msg);
- } else {
- $response->addJSON('_errSubmitMsg', $msg);
- }
- } elseif ($_POST['exception_type'] == 'php') {
- $jsCode = 'PMA_ajaxShowMessage("<div class=\"error\">'
- . $msg
- . '</div>", false);';
- $response->getFooter()->getScripts()->addCode($jsCode);
- }
- if ($_POST['exception_type'] == 'php') {
- // clear previous errors & save new ones.
- $GLOBALS['error_handler']->savePreviousErrors();
- }
- /* Persist always send settings */
- if (isset($_POST['always_send'])
- && $_POST['always_send'] === "true"
- ) {
- $userPreferences = new UserPreferences();
- $userPreferences->persistOption("SendErrorReports", "always", "ask");
- }
- }
- } elseif (! empty($_POST['get_settings'])) {
- $response->addJSON('report_setting', $GLOBALS['cfg']['SendErrorReports']);
- } else {
- if ($_POST['exception_type'] == 'js') {
- $response->addHTML($errorReport->getForm());
- } else {
- // clear previous errors & save new ones.
- $GLOBALS['error_handler']->savePreviousErrors();
- }
- }
|