From 25c3c061b51cbfe377ebb2decbe09f7db7bc7397 Mon Sep 17 00:00:00 2001 From: Chad Horohoe Date: Thu, 6 Jul 2017 12:42:11 -0700 Subject: [PATCH] Fix/hack ErrorPageError to work from non-UI contexts Right now, ErrorPageError *assumes* you're never running on the cli or the API. It's kinda a crappy superclass to use for errors unless you're 1000% sure you'll never hit that code path. Yay assumptions! Ideally, all of this report() crap is cleaned up and unified across the like 1192902117 places we have it spread out, but for now just detect the scenario and delegate back to MWException, which does the right thing Bug: T168337 Change-Id: Ia2f490528e128527a7a5ef1f4f5eea36ec9ee810 --- includes/exception/ErrorPageError.php | 11 +++++++---- .../phpunit/includes/exception/ErrorPageErrorTest.php | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/includes/exception/ErrorPageError.php b/includes/exception/ErrorPageError.php index 2bed87af362..4b1812673ff 100644 --- a/includes/exception/ErrorPageError.php +++ b/includes/exception/ErrorPageError.php @@ -61,9 +61,12 @@ class ErrorPageError extends MWException implements ILocalizedException { } public function report() { - global $wgOut; - - $wgOut->showErrorPage( $this->title, $this->msg, $this->params ); - $wgOut->output(); + if ( self::isCommandLine() || defined( 'MW_API' ) ) { + parent::report(); + } else { + global $wgOut; + $wgOut->showErrorPage( $this->title, $this->msg, $this->params ); + $wgOut->output(); + } } } diff --git a/tests/phpunit/includes/exception/ErrorPageErrorTest.php b/tests/phpunit/includes/exception/ErrorPageErrorTest.php index 71398e3f64c..e72865f6be5 100644 --- a/tests/phpunit/includes/exception/ErrorPageErrorTest.php +++ b/tests/phpunit/includes/exception/ErrorPageErrorTest.php @@ -43,6 +43,7 @@ class ErrorPageErrorTest extends MediaWikiTestCase { $mock->expects( $this->once() ) ->method( 'output' ); $this->setMwGlobals( 'wgOut', $mock ); + $this->setMwGlobals( 'wgCommandLineMode', false ); $e = new ErrorPageError( $title, $mockMessage, $params ); $e->report();