* 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:
parent
477fe7a1a4
commit
e59670fa15
3 changed files with 58 additions and 16 deletions
|
|
@ -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>";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue