From 9432b8b5c2e434feae23f28bde6682ec05a55507 Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Fri, 25 Aug 2006 04:32:33 +0000 Subject: [PATCH] * Now [[MediaWiki:Disambiguationspage]] may have either disambig template name, or a list of links to disambig templates. --- includes/SpecialDisambiguations.php | 70 ++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/includes/SpecialDisambiguations.php b/includes/SpecialDisambiguations.php index f57b732073..90a112102f 100644 --- a/includes/SpecialDisambiguations.php +++ b/includes/SpecialDisambiguations.php @@ -19,36 +19,66 @@ class DisambiguationsPage extends PageQueryPage { function isExpensive( ) { return true; } function isSyndicated() { return false; } + function getDisambiguationPageObj() { + return Title::makeTitleSafe( NS_MEDIAWIKI, 'disambiguationspage'); + } + function getPageHeader( ) { global $wgUser; $sk = $wgUser->getSkin(); - return '

'.wfMsg('disambiguationstext', $sk->makeKnownLink(wfMsgForContent('disambiguationspage')) )."


\n"; + return '

'.wfMsg('disambiguationstext', $sk->makeKnownLinkObj($this->getDisambiguationPageObj()))."


\n"; } function getSQL() { $dbr =& wfGetDB( DB_SLAVE ); extract( $dbr->tableNames( 'page', 'pagelinks', 'templatelinks' ) ); - $dp = Title::newFromText(wfMsgForContent('disambiguationspage')); - $id = $dp->getArticleId(); - $dns = $dp->getNamespace(); - $dtitle = $dbr->addQuotes( $dp->getDBkey() ); - - if($dns != NS_TEMPLATE) { - # FIXME we assume the disambiguation message is a template but - # the page can potentially be from another namespace :/ - wfDebug("Mediawiki:disambiguationspage message does not refer to a template!\n"); - } - - $sql = "SELECT 'Disambiguations' AS \"type\", pa.page_namespace AS namespace," - ." pa.page_title AS title, la.pl_from AS value" - ." FROM {$templatelinks} AS lb, {$page} AS pa, {$pagelinks} AS la" - ." WHERE lb.tl_namespace = $dns AND lb.tl_title = $dtitle" # disambiguation template - .' AND pa.page_id = lb.tl_from' - .' AND pa.page_namespace = la.pl_namespace' - .' AND pa.page_title = la.pl_title'; - return $sql; + $dMsgText = wfMsgForContent('disambiguationspage'); + + $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); + if( $dp ) { + if($dp->getNamespace() != NS_TEMPLATE) { + # FIXME we assume the disambiguation message is a template but + # the page can potentially be from another namespace :/ + wfDebug("Mediawiki:disambiguationspage message does not refer to a template!\n"); + } + $linkBatch->addObj( $dp ); + } else { + # Get all the templates linked from the Mediawiki:Disambiguationspage + $disPageObj = $this->getDisambiguationPageObj(); + $res = $dbr->select( + array('pagelinks', 'page'), + 'pl_title', + array('page_id = pl_from', 'pl_namespace' => NS_TEMPLATE, + 'page_namespace' => $disPageObj->getNamespace(), 'page_title' => $disPageObj->getDBkey()), + 'DisambiguationsPage::getSQL' ); + + while ( $row = $dbr->fetchObject( $res ) ) { + $linkBatch->addObj( Title::makeTitle( NS_TEMPLATE, $row->pl_title )); + } + $dbr->freeResult( $res ); + } + + $set = $linkBatch->constructSet( 'lb.tl', $dbr ); + if( $set === false ) { + $set = 'FALSE'; # We must always return a valid sql query, but this way DB will always quicly return an empty result + wfDebug("Mediawiki:disambiguationspage message does not link to any templates!\n"); + } + + $sql = "SELECT 'Disambiguations' AS \"type\", pa.page_namespace AS namespace," + ." pa.page_title AS title, la.pl_from AS value" + ." FROM {$templatelinks} AS lb, {$page} AS pa, {$pagelinks} AS la" + ." WHERE " . $set # disambiguation template(s) + .' AND pa.page_id = lb.tl_from' + .' AND pa.page_namespace = la.pl_namespace' + .' AND pa.page_title = la.pl_title'; + + return $sql; } function getOrder() { -- 2.20.1