]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - includes/content/MessageContent.php
MediaWiki 1.30.2
[autoinstalls/mediawiki.git] / includes / content / MessageContent.php
1 <?php
2 /**
3  * Wrapper content object allowing to handle a system message as a Content object.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @since 1.21
21  *
22  * @file
23  * @ingroup Content
24  *
25  * @author Daniel Kinzler
26  */
27
28 /**
29  * Wrapper allowing us to handle a system message as a Content object.
30  * Note that this is generally *not* used to represent content from the
31  * MediaWiki namespace, and that there is no MessageContentHandler.
32  * MessageContent is just intended as glue for wrapping a message programmatically.
33  *
34  * @ingroup Content
35  */
36 class MessageContent extends AbstractContent {
37
38         /**
39          * @var Message
40          */
41         protected $mMessage;
42
43         /**
44          * @param Message|string $msg A Message object, or a message key.
45          * @param string[] $params An optional array of message parameters.
46          */
47         public function __construct( $msg, $params = null ) {
48                 # XXX: messages may be wikitext, html or plain text! and maybe even something else entirely.
49                 parent::__construct( CONTENT_MODEL_WIKITEXT );
50
51                 if ( is_string( $msg ) ) {
52                         $this->mMessage = wfMessage( $msg );
53                 } else {
54                         $this->mMessage = clone $msg;
55                 }
56
57                 if ( $params ) {
58                         $this->mMessage = $this->mMessage->params( $params );
59                 }
60         }
61
62         /**
63          * Fully parse the text from wikitext to HTML.
64          *
65          * @return string Parsed HTML.
66          */
67         public function getHtml() {
68                 return $this->mMessage->parse();
69         }
70
71         /**
72          * Returns the message text. {{-transformation is done.
73          *
74          * @return string Unescaped message text.
75          */
76         public function getWikitext() {
77                 return $this->mMessage->text();
78         }
79
80         /**
81          * Returns the message object, with any parameters already substituted.
82          *
83          * @return Message The message object.
84          */
85         public function getNativeData() {
86                 // NOTE: Message objects are mutable. Cloning here makes MessageContent immutable.
87                 return clone $this->mMessage;
88         }
89
90         /**
91          * @return string
92          *
93          * @see Content::getTextForSearchIndex
94          */
95         public function getTextForSearchIndex() {
96                 return $this->mMessage->plain();
97         }
98
99         /**
100          * @return string
101          *
102          * @see Content::getWikitextForTransclusion
103          */
104         public function getWikitextForTransclusion() {
105                 return $this->getWikitext();
106         }
107
108         /**
109          * @param int $maxlength Maximum length of the summary text, defaults to 250.
110          *
111          * @return string The summary text.
112          *
113          * @see Content::getTextForSummary
114          */
115         public function getTextForSummary( $maxlength = 250 ) {
116                 return substr( $this->mMessage->plain(), 0, $maxlength );
117         }
118
119         /**
120          * @return int
121          *
122          * @see Content::getSize
123          */
124         public function getSize() {
125                 return strlen( $this->mMessage->plain() );
126         }
127
128         /**
129          * @return Content A copy of this object
130          *
131          * @see Content::copy
132          */
133         public function copy() {
134                 // MessageContent is immutable (because getNativeData() returns a clone of the Message object)
135                 return $this;
136         }
137
138         /**
139          * @param bool|null $hasLinks
140          *
141          * @return bool Always false.
142          *
143          * @see Content::isCountable
144          */
145         public function isCountable( $hasLinks = null ) {
146                 return false;
147         }
148
149         /**
150          * @param Title $title Unused.
151          * @param int $revId Unused.
152          * @param ParserOptions $options Unused.
153          * @param bool $generateHtml Whether to generate HTML (default: true).
154          *
155          * @return ParserOutput
156          *
157          * @see Content::getParserOutput
158          */
159         public function getParserOutput( Title $title, $revId = null,
160                 ParserOptions $options = null, $generateHtml = true ) {
161                 if ( $generateHtml ) {
162                         $html = $this->getHtml();
163                 } else {
164                         $html = '';
165                 }
166
167                 $po = new ParserOutput( $html );
168                 // Message objects are in the user language.
169                 $po->recordOption( 'userlang' );
170
171                 return $po;
172         }
173
174 }