X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fexception%2FMWExceptionRenderer.php;h=1f1cabeae154d2f0e03729057d17dbc48db99dbc;hp=dc8dfd0b3ec10c8cc9c715764c111ca0e3fe10f4;hb=4df0c71911500466a6330b8fe29c623ef5b51e41;hpb=11ee7f78da9776db26098642a151a288f98bea14 diff --git a/includes/exception/MWExceptionRenderer.php b/includes/exception/MWExceptionRenderer.php index dc8dfd0b3e..1f1cabeae1 100644 --- a/includes/exception/MWExceptionRenderer.php +++ b/includes/exception/MWExceptionRenderer.php @@ -19,7 +19,6 @@ */ use Wikimedia\Rdbms\DBConnectionError; -use Wikimedia\Rdbms\DBError; use Wikimedia\Rdbms\DBReadOnlyError; use Wikimedia\Rdbms\DBExpectedError; @@ -37,7 +36,7 @@ class MWExceptionRenderer { * @param Exception|Throwable|null $eNew New exception from attempting to show the first */ public static function output( $e, $mode, $eNew = null ) { - global $wgMimeType; + global $wgMimeType, $wgShowExceptionDetails; if ( defined( 'MW_API' ) ) { // Unhandled API exception, we can't be sure that format printer is alive @@ -47,16 +46,18 @@ class MWExceptionRenderer { self::printError( self::getText( $e ) ); } elseif ( $mode === self::AS_PRETTY ) { self::statusHeader( 500 ); + self::header( "Content-Type: $wgMimeType; charset=utf-8" ); if ( $e instanceof DBConnectionError ) { self::reportOutageHTML( $e ); } else { - self::header( "Content-Type: $wgMimeType; charset=utf-8" ); self::reportHTML( $e ); } } else { + self::statusHeader( 500 ); + self::header( "Content-Type: $wgMimeType; charset=utf-8" ); if ( $eNew ) { $message = "MediaWiki internal error.\n\n"; - if ( self::showBackTrace( $e ) ) { + if ( $wgShowExceptionDetails ) { $message .= 'Original exception: ' . MWExceptionHandler::getLogMessage( $e ) . "\nBacktrace:\n" . MWExceptionHandler::getRedactedTraceAsString( $e ) . @@ -71,7 +72,7 @@ class MWExceptionRenderer { } $message .= "\n"; } else { - if ( self::showBackTrace( $e ) ) { + if ( $wgShowExceptionDetails ) { $message = MWExceptionHandler::getLogMessage( $e ) . "\nBacktrace:\n" . MWExceptionHandler::getRedactedTraceAsString( $e ) . "\n"; @@ -160,7 +161,9 @@ class MWExceptionRenderer { * @return string Html to output */ public static function getHTML( $e ) { - if ( self::showBackTrace( $e ) ) { + global $wgShowExceptionDetails; + + if ( $wgShowExceptionDetails ) { $html = "

" . nl2br( htmlspecialchars( MWExceptionHandler::getLogMessage( $e ) ) ) . '

Backtrace:

' . @@ -194,12 +197,17 @@ class MWExceptionRenderer { * @return string Message with arguments replaced */ private static function msg( $key, $fallback /*[, params...] */ ) { + global $wgSitename; $args = array_slice( func_get_args(), 2 ); try { - return wfMessage( $key, $args )->text(); + $res = wfMessage( $key, $args )->text(); } catch ( Exception $e ) { - return wfMsgReplaceArgs( $fallback, $args ); + $res = wfMsgReplaceArgs( $fallback, $args ); + // If an exception happens inside message rendering, + // {{SITENAME}} sometimes won't be replaced. + $res = preg_replace( '/\{\{SITENAME\}\}/', $wgSitename, $res ); } + return $res; } /** @@ -207,7 +215,9 @@ class MWExceptionRenderer { * @return string */ private static function getText( $e ) { - if ( self::showBackTrace( $e ) ) { + global $wgShowExceptionDetails; + + if ( $wgShowExceptionDetails ) { return MWExceptionHandler::getLogMessage( $e ) . "\nBacktrace:\n" . MWExceptionHandler::getRedactedTraceAsString( $e ) . "\n"; @@ -216,34 +226,13 @@ class MWExceptionRenderer { } } - /** - * @param Exception|Throwable $e - * @return bool - */ - private static function showBackTrace( $e ) { - global $wgShowExceptionDetails, $wgShowDBErrorBacktrace; - - return ( - $wgShowExceptionDetails && - ( !( $e instanceof DBError ) || $wgShowDBErrorBacktrace ) - ); - } - /** * @param Exception|Throwable $e * @return string */ private static function getShowBacktraceError( $e ) { - global $wgShowExceptionDetails, $wgShowDBErrorBacktrace; - $vars = []; - if ( !$wgShowExceptionDetails ) { - $vars[] = '$wgShowExceptionDetails = true;'; - } - if ( $e instanceof DBError && !$wgShowDBErrorBacktrace ) { - $vars[] = '$wgShowDBErrorBacktrace = true;'; - } - $vars = implode( ' and ', $vars ); - return "Set $vars at the bottom of LocalSettings.php to show detailed debugging information."; + $var = '$wgShowExceptionDetails = true;'; + return "Set $var at the bottom of LocalSettings.php to show detailed debugging information."; } /** @@ -292,7 +281,7 @@ class MWExceptionRenderer { * @param Exception|Throwable $e */ private static function reportOutageHTML( $e ) { - global $wgShowDBErrorBacktrace, $wgShowHostnames, $wgShowSQLErrors; + global $wgShowExceptionDetails, $wgShowHostnames, $wgSitename; $sorry = htmlspecialchars( self::msg( 'dberr-problems', @@ -303,7 +292,7 @@ class MWExceptionRenderer { 'Try waiting a few minutes and reloading.' ) ); - if ( $wgShowHostnames || $wgShowSQLErrors ) { + if ( $wgShowHostnames ) { $info = str_replace( '$1', Html::element( 'span', [ 'dir' => 'ltr' ], $e->getMessage() ), @@ -317,17 +306,22 @@ class MWExceptionRenderer { } MessageCache::singleton()->disable(); // no DB access + $html = "\n" . + '' . + '' . + htmlspecialchars( $wgSitename ) . + '' . + '' . + "

$sorry

$again

$info

"; - $html = "

$sorry

$again

$info

"; - - if ( $wgShowDBErrorBacktrace ) { + if ( $wgShowExceptionDetails ) { $html .= '

Backtrace:

' .
 				htmlspecialchars( $e->getTraceAsString() ) . '
'; } $html .= '
'; $html .= self::googleSearchForm(); - + $html .= ''; echo $html; }