http://www.mediawiki.org/wiki/Special:Code/MediaWiki/84446

Revision: 84446
Author:   aaron
Date:     2011-03-21 14:32:07 +0000 (Mon, 21 Mar 2011)
Log Message:
-----------
* Pass pager->getNumRows() into explanatory message
* Use link() function for links (some pages now use linkbatch for this)
* Use HTML functions a bit more
* Don't call purgeExpiredConfigurations() so much
* Other random cleanups

Modified Paths:
--------------
    trunk/extensions/FlaggedRevs/specialpages/ConfiguredPages_body.php
    trunk/extensions/FlaggedRevs/specialpages/PendingChanges_body.php
    trunk/extensions/FlaggedRevs/specialpages/ProblemChanges_body.php
    trunk/extensions/FlaggedRevs/specialpages/ReviewedPages_body.php
    trunk/extensions/FlaggedRevs/specialpages/StablePages_body.php
    trunk/extensions/FlaggedRevs/specialpages/UnreviewedPages_body.php

Modified: trunk/extensions/FlaggedRevs/specialpages/ConfiguredPages_body.php
===================================================================
--- trunk/extensions/FlaggedRevs/specialpages/ConfiguredPages_body.php  
2011-03-21 14:26:22 UTC (rev 84445)
+++ trunk/extensions/FlaggedRevs/specialpages/ConfiguredPages_body.php  
2011-03-21 14:32:07 UTC (rev 84446)
@@ -7,6 +7,8 @@
 // Assumes $wgFlaggedRevsProtection is off
 class ConfiguredPages extends SpecialPage
 {
+       protected $pager = null;
+
        public function __construct() {
                parent::__construct( 'ConfiguredPages' );
        }
@@ -21,13 +23,18 @@
                $this->override = $wgRequest->getIntOrNull( 'stable' );
                $this->autoreview = $wgRequest->getVal( 'restriction', '' );
 
+               $this->pager = new ConfiguredPagesPager(
+                       $this, array(), $this->namespace, $this->override, 
$this->autoreview );
+
                $this->showForm();
                $this->showPageList();
        }
 
        protected function showForm() {
                global $wgOut, $wgScript;
-               $wgOut->addWikiMsg( 'configuredpages-list' );
+               # Explanatory text
+               $wgOut->addWikiMsg( 'configuredpages-list', 
$this->pager->getNumRows() );
+
                $fields = array();
                # Namespace selector
                if ( count( FlaggedRevs::getReviewNamespaces() ) > 1 ) {
@@ -36,46 +43,47 @@
                # Default version selector
                $fields[] = FlaggedRevsXML::getDefaultFilterMenu( 
$this->override );
                # Restriction level selector
-               if( FlaggedRevs::getRestrictionLevels() ) {
+               if ( FlaggedRevs::getRestrictionLevels() ) {
                        $fields[] = FlaggedRevsXML::getRestrictionFilterMenu( 
$this->autoreview );
                }
-               if ( count( $fields ) ) {
-                       $form = Xml::openElement( 'form',
-                               array( 'name' => 'configuredpages', 'action' => 
$wgScript, 'method' => 'get' ) );
-                       $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() );
-                       $form .= "<fieldset><legend>" . wfMsg( 
'configuredpages' ) . "</legend>\n";
-                       $form .= implode( '&#160;', $fields ) . '<br/>';
-                       $form .= Xml::submitButton( wfMsg( 'go' ) );
-                       $form .= "</fieldset>\n";
-                       $form .= Xml::closeElement( 'form' );
-                       $wgOut->addHTML( $form );
-               }
+
+               $form = Html::openElement( 'form',
+                       array( 'name' => 'configuredpages', 'action' => 
$wgScript, 'method' => 'get' ) );
+               $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() );
+               $form .= "<fieldset><legend>" . wfMsg( 'configuredpages' ) . 
"</legend>\n";
+               $form .= implode( '&#160;', $fields ) . '<br/>';
+               $form .= Xml::submitButton( wfMsg( 'go' ) );
+               $form .= "</fieldset>\n";
+               $form .= Html::closeElement( 'form' ) . "\n";
+
+               $wgOut->addHTML( $form );
        }
 
        protected function showPageList() {
                global $wgOut;
-               $pager = new ConfiguredPagesPager( $this, array(),
-                       $this->namespace, $this->override, $this->autoreview );
-               if ( $pager->getNumRows() ) {
-                       $wgOut->addHTML( $pager->getNavigationBar() );
-                       $wgOut->addHTML( $pager->getBody() );
-                       $wgOut->addHTML( $pager->getNavigationBar() );
+               if ( $this->pager->getNumRows() ) {
+                       $wgOut->addHTML( $this->pager->getNavigationBar() );
+                       $wgOut->addHTML( $this->pager->getBody() );
+                       $wgOut->addHTML( $this->pager->getNavigationBar() );
                } else {
                        $wgOut->addWikiMsg( 'configuredpages-none' );
                }
-               # Take this opportunity to purge out expired configurations
-               FlaggedPageConfig::purgeExpiredConfigurations();
+               # Purge expired entries on one in every 10 queries
+               if ( !mt_rand( 0, 10 ) ) {
+                       FlaggedPageConfig::purgeExpiredConfigurations();
+               }
        }
 
        public function formatRow( $row ) {
                global $wgLang;
-               $title = Title::makeTitle( $row->page_namespace, 
$row->page_title );
+               $title = Title::newFromRow( $row );
                # Link to page
-               $link = $this->skin->makeKnownLinkObj( $title, 
$title->getPrefixedText() );
+               $link = $this->skin->link( $title );
                # Link to page configuration
-               $config = $this->skin->makeKnownLinkObj(
+               $config = $this->skin->linkKnown(
                        SpecialPage::getTitleFor( 'Stabilization' ),
                        wfMsgHtml( 'configuredpages-config' ),
+                       array(),
                        'page=' . $title->getPrefixedUrl()
                );
                # Show which version is the default (stable or draft)
@@ -101,7 +109,8 @@
                } else {
                        $expiry_description = "";
                }
-               return "<li>{$link} ({$config}) <b>[$default]</b> 
{$restr}<i>{$expiry_description}</i></li>";
+               return "<li>{$link} ({$config}) <b>[$default]</b> " .
+                       "{$restr}<i>{$expiry_description}</i></li>";
        }
 }
 
@@ -111,12 +120,12 @@
 class ConfiguredPagesPager extends AlphabeticPager {
        public $mForm, $mConds, $namespace, $override, $autoreview;
 
-       // @param int $namespace (null for "all")
-       // @param int $override (null for "either")
-       // @param string $autoreview ('' for "all", 'none' for no restriction)
-       function __construct(
-               $form, $conds = array(), $namespace, $override, $autoreview
-       ) {
+       /*
+       * @param int $namespace (null for "all")
+       * @param int $override (null for "either")
+       * @param string $autoreview ('' for "all", 'none' for no restriction)
+       */
+       function __construct( $form, $conds = array(), $namespace, $override, 
$autoreview ) {
                $this->mForm = $form;
                $this->mConds = $conds;
                # Must be content pages...
@@ -171,7 +180,7 @@
        function getIndexField() {
                return 'fpc_page_id';
        }
-       
+
        function getStartBody() {
                wfProfileIn( __METHOD__ );
                # Do a link batch query

Modified: trunk/extensions/FlaggedRevs/specialpages/PendingChanges_body.php
===================================================================
--- trunk/extensions/FlaggedRevs/specialpages/PendingChanges_body.php   
2011-03-21 14:26:22 UTC (rev 84445)
+++ trunk/extensions/FlaggedRevs/specialpages/PendingChanges_body.php   
2011-03-21 14:32:07 UTC (rev 84446)
@@ -6,6 +6,8 @@
 
 class PendingChanges extends SpecialPage
 {
+       protected $pager = null;
+
        public function __construct() {
                parent::__construct( 'PendingChanges' );
                $this->includable( true );
@@ -13,28 +15,38 @@
 
        public function execute( $par ) {
                global $wgRequest, $wgUser;
+
                $this->setHeaders();
                $this->skin = $wgUser->getSkin();
                $this->currentUnixTS = wfTimestamp( TS_UNIX ); // now
-               # Read params
+
                $this->namespace = $wgRequest->getIntOrNull( 'namespace' );
                $this->level = $wgRequest->getInt( 'level', - 1 );
-               $this->category = trim( $wgRequest->getVal( 'category' ) );
-               $catTitle = Title::makeTitleSafe( NS_CATEGORY, $this->category 
);
+               $category = trim( $wgRequest->getVal( 'category' ) );
+               $catTitle = Title::makeTitleSafe( NS_CATEGORY, $category );
                $this->category = is_null( $catTitle ) ? '' : 
$catTitle->getText();
                $this->size = $wgRequest->getIntOrNull( 'size' );
                $this->watched = $wgRequest->getCheck( 'watched' );
                $this->stable = $wgRequest->getCheck( 'stable' );
                $feedType = $wgRequest->getVal( 'feed' );
+               if ( $this->including() ) {
+                       $incLimit = $this->parseParams( $par ); // apply 
non-URL params
+               }
+
+               $this->pager = new PendingChangesPager( $this, $this->namespace,
+                       $this->level, $this->category, $this->size, 
$this->watched, $this->stable );
+
                # Output appropriate format...
                if ( $feedType != null ) {
                        $this->feed( $feedType );
                } else {
-                       if ( !$this->including() ) {
+                       if ( $this->including() ) {
+                               $this->pager->setLimit( $incLimit ); // apply 
non-URL limit
+                       } else {
                                $this->setSyndicated();
                                $this->showForm();
                        }
-                       $this->showList( $par );
+                       $this->showPageList();
                }
        }
 
@@ -51,14 +63,14 @@
 
        public function showForm() {
                global $wgUser, $wgOut, $wgScript;
-               $action = htmlspecialchars( $wgScript );
-               # Explanation text...
-               $wgOut->addWikiMsg( 'pendingchanges-list' );
-               $form =
-                       "<form action=\"$action\" method=\"get\">\n" .
-                       '<fieldset><legend>' . wfMsg( 'pendingchanges-legend' ) 
. '</legend>' .
-                       Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() );
+               # Explanatory text
+               $wgOut->addWikiMsg( 'pendingchanges-list', 
$this->pager->getNumRows() );
 
+               $form = Html::openElement( 'form', array( 'name' => 
'pendingchanges',
+                       'action' => $wgScript, 'method' => 'get' ) ) . "\n";
+               $form .= "<fieldset><legend>" . wfMsgHtml( 
'pendingchanges-legend' ) . "</legend>\n";
+               $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() ) . "\n";
+
                $items = array();
                if ( count( FlaggedRevs::getReviewNamespaces() ) > 1 ) {
                        $items[] = "<span style='white-space: nowrap;'>" .
@@ -77,6 +89,7 @@
                if ( $items ) {
                        $form .= implode( ' ', $items ) . '<br />';
                }
+
                $items = array();
                $items[] =
                        Xml::label( wfMsg( "pendingchanges-category" ), 
'wpCategory' ) . '&#160;' .
@@ -89,42 +102,35 @@
                $form .=
                        Xml::label( wfMsg( 'pendingchanges-size' ), 'wpSize' ) .
                        Xml::input( 'size', 4, $this->size, array( 'id' => 
'wpSize' ) ) . ' ' .
-                       Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" .
-                       "</fieldset></form>";
+                       Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n";
+               $form .= "</fieldset>";
+               $form .= Html::closeElement( 'form' ) . "\n";
+
                $wgOut->addHTML( $form );
        }
 
-       public function showList( $par ) {
+       public function showPageList() {
                global $wgOut;
-               $limit = false; // defer to Pager
-               if ( $this->including() ) {
-                       $limit = $this->parseParams( $par );
-               }
-               $pager = new PendingChangesPager( $this, $this->namespace, 
$this->level,
-                       $this->category, $this->size, $this->watched, 
$this->stable );
-               // Apply limit if transcluded
-               if ( $limit ) $pager->mLimit = $limit;
                // Viewing the list normally...
                if ( !$this->including() ) {
-                       if ( $pager->getNumRows() ) {
-                               $wgOut->addHTML( $pager->getNavigationBar() );
-                               $wgOut->addHTML( $pager->getBody() );
-                               $wgOut->addHTML( $pager->getNavigationBar() );
+                       if ( $this->pager->getNumRows() ) {
+                               $wgOut->addHTML( 
$this->pager->getNavigationBar() );
+                               $wgOut->addHTML( $this->pager->getBody() );
+                               $wgOut->addHTML( 
$this->pager->getNavigationBar() );
                        } else {
                                $wgOut->addWikiMsg( 'pendingchanges-none' );
                        }
                // If this list is transcluded...
                } else {
-                       if ( $pager->getNumRows() ) {
-                               $wgOut->addHTML( $pager->getBody() );
+                       if ( $this->pager->getNumRows() ) {
+                               $wgOut->addHTML( $this->pager->getBody() );
                        } else {
                                $wgOut->addWikiMsg( 'pendingchanges-none' );
                        }
                }
        }
 
-       // set namespace and category fields of $this
-       // @returns int paging limit
+       // set pager parameters from $par, return pager limit
        protected function parseParams( $par ) {
                global $wgLang;
                $bits = preg_split( '/\s*,\s*/', trim( $par ) );
@@ -155,7 +161,7 @@
         * @param string $type
         */
        protected function feed( $type ) {
-               global $wgFeed, $wgFeedClasses, $wgFeedLimit, $wgOut, 
$wgRequest;
+               global $wgFeed, $wgFeedClasses, $wgFeedLimit, $wgOut;
                if ( !$wgFeed ) {
                        $wgOut->addWikiMsg( 'feed-unavailable' );
                        return;
@@ -169,13 +175,11 @@
                        wfMsg( 'tagline' ),
                        $this->getTitle()->getFullUrl()
                );
-               $pager = new PendingChangesPager( $this, $this->namespace, 
$this->category );
-               $limit = $wgRequest->getInt( 'limit', 50 );
-               $pager->mLimit = min( $wgFeedLimit, $limit );
+               $this->pager->mLimit = min( $wgFeedLimit, $this->pager->mLimit 
);
 
                $feed->outHeader();
-               if ( $pager->getNumRows() > 0 ) {
-                       foreach ( $pager->mResult as $row ) {
+               if ( $this->pager->getNumRows() > 0 ) {
+                       foreach ( $this->pager->mResult as $row ) {
                                $feed->outItem( $this->feedItem( $row ) );
                        }
                }
@@ -211,14 +215,15 @@
        public function formatRow( $row ) {
                global $wgLang, $wgUser;
                $css = $quality = $underReview = '';
-
                $title = Title::newFromRow( $row );
-               $link = $this->skin->makeKnownLinkObj( $title );
-               $hist = $this->skin->makeKnownLinkObj( $title,
-                       wfMsgHtml( 'hist' ), 'action=history' );
                $stxt = ChangesList::showCharacterDifference( $row->rev_len, 
$row->page_len );
-               $review = $this->skin->makeKnownLinkObj( $title,
+               # Page links...
+               $link = $this->skin->link( $title );
+               $hist = $this->skin->linkKnown( $title,
+                       wfMsgHtml( 'hist' ), array(), 'action=history' );
+               $review = $this->skin->linkKnown( $title,
                        wfMsg( 'pendingchanges-diff' ),
+                       array(),
                        'diff=cur&oldid='.intval($row->stable).'&diffonly=0' );
                # Show quality level if there are several
                if ( FlaggedRevs::qualityVersions() ) {
@@ -283,9 +288,11 @@
  * Query to list out outdated reviewed pages
  */
 class PendingChangesPager extends AlphabeticPager {
-       public $mForm, $mConds;
-       private $category, $namespace;
+       public $mForm;
+       protected $category, $namespace;
 
+       const PAGE_LIMIT = 100; // Don't get too expensive
+
        function __construct( $form, $namespace, $level = - 1, $category = '',
                $size = null, $watched = false, $stable = false )
        {
@@ -309,12 +316,17 @@
                $this->watched = (bool)$watched;
                $this->stable = $stable && 
!FlaggedRevs::isStableShownByDefault()
                        && !FlaggedRevs::useOnlyIfProtected();
+
                parent::__construct();
-               // Don't get too expensive
+               # Don't get too expensive
                $this->mLimitsShown = array( 20, 50, 100 );
-               $this->mLimit = min( $this->mLimit, 100 );
+               $this->setLimit( $this->mLimit ); // apply max limit
        }
 
+       function setLimit( $limit ) {
+               $this->mLimit = min( $limit, self::PAGE_LIMIT );
+       }
+
        function formatRow( $row ) {
                return $this->mForm->formatRow( $row );
        }
@@ -331,7 +343,6 @@
 
        function getQueryInfo() {
                global $wgUser;
-               $conds = $this->mConds;
                $tables = array( 'page', 'revision' );
                $fields = array( 'page_namespace', 'page_title', 'page_len', 
'rev_len', 'page_latest' );
                # Show outdated "stable" versions
@@ -411,6 +422,14 @@
        }
        
        function getStartBody() {
+               wfProfileIn( __METHOD__ );
+               # Do a link batch query
+               $lb = new LinkBatch();
+               foreach ( $this->mResult as $row ) {
+                       $lb->add( $row->page_namespace, $row->page_title );
+               }
+               $lb->execute();
+               wfProfileOut( __METHOD__ );
                return '<ul>';
        }
        

Modified: trunk/extensions/FlaggedRevs/specialpages/ProblemChanges_body.php
===================================================================
--- trunk/extensions/FlaggedRevs/specialpages/ProblemChanges_body.php   
2011-03-21 14:26:22 UTC (rev 84445)
+++ trunk/extensions/FlaggedRevs/specialpages/ProblemChanges_body.php   
2011-03-21 14:32:07 UTC (rev 84446)
@@ -6,6 +6,8 @@
 
 class ProblemChanges extends SpecialPage
 {
+       protected $pager = null;
+
        public function __construct() {
                parent::__construct( 'ProblemChanges' );
                $this->includable( true );
@@ -13,19 +15,34 @@
 
        public function execute( $par ) {
                global $wgRequest, $wgUser;
+
                $this->setHeaders();
                $this->skin = $wgUser->getSkin();
                $this->level = $wgRequest->getInt( 'level', - 1 );
                $this->tag = trim( $wgRequest->getVal( 'tagfilter' ) );
-               $this->category = trim( $wgRequest->getVal( 'category' ) );
-               $catTitle = Title::newFromText( $this->category );
+               $category = trim( $wgRequest->getVal( 'category' ) );
+               $catTitle = Title::newFromText( $category );
                $this->category = is_null( $catTitle ) ? '' : 
$catTitle->getText();
                $feedType = $wgRequest->getVal( 'feed' );
-               if ( $feedType ) {
-                       return $this->feed( $feedType );
+               if ( $this->including() ) {
+                       $incLimit = $this->parseParams( $par ); // apply 
non-URL params
                }
-               $this->setSyndicated();
-               $this->showList( $par );
+
+               $this->pager = new ProblemChangesPager(
+                       $this, $this->level, $this->category, $this->tag );
+
+               # Output appropriate format...
+               if ( $feedType != null ) {
+                       $this->feed( $feedType );
+               } else {
+                       if ( $this->including() ) {
+                               $this->pager->setLimit( $incLimit ); // apply 
non-URL limit
+                       } else {
+                               $this->setSyndicated();
+                               $this->showForm();
+                       }
+                       $this->showPageList();
+               }
        }
        
        protected function setSyndicated() {
@@ -39,60 +56,59 @@
                $wgOut->setFeedAppendQuery( wfArrayToCGI( $queryParams ) );
        }
 
-       public function showList( $par ) {
+       public function showForm() {
                global $wgOut, $wgScript;
                // Add explanatory text
-               $wgOut->addWikiMsg( 'problemchanges-list' );
-               $limit = $this->parseParams( $par );
-               $pager = new ProblemChangesPager( $this, $this->level, 
$this->category, $this->tag );
-               // Apply limit if transcluded
-               $pager->mLimit = $limit ? $limit : $pager->mLimit;
+               $wgOut->addWikiMsg( 'problemchanges-list', 
$this->pager->getNumRows() );
+
+               $form = Html::openElement( 'form', array( 'name' => 
'problemchanges',
+                       'action' => $wgScript, 'method' => 'get' ) ) . "\n";
+               $form .= "<fieldset><legend>" . wfMsg( 'problemchanges-legend' 
) . "</legend>\n";
+               $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() ) . "\n";
+               $form .=
+                       ( FlaggedRevs::qualityVersions()
+                               ? "<span style='white-space: nowrap;'>" .
+                                       FlaggedRevsXML::getLevelMenu( 
$this->level, 'revreview-filter-stable' ) .
+                                       '</span> '
+                               : ""
+                       );
+               $tagForm = ChangeTags::buildTagFilterSelector( $this->tag );
+               if ( count( $tagForm ) ) {
+                       $form .= Xml::tags( 'td', array( 'class' => 'mw-label' 
), $tagForm[0] );
+                       $form .= Xml::tags( 'td', array( 'class' => 'mw-input' 
), $tagForm[1] );
+               }
+               $form .= '<br />' .
+                       Xml::label( wfMsg( "problemchanges-category" ), 
'wpCategory' ) . '&#160;' .
+                       Xml::input( 'category', 30, $this->category, array( 
'id' => 'wpCategory' ) ) . ' ';
+               $form .= Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n";
+               $form .= '</fieldset>';
+               $form .= Html::closeElement( 'form' ) . "\n";
+
+               $wgOut->addHTML( $form );
+       }
+
+       public function showPageList() {
+               global $wgOut;
                // Viewing the page normally...
                if ( !$this->including() ) {
-                       $action = htmlspecialchars( $wgScript );
-                       $tagForm = ChangeTags::buildTagFilterSelector( 
$this->tag );
-                       $wgOut->addHTML(
-                               "<form action=\"$action\" method=\"get\">\n" .
-                               '<fieldset><legend>' . wfMsg( 
'problemchanges-legend' ) . '</legend>' .
-                               Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() )
-                       );
-                       $form =
-                               ( FlaggedRevs::qualityVersions()
-                                       ? "<span style='white-space: nowrap;'>" 
.
-                                               FlaggedRevsXML::getLevelMenu( 
$this->level, 'revreview-filter-stable' ) .
-                                               '</span> '
-                                       : ""
-                               );
-                       if ( count( $tagForm ) ) {
-                               $form .= Xml::tags( 'td', array( 'class' => 
'mw-label' ), $tagForm[0] );
-                               $form .= Xml::tags( 'td', array( 'class' => 
'mw-input' ), $tagForm[1] );
-                       }
-                       $form .= '<br />' .
-                               Xml::label( wfMsg( "problemchanges-category" ), 
'wpCategory' ) . '&#160;' .
-                               Xml::input( 'category', 30, $this->category,
-                                       array( 'id' => 'wpCategory' ) ) . ' ';
-                       $form .= Xml::submitButton( wfMsg( 'allpagessubmit' ) ) 
. "\n" .
-                               "</fieldset></form>";
-                       # Add filter options
-                       $wgOut->addHTML( $form );
-                       # Add list output
-                       if ( $pager->getNumRows() ) {
-                               $wgOut->addHTML( $pager->getNavigationBar() );
-                               $wgOut->addHTML( $pager->getBody() );
-                               $wgOut->addHTML( $pager->getNavigationBar() );
+                       if ( $this->pager->getNumRows() ) {
+                               $wgOut->addHTML( 
$this->pager->getNavigationBar() );
+                               $wgOut->addHTML( $this->pager->getBody() );
+                               $wgOut->addHTML( 
$this->pager->getNavigationBar() );
                        } else {
                                $wgOut->addWikiMsg( 'problemchanges-none' );
                        }
                // If this page is transcluded...
                } else {
-                       if ( $pager->getNumRows() ) {
-                               $wgOut->addHTML( $pager->getBody() );
+                       if ( $this->pager->getNumRows() ) {
+                               $wgOut->addHTML( $this->pager->getBody() );
                        } else {
                                $wgOut->addWikiMsg( 'problemchanges-none' );
                        }
                }
        }
-       
+
+       // set pager parameters from $par, return pager limit   
        protected function parseParams( $par ) {
                $bits = preg_split( '/\s*,\s*/', trim( $par ) );
                $limit = false;
@@ -115,30 +131,25 @@
         * @param string $type
         */
        protected function feed( $type ) {
-               global $wgFeed, $wgFeedClasses, $wgRequest;
+               global $wgFeed, $wgFeedClasses, $wgFeedLimit, $wgOut;
                if ( !$wgFeed ) {
-                       global $wgOut;
                        $wgOut->addWikiMsg( 'feed-unavailable' );
                        return;
                }
                if ( !isset( $wgFeedClasses[$type] ) ) {
-                       global $wgOut;
                        $wgOut->addWikiMsg( 'feed-invalid' );
                        return;
                }
                $feed = new $wgFeedClasses[$type](
                        $this->feedTitle(),
                        wfMsg( 'tagline' ),
-                       $this->getTitle()->getFullUrl() );
+                       $this->getTitle()->getFullUrl()
+               );
+               $this->pager->mLimit = min( $wgFeedLimit, $this->pager->mLimit 
);
 
-               $pager = new ProblemChangesPager( $this, $this->category );
-               $limit = $wgRequest->getInt( 'limit', 50 );
-               global $wgFeedLimit;
-               $pager->mLimit = min( $wgFeedLimit, $limit );
-
                $feed->outHeader();
-               if ( $pager->getNumRows() > 0 ) {
-                       foreach ( $pager->mResult as $row ) {
+               if ( $this->pager->getNumRows() > 0 ) {
+                       foreach ( $this->pager->mResult as $row ) {
                                $feed->outItem( $this->feedItem( $row ) );
                        }
                }
@@ -177,9 +188,10 @@
                $css = $quality = $tags = $underReview = '';
                
                $title = Title::newFromRow( $row );
-               $link = $this->skin->makeKnownLinkObj( $title );
-               $review = $this->skin->makeKnownLinkObj( $title,
+               $link = $this->skin->link( $title );
+               $review = $this->skin->knownLink( $title,
                        wfMsg( 'pendingchanges-diff' ),
+                       array(),
                        'diff=cur&oldid=' . intval($row->stable) . 
'&diffonly=0' );
                # Show quality level if there are several
                if ( FlaggedRevs::qualityVersions() ) {
@@ -272,9 +284,11 @@
  * Query to list out outdated reviewed pages
  */
 class ProblemChangesPager extends AlphabeticPager {
-       public $mForm, $mConds;
-       private $category, $namespace, $tag;
+       public $mForm;
+       protected $category, $namespace, $tag;
 
+       const PAGE_LIMIT = 100; // Don't get too expensive
+
        function __construct( $form, $level = - 1, $category = '', $tag = '' )
        {
                $this->mForm = $form;
@@ -287,9 +301,13 @@
                parent::__construct();
                // Don't get to expensive
                $this->mLimitsShown = array( 20, 50, 100 );
-               $this->mLimit = min( $this->mLimit, 100 );
+               $this->setLimit( $this->mLimit ); // apply max limit
        }
 
+       function setLimit( $limit ) {
+               $this->mLimit = min( $limit, self::PAGE_LIMIT );
+       }
+
        function formatRow( $row ) {
                return $this->mForm->formatRow( $row );
        }
@@ -300,7 +318,6 @@
 
        function getQueryInfo() {
                global $wgOldChangeTagsIndex;
-               $conds = $this->mConds;
                $tables = array( 'revision', 'change_tag', 'page' );
                $fields = array( 'page_namespace' , 'page_title', 'page_latest' 
);
                $ctIndex = $wgOldChangeTagsIndex ?

Modified: trunk/extensions/FlaggedRevs/specialpages/ReviewedPages_body.php
===================================================================
--- trunk/extensions/FlaggedRevs/specialpages/ReviewedPages_body.php    
2011-03-21 14:26:22 UTC (rev 84445)
+++ trunk/extensions/FlaggedRevs/specialpages/ReviewedPages_body.php    
2011-03-21 14:32:07 UTC (rev 84446)
@@ -6,6 +6,8 @@
 
 class ReviewedPages extends SpecialPage
 {
+       protected $pager = null;
+
        public function __construct() {
                parent::__construct( 'ReviewedPages' );
        }
@@ -18,11 +20,15 @@
 
                # Check if there is a featured level
                $maxType = FlaggedRevs::pristineVersions() ? 2 : 1;
+
                $this->namespace = $wgRequest->getInt( 'namespace' );
                $this->type = $wgRequest->getInt( 'level', - 1 );
                $this->type = min( $this->type, $maxType );
                $this->hideRedirs = $wgRequest->getBool( 'hideredirs', true );
-               
+
+               $this->pager = new ReviewedPagesPager(
+                       $this, array(), $this->type, $this->namespace, 
$this->hideRedirs );
+
                $this->showForm();
                $this->showPageList();
        }
@@ -32,9 +38,9 @@
 
                // Text to explain level select (if there are several levels)
                if ( FlaggedRevs::qualityVersions() ) {
-                       $wgOut->addWikiMsg( 'reviewedpages-list' );
+                       $wgOut->addWikiMsg( 'reviewedpages-list', 
$this->pager->getNumRows() );
                }
-               $form = Xml::openElement( 'form',
+               $form = Html::openElement( 'form',
                        array( 'name' => 'reviewedpages', 'action' => 
$wgScript, 'method' => 'get' ) );
                $form .= "<fieldset><legend>" . wfMsgHtml( 'reviewedpages-leg' 
) . "</legend>\n";
 
@@ -60,22 +66,20 @@
                if ( count( $fields ) ) {
                        $form .= " " . Xml::submitButton( wfMsg( 'go' ) );
                }
-               $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() );
-               $form .= "</fieldset></form>\n";
+               $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() ) . "\n";
+               $form .= "</fieldset>";
+               $form .= Html::closeElement( 'form ' ) . "\n";
 
                $wgOut->addHTML( $form );
        }
 
        protected function showPageList() {
                global $wgOut;
-
-               $pager = new ReviewedPagesPager( $this, array(), $this->type,
-                       $this->namespace, $this->hideRedirs );
-               $num = $pager->getNumRows();
+               $num = $this->pager->getNumRows();
                if ( $num ) {
-                       $wgOut->addHTML( $pager->getNavigationBar() );
-                       $wgOut->addHTML( $pager->getBody() );
-                       $wgOut->addHTML( $pager->getNavigationBar() );
+                       $wgOut->addHTML( $this->pager->getNavigationBar() );
+                       $wgOut->addHTML( $this->pager->getBody() );
+                       $wgOut->addHTML( $this->pager->getNavigationBar() );
                } else {
                        $wgOut->addHTML( wfMsgExt( 'reviewedpages-none', array( 
'parse' ) ) );
                }
@@ -83,30 +87,34 @@
 
        public function formatRow( $row ) {
                global $wgLang;
-
-               $title = Title::makeTitle( $row->page_namespace, 
$row->page_title );
-               $link = $this->skin->makeKnownLinkObj( $title, 
$title->getPrefixedText() );
-
+               $title = Title::newFromRow( $row );
+               # Link to page
+               $link = $this->skin->link( $title );
+               # Size (bytes)
                $stxt = '';
                if ( !is_null( $size = $row->page_len ) ) {
-                       if ( $size == 0 )
+                       if ( $size == 0 ) {
                                $stxt = ' <small>' . wfMsgHtml( 'historyempty' 
) . '</small>';
-                       else
-                               $stxt = ' <small>' . wfMsgExt( 'historysize', 
'parsemag',
-                                       $wgLang->formatNum( $size ) ) . 
'</small>';
+                       } else {
+                               $stxt = ' <small>' .
+                                       wfMsgExt( 'historysize', 'parsemag', 
$wgLang->formatNum( $size ) ) .
+                                       '</small>';
+                       }
                }
-
-               $list = $this->skin->makeKnownLinkObj(
+               # Link to list of reviewed versions for page
+               $list = $this->skin->linkKnown(
                        SpecialPage::getTitleFor( 'ReviewedVersions' ),
                        wfMsgHtml( 'reviewedpages-all' ),
+                       array(),
                        'page=' . $title->getPrefixedUrl()
                );
-
+               # Link to highest tier rev
                $best = '';
                if ( FlaggedRevs::qualityVersions() ) {
-                       $best = $this->skin->makeKnownLinkObj(
+                       $best = $this->skin->linkKnown(
                                $title,
                                wfMsgHtml( 'reviewedpages-best' ),
+                               array(),
                                'stableid=best'
                        );
                        $best = " [$best]";

Modified: trunk/extensions/FlaggedRevs/specialpages/StablePages_body.php
===================================================================
--- trunk/extensions/FlaggedRevs/specialpages/StablePages_body.php      
2011-03-21 14:26:22 UTC (rev 84445)
+++ trunk/extensions/FlaggedRevs/specialpages/StablePages_body.php      
2011-03-21 14:32:07 UTC (rev 84446)
@@ -7,6 +7,8 @@
 // Assumes $wgFlaggedRevsProtection is on
 class StablePages extends SpecialPage
 {
+       protected $pager = null;
+
        public function __construct() {
                parent::__construct( 'StablePages' );
        }
@@ -21,51 +23,53 @@
                $this->autoreview = $wgRequest->getVal( 'restriction', '' );
                $this->indef = $wgRequest->getBool( 'indef', false );
 
+               $this->pager = new StablePagesPager( $this, array(),
+                       $this->namespace, $this->autoreview, $this->indef );
+
                $this->showForm();
                $this->showPageList();
        }
 
        protected function showForm() {
                global $wgOut, $wgScript;
-               $wgOut->addWikiMsg( 'stablepages-list' );
+               $wgOut->addWikiMsg( 'stablepages-list', 
$this->pager->getNumRows() );
                $fields = array();
                # Namespace selector
                if ( count( FlaggedRevs::getReviewNamespaces() ) > 1 ) {
                        $fields[] = FlaggedRevsXML::getNamespaceMenu( 
$this->namespace, '' );
                }
                # Restriction level selector
-               if( FlaggedRevs::getRestrictionLevels() ) {
+               if ( FlaggedRevs::getRestrictionLevels() ) {
                        $fields[] = FlaggedRevsXML::getRestrictionFilterMenu( 
$this->autoreview );
                }
                $fields[] = Xml::checkLabel( wfMsg( 'stablepages-indef' ), 
'indef', 
                        'stablepages-indef', $this->indef );
-               # Use form if it has options
-               if ( count( $fields ) ) {
-                       $form = Xml::openElement( 'form',
-                               array( 'name' => 'stablepages', 'action' => 
$wgScript, 'method' => 'get' ) );
-                       $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() );
-                       $form .= "<fieldset><legend>" . wfMsg( 'stablepages' ) 
. "</legend>\n";
-                       $form .= implode( '&#160;', $fields ) . '&nbsp';
-                       $form .= " " . Xml::submitButton( wfMsg( 'go' ) );
-                       $form .= "</fieldset>\n";
-                       $form .= Xml::closeElement( 'form' );
-                       $wgOut->addHTML( $form );
-               }
+
+               $form = Html::openElement( 'form',
+                       array( 'name' => 'stablepages', 'action' => $wgScript, 
'method' => 'get' ) );
+               $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() );
+               $form .= "<fieldset><legend>" . wfMsg( 'stablepages' ) . 
"</legend>\n";
+               $form .= implode( '&#160;', $fields ) . '&nbsp';
+               $form .= " " . Xml::submitButton( wfMsg( 'go' ) );
+               $form .= "</fieldset>\n";
+               $form .= Html::closeElement( 'form' ) . "\n";
+
+               $wgOut->addHTML( $form );
        }
 
        protected function showPageList() {
                global $wgOut;
-               $pager = new StablePagesPager(
-                       $this, array(), $this->namespace, $this->autoreview, 
$this->indef );
-               if ( $pager->getNumRows() ) {
-                       $wgOut->addHTML( $pager->getNavigationBar() );
-                       $wgOut->addHTML( $pager->getBody() );
-                       $wgOut->addHTML( $pager->getNavigationBar() );
+               if ( $this->pager->getNumRows() ) {
+                       $wgOut->addHTML( $this->pager->getNavigationBar() );
+                       $wgOut->addHTML( $this->pager->getBody() );
+                       $wgOut->addHTML( $this->pager->getNavigationBar() );
                } else {
                        $wgOut->addWikiMsg( 'stablepages-none' );
                }
-               # Take this opportunity to purge out expired configurations
-               FlaggedPageConfig::purgeExpiredConfigurations();
+               # Purge expired entries on one in every 10 queries
+               if ( !mt_rand( 0, 10 ) ) {
+                       FlaggedPageConfig::purgeExpiredConfigurations();
+               }
        }
 
        public function formatRow( $row ) {

Modified: trunk/extensions/FlaggedRevs/specialpages/UnreviewedPages_body.php
===================================================================
--- trunk/extensions/FlaggedRevs/specialpages/UnreviewedPages_body.php  
2011-03-21 14:26:22 UTC (rev 84445)
+++ trunk/extensions/FlaggedRevs/specialpages/UnreviewedPages_body.php  
2011-03-21 14:32:07 UTC (rev 84446)
@@ -6,99 +6,115 @@
 
 class UnreviewedPages extends SpecialPage
 {
+       protected $pager = null;
+
        public function __construct() {
                parent::__construct( 'UnreviewedPages', 'unreviewedpages' );
        }
 
        public function execute( $par ) {
                global $wgRequest, $wgUser, $wgOut;
+
                $this->setHeaders();
                if ( !$wgUser->isAllowed( 'unreviewedpages' ) ) {
                        $wgOut->permissionRequired( 'unreviewedpages' );
                        return;
                }
                $this->skin = $wgUser->getSkin();
-               $this->showList( $wgRequest );
-       }
 
-       protected function showList( $wgRequest ) {
-               global $wgOut, $wgScript;
+               # Get default namespace
                $namespaces = FlaggedRevs::getReviewNamespaces();
                $defaultNS = !$namespaces ? NS_MAIN : $namespaces[0];
-               
-               $namespace = $wgRequest->getIntOrNull( 'namespace', $defaultNS 
);
+
+               $this->namespace = $wgRequest->getIntOrNull( 'namespace', 
$defaultNS );
                $category = trim( $wgRequest->getVal( 'category' ) );
                $catTitle = Title::makeTitleSafe( NS_CATEGORY, $category );
-               $category = is_null( $catTitle ) ? '' : $catTitle->getText();
-               $level = $wgRequest->getInt( 'level' );
-               $hideRedirs = $wgRequest->getBool( 'hideredirs', true );
-               
-               // show/hide links
+               $this->category = is_null( $catTitle ) ? '' : 
$catTitle->getText();
+               $this->level = $wgRequest->getInt( 'level' );
+               $this->hideRedirs = $wgRequest->getBool( 'hideredirs', true );
+               $this->live = self::generalQueryOK();
+
+               $this->pager = new UnreviewedPagesPager( $this, $this->live,
+                       $this->namespace, !$this->hideRedirs, $this->category, 
$this->level );
+
+               $this->showForm();
+               $this->showPageList();
+       }
+
+       protected function showForm() {
+               global $wgOut, $wgLang, $wgScript;
+               # Add explanatory text
+               $wgOut->addWikiMsg( 'unreviewedpages-list', 
$this->pager->getNumRows() );
+
+               # show/hide links
                $showhide = array( wfMsgHtml( 'show' ), wfMsgHtml( 'hide' ) );
-               $onoff = 1 - $hideRedirs;
+               $onoff = 1 - $this->hideRedirs;
                $link = $this->skin->link( $this->getTitle(), 
$showhide[$onoff], array(),
-                        array( 'hideredirs' => $onoff, 'category' => 
$category, 'namespace' => $namespace )
+                       array( 'hideredirs' => $onoff, 'category' => 
$this->category,
+                               'namespace' => $this->namespace )
                );
                $showhideredirs = wfMsgHtml( 'whatlinkshere-hideredirs', $link 
);
 
-               # Add explanatory text
-               $wgOut->addWikiMsg( 'unreviewedpages-list' );
                # Add form...
-               $action = htmlspecialchars( $wgScript );
-               $wgOut->addHTML( "<form action=\"$action\" method=\"get\">\n" .
-                       '<fieldset><legend>' . wfMsg( 'unreviewedpages-legend' 
) . '</legend>' .
-                       Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() ) . '<p>' );
+               $form = Html::openElement( 'form', array( 'name' => 
'unreviewedpages',
+                       'action' => $wgScript, 'method' => 'get' ) ) . "\n";
+               $form .= "<fieldset><legend>" . wfMsg( 'unreviewedpages-legend' 
) . "</legend>\n";
+               $form .= Html::hidden( 'title', 
$this->getTitle()->getPrefixedDBKey() ) . "\n";
                # Add dropdowns as needed
-               if ( count( $namespaces ) > 1 ) {
-                       $wgOut->addHTML( FlaggedRevsXML::getNamespaceMenu( 
$namespace ) . '&#160;' );
+               if ( count( FlaggedRevs::getReviewNamespaces() ) > 1 ) {
+                       $form .= FlaggedRevsXML::getNamespaceMenu( 
$this->namespace ) . '&#160;';
                }
                if ( FlaggedRevs::qualityVersions() ) {
-                       $wgOut->addHTML( FlaggedRevsXML::getLevelMenu( $level, 
false, 1 ) . '&#160;' );
+                       $form .= FlaggedRevsXML::getLevelMenu( $this->level, 
false, 1 ) . '&#160;';
                }
-               $wgOut->addHTML(
+               $form .= 
                        "<span style='white-space: nowrap;'>" .
                        Xml::label( wfMsg( "unreviewedpages-category" ), 
'category' ) . '&#160;' .
-                       Xml::input( 'category', 30, $category, array( 'id' => 
'category' ) ) .
-                       '</span><br />' .
-                       $showhideredirs . '&#160;&#160;' .
-                       Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . 
"</p>\n" .
-                       "</fieldset></form>"
-               );
-               # This will start to get slower if live...
-               if ( !$live = self::generalQueryOK() ) {
+                       Xml::input( 'category', 30, $this->category, array( 
'id' => 'category' ) ) .
+                       '</span><br />';
+               $form .= $showhideredirs . '&#160;&#160;';
+               $form .= Xml::submitButton( wfMsg( 'allpagessubmit' ) );
+               $form .= '</fieldset>';
+               $form .= Html::closeElement( 'form' ) . "\n";
+
+               # Query may get too slow to be live...
+               if ( !$this->live ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $ts = $dbr->selectField( 'querycache_info', 
'qci_timestamp',
                                array( 'qci_type' => 'fr_unreviewedpages' ), 
__METHOD__ );
                        if ( $ts ) {
-                               global $wgLang;
                                $ts = wfTimestamp( TS_MW, $ts );
                                $td = $wgLang->timeanddate( $ts );
                                $d = $wgLang->date( $ts );
                                $t = $wgLang->time( $ts );
-                               $wgOut->addHTML( wfMsg( 'perfcachedts', $td, 
$d, $t ) );
+                               $form .= wfMsgExt( 'perfcachedts', 'parse', 
$td, $d, $t );
                        } else {
-                               $wgOut->addHTML( wfMsg( 'perfcached' ) );
+                               $form .= wfMsgExt( 'perfcached', 'parse' );
                        }
                }
-               $pager = new UnreviewedPagesPager(
-                       $this, $live, $namespace, !$hideRedirs, $category, 
$level );
-               if ( $pager->getNumRows() ) {
-                       $wgOut->addHTML( $pager->getNavigationBar() );
-                       $wgOut->addHTML( $pager->getBody() );
-                       $wgOut->addHTML( $pager->getNavigationBar() );
+
+               $wgOut->addHTML( $form );
+       }
+
+       protected function showPageList() {
+               global $wgOut;
+               if ( $this->pager->getNumRows() ) {
+                       $wgOut->addHTML( $this->pager->getNavigationBar() );
+                       $wgOut->addHTML( $this->pager->getBody() );
+                       $wgOut->addHTML( $this->pager->getNavigationBar() );
                } else {
                        $wgOut->addWikiMsg( 'unreviewedpages-none' );
                }
        }
-       
+
        public function formatRow( $row ) {
                global $wgLang, $wgUser;
+               $title = Title::newFromRow( $row );
 
                $stxt = $underReview = $watching = '';
-               $title = Title::newFromRow( $row );
-               $link = $this->skin->makeKnownLinkObj( $title, null, 
'redirect=no&reviewing=1' );
-               $hist = $this->skin->makeKnownLinkObj( $title, wfMsgHtml( 
'hist' ),
-                       'action=history&reviewing=1' );
+               $link = $this->skin->link( $title, null, array(), 
'redirect=no&reviewing=1' );
+               $hist = $this->skin->linkKnown( $title, wfMsgHtml( 'hist' ),
+                       array(), 'action=history&reviewing=1' );
                if ( !is_null( $size = $row->page_len ) ) {
                        $stxt = ( $size == 0 )
                                ? wfMsgHtml( 'historyempty' )
@@ -113,11 +129,13 @@
                // After three days, just use days
                if ( $hours > ( 3 * 24 ) ) {
                        $days = round( $hours / 24, 0 );
-                       $age = ' ' . wfMsgExt( 'unreviewedpages-days', 
'parsemag', $wgLang->formatNum( $days ) );
+                       $age = ' ' . wfMsgExt( 'unreviewedpages-days',
+                               'parsemag', $wgLang->formatNum( $days ) );
                // If one or more hours, use hours
                } elseif ( $hours >= 1 ) {
                        $hours = round( $hours, 0 );
-                       $age = ' ' . wfMsgExt( 'unreviewedpages-hours', 
'parsemag', $wgLang->formatNum( $hours ) );
+                       $age = ' ' . wfMsgExt( 'unreviewedpages-hours',
+                               'parsemag', $wgLang->formatNum( $hours ) );
                } else {
                        $age = ' ' . wfMsg( 'unreviewedpages-recent' ); // hot 
off the press :)
                }
@@ -180,9 +198,11 @@
  * Query to list out unreviewed pages
  */
 class UnreviewedPagesPager extends AlphabeticPager {
-       public $mForm, $mConds;
-       private $live, $namespace, $category, $showredirs;
+       public $mForm;
+       protected $live, $namespace, $category, $showredirs;
 
+       const PAGE_LIMIT = 50; // Don't get too expensive
+
        function __construct(
                $form, $live, $namespace, $redirs = false, $category = null, 
$level = 0
        ) {
@@ -204,9 +224,13 @@
                parent::__construct();
                // Don't get too expensive
                $this->mLimitsShown = array( 20, 50 );
-               $this->mLimit = min( $this->mLimit, 50 );
+               $this->setLimit( $this->mLimit ); // apply max limit
        }
 
+       function setLimit( $limit ) {
+               $this->mLimit = min( $limit, self::PAGE_LIMIT );
+       }
+
        function formatRow( $row ) {
                return $this->mForm->formatRow( $row );
        }
@@ -215,7 +239,6 @@
                if ( !$this->live ) {
                        return $this->getQueryCacheInfo();
                }
-               $conds = $this->mConds;
                $fields = array( 'page_namespace', 'page_title', 'page_len', 
'page_id',
                        'MIN(rev_timestamp) AS creation' );
                # Filter by level
@@ -325,6 +348,14 @@
        }
        
        function getStartBody() {
+               wfProfileIn( __METHOD__ );
+               # Do a link batch query
+               $lb = new LinkBatch();
+               foreach ( $this->mResult as $row ) {
+                       $lb->add( $row->page_namespace, $row->page_title );
+               }
+               $lb->execute();
+               wfProfileOut( __METHOD__ );
                return '<ul>';
        }
        


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to