mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
synced 2024-11-28 10:10:04 +00:00
2b06e83816
Message formats other than plain should have never been exposed in this way, as they allow link tables, etc. to be bypassed and serve no useful purpose. This removes them, and also removes title, as it serves no purpose without them. Bug: 60758 Change-Id: I96284ffbe986a9cd92d2bde1ffdb746029bad989
66 lines
1.7 KiB
PHP
66 lines
1.7 KiB
PHP
<?php
|
|
|
|
class Scribunto_LuaMessageLibrary extends Scribunto_LuaLibraryBase {
|
|
function register() {
|
|
$lib = array(
|
|
'plain' => array( $this, 'messagePlain' ),
|
|
'check' => array( $this, 'messageCheck' ),
|
|
);
|
|
|
|
// Get the correct default language from the parser
|
|
if ( $this->getParser() ) {
|
|
$lang = $this->getParser()->getTargetLanguage();
|
|
} else {
|
|
global $wgContLang;
|
|
$lang = $wgContLang;
|
|
}
|
|
|
|
$this->getEngine()->registerInterface( 'mw.message.lua', $lib, array(
|
|
'lang' => $lang->getCode(),
|
|
) );
|
|
}
|
|
|
|
private function makeMessage( $data, $setParams ) {
|
|
if ( isset( $data['rawMessage'] ) ) {
|
|
$msg = new RawMessage( $data['rawMessage'] );
|
|
} else {
|
|
$msg = Message::newFallbackSequence( $data['keys'] );
|
|
}
|
|
$msg->inLanguage( $data['lang'] )
|
|
->useDatabase( $data['useDB'] );
|
|
if ( $setParams ) {
|
|
if ( isset( $data['title'] ) ) {
|
|
$title = Title::newFromText( $data['title'] );
|
|
} else {
|
|
$title = $this->getTitle();
|
|
}
|
|
|
|
$msg->params( array_values( $data['params'] ) )
|
|
->title( $title );
|
|
}
|
|
return $msg;
|
|
}
|
|
|
|
function messagePlain( $data ) {
|
|
try {
|
|
$msg = $this->makeMessage( $data, true );
|
|
return array( $msg->plain() );
|
|
} catch( MWException $ex ) {
|
|
throw new Scribunto_LuaError( "msg:plain() failed (" . $ex->getMessage() . ")" );
|
|
}
|
|
}
|
|
|
|
function messageCheck( $what, $data ) {
|
|
if ( !in_array( $what, array( 'exists', 'isBlank', 'isDisabled' ) ) ) {
|
|
throw new Scribunto_LuaError( "invalid what for 'messageCheck'" );
|
|
}
|
|
|
|
try {
|
|
$msg = $this->makeMessage( $data, false );
|
|
return array( call_user_func( array( $msg, $what ) ) );
|
|
} catch( MWException $ex ) {
|
|
throw new Scribunto_LuaError( "msg:$what() failed (" . $ex->getMessage() . ")" );
|
|
}
|
|
}
|
|
}
|