ChangesListSpecialPage: Don't short-circuit the ChangesList, instead format zero...
authorRoan Kattouw <roan.kattouw@gmail.com>
Wed, 5 Jul 2017 23:41:36 +0000 (16:41 -0700)
committerRoan Kattouw <roan.kattouw@gmail.com>
Wed, 5 Jul 2017 23:52:14 +0000 (16:52 -0700)
Short-circuiting the ChangesList causes bugs, because it causes
ChangesList::beginRecentChangesList() to be bypassed. This function
adds important styles and RL modules, especially when enhanced RC is enabled.

Instead, fake an empty result and let the ChangesList format it.
This will add styles and modules but otherwise produce no output.
(It does produce an empty div, but the idiosyncratic way in which the
subclasses deal with empty results causes that div not to be output.)

Bug: T169835
Change-Id: Ib831c781f4fe91eef787aef3d17e71780be9da51

includes/specialpage/ChangesListSpecialPage.php

index 0be0646..eb431a4 100644 (file)
@@ -22,6 +22,7 @@
  */
 use MediaWiki\Logger\LoggerFactory;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\FakeResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
@@ -518,13 +519,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $rows = $this->getRows();
                $opts = $this->getOptions();
                if ( $rows === false ) {
-                       if ( !$this->including() ) {
-                               $this->doHeader( $opts, 0 );
-                               $this->outputNoResults();
-                               $this->getOutput()->setStatusCode( 404 );
-                       }
-
-                       return;
+                       $rows = new FakeResultWrapper( [] );
                }
 
                $batch = new LinkBatch;