From 47f599dd823d52811f3bccf210bc5feb13815e27 Mon Sep 17 00:00:00 2001 From: Domas Mituzas Date: Sat, 14 Jan 2006 03:11:24 +0000 Subject: [PATCH] Handle redirects correctly, saves queries (no revision text loading for cached documents, etc) --- includes/Wiki.php | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/includes/Wiki.php b/includes/Wiki.php index 996a5cf832..8c320040d0 100644 --- a/includes/Wiki.php +++ b/includes/Wiki.php @@ -195,6 +195,7 @@ class MediaWiki { * @return mixed an Article, or a string to redirect to another URL */ function initializeArticle( $title, $request ) { + global $wgTitle; wfProfileIn( 'MediaWiki::initializeArticle' ); $action = $this->getVal('Action'); @@ -202,21 +203,33 @@ class MediaWiki { // Namespace might change when using redirects if( $action == 'view' && !$request->getVal( 'oldid' ) && $request->getVal( 'redirect' ) != 'no' ) { - $target = $article->followRedirect(); - if( is_string( $target ) ) { - global $wgDisableHardRedirects; - if( !$wgDisableHardRedirects ) { - // we'll need to redirect - return $target; + $dbr=&wfGetDB(DB_SLAVE); + $article->loadPageData($article->pageDataFromTitle($dbr,$title)); + /* Follow redirects only for... redirects */ + if ($article->mIsRedirect) { + $target = $article->followRedirect(); + if( is_string( $target ) ) { + global $wgDisableHardRedirects; + if( !$wgDisableHardRedirects ) { + // we'll need to redirect + return $target; + } } - } - if( is_object( $target ) ) { - // evil globals hack! - global $wgTitle; - $wgTitle = $target; - - $article = $this->articleFromTitle( $target ); - $article->setRedirectedFrom( $title ); + if( is_object( $target ) ) { + // evil globals hack! + /* Rewrite environment to redirected article */ + $rarticle =& new Article($target); + $rarticle->loadPageData($rarticle->pageDataFromTitle($dbr,$target)); + if ($rarticle->mTitle->mArticleID) { + $article =& $rarticle; + $wgTitle =& $target; + $article->setRedirectedFrom( $title ); + } else { + $wgTitle =& $title; + } + } + } else { + $wgTitle =& $article->mTitle; } } wfProfileOut( 'MediaWiki::initializeArticle' ); @@ -363,4 +376,4 @@ class MediaWiki { }; /* End of class MediaWiki */ -?> \ No newline at end of file +?> -- 2.20.1