diff options
Diffstat (limited to 'includes/specials/SpecialDisambiguations.php')
-rw-r--r-- | includes/specials/SpecialDisambiguations.php | 75 |
1 files changed, 50 insertions, 25 deletions
diff --git a/includes/specials/SpecialDisambiguations.php b/includes/specials/SpecialDisambiguations.php index 2b05fb6b..48180a77 100644 --- a/includes/specials/SpecialDisambiguations.php +++ b/includes/specials/SpecialDisambiguations.php @@ -26,27 +26,35 @@ * * @ingroup SpecialPage */ -class DisambiguationsPage extends PageQueryPage { +class DisambiguationsPage extends QueryPage { function __construct( $name = 'Disambiguations' ) { parent::__construct( $name ); } - function isExpensive() { return true; } - function isSyndicated() { return false; } + function isExpensive() { + return true; + } + + function isSyndicated() { + return false; + } function getPageHeader() { return $this->msg( 'disambiguations-text' )->parseAsBlock(); } - function getQueryInfo() { + /** + * @return string|bool False on failure + */ + function getQueryFromLinkBatch() { $dbr = wfGetDB( DB_SLAVE ); $dMsgText = $this->msg( 'disambiguationspage' )->inContentLanguage()->text(); $linkBatch = new LinkBatch; # If the text can be treated as a title, use it verbatim. # Otherwise, pull the titles from the links table - $dp = Title::newFromText($dMsgText); + $dp = Title::newFromText( $dMsgText ); if( $dp ) { if( $dp->getNamespace() != NS_TEMPLATE ) { # @todo FIXME: We assume the disambiguation message is a template but @@ -71,25 +79,38 @@ class DisambiguationsPage extends PageQueryPage { } } $set = $linkBatch->constructSet( 'tl', $dbr ); + if( $set === false ) { # We must always return a valid SQL query, but this way # the DB will always quickly return an empty result $set = 'FALSE'; - wfDebug("Mediawiki:disambiguationspage message does not link to any templates!\n"); + wfDebug( "Mediawiki:disambiguationspage message does not link to any templates!\n" ); } + return $set; + } + function getQueryInfo() { // @todo FIXME: What are pagelinks and p2 doing here? return array ( - 'tables' => array( 'templatelinks', 'p1' => 'page', 'pagelinks', 'p2' => 'page' ), - 'fields' => array( 'p1.page_namespace AS namespace', - 'p1.page_title AS title', - 'pl_from AS value' ), - 'conds' => array( $set, - 'p1.page_id = tl_from', - 'pl_namespace = p1.page_namespace', - 'pl_title = p1.page_title', - 'p2.page_id = pl_from', - 'p2.page_namespace' => MWNamespace::getContentNamespaces() ) + 'tables' => array( + 'templatelinks', + 'p1' => 'page', + 'pagelinks', + 'p2' => 'page' + ), + 'fields' => array( + 'namespace' => 'p1.page_namespace', + 'title' => 'p1.page_title', + 'value' => 'pl_from' + ), + 'conds' => array( + $this->getQueryFromLinkBatch(), + 'p1.page_id = tl_from', + 'pl_namespace = p1.page_namespace', + 'pl_title = p1.page_title', + 'p2.page_id = pl_from', + 'p2.page_namespace' => MWNamespace::getContentNamespaces() + ) ); } @@ -108,17 +129,17 @@ class DisambiguationsPage extends PageQueryPage { * @param $res */ function preprocessResults( $db, $res ) { + if ( !$res->numRows() ) { + return; + } + $batch = new LinkBatch; foreach ( $res as $row ) { $batch->add( $row->namespace, $row->title ); } $batch->execute(); - // Back to start for display - if ( $db->numRows( $res ) > 0 ) { - // If there are no rows we get an error seeking. - $db->dataSeek( $res, 0 ); - } + $res->seek( 0 ); } function formatResult( $skin, $result ) { @@ -126,10 +147,14 @@ class DisambiguationsPage extends PageQueryPage { $dp = Title::makeTitle( $result->namespace, $result->title ); $from = Linker::link( $title ); - $edit = Linker::link( $title, $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(), - array(), array( 'redirect' => 'no', 'action' => 'edit' ) ); - $arr = $this->getLanguage()->getArrow(); - $to = Linker::link( $dp ); + $edit = Linker::link( + $title, + $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(), + array(), + array( 'redirect' => 'no', 'action' => 'edit' ) + ); + $arr = $this->getLanguage()->getArrow(); + $to = Linker::link( $dp ); return "$from $edit $arr $to"; } |