Merge "Clarify and expand messages mentioning "loss of session data""
[lhc/web/wiklou.git] / includes / Message.php
index ee41db0..c71a953 100644 (file)
@@ -226,8 +226,9 @@ class Message implements MessageSpecifier, Serializable {
        /**
         * @since 1.17
         *
-        * @param string|string[] $key Message key or array of message keys to try and use the first
-        * non-empty message for.
+        * @param string|string[]|MessageSpecifier $key Message key, or array of
+        * message keys to try and use the first non-empty message for, or a
+        * MessageSpecifier to copy from.
         * @param array $params Message parameters.
         * @param Language $language Optional language of the message, defaults to $wgLang.
         *
@@ -236,6 +237,16 @@ class Message implements MessageSpecifier, Serializable {
        public function __construct( $key, $params = array(), Language $language = null ) {
                global $wgLang;
 
+               if ( $key instanceof MessageSpecifier ) {
+                       if ( $params ) {
+                               throw new InvalidArgumentException(
+                                       '$params must be empty if $key is a MessageSpecifier'
+                               );
+                       }
+                       $params = $key->getParams();
+                       $key = $key->getKey();
+               }
+
                if ( !is_string( $key ) && !is_array( $key ) ) {
                        throw new InvalidArgumentException( '$key must be a string or an array' );
                }
@@ -260,7 +271,7 @@ class Message implements MessageSpecifier, Serializable {
        public function serialize() {
                return serialize( array(
                        'interface' => $this->interface,
-                       'language' => $this->language->getCode(),
+                       'language' => $this->language instanceof StubUserLang ? false : $this->language->getCode(),
                        'key' => $this->key,
                        'keysToTry' => $this->keysToTry,
                        'parameters' => $this->parameters,
@@ -276,6 +287,8 @@ class Message implements MessageSpecifier, Serializable {
         * @param string $serialized
         */
        public function unserialize( $serialized ) {
+               global $wgLang;
+
                $data = unserialize( $serialized );
                $this->interface = $data['interface'];
                $this->key = $data['key'];
@@ -283,7 +296,7 @@ class Message implements MessageSpecifier, Serializable {
                $this->parameters = $data['parameters'];
                $this->format = $data['format'];
                $this->useDatabase = $data['useDatabase'];
-               $this->language = Language::factory( $data['language'] );
+               $this->language = $data['language'] ? Language::factory( $data['language'] ) : $wgLang;
                $this->title = $data['title'];
        }
 
@@ -362,7 +375,7 @@ class Message implements MessageSpecifier, Serializable {
         *
         * @since 1.17
         *
-        * @param string|string[] $key Message key or array of keys.
+        * @param string|string[]|MessageSpecifier $key
         * @param mixed $param,... Parameters as strings.
         *
         * @return Message
@@ -429,7 +442,7 @@ class Message implements MessageSpecifier, Serializable {
         *
         * @since 1.17
         *
-        * @param mixed $params,... Parameters as strings, or a single argument that is
+        * @param mixed ... Parameters as strings, or a single argument that is
         * an array of strings.
         *
         * @return Message $this