* @file
* @author Niklas Laxström
*/
+use MediaWiki\MediaWikiServices;
/**
* The Message class provides methods which fulfil two basic services:
* 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 to use (defaults to current user language).
+ * @param Language|null $language [optional] Language to use (defaults to current user language).
* @throws InvalidArgumentException
*/
public function __construct( $key, $params = [], Language $language = null ) {
* @since 1.26
*/
public function getTitle() {
- global $wgContLang, $wgForceUIMsgAsContentMsg;
+ global $wgForceUIMsgAsContentMsg;
+ $contLang = MediaWikiServices::getInstance()->getContentLanguage();
$title = $this->key;
if (
- !$this->language->equals( $wgContLang )
+ !$this->language->equals( $contLang )
&& in_array( $this->key, (array)$wgForceUIMsgAsContentMsg )
) {
$code = $this->language->getCode();
$title .= '/' . $code;
}
- return Title::makeTitle( NS_MEDIAWIKI, $wgContLang->ucfirst( strtr( $title, ' ', '_' ) ) );
+ return Title::makeTitle(
+ NS_MEDIAWIKI, $contLang->ucfirst( strtr( $title, ' ', '_' ) ) );
}
/**
* @throws MWException
*/
public function inLanguage( $lang ) {
+ $previousLanguage = $this->language;
+
if ( $lang instanceof Language ) {
$this->language = $lang;
} elseif ( is_string( $lang ) ) {
. "passed a String or Language object; $type given"
);
}
- $this->message = null;
+
+ if ( $this->language !== $previousLanguage ) {
+ // The language has changed. Clear the message cache.
+ $this->message = null;
+ }
$this->interface = false;
return $this;
}
return $this;
}
- global $wgContLang;
- $this->inLanguage( $wgContLang );
+ $this->inLanguage( MediaWikiServices::getInstance()->getContentLanguage() );
return $this;
}
* the last time (this is for B/C and should be avoided).
*
* @return string HTML
+ * @suppress SecurityCheck-DoubleEscaped phan false positive
*/
public function toString( $format = null ) {
if ( $format === null ) {
public static function listParam( array $list, $type = 'text' ) {
if ( !isset( self::$listTypeMap[$type] ) ) {
throw new InvalidArgumentException(
- "Invalid type '$type'. Known types are: " . join( ', ', array_keys( self::$listTypeMap ) )
+ "Invalid type '$type'. Known types are: " . implode( ', ', array_keys( self::$listTypeMap ) )
);
}
return [ 'list' => $list, 'type' => $type ];
*
* @return string
*/
- protected function replaceParameters( $message, $type = 'before', $format ) {
+ protected function replaceParameters( $message, $type, $format ) {
// A temporary marker for $1 parameters that is only valid
// in non-attribute contexts. However if the entire message is escaped
// then we don't want to use it because it will be mangled in all contexts
);
return $out instanceof ParserOutput
- ? $out->getText( [ 'enableSectionEditLinks' => false ] )
+ ? $out->getText( [
+ 'enableSectionEditLinks' => false,
+ // Wrapping messages in an extra <div> is probably not expected. If
+ // they're outside the content area they probably shouldn't be
+ // targeted by CSS that's targeting the parser output, and if
+ // they're inside they already are from the outer div.
+ 'unwrap' => true,
+ ] )
: $out;
}
*/
protected function formatPlaintext( $plaintext, $format ) {
switch ( $format ) {
- case self::FORMAT_TEXT:
- case self::FORMAT_PLAIN:
- return $plaintext;
-
- case self::FORMAT_PARSE:
- case self::FORMAT_BLOCK_PARSE:
- case self::FORMAT_ESCAPED:
- default:
- return htmlspecialchars( $plaintext, ENT_QUOTES );
-
+ case self::FORMAT_TEXT:
+ case self::FORMAT_PLAIN:
+ return $plaintext;
+
+ case self::FORMAT_PARSE:
+ case self::FORMAT_BLOCK_PARSE:
+ case self::FORMAT_ESCAPED:
+ default:
+ return htmlspecialchars( $plaintext, ENT_QUOTES );
}
}