From 24c000ea804d3a730b96bf71d40e1ef5d7241105 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 4 Dec 2014 17:45:05 -0800 Subject: [PATCH] Add and use Title::getOtherPage() Change-Id: I40a51c14ce07c301c15c6c2128cc18bb12e71103 --- includes/Title.php | 19 +++++++++++++++ includes/page/WikiPage.php | 12 ++-------- tests/phpunit/includes/TitleMethodsTest.php | 26 +++++++++++++++++++++ 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/includes/Title.php b/includes/Title.php index 638da08581..562fc54556 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -1335,6 +1335,25 @@ class Title { return Title::makeTitle( $subjectNS, $this->getDBkey() ); } + /** + * Get the other title for this page, if this is a subject page + * get the talk page, if it is a subject page get the talk page + * + * @since 1.25 + * @throws MWException + * @return Title + */ + public function getOtherPage() { + if ( $this->isSpecialPage() ) { + throw new MWException( 'Special pages cannot have other pages' ); + } + if ( $this->isTalkPage() ) { + return $this->getSubjectPage(); + } else { + return $this->getTalkPage(); + } + } + /** * Get the default namespace index, for when there is no namespace * diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index 8b26c2319c..31d6fc8f56 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -3158,11 +3158,7 @@ class WikiPage implements Page, IDBAccessObject { */ public static function onArticleCreate( $title ) { // Update existence markers on article/talk tabs... - if ( $title->isTalkPage() ) { - $other = $title->getSubjectPage(); - } else { - $other = $title->getTalkPage(); - } + $other = $title->getOtherPage(); $other->invalidateCache(); $other->purgeSquid(); @@ -3179,11 +3175,7 @@ class WikiPage implements Page, IDBAccessObject { */ public static function onArticleDelete( $title ) { // Update existence markers on article/talk tabs... - if ( $title->isTalkPage() ) { - $other = $title->getSubjectPage(); - } else { - $other = $title->getTalkPage(); - } + $other = $title->getOtherPage(); $other->invalidateCache(); $other->purgeSquid(); diff --git a/tests/phpunit/includes/TitleMethodsTest.php b/tests/phpunit/includes/TitleMethodsTest.php index 5904facd07..707a4a1c0b 100644 --- a/tests/phpunit/includes/TitleMethodsTest.php +++ b/tests/phpunit/includes/TitleMethodsTest.php @@ -297,4 +297,30 @@ class TitleMethodsTest extends MediaWikiTestCase { $title = Title::newFromText( $title ); $this->assertEquals( $expectedBool, $title->isWikitextPage() ); } + + public static function provideGetOtherPage() { + return array( + array( 'Main Page', 'Talk:Main Page' ), + array( 'Talk:Main Page', 'Main Page' ), + array( 'Help:Main Page', 'Help talk:Main Page' ), + array( 'Help talk:Main Page', 'Help:Main Page' ), + array( 'Special:FooBar', null ), + ); + } + + /** + * @dataProvider provideGetOtherpage + * @covers Title::getOtherPage + * + * @param string $text + * @param string|null $expected + */ + public function testGetOtherPage( $text, $expected ) { + if ( $expected === null ) { + $this->setExpectedException( 'MWException' ); + } + + $title = Title::newFromText( $text ); + $this->assertEquals( $expected, $title->getOtherPage()->getPrefixedText() ); + } } -- 2.20.1