From: Kunal Mehta Date: Fri, 5 Dec 2014 01:45:05 +0000 (-0800) Subject: Add and use Title::getOtherPage() X-Git-Tag: 1.31.0-rc.0~12858^2 X-Git-Url: http://git.cyclocoop.org/%7B%7B%20url_for%28%27admin_vote_add%27%29%20%7D%7D?a=commitdiff_plain;h=24c000ea804d3a730b96bf71d40e1ef5d7241105;p=lhc%2Fweb%2Fwiklou.git Add and use Title::getOtherPage() Change-Id: I40a51c14ce07c301c15c6c2128cc18bb12e71103 --- 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() ); + } }