From c9df79c484ec331fb1d0366e9a3c46e5f1f147f9 Mon Sep 17 00:00:00 2001 From: Alexandre Emsenhuber Date: Sat, 7 Jan 2012 15:48:42 +0000 Subject: [PATCH] Cleanup in WikiPage::getRedirectURL(): * Call Title::isValidRedirectTarget() in case of special page instead of checking only for Special:Userlogout * Refactor the code a bit to be more readable and remove unneeded nested conditions --- includes/WikiPage.php | 53 +++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/includes/WikiPage.php b/includes/WikiPage.php index f9feaeaaf0..262235feb3 100644 --- a/includes/WikiPage.php +++ b/includes/WikiPage.php @@ -205,36 +205,39 @@ class WikiPage extends Page { * @return mixed false, Title object of local target, or string with URL */ public function getRedirectURL( $rt ) { - if ( $rt ) { - if ( $rt->getInterwiki() != '' ) { - if ( $rt->isLocal() ) { - // Offsite wikis need an HTTP redirect. - // - // This can be hard to reverse and may produce loops, - // so they may be disabled in the site configuration. - $source = $this->mTitle->getFullURL( 'redirect=no' ); - return $rt->getFullURL( 'rdfrom=' . urlencode( $source ) ); - } + if ( !$rt ) { + return false; + } + + if ( $rt->isExternal() ) { + if ( $rt->isLocal() ) { + // Offsite wikis need an HTTP redirect. + // + // This can be hard to reverse and may produce loops, + // so they may be disabled in the site configuration. + $source = $this->mTitle->getFullURL( 'redirect=no' ); + return $rt->getFullURL( 'rdfrom=' . urlencode( $source ) ); } else { - if ( $rt->isSpecialPage() ) { - // Gotta handle redirects to special pages differently: - // Fill the HTTP response "Location" header and ignore - // the rest of the page we're on. - // - // This can be hard to reverse, so they may be disabled. - if ( $rt->isSpecial( 'Userlogout' ) ) { - // rolleyes - } else { - return $rt->getFullURL(); - } - } + // External pages pages without "local" bit set are not valid + // redirect targets + return false; + } + } - return $rt; + if ( $rt->isSpecialPage() ) { + // Gotta handle redirects to special pages differently: + // Fill the HTTP response "Location" header and ignore + // the rest of the page we're on. + // + // Some pages are not valid targets + if ( $rt->isValidRedirectTarget() ) { + return $rt->getFullURL(); + } else { + return false; } } - // No or invalid redirect - return false; + return $rt; } /** -- 2.20.1