/** * Execute an action, and in case of an error, erase whatever partial results * have been accumulated, and replace it with an error message and a help screen. */ protected function executeActionWithErrorHandling() { // Verify the CORS header before executing the action if (!$this->handleCORS()) { // handleCORS() has sent a 403, abort return; } // Exit here if the request method was OPTIONS // (assume there will be a followup GET or POST) if ($this->getRequest()->getMethod() === 'OPTIONS') { return; } // In case an error occurs during data output, // clear the output buffer and print just the error information ob_start(); $t = microtime(true); try { $this->executeAction(); } catch (Exception $e) { $this->handleException($e); } // Log the request whether or not there was an error $this->logRequest(microtime(true) - $t); // Send cache headers after any code which might generate an error, to // avoid sending public cache headers for errors. $this->sendCacheHeaders(); if ($this->mPrinter->getIsHtml() && !$this->mPrinter->isDisabled()) { echo wfReportTime(); } ob_end_flush(); }
/** * Execute an action, and in case of an error, erase whatever partial results * have been accumulated, and replace it with an error message and a help screen. */ protected function executeActionWithErrorHandling() { // Verify the CORS header before executing the action if (!$this->handleCORS()) { // handleCORS() has sent a 403, abort return; } // Exit here if the request method was OPTIONS // (assume there will be a followup GET or POST) if ($this->getRequest()->getMethod() === 'OPTIONS') { return; } // In case an error occurs during data output, // clear the output buffer and print just the error information ob_start(); $t = microtime(true); try { $this->executeAction(); } catch (Exception $e) { // Allow extra cleanup and logging wfRunHooks('ApiMain::onException', array($this, $e)); // Log it if ($e instanceof MWException && !$e instanceof UsageException) { global $wgLogExceptionBacktrace; if ($wgLogExceptionBacktrace) { wfDebugLog('exception', $e->getLogMessage() . "\n" . $e->getTraceAsString() . "\n"); } else { wfDebugLog('exception', $e->getLogMessage()); } } // Handle any kind of exception by outputting properly formatted error message. // If this fails, an unhandled exception should be thrown so that global error // handler will process and log it. $errCode = $this->substituteResultWithError($e); // Error results should not be cached $this->setCacheMode('private'); $response = $this->getRequest()->response(); $headerStr = 'MediaWiki-API-Error: ' . $errCode; if ($e->getCode() === 0) { $response->header($headerStr); } else { $response->header($headerStr, true, $e->getCode()); } // Reset and print just the error message ob_clean(); // If the error occurred during printing, do a printer->profileOut() $this->mPrinter->safeProfileOut(); $this->printResult(true); } // Log the request whether or not there was an error $this->logRequest(microtime(true) - $t); // Send cache headers after any code which might generate an error, to // avoid sending public cache headers for errors. $this->sendCacheHeaders(); if ($this->mPrinter->getIsHtml() && !$this->mPrinter->isDisabled()) { echo wfReportTime(); } ob_end_flush(); }
/** * Execute an action, and in case of an error, erase whatever partial results * have been accumulated, and replace it with an error message and a help screen. */ protected function executeActionWithErrorHandling() { // In case an error occurs during data output, // clear the output buffer and print just the error information ob_start(); try { $this->executeAction(); } catch (Exception $e) { // Log it if ($e instanceof MWException) { wfDebugLog('exception', $e->getLogMessage()); } // Handle any kind of exception by outputing properly formatted error message. // If this fails, an unhandled exception should be thrown so that global error // handler will process and log it. $errCode = $this->substituteResultWithError($e); // Error results should not be cached $this->setCacheMode('private'); $response = $this->getRequest()->response(); $headerStr = 'MediaWiki-API-Error: ' . $errCode; if ($e->getCode() === 0) { $response->header($headerStr); } else { $response->header($headerStr, true, $e->getCode()); } // Reset and print just the error message ob_clean(); // If the error occured during printing, do a printer->profileOut() $this->mPrinter->safeProfileOut(); $this->printResult(true); } // Send cache headers after any code which might generate an error, to // avoid sending public cache headers for errors. $this->sendCacheHeaders(); if ($this->mPrinter->getIsHtml() && !$this->mPrinter->isDisabled()) { echo wfReportTime(); } ob_end_flush(); }