MWExceptionRenderer: Fix db error outage page
authorStrainu <wiki@strainu.ro>
Thu, 24 May 2018 20:23:26 +0000 (23:23 +0300)
committerReedy <reedy@wikimedia.org>
Thu, 7 Feb 2019 22:30:56 +0000 (22:30 +0000)
Set content encoding and add some content to the header tag.

Bug: T195525
Change-Id: Ieabfe18280359459e9462204371d3fe8d62a4177
(cherry picked from commit 94b58b2c268541cf09612f5f9fa99c7c3edb2af4)

RELEASE-NOTES-1.31
includes/exception/MWExceptionRenderer.php

index e27cda2..a8cc760 100644 (file)
@@ -51,6 +51,7 @@ THIS IS NOT A RELEASE YET
 * (T204767) Add join conditions to ActiveUsersPager
 * (T210621) User: Bypass repeatable-read when creating an actor_id.
 * (T204531) rdbms: reduce LoadBalancer replication log spam.
+* (T195525) Fix db error outage page.
 
 == MediaWiki 1.31.1 ==
 
index dc8dfd0..88b28df 100644 (file)
@@ -47,13 +47,15 @@ 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 ) ) {
@@ -292,7 +294,7 @@ class MWExceptionRenderer {
         * @param Exception|Throwable $e
         */
        private static function reportOutageHTML( $e ) {
-               global $wgShowDBErrorBacktrace, $wgShowHostnames, $wgShowSQLErrors;
+               global $wgShowDBErrorBacktrace, $wgShowHostnames, $wgShowSQLErrors, $wgSitename;
 
                $sorry = htmlspecialchars( self::msg(
                        'dberr-problems',
@@ -317,8 +319,13 @@ class MWExceptionRenderer {
                }
 
                MessageCache::singleton()->disable(); // no DB access
-
-               $html = "<h1>$sorry</h1><p>$again</p><p><small>$info</small></p>";
+               $html = "<!DOCTYPE html>\n" .
+                               '<html><head>' .
+                               '<title>' .
+                               htmlspecialchars( $wgSitename ) .
+                               '</title>' .
+                               '<style>body { font-family: sans-serif; margin: 0; padding: 0.5em 2em; }</style>' .
+                               "</head><body><h1>$sorry</h1><p>$again</p><p><small>$info</small></p>";
 
                if ( $wgShowDBErrorBacktrace ) {
                        $html .= '<p>Backtrace:</p><pre>' .
@@ -327,7 +334,7 @@ class MWExceptionRenderer {
 
                $html .= '<hr />';
                $html .= self::googleSearchForm();
-
+               $html .= '</body></html>';
                echo $html;
        }