From 9e706b583b03cfca0a30aeea887d5a9b581d9bfc Mon Sep 17 00:00:00 2001 From: Domas Mituzas Date: Sat, 14 Jan 2006 21:19:17 +0000 Subject: [PATCH] oh right right right!!! we have different Article subclasses!!!!!! "Learn, learn and again..learn (c) Lenin" --- includes/Article.php | 8 +++----- includes/Wiki.php | 46 +++++++++++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/includes/Article.php b/includes/Article.php index 9f1d3b8fab..555f5bbec7 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -91,11 +91,8 @@ class Article { } else { return $rt->getFullURL(); } - } elseif( $rt->exists() ) { - // Internal redirects can be handled relatively gracefully. - // We may have to change to another Article subclass, though. - return $rt; - } + } + return $rt; } } @@ -427,6 +424,7 @@ class Article { * @access private */ function loadPageData( $data ) { + $this->mTitle->mArticleID = $data->page_id; $this->mTitle->loadRestrictions( $data->page_restrictions ); $this->mTitle->mRestrictionsLoaded = true; diff --git a/includes/Wiki.php b/includes/Wiki.php index 996a5cf832..ba4ec0b48f 100644 --- a/includes/Wiki.php +++ b/includes/Wiki.php @@ -195,28 +195,42 @@ 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'); $article = $this->articleFromTitle( $title ); // 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; + if( $action == 'view' && !$request->getVal( 'oldid' ) && + $request->getVal( 'redirect' ) != 'no' ) { + $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 ) ) { + /* Rewrite environment to redirected article */ + $rarticle = $this->articleFromTitle($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 +377,4 @@ class MediaWiki { }; /* End of class MediaWiki */ -?> \ No newline at end of file +?> -- 2.20.1