From c67539341378a7bc3589f4199627d8e7f2717204 Mon Sep 17 00:00:00 2001 From: Zhuyifei1999 Date: Tue, 20 Dec 2016 14:05:03 +0000 Subject: [PATCH] wfMessage: use Message::params() to handle all the message parameters The old code was similar to Message::params(), but Message::params() was unable to handle "special" parameters and received an overhaul in 7f2663f, yet wfMessage remained broken. To avoid duplication, wfMessage shall call Message::params() to correctly handle these parameters. CategoryMembershipChange::getChangeMessageText and its caller has been updated so as not to take advantage of this bug. Bug: T153747 Change-Id: I6667acf7e71c9db07fefc9fbb741c160e15823ff --- includes/GlobalFunctions.php | 10 +++++-- includes/changes/CategoryMembershipChange.php | 9 +++--- tests/phpunit/includes/MessageTest.php | 29 +++++++++++++++++++ 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index f8b0255cc8..6549fdd57d 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -1385,12 +1385,16 @@ function wfGetLangObj( $langcode = false ) { * @see Message::__construct */ function wfMessage( $key /*...*/ ) { + $message = new Message( $key ); + + // We call Message::params() to reduce code duplication $params = func_get_args(); array_shift( $params ); - if ( isset( $params[0] ) && is_array( $params[0] ) ) { - $params = $params[0]; + if ( $params ) { + call_user_func_array( [ $message, 'params' ], $params ); } - return new Message( $key, $params ); + + return $message; } /** diff --git a/includes/changes/CategoryMembershipChange.php b/includes/changes/CategoryMembershipChange.php index 515ab0561a..5d199612df 100644 --- a/includes/changes/CategoryMembershipChange.php +++ b/includes/changes/CategoryMembershipChange.php @@ -129,7 +129,7 @@ class CategoryMembershipChange { $this->getUser(), $this->getChangeMessageText( $type, - [ 'prefixedText' => $this->pageTitle->getPrefixedText() ], + $this->pageTitle->getPrefixedText(), $this->numTemplateLinks ), $this->pageTitle, @@ -245,13 +245,12 @@ class CategoryMembershipChange { * * @param int $type may be CategoryMembershipChange::CATEGORY_ADDITION * or CategoryMembershipChange::CATEGORY_REMOVAL - * @param array $params - * - prefixedText: result of Title::->getPrefixedText() + * @param string $prefixedText result of Title::->getPrefixedText() * @param int $numTemplateLinks * * @return string */ - private function getChangeMessageText( $type, array $params, $numTemplateLinks ) { + private function getChangeMessageText( $type, $prefixedText, $numTemplateLinks ) { $array = [ self::CATEGORY_ADDITION => 'recentchanges-page-added-to-category', self::CATEGORY_REMOVAL => 'recentchanges-page-removed-from-category', @@ -263,7 +262,7 @@ class CategoryMembershipChange { $msgKey .= '-bundled'; } - return wfMessage( $msgKey, $params )->inContentLanguage()->text(); + return wfMessage( $msgKey, $prefixedText )->inContentLanguage()->text(); } /** diff --git a/tests/phpunit/includes/MessageTest.php b/tests/phpunit/includes/MessageTest.php index 2d45c2ebf5..1de9c23a36 100644 --- a/tests/phpunit/includes/MessageTest.php +++ b/tests/phpunit/includes/MessageTest.php @@ -214,6 +214,14 @@ class MessageTest extends MediaWikiLangTestCase { public function testWfMessageParams() { $this->assertSame( 'Return to $1.', wfMessage( 'returnto' )->text() ); $this->assertSame( 'Return to $1.', wfMessage( 'returnto', [] )->text() ); + $this->assertSame( + 'Return to 1,024.', + wfMessage( 'returnto', Message::numParam( 1024 ) )->text() + ); + $this->assertSame( + 'Return to 1,024.', + wfMessage( 'returnto', [ Message::numParam( 1024 ) ] )->text() + ); $this->assertSame( 'You have foo (bar).', wfMessage( 'youhavenewmessages', 'foo', 'bar' )->text() @@ -222,6 +230,27 @@ class MessageTest extends MediaWikiLangTestCase { 'You have foo (bar).', wfMessage( 'youhavenewmessages', [ 'foo', 'bar' ] )->text() ); + $this->assertSame( + 'You have 1,024 (bar).', + wfMessage( + 'youhavenewmessages', + Message::numParam( 1024 ), 'bar' + )->text() + ); + $this->assertSame( + 'You have foo (2,048).', + wfMessage( + 'youhavenewmessages', + 'foo', Message::numParam( 2048 ) + )->text() + ); + $this->assertSame( + 'You have 1,024 (2,048).', + wfMessage( + 'youhavenewmessages', + [ Message::numParam( 1024 ), Message::numParam( 2048 ) ] + )->text() + ); } /** -- 2.20.1