Merge "Remove LanguageConverter dependencies on Title and use LinkTarget"
This commit is contained in:
commit
0f357294ca
8 changed files with 104 additions and 46 deletions
9
includes/cache/MessageCache.php
vendored
9
includes/cache/MessageCache.php
vendored
|
|
@ -21,6 +21,7 @@
|
|||
* @ingroup Cache
|
||||
*/
|
||||
use MediaWiki\Languages\LanguageFactory;
|
||||
use MediaWiki\Linker\LinkTarget;
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use Psr\Log\LoggerAwareInterface;
|
||||
|
|
@ -1376,20 +1377,20 @@ class MessageCache implements LoggerAwareInterface {
|
|||
/**
|
||||
* Purge message caches when a MediaWiki: page is created, updated, or deleted
|
||||
*
|
||||
* @param Title $title Message page title
|
||||
* @param LinkTarget $linkTarget Message page title
|
||||
* @param Content|null $content New content for edit/create, null on deletion
|
||||
* @since 1.29
|
||||
*/
|
||||
public function updateMessageOverride( Title $title, Content $content = null ) {
|
||||
public function updateMessageOverride( LinkTarget $linkTarget, Content $content = null ) {
|
||||
$msgText = $this->getMessageTextFromContent( $content );
|
||||
if ( $msgText === null ) {
|
||||
$msgText = false; // treat as not existing
|
||||
}
|
||||
|
||||
$this->replace( $title->getDBkey(), $msgText );
|
||||
$this->replace( $linkTarget->getDBkey(), $msgText );
|
||||
|
||||
if ( $this->contLangConverter->hasVariants() ) {
|
||||
$this->contLangConverter->updateConversionTable( $title );
|
||||
$this->contLangConverter->updateConversionTable( $linkTarget );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
*
|
||||
* @file
|
||||
*/
|
||||
use MediaWiki\Linker\LinkTarget;
|
||||
|
||||
/**
|
||||
* The shared interface for all language converters.
|
||||
|
|
@ -115,13 +116,13 @@ interface ILanguageConverter {
|
|||
public function autoConvertToAllVariants( $text );
|
||||
|
||||
/**
|
||||
* Auto convert a Title object to a readable string in the
|
||||
* Auto convert a LinkTarget object to a readable string in the
|
||||
* preferred variant.
|
||||
*
|
||||
* @param Title $title A object of Title
|
||||
* @param LinkTarget $linkTarget
|
||||
* @return string Converted title text
|
||||
*/
|
||||
public function convertTitle( $title );
|
||||
public function convertTitle( LinkTarget $linkTarget );
|
||||
|
||||
/**
|
||||
* Get the namespace display name in the preferred variant.
|
||||
|
|
@ -219,9 +220,9 @@ interface ILanguageConverter {
|
|||
* Refresh the cache of conversion tables when
|
||||
* MediaWiki:Conversiontable* is updated.
|
||||
*
|
||||
* @param Title $title The Title of the page being updated
|
||||
* @param LinkTarget $linkTarget The LinkTarget of the page being updated
|
||||
*/
|
||||
public function updateConversionTable( Title $title );
|
||||
public function updateConversionTable( LinkTarget $linkTarget );
|
||||
|
||||
/**
|
||||
* Check if this is a language with variants
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ use CLDRPluralRuleParser\Evaluator;
|
|||
use MediaWiki\Languages\LanguageConverterFactory;
|
||||
use MediaWiki\Languages\LanguageFallback;
|
||||
use MediaWiki\Languages\LanguageNameUtils;
|
||||
use MediaWiki\Linker\LinkTarget;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use Wikimedia\Assert\Assert;
|
||||
|
||||
|
|
@ -4240,10 +4241,10 @@ class Language {
|
|||
*
|
||||
* @deprecated since 1.35 use LanguageConverter::updateConversionTable instead
|
||||
*
|
||||
* @param Title $title The Title of the page being updated
|
||||
* @param LinkTarget $linkTarget The LinkTarget of the page being updated
|
||||
*/
|
||||
public function updateConversionTable( Title $title ) {
|
||||
$this->getConverter()->updateConversionTable( $title );
|
||||
public function updateConversionTable( LinkTarget $linkTarget ) {
|
||||
$this->getConverter()->updateConversionTable( $linkTarget );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
* @author shinjiman <shinjiman@gmail.com>
|
||||
* @author PhiLiP <philip.npc@gmail.com>
|
||||
*/
|
||||
use MediaWiki\Linker\LinkTarget;
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
|
|
@ -613,21 +614,22 @@ abstract class LanguageConverter implements ILanguageConverter {
|
|||
}
|
||||
|
||||
/**
|
||||
* Auto convert a Title object to a readable string in the
|
||||
* Auto convert a LinkTarget object to a readable string in the
|
||||
* preferred variant.
|
||||
*
|
||||
* @param Title $title A object of Title
|
||||
* @param LinkTarget $linkTarget
|
||||
* @return string Converted title text
|
||||
*/
|
||||
public function convertTitle( $title ) {
|
||||
public function convertTitle( LinkTarget $linkTarget ) {
|
||||
$variant = $this->getPreferredVariant();
|
||||
$index = $title->getNamespace();
|
||||
$index = $linkTarget->getNamespace();
|
||||
if ( $index !== NS_MAIN ) {
|
||||
$text = $this->convertNamespace( $index, $variant ) . ':';
|
||||
} else {
|
||||
$text = '';
|
||||
}
|
||||
$text .= $this->translate( $title->getText(), $variant );
|
||||
$text .= $this->translate( $linkTarget->getText(), $variant );
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
|
@ -671,7 +673,9 @@ abstract class LanguageConverter implements ILanguageConverter {
|
|||
|
||||
if ( $nsVariantText === false ) {
|
||||
// No message exists, retrieve it from the target variant's namespace names.
|
||||
$mLangObj = $this->mLangObj->factory( $variant ); // TODO: create from services
|
||||
$mLangObj = MediaWikiServices::getInstance()
|
||||
->getLanguageFactory()
|
||||
->getLanguage( $variant );
|
||||
$nsVariantText = $mLangObj->getFormattedNsText( $index );
|
||||
}
|
||||
|
||||
|
|
@ -1176,12 +1180,11 @@ abstract class LanguageConverter implements ILanguageConverter {
|
|||
* Refresh the cache of conversion tables when
|
||||
* MediaWiki:Conversiontable* is updated.
|
||||
*
|
||||
* @param Title $titleobj The Title of the page being updated
|
||||
* @param LinkTarget $linkTarget The LinkTarget of the page being updated
|
||||
*/
|
||||
public function updateConversionTable( Title $titleobj ) {
|
||||
if ( $titleobj->getNamespace() == NS_MEDIAWIKI ) {
|
||||
$title = $titleobj->getDBkey();
|
||||
$t = explode( '/', $title, 3 );
|
||||
public function updateConversionTable( LinkTarget $linkTarget ) {
|
||||
if ( $linkTarget->getNamespace() == NS_MEDIAWIKI ) {
|
||||
$t = explode( '/', $linkTarget->getDBkey(), 3 );
|
||||
$c = count( $t );
|
||||
if ( $c > 1 && $t[0] == 'Conversiontable' ) {
|
||||
if ( $this->validateVariant( $t[1] ) ) {
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
*
|
||||
* @file
|
||||
*/
|
||||
use MediaWiki\Linker\LinkTarget;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
|
||||
/**
|
||||
* A trivial language converter.
|
||||
|
|
@ -32,13 +34,20 @@
|
|||
* @ingroup Language
|
||||
*/
|
||||
class TrivialLanguageConverter implements ILanguageConverter {
|
||||
|
||||
/**
|
||||
* @var Language
|
||||
*/
|
||||
protected $language;
|
||||
|
||||
/**
|
||||
* @var TitleFormatter
|
||||
*/
|
||||
private $titleFormatter;
|
||||
|
||||
public function __construct( $langobj ) {
|
||||
$this->language = $langobj;
|
||||
$this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
|
||||
}
|
||||
|
||||
public function autoConvert( $text, $variant = false ) {
|
||||
|
|
@ -58,11 +67,11 @@ class TrivialLanguageConverter implements ILanguageConverter {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param Title $t
|
||||
* @param LinkTarget $linkTarget
|
||||
* @return mixed
|
||||
*/
|
||||
public function convertTitle( $t ) {
|
||||
return $t->getPrefixedText();
|
||||
public function convertTitle( LinkTarget $linkTarget ) {
|
||||
return $this->titleFormatter->getPrefixedText( $linkTarget );
|
||||
}
|
||||
|
||||
public function convertNamespace( $index, $variant = null ) {
|
||||
|
|
@ -127,7 +136,7 @@ class TrivialLanguageConverter implements ILanguageConverter {
|
|||
return $text;
|
||||
}
|
||||
|
||||
public function updateConversionTable( Title $title ) {
|
||||
public function updateConversionTable( LinkTarget $linkTarget ) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -180,6 +180,7 @@ $wgAutoloadClasses += [
|
|||
'MediaWiki\Tests\Revision\RevisionStoreRecordTest' => "$testDir/phpunit/includes/Revision/RevisionStoreRecordTest.php",
|
||||
|
||||
# tests/phpunit/languages
|
||||
'DummyConverter' => "$testDir/phpunit/mocks/languages/DummyConverter.php",
|
||||
'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php",
|
||||
'LanguageConverterTestTrait' => "$testDir/phpunit/languages/LanguageConverterTestTrait.php",
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,20 @@
|
|||
<?php
|
||||
|
||||
use MediaWiki\Linker\LinkTarget;
|
||||
|
||||
/**
|
||||
* @group Language
|
||||
*/
|
||||
class LanguageConverterTest extends MediaWikiLangTestCase {
|
||||
|
||||
/** @var Language */
|
||||
protected $lang;
|
||||
/** @var TestConverter */
|
||||
|
||||
/** @var DummyConverter */
|
||||
protected $lc;
|
||||
|
||||
protected function setUp() : void {
|
||||
parent::setUp();
|
||||
|
||||
$this->setContentLang( 'tg' );
|
||||
|
||||
$this->setMwGlobals( [
|
||||
|
|
@ -27,7 +30,7 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
|
|||
} ) );
|
||||
$this->lang->expects( $this->never() )
|
||||
->method( $this->anythingBut( 'factory', 'getNsText', 'ucfirst' ) );
|
||||
$this->lc = new TestConverter(
|
||||
$this->lc = new DummyConverter(
|
||||
$this->lang, 'tg',
|
||||
# Adding 'sgs' as a variant to ensure we handle deprecated codes
|
||||
# adding 'simple' as a variant to ensure we handle non BCP 47 codes
|
||||
|
|
@ -320,24 +323,41 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
|
|||
"в converted to v despite being in attribue"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test converter (from Tajiki to latin orthography)
|
||||
*/
|
||||
class TestConverter extends LanguageConverter {
|
||||
private $table = [
|
||||
'б' => 'b',
|
||||
'в' => 'v',
|
||||
'г' => 'g',
|
||||
];
|
||||
/**
|
||||
* @dataProvider provideTitlesToConvert
|
||||
* @covers LanguageConverter::convertTitle
|
||||
*
|
||||
* @param LinkTarget $linkTarget LinkTarget to convert
|
||||
* @param string $expected
|
||||
*/
|
||||
public function testConvertTitle( LinkTarget $linkTarget, string $expected ) : void {
|
||||
$actual = $this->lc->convertTitle( $linkTarget );
|
||||
$this->assertSame( $expected, $actual );
|
||||
}
|
||||
|
||||
public function loadDefaultTables() {
|
||||
$this->mTables = [
|
||||
'sgs' => new ReplacementArray(),
|
||||
'simple' => new ReplacementArray(),
|
||||
'tg-latn' => new ReplacementArray( $this->table ),
|
||||
'tg' => new ReplacementArray()
|
||||
public function provideTitlesToConvert() : array {
|
||||
return [
|
||||
'Title FromText default' => [
|
||||
Title::newFromText( 'Dummy_title' ),
|
||||
'Dummy title',
|
||||
],
|
||||
'Title FromText with NS' => [
|
||||
Title::newFromText( 'Dummy_title', NS_FILE ),
|
||||
'Акс:Dummy title',
|
||||
],
|
||||
'Title MainPage default' => [
|
||||
Title::newMainPage(),
|
||||
'Main Page',
|
||||
],
|
||||
'Title MainPage with MessageLocalizer' => [
|
||||
Title::newMainPage( new MockMessageLocalizer() ),
|
||||
'Main Page',
|
||||
],
|
||||
'TitleValue' => [
|
||||
new TitleValue( NS_FILE, 'Dummy page' ),
|
||||
'Акс:Dummy page',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
22
tests/phpunit/mocks/languages/DummyConverter.php
Normal file
22
tests/phpunit/mocks/languages/DummyConverter.php
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Test converter (from Tajiki to latin orthography)
|
||||
*/
|
||||
class DummyConverter extends LanguageConverter {
|
||||
|
||||
private $table = [
|
||||
'б' => 'b',
|
||||
'в' => 'v',
|
||||
'г' => 'g',
|
||||
];
|
||||
|
||||
public function loadDefaultTables() {
|
||||
$this->mTables = [
|
||||
'sgs' => new ReplacementArray(),
|
||||
'simple' => new ReplacementArray(),
|
||||
'tg-latn' => new ReplacementArray( $this->table ),
|
||||
'tg' => new ReplacementArray()
|
||||
];
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue