Merge "Properly detect if CACHE_ACCEL is available in the installer"
[lhc/web/wiklou.git] / includes / specials / SpecialUnwatchedpages.php
index df57744..fea7e21 100644 (file)
@@ -24,6 +24,9 @@
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  */
 
+use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * A special page that displays a list of pages that are not on anyones watchlist.
  *
@@ -43,7 +46,28 @@ class UnwatchedpagesPage extends QueryPage {
                return false;
        }
 
+       /**
+        * Pre-cache page existence to speed up link generation
+        *
+        * @param IDatabase $db
+        * @param ResultWrapper $res
+        */
+       public function preprocessResults( $db, $res ) {
+               if ( !$res->numRows() ) {
+                       return;
+               }
+
+               $batch = new LinkBatch();
+               foreach ( $res as $row ) {
+                       $batch->add( $row->namespace, $row->title );
+               }
+               $batch->execute();
+
+               $res->seek( 0 );
+       }
+
        public function getQueryInfo() {
+               $dbr = wfGetDB( DB_REPLICA );
                return [
                        'tables' => [ 'page', 'watchlist' ],
                        'fields' => [
@@ -54,7 +78,7 @@ class UnwatchedpagesPage extends QueryPage {
                        'conds' => [
                                'wl_title IS NULL',
                                'page_is_redirect' => 0,
-                               "page_namespace != '" . NS_MEDIAWIKI . "'"
+                               'page_namespace != ' . $dbr->addQuotes( NS_MEDIAWIKI ),
                        ],
                        'join_conds' => [ 'watchlist' => [
                                'LEFT JOIN', [ 'wl_title = page_title',
@@ -95,10 +119,12 @@ class UnwatchedpagesPage extends QueryPage {
 
                $text = $wgContLang->convert( $nt->getPrefixedText() );
 
-               $plink = Linker::linkKnown( $nt, htmlspecialchars( $text ) );
-               $wlink = Linker::linkKnown(
+               $linkRenderer = $this->getLinkRenderer();
+
+               $plink = $linkRenderer->makeKnownLink( $nt, $text );
+               $wlink = $linkRenderer->makeKnownLink(
                        $nt,
-                       $this->msg( 'watch' )->escaped(),
+                       $this->msg( 'watch' )->text(),
                        [ 'class' => 'mw-watch-link' ],
                        [ 'action' => 'watch' ]
                );