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( ' ', $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( ' ', $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' ) . ' ' .
@@ -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' ) . ' ' .
+ 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' ) . ' ' .
- 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( ' ', $fields ) . ' ';
- $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( ' ', $fields ) . ' ';
+ $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 ) . ' ' );
+ if ( count( FlaggedRevs::getReviewNamespaces() ) > 1 ) {
+ $form .= FlaggedRevsXML::getNamespaceMenu(
$this->namespace ) . ' ';
}
if ( FlaggedRevs::qualityVersions() ) {
- $wgOut->addHTML( FlaggedRevsXML::getLevelMenu( $level,
false, 1 ) . ' ' );
+ $form .= FlaggedRevsXML::getLevelMenu( $this->level,
false, 1 ) . ' ';
}
- $wgOut->addHTML(
+ $form .=
"<span style='white-space: nowrap;'>" .
Xml::label( wfMsg( "unreviewedpages-category" ),
'category' ) . ' ' .
- Xml::input( 'category', 30, $category, array( 'id' =>
'category' ) ) .
- '</span><br />' .
- $showhideredirs . '  ' .
- 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 . '  ';
+ $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