From e59670fa1589b47b24015f3c32133001795799b0 Mon Sep 17 00:00:00 2001 From: Alexandre Emsenhuber Date: Fri, 21 Mar 2008 16:56:44 +0000 Subject: [PATCH] * 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. --- includes/Exception.php | 57 ++++++++++++++++++++++++++++++++++++------ includes/Wiki.php | 15 ++++++----- index.php | 2 +- 3 files changed, 58 insertions(+), 16 deletions(-) diff --git a/includes/Exception.php b/includes/Exception.php index 2fd5435243..742a8de829 100644 --- a/includes/Exception.php +++ b/includes/Exception.php @@ -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 ""; } diff --git a/includes/Wiki.php b/includes/Wiki.php index b19cc22f83..061d1a957a 100644 --- a/includes/Wiki.php +++ b/includes/Wiki.php @@ -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; } /** diff --git a/index.php b/index.php index 3716c6f889..4ff111b723 100644 --- a/index.php +++ b/index.php @@ -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 -- 2.20.1