http://www.mediawiki.org/wiki/Special:Code/MediaWiki/89144

Revision: 89144
Author:   demon
Date:     2011-05-30 00:18:10 +0000 (Mon, 30 May 2011)
Log Message:
-----------
Misc. exception handling cleanup--moved it out of global function namespace
Also removed htmlHeader() and htmlFooter() since it has zero callers anywhere.
Not sure why useOutputPage() was checking isArticleRelated(), we should be able 
do use it with other stuff too

Modified Paths:
--------------
    trunk/phase3/includes/AutoLoader.php
    trunk/phase3/includes/Exception.php
    trunk/phase3/includes/Setup.php
    trunk/phase3/index.php

Modified: trunk/phase3/includes/AutoLoader.php
===================================================================
--- trunk/phase3/includes/AutoLoader.php        2011-05-29 23:55:06 UTC (rev 
89143)
+++ trunk/phase3/includes/AutoLoader.php        2011-05-30 00:18:10 UTC (rev 
89144)
@@ -151,6 +151,7 @@
        'MessageBlobStore' => 'includes/MessageBlobStore.php',
        'MimeMagic' => 'includes/MimeMagic.php',
        'MWException' => 'includes/Exception.php',
+       'MWExceptionHandler' => 'includes/Exception.php',
        'MWFunction' => 'includes/MWFunction.php',
        'MWHttpRequest' => 'includes/HttpFunctions.php',
        'MWInit' => 'includes/Init.php',

Modified: trunk/phase3/includes/Exception.php
===================================================================
--- trunk/phase3/includes/Exception.php 2011-05-29 23:55:06 UTC (rev 89143)
+++ trunk/phase3/includes/Exception.php 2011-05-30 00:18:10 UTC (rev 89144)
@@ -23,7 +23,6 @@
                return $this->useMessageCache() &&
                        !empty( $GLOBALS['wgFullyInitialised'] ) &&
                        !empty( $GLOBALS['wgOut'] ) &&
-                       !$GLOBALS['wgOut']->isArticleRelated() &&
                        !empty( $GLOBALS['wgTitle'] );
        }
 
@@ -166,7 +165,6 @@
        /** Output the exception report using HTML */
        function reportHTML() {
                global $wgOut;
-
                if ( $this->useOutputPage() ) {
                        $wgOut->setPageTitle( $this->getPageTitle() );
                        $wgOut->setRobotPolicy( "noindex,nofollow" );
@@ -210,76 +208,12 @@
                }
 
                if ( self::isCommandLine() ) {
-                       wfPrintError( $this->getText() );
+                       MWExceptionHandler::printError( $this->getText() );
                } else {
                        $this->reportHTML();
                }
        }
 
-       /**
-        * Send headers and output the beginning of the html page if not using
-        * $wgOut to output the exception.
-        * @deprecated since 1.18 call wfDie() if you need to die immediately
-        */
-       function htmlHeader() {
-               global $wgLogo, $wgLang;
-
-               if ( !headers_sent() ) {
-                       header( 'HTTP/1.0 500 Internal Server Error' );
-                       header( 'Content-type: text/html; charset=UTF-8' );
-                       /* Don't cache error pages!  They cause no end of 
trouble... */
-                       header( 'Cache-control: none' );
-                       header( 'Pragma: nocache' );
-               }
-
-               $head = Html::element( 'title', null, $this->getPageTitle() ) . 
"\n";
-               $head .= Html::inlineStyle( <<<ENDL
-       body {
-               color: #000;
-               background-color: #fff;
-               font-family: sans-serif;
-               padding: 2em;
-               text-align: center;
-       }
-       p, img, h1 {
-               text-align: left;
-               margin: 0.5em 0;
-       }
-       h1 {
-               font-size: 120%;
-       }
-ENDL
-               );
-
-               $dir = 'ltr';
-               $code = 'en';
-
-               if ( $wgLang instanceof Language ) {
-                       $dir = $wgLang->getDir();
-                       $code = $wgLang->getCode();
-               }
-
-               $header = Html::element( 'img', array(
-                       'src' => $wgLogo,
-                       'alt' => '' ) );
-
-               $attribs = array( 'dir' => $dir, 'lang' => $code );
-
-               return
-                       Html::htmlHeader( $attribs ) .
-                       Html::rawElement( 'head', null, $head ) . "\n".
-                       Html::openElement( 'body' ) . "\n" .
-                       $header . "\n";
-       }
-
-       /**
-        * print the end of the html page if not using $wgOut.
-        * @deprecated since 1.18
-        */
-       function htmlFooter() {
-               return Html::closeElement( 'body' ) . Html::closeElement( 
'html' );
-       }
-
        static function isCommandLine() {
                return !empty( $GLOBALS['wgCommandLineMode'] ) && !defined( 
'MEDIAWIKI_INSTALL' );
        }
@@ -450,100 +384,105 @@
 }
 
 /**
- * Install an exception handler for MediaWiki exception types.
+ * Handler class for MWExceptions
  */
-function wfInstallExceptionHandler() {
-       set_exception_handler( 'wfExceptionHandler' );
-}
+class MWExceptionHandler {
+       /**
+        * Install an exception handler for MediaWiki exception types.
+        */
+       public static function installHandler() {
+               set_exception_handler( array( 'MWExceptionHandler', 'handle' ) 
);
+       }
 
-/**
- * Report an exception to the user
- */
-function wfReportException( Exception $e ) {
-       global $wgShowExceptionDetails;
+       /**
+        * Report an exception to the user
+        */
+       protected static function report( Exception $e ) {
+               global $wgShowExceptionDetails;
 
-       $cmdLine = MWException::isCommandLine();
+               $cmdLine = MWException::isCommandLine();
 
-       if ( $e instanceof MWException ) {
-               try {
-                       // Try and show the exception prettily, with the normal 
skin infrastructure
-                       $e->report();
-               } catch ( Exception $e2 ) {
-                       // Exception occurred from within exception handler
-                       // Show a simpler error message for the original 
exception,
-                       // don't try to invoke report()
-                       $message = "MediaWiki internal error.\n\n";
+               if ( $e instanceof MWException ) {
+                       try {
+                               // Try and show the exception prettily, with 
the normal skin infrastructure
+                               $e->report();
+                       } catch ( Exception $e2 ) {
+                               // Exception occurred from within exception 
handler
+                               // Show a simpler error message for the 
original exception,
+                               // don't try to invoke report()
+                               $message = "MediaWiki internal error.\n\n";
 
+                               if ( $wgShowExceptionDetails ) {
+                                       $message .= 'Original exception: ' . 
$e->__toString() . "\n\n" .
+                                               'Exception caught inside 
exception handler: ' . $e2->__toString();
+                               } else {
+                                       $message .= "Exception caught inside 
exception handler.\n\n" .
+                                               "Set \$wgShowExceptionDetails = 
true; at the bottom of LocalSettings.php " .
+                                               "to show detailed debugging 
information.";
+                               }
+
+                               $message .= "\n";
+
+                               if ( $cmdLine ) {
+                                       self::printError( $message );
+                               } else {
+                                       wfDie( nl2br( htmlspecialchars( 
$message ) ) ) . "\n";
+                               }
+                       }
+               } else {
+                       $message = "Unexpected non-MediaWiki exception 
encountered, of type \"" . get_class( $e ) . "\"\n" .
+                               $e->__toString() . "\n";
+
                        if ( $wgShowExceptionDetails ) {
-                               $message .= 'Original exception: ' . 
$e->__toString() . "\n\n" .
-                                       'Exception caught inside exception 
handler: ' . $e2->__toString();
-                       } else {
-                               $message .= "Exception caught inside exception 
handler.\n\n" .
-                                       "Set \$wgShowExceptionDetails = true; 
at the bottom of LocalSettings.php " .
-                                       "to show detailed debugging 
information.";
+                               $message .= "\n" . $e->getTraceAsString() . 
"\n";
                        }
 
-                       $message .= "\n";
-
                        if ( $cmdLine ) {
-                               wfPrintError( $message );
+                               self::printError( $message );
                        } else {
                                wfDie( nl2br( htmlspecialchars( $message ) ) ) 
. "\n";
                        }
                }
-       } else {
-               $message = "Unexpected non-MediaWiki exception encountered, of 
type \"" . get_class( $e ) . "\"\n" .
-                       $e->__toString() . "\n";
+       }
 
-               if ( $wgShowExceptionDetails ) {
-                       $message .= "\n" . $e->getTraceAsString() . "\n";
-               }
-
-               if ( $cmdLine ) {
-                       wfPrintError( $message );
+       /**
+        * Print a message, if possible to STDERR.
+        * Use this in command line mode only (see isCommandLine)
+        */
+       public static function printError( $message ) {
+               # NOTE: STDERR may not be available, especially if php-cgi is 
used from the command line (bug #15602).
+               #      Try to produce meaningful output anyway. Using echo may 
corrupt output to STDOUT though.
+               if ( defined( 'STDERR' ) ) {
+                       fwrite( STDERR, $message );
                } else {
-                       wfDie( nl2br( htmlspecialchars( $message ) ) ) . "\n";
+                       echo( $message );
                }
        }
-}
 
-/**
- * Print a message, if possible to STDERR.
- * Use this in command line mode only (see isCommandLine)
- */
-function wfPrintError( $message ) {
-       # NOTE: STDERR may not be available, especially if php-cgi is used from 
the command line (bug #15602).
-       #      Try to produce meaningful output anyway. Using echo may corrupt 
output to STDOUT though.
-       if ( defined( 'STDERR' ) ) {
-               fwrite( STDERR, $message );
-       } else {
-               echo( $message );
-       }
-}
+       /**
+        * Exception handler which simulates the appropriate catch() handling:
+        *
+        *   try {
+        *       ...
+        *   } catch ( MWException $e ) {
+        *       $e->report();
+        *   } catch ( Exception $e ) {
+        *       echo $e->__toString();
+        *   }
+        */
+       public static function handle( $e ) {
+               global $wgFullyInitialised;
 
-/**
- * Exception handler which simulates the appropriate catch() handling:
- *
- *   try {
- *       ...
- *   } catch ( MWException $e ) {
- *       $e->report();
- *   } catch ( Exception $e ) {
- *       echo $e->__toString();
- *   }
- */
-function wfExceptionHandler( $e ) {
-       global $wgFullyInitialised;
+               self::report( $e );
 
-       wfReportException( $e );
+               // Final cleanup
+               if ( $wgFullyInitialised ) {
+                       try {
+                               wfLogProfilingData(); // uses $wgRequest, hence 
the $wgFullyInitialised condition
+                       } catch ( Exception $e ) {}
+               }
 
-       // Final cleanup
-       if ( $wgFullyInitialised ) {
-               try {
-                       wfLogProfilingData(); // uses $wgRequest, hence the 
$wgFullyInitialised condition
-               } catch ( Exception $e ) {}
+               // Exit value should be nonzero for the benefit of shell jobs
+               exit( 1 );
        }
-
-       // Exit value should be nonzero for the benefit of shell jobs
-       exit( 1 );
 }

Modified: trunk/phase3/includes/Setup.php
===================================================================
--- trunk/phase3/includes/Setup.php     2011-05-29 23:55:06 UTC (rev 89143)
+++ trunk/phase3/includes/Setup.php     2011-05-30 00:18:10 UTC (rev 89144)
@@ -327,8 +327,7 @@
        }
 
        wfProfileIn( $fname . '-exception' );
-       require_once( "$IP/includes/Exception.php" );
-       wfInstallExceptionHandler();
+       MWExceptionHandler::installHandler();
        wfProfileOut( $fname . '-exception' );
 
        wfProfileIn( $fname . '-includes' );

Modified: trunk/phase3/index.php
===================================================================
--- trunk/phase3/index.php      2011-05-29 23:55:06 UTC (rev 89143)
+++ trunk/phase3/index.php      2011-05-30 00:18:10 UTC (rev 89144)
@@ -69,7 +69,7 @@
 try {
        wfIndexMain();
 } catch ( Exception $e ) {
-       wfExceptionHandler( $e );
+       MWExceptionHandler::handle( $e );
 }
 
 function wfIndexMain() {


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to