/**
* Transform a MessageSpecifier or a primitive value used interchangeably with
- * specifiers (a message key string, or a key + params array) into a proper Message
+ * specifiers (a message key string, or a key + params array) into a proper Message.
+ *
+ * Also accepts a MessageSpecifier inside an array: that's not considered a valid format
+ * but is an easy error to make due to how StatusValue stores messages internally.
+ * Further array elements are ignored in that case.
+ *
* @param string|array|MessageSpecifier $value
* @return Message
* @throws InvalidArgumentException
* @since 1.27
*/
public static function newFromSpecifier( $value ) {
+ $params = [];
+ if ( is_array( $value ) ) {
+ $params = $value;
+ $value = array_shift( $params );
+ }
+
if ( $value instanceof RawMessage ) {
$message = new RawMessage( $value->getKey(), $value->getParams() );
} elseif ( $value instanceof MessageSpecifier ) {
$message = new Message( $value );
- } elseif ( is_array( $value ) ) {
- $key = array_shift( $value );
- $message = new Message( $key, $value );
} elseif ( is_string( $value ) ) {
- $message = new Message( $value );
+ $message = new Message( $value, $params );
} else {
throw new InvalidArgumentException( __METHOD__ . ': invalid argument type '
. gettype( $value ) );
'Message' => [ new Message( 'youhavenewmessages', [ 'foo', 'bar' ] ), 'You have foo (bar).' ],
'RawMessage' => [ new RawMessage( 'foo ($1)', [ 'bar' ] ), 'foo (bar)' ],
'MessageSpecifier' => [ $messageSpecifier, 'Main Page' ],
+ 'nested RawMessage' => [ [ new RawMessage( 'foo ($1)', [ 'bar' ] ) ], 'foo (bar)' ],
];
}
}