From 9866c4723ee4b5e47d7170579b6a1a6c96f87948 Mon Sep 17 00:00:00 2001 From: Rob Church Date: Wed, 22 Aug 2007 07:08:12 +0000 Subject: [PATCH] (bug 10985) Special:DoubleRedirects was omitting "fixed" results when cached, leading to inconsistent paging behaviour - if the query is too expensive to run live, then it shouldn't be run in miser mode either (which is what was happening) --- RELEASE-NOTES | 2 + includes/SpecialDoubleRedirects.php | 99 ++++++++++++----------------- languages/messages/MessagesEn.php | 2 +- 3 files changed, 45 insertions(+), 58 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index f3e769bae7..c30791fb33 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -396,6 +396,8 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN lost and transparent pixels to be turned black * (bug 9339) General error pages were transforming messages and their parameters in the wrong order +* (bug 10985) Special:DoubleRedirects was omitting "fixed" results when cached, + leading to inconsistent paging behaviour == API changes since 1.10 == diff --git a/includes/SpecialDoubleRedirects.php b/includes/SpecialDoubleRedirects.php index a010a2bcc1..bc4df9fc24 100644 --- a/includes/SpecialDoubleRedirects.php +++ b/includes/SpecialDoubleRedirects.php @@ -22,36 +22,28 @@ class DoubleRedirectsPage extends PageQueryPage { return wfMsgExt( 'doubleredirectstext', array( 'parse' ) ); } - function getSQLText( &$dbr, $namespace = null, $title = null ) { - - list( $page, $redirect ) = $dbr->tableNamesN( 'page', 'redirect' ); - - $limitToTitle = !( $namespace === null && $title === null ); - $sql = $limitToTitle ? "SELECT" : "SELECT 'DoubleRedirects' as type," ; - $sql .= - " pa.page_namespace as namespace, pa.page_title as title," . - " pb.page_namespace as nsb, pb.page_title as tb," . - " pc.page_namespace as nsc, pc.page_title as tc" . - " FROM $redirect AS ra, $redirect AS rb, $page AS pa, $page AS pb, $page AS pc" . - " WHERE ra.rd_from=pa.page_id" . - " AND ra.rd_namespace=pb.page_namespace" . - " AND ra.rd_title=pb.page_title" . - " AND rb.rd_from=pb.page_id" . - " AND rb.rd_namespace=pc.page_namespace" . - " AND rb.rd_title=pc.page_title"; - - if( $limitToTitle ) { - $encTitle = $dbr->addQuotes( $title ); - $sql .= " AND pa.page_namespace=$namespace" . - " AND pa.page_title=$encTitle"; - } - - return $sql; - } - - function getSQL() { + function getSql() { $dbr = wfGetDB( DB_SLAVE ); - return $this->getSQLText( $dbr ); + list( $page, $redirect ) = $dbr->tableNamesN( 'page', 'redirect' ); + return " + SELECT + 'DoubleRedirects' as type, + pa.page_namespace as namespace, pa.page_title as title, + pb.page_namespace as nsb, pb.page_title as tb, + pc.page_namespace as nsc, pc.page_title as tc + FROM + $redirect AS ra, + $redirect AS rb, + $page AS pa, + $page AS pb, + $page AS pc + WHERE + ra.rd_from = pa.page_id + AND ra.rd_namespace = pb.page_namespace + AND ra.rd_title = pb.page_title + AND rb.rd_from = pb.page_id + AND rb.rd_namespace = pc.page_namespace + AND rb.rd_title = pc.page_title"; } function getOrder() { @@ -60,33 +52,30 @@ class DoubleRedirectsPage extends PageQueryPage { function formatResult( $skin, $result ) { global $wgContLang; + $parts = array(); - $fname = 'DoubleRedirectsPage::formatResult'; $titleA = Title::makeTitle( $result->namespace, $result->title ); - - if ( $result && !isset( $result->nsb ) ) { - $dbr = wfGetDB( DB_SLAVE ); - $sql = $this->getSQLText( $dbr, $result->namespace, $result->title ); - $res = $dbr->query( $sql, $fname ); - if ( $res ) { - $result = $dbr->fetchObject( $res ); - $dbr->freeResult( $res ); - } - } - if ( !$result ) { - return ''; + $parts[] = $skin->makeKnownLinkObj( $titleA, '', 'redirect=no' ); + $parts[] = '(' . $skin->makeKnownLinkObj( + $titleA, + wfMsgHtml( 'qbedit' ), + 'action=edit&redirect=no' + ) . ')'; + + // If the report isn't cached, generate some useful additional + // links to the target page, and *that* page's redirect target + if( isset( $result->nsb ) ) { + $parts[] = $wgContLang->getArrow() . $wgContLang->getDirMark(); + $parts[] = $skin->makeKnownLinkObj( + Title::makeTitle( $result->nsb, $result->tb ), + '', + 'redirect=no' + ); + $parts[] = $wgContLang->getArrow() . $wgContLang->getDirMark(); + $parts[] = $skin->makeKnownLinkObj( Title::makeTitle( $result->nsc, $result->tc ) ); } - $titleB = Title::makeTitle( $result->nsb, $result->tb ); - $titleC = Title::makeTitle( $result->nsc, $result->tc ); - - $linkA = $skin->makeKnownLinkObj( $titleA,'', 'redirect=no' ); - $edit = $skin->makeBrokenLinkObj( $titleA, "(".wfMsg("qbedit").")" , 'redirect=no'); - $linkB = $skin->makeKnownLinkObj( $titleB, '', 'redirect=no' ); - $linkC = $skin->makeKnownLinkObj( $titleC ); - $arr = $wgContLang->getArrow() . $wgContLang->getDirMark(); - - return( "{$linkA} {$edit} {$arr} {$linkB} {$arr} {$linkC}" ); + return implode( ' ', $parts ); } } @@ -95,10 +84,6 @@ class DoubleRedirectsPage extends PageQueryPage { */ function wfSpecialDoubleRedirects() { list( $limit, $offset ) = wfCheckLimits(); - $sdr = new DoubleRedirectsPage(); - return $sdr->doQuery( $offset, $limit ); - -} - +} \ No newline at end of file diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index 2c06876c8a..5241c5a782 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -1570,7 +1570,7 @@ The [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] length is '''\$7'' 'doubleredirects' => 'Double redirects', 'doubleredirects-summary' => '', # only translate this message to other languages if you have to change it -'doubleredirectstext' => 'Each row contains links to the first and second redirect, as well as the target of the second redirect, which is usually "real" target page, which the first redirect should point to.', +'doubleredirectstext' => 'The following redirects link to other redirect pages:', 'brokenredirects' => 'Broken redirects', 'brokenredirects-summary' => '', # only translate this message to other languages if you have to change it -- 2.20.1