From c4c81ee5a423aa4a7ac22abe546a3339709d9979 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 23 Dec 2015 12:19:13 -0800 Subject: [PATCH] Cleanups and IDEA error fixes to initializeArticle() Avoid using magic Article methods (use WikiPage instead). Change-Id: I4057f78f3cde2185a6301a3444367196641a8e26 --- includes/MediaWiki.php | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index 0e3a734e93..6342d713d8 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -379,23 +379,26 @@ class MediaWiki { * Initialize the main Article object for "standard" actions (view, etc) * Create an Article object for the page, following redirects if needed. * - * @return mixed An Article, or a string to redirect to another URL + * @return Article|string An Article, or a string to redirect to another URL */ private function initializeArticle() { - $title = $this->context->getTitle(); if ( $this->context->canUseWikiPage() ) { // Try to use request context wiki page, as there // is already data from db saved in per process // cache there from this->getAction() call. $page = $this->context->getWikiPage(); - $article = Article::newFromWikiPage( $page, $this->context ); } else { // This case should not happen, but just in case. - $article = Article::newFromTitle( $title, $this->context ); - $this->context->setWikiPage( $article->getPage() ); + // @TODO: remove this or use an exception + $page = WikiPage::factory( $title ); + $this->context->setWikiPage( $page ); + wfWarn( "RequestContext::canUseWikiPage() returned false" ); } + // Make GUI wrapper for the WikiPage + $article = Article::newFromWikiPage( $page, $this->context ); + // Skip some unnecessary code if the content model doesn't support redirects if ( !ContentHandler::getForTitle( $title )->supportsRedirects() ) { return $article; @@ -406,7 +409,7 @@ class MediaWiki { // Namespace might change when using redirects // Check for redirects ... $action = $request->getVal( 'action', 'view' ); - $file = ( $title->getNamespace() == NS_FILE ) ? $article->getFile() : null; + $file = ( $page instanceof WikiFilePage ) ? $page->getFile() : null; if ( ( $action == 'view' || $action == 'render' ) // ... for actions that show content && !$request->getVal( 'oldid' ) // ... and are not old revisions && !$request->getVal( 'diff' ) // ... and not when showing diff @@ -419,12 +422,13 @@ class MediaWiki { Hooks::run( 'InitializeArticleMaybeRedirect', array( &$title, &$request, &$ignoreRedirect, &$target, &$article ) ); + $page = $article->getPage(); // reflect any hook changes // Follow redirects only for... redirects. // If $target is set, then a hook wanted to redirect. - if ( !$ignoreRedirect && ( $target || $article->isRedirect() ) ) { + if ( !$ignoreRedirect && ( $target || $page->isRedirect() ) ) { // Is the target already set by an extension? - $target = $target ? $target : $article->followRedirect(); + $target = $target ? $target : $page->followRedirect(); if ( is_string( $target ) ) { if ( !$this->config->get( 'DisableHardRedirects' ) ) { // we'll need to redirect @@ -433,16 +437,19 @@ class MediaWiki { } if ( is_object( $target ) ) { // Rewrite environment to redirected article - $rarticle = Article::newFromTitle( $target, $this->context ); - $rarticle->loadPageData(); - if ( $rarticle->exists() || ( is_object( $file ) && !$file->isLocal() ) ) { + $rpage = WikiPage::factory( $target ); + $rpage->loadPageData(); + if ( $rpage->exists() || ( is_object( $file ) && !$file->isLocal() ) ) { + $rarticle = Article::newFromWikiPage( $rpage, $this->context ); $rarticle->setRedirectedFrom( $title ); + $article = $rarticle; $this->context->setTitle( $target ); $this->context->setWikiPage( $article->getPage() ); } } } else { + // Article may have been changed by hook $this->context->setTitle( $article->getTitle() ); $this->context->setWikiPage( $article->getPage() ); } -- 2.20.1