function useOutputPage() {
return $this->useMessageCache() &&
!empty( $GLOBALS['wgFullyInitialised'] ) &&
- ( !empty( $GLOBALS['wgArticle'] ) || ( !empty( $GLOBALS['wgOut'] ) && !$GLOBALS['wgOut']->isArticleRelated() ) ) &&
+ !empty( $GLOBALS['wgOut'] ) &&
+ !$GLOBALS['wgOut']->isArticleRelated() &&
!empty( $GLOBALS['wgTitle'] );
}
$args = array_slice( func_get_args(), 2 );
if ( $this->useMessageCache() ) {
- return wfMsgReal( $key, $args );
+ return wfMsgNoTrans( $key, $args );
} else {
return wfMsgReplaceArgs( $fallback, $args );
}
/* Return titles of this error page */
function getPageTitle() {
- if ( $this->useMessageCache() ) {
- return wfMsg( 'internalerror' );
- } else {
- global $wgSitename;
-
- return "$wgSitename error";
- }
+ global $wgSitename;
+ return $this->msg( 'internalerror', "$wgSitename error" );
}
/**
die( $hookResult );
}
- if ( defined( 'MEDIAWIKI_INSTALL' ) || $this->htmlBodyOnly() ) {
- echo $this->getHTML();
+ $html = $this->getHTML();
+ if ( defined( 'MEDIAWIKI_INSTALL' ) ) {
+ echo $html;
} else {
- echo $this->htmlHeader();
- echo $this->getHTML();
- echo $this->htmlFooter();
+ wfDie( $html );
}
}
}
/**
* 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, $wgOutputEncoding, $wgLang;
+ global $wgLogo, $wgLang;
if ( !headers_sent() ) {
header( 'HTTP/1.0 500 Internal Server Error' );
- header( 'Content-type: text/html; charset=' . $wgOutputEncoding );
+ 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' );
$header = Html::element( 'img', array(
'src' => $wgLogo,
- 'alt' => '' ), $this->getPageTitle() );
+ 'alt' => '' ) );
$attribs = array( 'dir' => $dir, 'lang' => $code );
/**
* print the end of the html page if not using $wgOut.
+ * @deprecated since 1.18
*/
function htmlFooter() {
return Html::closeElement( 'body' ) . Html::closeElement( 'html' );
}
- /**
- * headers handled by subclass?
- */
- function htmlBodyOnly() {
- return false;
- }
-
static function isCommandLine() {
return !empty( $GLOBALS['wgCommandLineMode'] ) && !defined( 'MEDIAWIKI_INSTALL' );
}
$this->title = $title;
$this->msg = $msg;
$this->params = $params;
- parent::__construct( wfMsg( $msg ) );
+
+ if( $msg instanceof Message ){
+ parent::__construct( $msg );
+ } else {
+ parent::__construct( wfMsg( $msg ) );
+ }
}
function report() {
global $wgOut;
- $wgOut->showErrorPage( $this->title, $this->msg, $this->params );
+ if ( $wgOut->getTitle() ) {
+ $wgOut->debug( 'Original title: ' . $wgOut->getTitle()->getPrefixedText() . "\n" );
+ }
+ $wgOut->setPageTitle( wfMsg( $this->title ) );
+ $wgOut->setHTMLTitle( wfMsg( 'errorpagetitle' ) );
+ $wgOut->setRobotPolicy( 'noindex,nofollow' );
+ $wgOut->setArticleRelated( false );
+ $wgOut->enableClientCache( false );
+ $wgOut->mRedirect = '';
+ $wgOut->clearHTML();
+
+ if( $this->msg instanceof Message ){
+ $wgOut->addHTML( $this->msg->parse() );
+ } else {
+ $wgOut->addWikiMsgArray( $this->msg, $this->params );
+ }
+
+ $wgOut->returnToMain();
$wgOut->output();
}
}
}
}
+/**
+ * Show an error when the wiki is locked/read-only and the user tries to do
+ * something that requires write access
+ */
+class ReadOnlyError extends ErrorPageError {
+ public function __construct(){
+ parent::__construct(
+ 'readonly',
+ 'readonlytext',
+ wfReadOnlyReason()
+ );
+ }
+}
+
+/**
+ * Show an error when the user hits a rate limit
+ */
+class ThrottledError extends ErrorPageError {
+ public function __construct(){
+ parent::__construct(
+ 'actionthrottled',
+ 'actionthrottledtext'
+ );
+ }
+ public function report(){
+ global $wgOut;
+ $wgOut->setStatusCode( 503 );
+ return parent::report();
+ }
+}
+
+/**
+ * Show an error when the user tries to do something whilst blocked
+ */
+class UserBlockedError extends ErrorPageError {
+ public function __construct( Block $block ){
+ global $wgLang;
+
+ $blockerUserpage = $block->getBlocker()->getUserPage();
+ $link = "[[{$blockerUserpage->getPrefixedText()}|{$blockerUserpage->getText()}]]";
+
+ $reason = $block->mReason;
+ if( $reason == '' ) {
+ $reason = wfMsg( 'blockednoreason' );
+ }
+
+ /* $ip returns who *is* being blocked, $intended contains who was meant to be blocked.
+ * This could be a username, an IP range, or a single IP. */
+ $intended = $block->getTarget();
+
+ parent::__construct(
+ 'blockedtitle',
+ $block->mAuto ? 'autoblocketext' : 'blockedtext',
+ array(
+ $link,
+ $reason,
+ wfGetIP(),
+ $block->getBlocker()->getName(),
+ $block->getId(),
+ $wgLang->formatExpiry( $block->mExpiry ),
+ $intended,
+ $wgLang->timeanddate( wfTimestamp( TS_MW, $block->mTimestamp ), true )
+ )
+ );
+ }
+}
+
/**
* Install an exception handler for MediaWiki exception types.
*/
if ( $cmdLine ) {
wfPrintError( $message );
} else {
- wfDie( htmlspecialchars( $message ) ) . "\n";
+ wfDie( nl2br( htmlspecialchars( $message ) ) ) . "\n";
}
}
} else {
if ( $cmdLine ) {
wfPrintError( $message );
} else {
- wfDie( htmlspecialchars( $message ) ) . "\n";
+ wfDie( nl2br( htmlspecialchars( $message ) ) ) . "\n";
}
}
}