* Document Exception.php

* Pass $wgArticle by reference in MediaWiki::initialize() so that it can be set before executing an action and can be used when throwing an exception.
This commit is contained in:
Alexandre Emsenhuber 2008-03-21 16:56:44 +00:00
parent 477fe7a1a4
commit e59670fa15
3 changed files with 58 additions and 16 deletions

View file

@ -4,18 +4,33 @@
* MediaWiki exception
* @addtogroup Exception
*/
class MWException extends Exception
{
class MWException extends Exception {
/**
* Should the exception use $wgOut to output the error ?
* @return bool
*/
function useOutputPage() {
return !empty( $GLOBALS['wgFullyInitialised'] ) &&
!empty( $GLOBALS['wgArticle'] ) && !empty( $GLOBALS['wgTitle'] );
}
/**
* Can the extension use wfMsg() to get i18n messages ?
* @return bool
*/
function useMessageCache() {
global $wgLang;
return is_object( $wgLang );
}
/**
* Run hook to allow extensions to modify the text of the exception
*
* @param String $name class name of the exception
* @param Array $args arguments to pass to the callback functions
* @return mixed string to output or null if any hook has been called
*/
function runHooks( $name, $args = array() ) {
global $wgExceptionHooks;
if( !isset( $wgExceptionHooks ) || !is_array( $wgExceptionHooks ) )
@ -36,7 +51,15 @@ class MWException extends Exception
}
}
/** Get a message from i18n */
/**
* Get a message from i18n
*
* @param String $key message name
* @param String $fallback default message if the message cache can't be
* called by the exception
* The function also has other parameters that are arguments for the message
* @return String message with arguments replaced
*/
function msg( $key, $fallback /*[, params...] */ ) {
$args = array_slice( func_get_args(), 2 );
if ( $this->useMessageCache() ) {
@ -46,7 +69,13 @@ class MWException extends Exception
}
}
/* If wgShowExceptionDetails, return a HTML message with a backtrace to the error. */
/**
* If $wgShowExceptionDetails is true, return a HTML message with a
* backtrace to the error, otherwise show a message to ask to set it to true
* to show that information.
*
* @return String html to output
*/
function getHTML() {
global $wgShowExceptionDetails;
if( $wgShowExceptionDetails ) {
@ -60,7 +89,10 @@ class MWException extends Exception
}
}
/* If wgShowExceptionDetails, return a text message with a backtrace to the error */
/**
* If $wgShowExceptionDetails is true, return a text message with a
* backtrace to the error.
*/
function getText() {
global $wgShowExceptionDetails;
if( $wgShowExceptionDetails ) {
@ -82,8 +114,11 @@ class MWException extends Exception
}
}
/** Return the requested URL and point to file and line number from which the
/**
* Return the requested URL and point to file and line number from which the
* exception occured
*
* @return string
*/
function getLogMessage() {
global $wgRequest;
@ -119,7 +154,8 @@ class MWException extends Exception
}
}
/* Output a report about the exception and takes care of formatting.
/**
* Output a report about the exception and takes care of formatting.
* It will be either HTML or plain text based on $wgCommandLineMode.
*/
function report() {
@ -135,6 +171,10 @@ class MWException extends Exception
}
}
/**
* Send headers and output the beginning of the html page if not using
* $wgOut to output the exception.
*/
function htmlHeader() {
global $wgLogo, $wgSitename, $wgOutputEncoding;
@ -155,6 +195,9 @@ class MWException extends Exception
";
}
/**
* print the end of the html page if not using $wgOut.
*/
function htmlFooter() {
echo "</body></html>";
}

View file

@ -44,27 +44,26 @@ class MediaWiki {
* Performs the request too
*
* @param Title $title
* @param Article $article
* @param OutputPage $output
* @param User $user
* @param WebRequest $request
* @return Article either the object to become $wgArticle, or NULL
*/
function initialize( &$title, &$output, &$user, $request ) {
function initialize( &$title, &$article, &$output, &$user, $request ) {
wfProfileIn( __METHOD__ );
$this->preliminaryChecks( $title, $output, $request ) ;
$article = NULL;
if ( !$this->initializeSpecialCases( $title, $output, $request ) ) {
$article = $this->initializeArticle( $title, $request );
if( is_object( $article ) ) {
$new_article = $this->initializeArticle( $title, $request );
if( is_object( $new_article ) ) {
$article = $new_article;
$this->performAction( $output, $article, $title, $user, $request );
} elseif( is_string( $article ) ) {
$output->redirect( $article );
} elseif( is_string( $new_article ) ) {
$output->redirect( $new_article );
} else {
throw new MWException( "Shouldn't happen: MediaWiki::initializeArticle() returned neither an object nor a URL" );
}
}
wfProfileOut( __METHOD__ );
return $article;
}
/**

View file

@ -89,7 +89,7 @@ $mediaWiki->setVal( 'SquidMaxage', $wgSquidMaxage );
$mediaWiki->setVal( 'UseExternalEditor', $wgUseExternalEditor );
$mediaWiki->setVal( 'UsePathInfo', $wgUsePathInfo );
$wgArticle = $mediaWiki->initialize( $wgTitle, $wgOut, $wgUser, $wgRequest );
$mediaWiki->initialize( $wgTitle, $wgArticle, $wgOut, $wgUser, $wgRequest );
$mediaWiki->finalCleanup( $wgDeferredUpdateList, $wgLoadBalancer, $wgOut );
# Not sure when $wgPostCommitUpdateList gets set, so I keep this separate from finalCleanup