WikidataBuilder has uploaded a new change for review.
https://gerrit.wikimedia.org/r/317477
Change subject: New Wikidata Build - 2016-10-24T10:00:01+0000
......................................................................
New Wikidata Build - 2016-10-24T10:00:01+0000
Change-Id: Iba436999cae9e78b120c47371bd448eecc745d0a
---
M composer.lock
M extensions/Wikibase/client/i18n/es.json
M extensions/Wikibase/client/i18n/et.json
M
extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
M
extensions/Wikibase/client/includes/DataAccess/Scribunto/SnakSerializationRenderer.php
M
extensions/Wikibase/client/includes/DataAccess/StatementTransclusionInteractor.php
M extensions/Wikibase/client/includes/WikibaseClient.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterOutputFormatTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
A
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementsParserFunctionIntegrationTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/SnakSerializationRendererTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/StatementTransclusionInteractorTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
M
extensions/Wikibase/client/tests/phpunit/includes/Hooks/ParserFunctionRegistrantTest.php
M extensions/Wikibase/lib/i18n/es.json
M extensions/Wikibase/lib/i18n/et.json
M extensions/Wikibase/lib/i18n/lb.json
A extensions/Wikibase/lib/includes/Formatters/EntityIdSiteLinkFormatter.php
M extensions/Wikibase/lib/includes/Formatters/WikibaseValueFormatterBuilders.php
A
extensions/Wikibase/lib/tests/phpunit/Formatters/EntityIdSiteLinkFormatterTest.php
M extensions/Wikibase/repo/i18n/bn.json
M extensions/Wikibase/repo/i18n/es.json
M extensions/Wikibase/repo/i18n/et.json
M extensions/Wikibase/repo/i18n/lb.json
M extensions/Wikibase/repo/i18n/sv.json
M extensions/Wikibase/repo/includes/Api/EditEntity.php
M vendor/composer/autoload_classmap.php
M vendor/composer/installed.json
31 files changed, 553 insertions(+), 82 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata
refs/changes/77/317477/1
diff --git a/composer.lock b/composer.lock
index 9e1d5cf..8492f21 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1574,12 +1574,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "60cffa1069a20fe6949ad5028bfd286483c615e1"
+ "reference": "d68dc7fda3ca40fe8cbce43c8d17d122152a6bb0"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/60cffa1069a20fe6949ad5028bfd286483c615e1",
- "reference": "60cffa1069a20fe6949ad5028bfd286483c615e1",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/d68dc7fda3ca40fe8cbce43c8d17d122152a6bb0",
+ "reference": "d68dc7fda3ca40fe8cbce43c8d17d122152a6bb0",
"shasum": ""
},
"require": {
@@ -1653,7 +1653,7 @@
"wikibaserepo",
"wikidata"
],
- "time": "2016-10-22 20:49:56"
+ "time": "2016-10-24 09:53:24"
},
{
"name": "wikibase/wikimedia-badges",
diff --git a/extensions/Wikibase/client/i18n/es.json
b/extensions/Wikibase/client/i18n/es.json
index e6b96cd..91d6853 100644
--- a/extensions/Wikibase/client/i18n/es.json
+++ b/extensions/Wikibase/client/i18n/es.json
@@ -21,7 +21,9 @@
},
"wikibase-client-desc": "Cliente para la extensión Wikibase",
"tooltip-t-wikibase": "Enlace al elemento conectado del repositorio de
datos",
+ "apihelp-query+wbentityusage-param-prop": "Propiedades que añadir al
resultado.",
"apihelp-query+wblistentityusage-description": "Devuelve todas las
páginas que utilizan los identificadores de entidad dados.",
+ "apihelp-query+wblistentityusage-param-prop": "Propiedades que añadir
al resultado.",
"apihelp-query+wblistentityusage-param-entities": "Entidades que se han
utilizado.",
"apihelp-query+pageterms-description": "Obtener los términos asociados
con una página a través de un elemento de datos asociado. En una página de
entidad de wikibase, los términos de la entidad se usan
directamente.\nAdvertencia: en un repositorio wiki, los términos de páginas
sólo funcionan directamente en páginas de entidad, no en las páginas conectadas
a un elemento. Esto puede cambiar en el futuro.",
"apihelp-query+pageterms-example-simple": "Obtener todos los términos
asociados con la página 'London', en el idioma del usuario.",
diff --git a/extensions/Wikibase/client/i18n/et.json
b/extensions/Wikibase/client/i18n/et.json
index c711c46..d200ab0 100644
--- a/extensions/Wikibase/client/i18n/et.json
+++ b/extensions/Wikibase/client/i18n/et.json
@@ -45,7 +45,6 @@
"wikibase-linkitem-not-loggedin-title": "Pead olema sisse loginud",
"wikibase-linkitem-not-loggedin": "Et kasutada seda funktsiooni, pead
olema sisse loginud siia vikisse ja [$1 kesksesse andmehoidlasse].",
"wikibase-linkitem-success-link": "Leheküljed on ühendatud. Linke
sisaldava üksuse leiad [$1 kesksest andmehoidlast].",
- "wikibase-limitreport-entities-accessed": "Vikibaasist laaditud olemite
arv",
"wikibase-property-notfound": "Omadust $1 ei leitud.",
"wikibase-rc-hide-wikidata": "Vikiandmed ($1)",
"wikibase-rc-hide-wikidata-hide": "peida",
@@ -69,6 +68,7 @@
"wikibase-pageswithbadges-legend": "Antud äramärkimisega lehekülgede
loend",
"wikibase-pageswithbadges-badge": "Äramärkimine:",
"wikibase-pageswithbadges-submit": "Näita lehekülgi",
+ "entityusage": "Olemi kasutus",
"wikibase-pageinfo-entity-id": "Vikiandmete üksuse identifikaator",
"wikibase-pageinfo-entity-id-none": "Puudub",
"wikibase-property-render-error": "Omaduse $1 viimistlemine
ebaõnnestus: $2",
diff --git
a/extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
b/extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
index 4cff628..703e47c 100644
---
a/extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
+++
b/extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
@@ -137,7 +137,7 @@
SnakFormatter::FORMAT_WIKI,
$snakFormatter,
function( $str ) {
- return "<span>$str</span>";
+ return $str === '' ? '' : "<span>$str</span>";
}
);
}
diff --git
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/SnakSerializationRenderer.php
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/SnakSerializationRenderer.php
index 21f141e..ab3ef79 100644
---
a/extensions/Wikibase/client/includes/DataAccess/Scribunto/SnakSerializationRenderer.php
+++
b/extensions/Wikibase/client/includes/DataAccess/Scribunto/SnakSerializationRenderer.php
@@ -93,13 +93,18 @@
/**
* @param Snak[] $snaks
*
- * @return string
+ * @return string Wikitext
*/
private function formatSnakList( array $snaks ) {
- $formattedValues = array_map(
- array( $this->snakFormatter, 'formatSnak' ),
- $snaks
- );
+ $formattedValues = [];
+
+ foreach ( $snaks as $snak ) {
+ $formattedValue = $this->snakFormatter->formatSnak(
$snak );
+
+ if ( $formattedValue !== '' ) {
+ $formattedValues[] = $formattedValue;
+ }
+ }
return $this->language->commaList( $formattedValues );
}
diff --git
a/extensions/Wikibase/client/includes/DataAccess/StatementTransclusionInteractor.php
b/extensions/Wikibase/client/includes/DataAccess/StatementTransclusionInteractor.php
index baba75a..510674a 100644
---
a/extensions/Wikibase/client/includes/DataAccess/StatementTransclusionInteractor.php
+++
b/extensions/Wikibase/client/includes/DataAccess/StatementTransclusionInteractor.php
@@ -113,7 +113,11 @@
$formattedValues = array();
foreach ( $snaks as $snak ) {
- $formattedValues[] = $this->snakFormatter->formatSnak(
$snak );
+ $formattedValue = $this->snakFormatter->formatSnak(
$snak );
+
+ if ( $formattedValue !== '' ) {
+ $formattedValues[] = $formattedValue;
+ }
}
return $this->language->commaList( $formattedValues );
diff --git a/extensions/Wikibase/client/includes/WikibaseClient.php
b/extensions/Wikibase/client/includes/WikibaseClient.php
index 135d726..cd95980 100644
--- a/extensions/Wikibase/client/includes/WikibaseClient.php
+++ b/extensions/Wikibase/client/includes/WikibaseClient.php
@@ -261,7 +261,10 @@
$this->contentLanguage,
new FormatterLabelDescriptionLookupFactory(
$this->getTermLookup() ),
new LanguageNameLookup( $wgLang->getCode() ),
- $this->getRepoItemUriParser()
+ $this->getRepoItemUriParser(),
+ null,
+ $this->getStore()->getSiteLinkLookup(),
+ $this->getSettings()->getSetting( 'siteGlobalID' )
);
}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
index cac963b..331342f 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterFactoryTest.php
@@ -2,12 +2,16 @@
namespace Wikibase\Client\Tests\DataAccess;
+use DataValues\StringValue;
use Language;
use PHPUnit_Framework_TestCase;
use ValueFormatters\FormatterOptions;
use Wikibase\Client\DataAccess\DataAccessSnakFormatterFactory;
use Wikibase\Client\Usage\UsageAccumulator;
+use Wikibase\DataModel\Entity\PropertyId;
use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
+use Wikibase\DataModel\Snak\PropertyValueSnak;
+use Wikibase\DataModel\Snak\Snak;
use Wikibase\LanguageFallbackChainFactory;
use Wikibase\Lib\OutputFormatSnakFormatterFactory;
use Wikibase\Lib\SnakFormatter;
@@ -59,6 +63,13 @@
->getMock();
$snakFormatter = $this->getMock( SnakFormatter::class );
+
+ $snakFormatter->expects( $this->any() )
+ ->method( 'formatSnak' )
+ ->will( $this->returnCallback( function(
PropertyValueSnak $snak ) {
+ return $snak->getDataValue()->getValue();
+ } ) );
+
$snakFormatter->expects( $this->any() )
->method( 'getFormat' )
->will( $this->returnValue( $expectedFormat ) );
@@ -82,14 +93,26 @@
$this->assertSame( SnakFormatter::FORMAT_PLAIN,
$snakFormatter->getFormat() );
}
- public function testNewRichWikitextSnakFormatter() {
+ public function richWikitextSnakFormatterProvider() {
+ $id = new PropertyId( 'P1' );
+
+ return [
+ [ new PropertyValueSnak( $id, new StringValue( '' ) ),
'' ],
+ [ new PropertyValueSnak( $id, new StringValue( '<RAW>'
) ), '<span><RAW></span>' ],
+ ];
+ }
+
+ /**
+ * @dataProvider richWikitextSnakFormatterProvider
+ */
+ public function testRichWikitextSnakFormatter( Snak $snak, $expected ) {
$factory = $this->getDataAccessSnakFormatterFactory(
SnakFormatter::FORMAT_WIKI );
$snakFormatter = $factory->newRichWikitextSnakFormatter(
Language::factory( 'fr' ),
$this->getMock( UsageAccumulator::class )
);
- $this->assertInstanceOf( SnakFormatter::class, $snakFormatter );
+ $this->assertSame( $expected, $snakFormatter->formatSnak( $snak
) );
$this->assertSame( SnakFormatter::FORMAT_WIKI,
$snakFormatter->getFormat() );
}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterOutputFormatTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterOutputFormatTest.php
index a312b10..22697ac 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterOutputFormatTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/DataAccessSnakFormatterOutputFormatTest.php
@@ -52,10 +52,11 @@
new EntityRetrievingTermLookup(
$store->getEntityLookup() )
);
- $this->setUpDummyData( $store );
+ $siteId = $wikibaseClient->getSettings()->getSetting(
'siteGlobalID' );
+ $this->setUpDummyData( $store, $siteId );
}
- private function setUpDummyData( MockClientStore $store ) {
+ private function setUpDummyData( MockClientStore $store, $siteId ) {
$mockRepository = $store->getEntityRevisionLookup();
$dataTypeIds = [
'P1' => 'commonsMedia',
@@ -91,6 +92,12 @@
$item = new Item( new ItemId( 'Q12' ) );
$item->setLabel( 'en', 'label [[with]] wikitext' );
+
+ $mockRepository->putEntity( $item );
+
+ $item = new Item( new ItemId( 'Q13' ) );
+ $item->setLabel( 'en', 'This item has a sitelink' );
+ $item->getSiteLinkList()->addNewSiteLink( $siteId, 'Linked
page' );
$mockRepository->putEntity( $item );
}
@@ -135,7 +142,21 @@
new PropertyId( 'P10' ),
new StringValue( 'a b c' )
)
- ]
+ ],
+ 'wikibase-item label (wikibase-entityid)' => [
+ '<span>' . wfEscapeWikiText( 'label [[with]]
wikitext' ) . '</span>',
+ new PropertyValueSnak(
+ new PropertyId( 'P9' ),
+ new EntityIdValue( new ItemId( 'Q12' ) )
+ )
+ ],
+ 'linked wikibase-item (wikibase-entityid)' => [
+ '<span>[[Linked page|This item has a
sitelink]]</span>',
+ new PropertyValueSnak(
+ new PropertyId( 'P9' ),
+ new EntityIdValue( new ItemId( 'Q13' ) )
+ )
+ ],
];
}
@@ -253,13 +274,20 @@
new StringValue( 'a b c' )
)
],
- 'wikibase-item (wikibase-entityid)' => [
+ 'wikibase-item label (wikibase-entityid)' => [
wfEscapeWikiText( 'label [[with]] wikitext' ),
new PropertyValueSnak(
new PropertyId( 'P9' ),
new EntityIdValue( new ItemId( 'Q12' ) )
)
],
+ 'linked wikibase-item (wikibase-entityid)' => [
+ 'This item has a sitelink',
+ new PropertyValueSnak(
+ new PropertyId( 'P9' ),
+ new EntityIdValue( new ItemId( 'Q13' ) )
+ )
+ ],
'novalue' => [
'no value',
new PropertyNoValueSnak( $p4 )
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
index 5ae7324..6758bd0 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php
@@ -85,6 +85,12 @@
$this->assertSame( "<p>Lua :)\n</p>", $result );
}
+ public function testPropertyParserFunction_multipleValues() {
+ $result = $this->parseWikitextToHtml(
'{{#property:P342|from=Q32489}}' );
+
+ $this->assertSame( "<p>Lua :), Lua :)\n</p>", $result
);
+ }
+
public function testPropertyParserFunction_arbitraryAccessNotFound() {
$result = $this->parseWikitextToHtml(
'{{#property:P342|from=Q1234567}}' );
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
index 5adc5a9..ed51cb8 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
@@ -36,11 +36,14 @@
*/
class RunnerTest extends PHPUnit_Framework_TestCase {
- public function testRunPropertyParserFunction() {
+ /**
+ * @dataProvider typeProvider
+ */
+ public function testRunPropertyParserFunction( $type ) {
$itemId = new ItemId( 'Q3' );
$runner = new Runner(
- $this->getStatementGroupRendererFactory( $itemId, 'Cat'
),
+ $this->getStatementGroupRendererFactory( $itemId,
'Cat', $type ),
$this->getSiteLinkLookup( $itemId ),
new BasicEntityIdParser(),
$this->getRestrictedEntityLookup(),
@@ -50,7 +53,7 @@
$parser = $this->getParser();
$frame = new PPFrame_Hash( new Preprocessor_Hash( $parser ) );
- $result = $runner->runPropertyParserFunction( $parser, $frame,
array( 'Cat' ) );
+ $result = $runner->runPropertyParserFunction( $parser, $frame,
array( 'Cat' ), $type );
$expected = array(
'meow!',
@@ -63,11 +66,22 @@
$this->assertSame( 0, $parser->mExpensiveFunctionCount );
}
+ public function typeProvider() {
+ return [
+ [
+ 'escaped-plaintext'
+ ],
+ [
+ 'rich-wikitext'
+ ]
+ ];
+ }
+
public function testRunPropertyParserFunction_arbitraryAccess() {
$itemId = new ItemId( 'Q42' );
$runner = new Runner(
- $this->getStatementGroupRendererFactory( $itemId, 'Cat'
),
+ $this->getStatementGroupRendererFactory( $itemId,
'Cat', 'escaped-plaintext' ),
$this->getMock( SiteLinkLookup::class ),
new BasicEntityIdParser(),
$this->getRestrictedEntityLookup(),
@@ -103,7 +117,7 @@
$restrictedEntityLookup->getEntity( $itemId );
$runner = new Runner(
- $this->getStatementGroupRendererFactory( $itemId, 'Cat'
),
+ $this->getStatementGroupRendererFactory( $itemId,
'Cat', 'escaped-plaintext' ),
$this->getMock( SiteLinkLookup::class ),
new BasicEntityIdParser(),
$restrictedEntityLookup,
@@ -127,7 +141,7 @@
$itemId = new ItemId( 'Q42' );
$runner = new Runner(
- $this->getStatementGroupRendererFactory( $itemId, 'Cat'
),
+ $this->getStatementGroupRendererFactory( $itemId,
'Cat', 'escaped-plaintext' ),
$this->getMock( SiteLinkLookup::class ),
new BasicEntityIdParser(),
$this->getRestrictedEntityLookup(),
@@ -257,11 +271,12 @@
/**
* @param EntityId $entityId
* @param string $propertyLabelOrId
+ * @param string $type
*
* @return StatementGroupRendererFactory
*/
- private function getStatementGroupRendererFactory( EntityId $entityId,
$propertyLabelOrId ) {
- $renderer = $this->getRenderer( $entityId, $propertyLabelOrId );
+ private function getStatementGroupRendererFactory( EntityId $entityId,
$propertyLabelOrId, $type ) {
+ $renderer = $this->getRenderer( $entityId, $propertyLabelOrId,
$type );
$rendererFactory = $this->getMockBuilder(
StatementGroupRendererFactory::class )
->disableOriginalConstructor()
@@ -269,6 +284,7 @@
$rendererFactory->expects( $this->any() )
->method( 'newRendererFromParser' )
+ ->with( $this->isInstanceOf( Parser::class ), $type )
->will( $this->returnValue( $renderer ) );
return $rendererFactory;
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
index f36c3b3..060e740 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
@@ -41,7 +41,7 @@
*/
class StatementGroupRendererFactoryTest extends \PHPUnit_Framework_TestCase {
- public function testNewRendererForInterfaceMessage() {
+ public function testNewRenderer_forInterfaceMessage() {
$parser = $this->getParser( 'zh', 'es', true );
$rendererFactory = $this->getStatementGroupRendererFactory();
@@ -50,6 +50,15 @@
$this->assertInstanceOf( LanguageAwareRenderer::class,
$renderer );
}
+ public function testNewRender_richWikitext() {
+ $parser = $this->getParser( 'zh', 'es', true );
+
+ $rendererFactory = $this->getStatementGroupRendererFactory();
+ $renderer = $rendererFactory->newRendererFromParser( $parser,
'rich-wikitext' );
+
+ $this->assertInstanceOf( LanguageAwareRenderer::class,
$renderer );
+ }
+
public function testNewRenderer_contentConversionDisabled() {
$parser = $this->getParser( 'zh', 'es', false, true );
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementsParserFunctionIntegrationTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementsParserFunctionIntegrationTest.php
new file mode 100644
index 0000000..a22a62b
--- /dev/null
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementsParserFunctionIntegrationTest.php
@@ -0,0 +1,139 @@
+<?php
+
+namespace Wikibase\Client\Tests\DataAccess\PropertyParserFunction;
+
+use Language;
+use MediaWikiTestCase;
+use Parser;
+use ParserOptions;
+use Title;
+use User;
+use Wikibase\Client\Tests\DataAccess\WikibaseDataAccessTestItemSetUpHelper;
+use Wikibase\Client\WikibaseClient;
+use Wikibase\Test\MockClientStore;
+
+/**
+ * Simple integration test for the {{#statements:…}} parser function.
+ *
+ * @group Wikibase
+ * @group WikibaseClient
+ * @group WikibaseDataAccess
+ * @group WikibaseIntegration
+ * @group Database
+ *
+ * @license GPL-2.0+
+ * @author Marius Hoch < [email protected] >
+ */
+class StatementsParserFunctionIntegrationTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ $wikibaseClient = WikibaseClient::getDefaultInstance( 'reset' );
+ $store = $wikibaseClient->getStore();
+
+ if ( !( $store instanceof MockClientStore ) ) {
+ $store = new MockClientStore( 'de' );
+ $wikibaseClient->overrideStore( $store );
+ }
+
+ $this->assertInstanceOf(
+ MockClientStore::class,
+ $wikibaseClient->getStore(),
+ 'Mocking the default ClientStore failed'
+ );
+
+ $this->setMwGlobals( 'wgContLang', Language::factory( 'de' ) );
+
+ $setupHelper = new WikibaseDataAccessTestItemSetUpHelper(
$store );
+ $setupHelper->setUp();
+
+ $this->oldAllowDataAccessInUserLanguage =
$wikibaseClient->getSettings()->getSetting( 'allowDataAccessInUserLanguage' );
+ $this->setAllowDataAccessInUserLanguage( false );
+ }
+
+ protected function tearDown() {
+ parent::tearDown();
+
+ $this->setAllowDataAccessInUserLanguage(
$this->oldAllowDataAccessInUserLanguage );
+ WikibaseClient::getDefaultInstance( 'reset' );
+ }
+
+ /**
+ * @param bool $value
+ */
+ private function setAllowDataAccessInUserLanguage( $value ) {
+ $settings = WikibaseClient::getDefaultInstance()->getSettings();
+ $settings->setSetting( 'allowDataAccessInUserLanguage', $value
);
+ }
+
+ public function testStatementsParserFunction_byPropertyLabel() {
+ $result = $this->parseWikitextToHtml(
'{{#statements:LuaTestStringProperty}}' );
+
+ $this->assertSame( "<p><span>Lua :)</span>\n</p>", $result
);
+ }
+
+ public function testStatementsParserFunction_byPropertyId() {
+ $result = $this->parseWikitextToHtml( '{{#statements:P342}}' );
+
+ $this->assertSame( "<p><span>Lua :)</span>\n</p>", $result
);
+ }
+
+ public function testStatementsParserFunction_arbitraryAccess() {
+ $result = $this->parseWikitextToHtml(
'{{#statements:P342|from=Q32488}}' );
+
+ $this->assertSame( "<p><span>Lua :)</span>\n</p>", $result
);
+ }
+
+ public function testStatementsParserFunction_multipleValues() {
+ $result = $this->parseWikitextToHtml(
'{{#statements:P342|from=Q32489}}' );
+
+ $this->assertSame( "<p><span>Lua :)</span>,
<span>Lua :)</span>\n</p>", $result );
+ }
+
+ public function testStatementsParserFunction_arbitraryAccessNotFound() {
+ $result = $this->parseWikitextToHtml(
'{{#statements:P342|from=Q1234567}}' );
+
+ $this->assertSame( '', $result );
+ }
+
+ public function testStatementsParserFunction_byNonExistent() {
+ $result = $this->parseWikitextToHtml(
'{{#statements:P2147483647}}' );
+
+ $this->assertRegExp(
+ '/<p.*class=".*wikibase-error.*">.*P2147483647.*<\/p>/',
+ $result
+ );
+ }
+
+ public function testStatementsParserFunction_pageNotConnected() {
+ $result = $this->parseWikitextToHtml(
+ '{{#statements:P342}}',
+ 'A page not connected to an item'
+ );
+
+ $this->assertSame( '', $result );
+ }
+
+ /**
+ * @param string $wikiText
+ * @param string $title
+ *
+ * @return string HTML
+ */
+ private function parseWikitextToHtml( $wikiText, $title =
'WikibaseClientDataAccessTest' ) {
+ $settings = WikibaseClient::getDefaultInstance()->getSettings();
+ $enabled = $settings->getSetting(
'enableStatementsParserFunction' );
+ $settings->setSetting( 'enableStatementsParserFunction', true );
+
+ $parserConfig = array( 'class' => 'Parser' );
+ $popt = new ParserOptions( User::newFromId( 0 ),
Language::factory( 'en' ) );
+
+ $parser = new Parser( $parserConfig );
+ $pout = $parser->parse( $wikiText, Title::newFromText( $title
), $popt, Parser::OT_HTML );
+
+ $settings->setSetting( 'enableStatementsParserFunction',
$enabled );
+ return $pout->getText();
+ }
+
+}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/SnakSerializationRendererTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/SnakSerializationRendererTest.php
index a24852e..1d005ba 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/SnakSerializationRendererTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/SnakSerializationRendererTest.php
@@ -81,20 +81,23 @@
}
public function provideRenderSnaks() {
- return array(
- 'Single Snak' => array(
+ return [
+ 'Single Snak' => [
'foo bar foo',
- array( 'P42' => array(
$this->getSnakSerialization( new StringValue( 'foo bar foo' ) ) ) )
- ),
- 'Multiple Snaks' => array(
+ [ 'P42' => [
+ $this->getSnakSerialization( new
StringValue( 'foo bar foo' ) ),
+ ] ]
+ ],
+ 'Multiple Snaks' => [
'foo, bar, Berlin',
- array( 'P42' => array(
+ [ 'P42' => [
$this->getSnakSerialization( new
StringValue( 'foo' ) ),
$this->getSnakSerialization( new
StringValue( 'bar' ) ),
- $this->getSnakSerialization( new
StringValue( 'Berlin' ) )
- ) )
- )
- );
+ $this->getSnakSerialization( new
StringValue( 'Berlin' ) ),
+ $this->getSnakSerialization( new
StringValue( '' ) ),
+ ] ]
+ ]
+ ];
}
/**
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/StatementTransclusionInteractorTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/StatementTransclusionInteractorTest.php
index b7a7c48..cdd4a4e 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/StatementTransclusionInteractorTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/StatementTransclusionInteractorTest.php
@@ -1,6 +1,6 @@
<?php
-namespace Wikibase\Client\Tests\DataAccess\PropertyParserFunction;
+namespace Wikibase\Client\Tests\DataAccess;
use DataValues\StringValue;
use Language;
@@ -38,10 +38,11 @@
public function testRender() {
$propertyId = new PropertyId( 'P1337' );
- $snaks = array(
+ $snaks = [
'Q42$1' => new PropertyValueSnak( $propertyId, new
StringValue( 'a kitten!' ) ),
- 'Q42$2' => new PropertyValueSnak( $propertyId, new
StringValue( 'two kittens!!' ) )
- );
+ 'Q42$2' => new PropertyValueSnak( $propertyId, new
StringValue( 'two kittens!!' ) ),
+ 'Q42$3' => new PropertyValueSnak( $propertyId, new
StringValue( '' ) ),
+ ];
$renderer = $this->getInteractor(
$this->getPropertyIdResolver(),
@@ -52,35 +53,26 @@
$result = $renderer->render( $q42, 'p1337' );
$expected = 'a kitten!, two kittens!!';
- $this->assertEquals( $expected, $result );
+ $this->assertSame( $expected, $result );
}
public function testRender_PropertyLabelNotResolvedException() {
- $renderer = $this->getInteractor(
- $this->getPropertyIdResolverForPropertyNotFound(),
- array()
- );
+ $renderer = $this->getInteractor(
$this->getPropertyIdResolverForPropertyNotFound() );
$this->setExpectedException(
PropertyLabelNotResolvedException::class );
$renderer->render( new ItemId( 'Q42' ), 'blah' );
}
public function testRender_unresolvedRedirect() {
- $renderer = $this->getInteractor(
- $this->getPropertyIdResolver(),
- array()
- );
+ $renderer = $this->getInteractor(
$this->getPropertyIdResolver() );
- $this->assertEquals( '', $renderer->render( new ItemId( 'Q43'
), 'P1337' ) );
+ $this->assertSame( '', $renderer->render( new ItemId( 'Q43' ),
'P1337' ) );
}
public function testRender_unknownEntity() {
- $renderer = $this->getInteractor(
- $this->getPropertyIdResolver(),
- array()
- );
+ $renderer = $this->getInteractor(
$this->getPropertyIdResolver() );
- $this->assertEquals( '', $renderer->render( new ItemId(
'Q43333' ), 'P1337' ) );
+ $this->assertSame( '', $renderer->render( new ItemId( 'Q43333'
), 'P1337' ) );
}
/**
@@ -91,7 +83,7 @@
*/
private function getInteractor(
PropertyIdResolver $propertyIdResolver,
- array $snaks
+ array $snaks = []
) {
$targetLanguage = Language::factory( 'en' );
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
index 510122f..6e2605d 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
@@ -115,6 +115,8 @@
$this->createTestItem( new ItemId( 'Q32488' ), array(), array(
$statement1, $statement3 ), array() );
+ $this->createTestItem( new ItemId( 'Q32489' ), array(), array(
$statement1, $statement1 ), array() );
+
// Create another test item to test arbitrary access
$this->createTestItem( new ItemId( 'Q199024' ), array( 'de' =>
'Arbitrary access \o/' ) );
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/Hooks/ParserFunctionRegistrantTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/Hooks/ParserFunctionRegistrantTest.php
index 1c4bfb9..0e71558 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/Hooks/ParserFunctionRegistrantTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/Hooks/ParserFunctionRegistrantTest.php
@@ -22,17 +22,27 @@
public function parserFunctionsProvider() {
return [
[
- false,
+ '$allowDataTransclusion' => false,
+ '$enableStatementsParserFunction' => true,
[
'noexternallanglinks',
]
],
[
- true,
+ '$allowDataTransclusion' => true,
+ '$enableStatementsParserFunction' => true,
[
'noexternallanglinks',
'property',
'statements',
+ ]
+ ],
+ [
+ '$allowDataTransclusion' => true,
+ '$enableStatementsParserFunction' => false,
+ [
+ 'noexternallanglinks',
+ 'property'
]
],
];
@@ -41,13 +51,20 @@
/**
* @dataProvider parserFunctionsProvider
*/
- public function testRegisterParserFunctions( $allowDataTransclusion,
array $expected ) {
+ public function testRegisterParserFunctions(
+ $allowDataTransclusion,
+ $enableStatementsParserFunction,
+ array $expected
+ ) {
$parser = new Parser( [ 'class' => 'Parser' ] );
// TODO: Remove the feature flag when not needed any more!
$settings = WikibaseClient::getDefaultInstance()->getSettings();
$enabled = $settings->getSetting(
'enableStatementsParserFunction' );
- $settings->setSetting( 'enableStatementsParserFunction', true );
+ $settings->setSetting(
+ 'enableStatementsParserFunction',
+ $enableStatementsParserFunction
+ );
$registrant = new ParserFunctionRegistrant(
$allowDataTransclusion );
$registrant->register( $parser );
diff --git a/extensions/Wikibase/lib/i18n/es.json
b/extensions/Wikibase/lib/i18n/es.json
index 70bc955..3d5db20 100644
--- a/extensions/Wikibase/lib/i18n/es.json
+++ b/extensions/Wikibase/lib/i18n/es.json
@@ -78,7 +78,7 @@
"wikibase-validator-bad-data-type": "Tipo de dato erróneo: $1",
"wikibase-validator-bad-url": "Los URL no pueden contener determinados
caracteres tales como espacios y corchetes: $1",
"wikibase-validator-url-scheme-missing": "A este URL le falta un
esquema como «https://»: $1",
- "wikibase-validator-bad-url-scheme": "Esquema de URL no admitido: $1",
+ "wikibase-validator-bad-url-scheme": "No se admite el esquema de URL
«$1».",
"wikibase-validator-unknown-unit": "Unidad desconocida: $1",
"wikibase-validator-not-allowed": "Valor ilegal: $1",
"wikibase-validator-no-validators": "Prohibido",
diff --git a/extensions/Wikibase/lib/i18n/et.json
b/extensions/Wikibase/lib/i18n/et.json
index b2c135a..60f89e3 100644
--- a/extensions/Wikibase/lib/i18n/et.json
+++ b/extensions/Wikibase/lib/i18n/et.json
@@ -16,8 +16,8 @@
"wikibase-error-remove-generic": "Esines tõrge, ei õnnestunud
eemaldada.",
"wikibase-error-save-connection": "Esines tõrge, ei õnnestunud
salvestada. Palun kontrolli oma internetiühendust.",
"wikibase-error-remove-connection": "Esines tõrge, ei õnnestunud
eemaldada. Palun kontrolli oma internetiühendust.",
- "wikibase-error-save-timeout": "Praegu esinevate tehniliste probleemide
tõttu ei saa salvestamist lõpule viia.",
- "wikibase-error-remove-timeout": "Praegu esinevate tehniliste
probleemide tõttu ei saa eemaldamist lõpule viia.",
+ "wikibase-error-save-timeout": "Praegu esineb tehnilisi probleeme.
Palun proovi uuesti.",
+ "wikibase-error-remove-timeout": "Praegu esineb tehnilisi probleeme.
Palun proovi uuesti.",
"wikibase-error-autocomplete-connection": "Võrgukoha API päringut ei
saa teha. Palun proovi hiljem uuesti.",
"wikibase-error-autocomplete-response": "Serveri vastus: $1",
"wikibase-error-ui-no-external-page": "Määratud artiklit ei õnnestu
vastavast võrgukohast leida.",
@@ -64,7 +64,7 @@
"wikibase-validator-no-such-property": "Omadust $1 ei leidu",
"wikibase-validator-bad-value": "Rikutud andmeväärtus: $1",
"wikibase-validator-bad-value-type": "Vigane väärtuse tüüp $1, oodatav
$2",
- "wikibase-validator-bad-url": "Internetiaadressid ei tohi sisaldada
teatud märke nagu tühikud ja nurksulud: $1",
+ "wikibase-validator-bad-url": "Internetiaadressid ei tohi sisaldada
teatud märke nagu tühikud või nurksulud: $1",
"wikibase-validator-bad-url-scheme": "URL-skeemi \"$1\" tugi puudub.",
"wikibase-validator-unknown-unit": "Tundmatu ühik: $1",
"wikibase-validator-not-allowed": "Lubamatu väärtus: $1",
diff --git a/extensions/Wikibase/lib/i18n/lb.json
b/extensions/Wikibase/lib/i18n/lb.json
index a7dc2a2..001faa7 100644
--- a/extensions/Wikibase/lib/i18n/lb.json
+++ b/extensions/Wikibase/lib/i18n/lb.json
@@ -15,8 +15,8 @@
"wikibase-error-remove-generic": "Duerch e Feeler konnt et net
ewechgeholl ginn.",
"wikibase-error-save-connection": "Konnt duerch e Verbindunsproblem net
gespäichert ginn. Iwwerpréift w.e.g. Är Internetverbindung.",
"wikibase-error-remove-connection": "Konnt duerch e Verbindunsproblem
net ewechgeholl ginn. Iwwerpréift w.e.g. Är Internetverbindung.",
- "wikibase-error-save-timeout": "Mir hunn technesch Schwieregkeeten. Är
Ännerung konnt net \"gespäichert\" ginn.",
- "wikibase-error-remove-timeout": "Mir hunn technesch Schwieregkeeten.
Är \"Ännerung\" konnt net ofgeschloss ginn.",
+ "wikibase-error-save-timeout": "Mir hunn technesch Schwieregkeeten.
Probéiert w.e.g. nach eng Kéier.",
+ "wikibase-error-remove-timeout": "Mir hunn technesch Schwieregkeeten.
Probéiert w.e.g. nach eng Kéier.",
"wikibase-error-autocomplete-connection": "Den API-Site konnt net
ofgefrot ginn. Probéiert w.e.g. méi spéit nach eng Kéier.",
"wikibase-error-autocomplete-response": "Äntwert vum Server: $1",
"wikibase-error-ui-no-external-page": "De spezifizéierten Artikel konnt
op dem korrespondéierte Site net fonnt ginn.",
@@ -50,7 +50,7 @@
"wikibase-validator-no-such-property": "Eegeschaft $1 net fonnt",
"wikibase-validator-bad-value": "Korrupten Datewäert: $1",
"wikibase-validator-bad-data-type": "Falschen Datentyp: $1",
- "wikibase-validator-bad-url": "An URLen däerfe gewëss Zeechen net dra
sinn, wéi Leerzeechen a véiereckeg Klameren: $1",
+ "wikibase-validator-bad-url": "An URLen däerfe gewëss Zeechen net dra
sinn, wéi Leerzeechen oder véiereckeg Klameren: $1",
"wikibase-validator-url-scheme-missing": "An dëser URL feelt e Schema
wéi \"https://\": $1",
"wikibase-validator-unknown-unit": "Onbekannten Eenheet: $1",
"wikibase-validator-not-allowed": "net valabele wäert: $1",
diff --git
a/extensions/Wikibase/lib/includes/Formatters/EntityIdSiteLinkFormatter.php
b/extensions/Wikibase/lib/includes/Formatters/EntityIdSiteLinkFormatter.php
new file mode 100644
index 0000000..569abc3
--- /dev/null
+++ b/extensions/Wikibase/lib/includes/Formatters/EntityIdSiteLinkFormatter.php
@@ -0,0 +1,104 @@
+<?php
+
+namespace Wikibase\Lib\Formatters;
+
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Services\EntityId\EntityIdFormatter;
+use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
+use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookupException;
+use Wikibase\Lib\Store\SiteLinkLookup;
+
+/**
+ * A formatter for exclusive use on client wikis. It expects an entity ID and
returns a wikitext
+ * snippet, containing a link to a local page as specified by the relevant
sitelink, labeled with
+ * the label in the local (or a fallback) language. Both the sitelink and the
label are optional.
+ *
+ * @since 0.5
+ *
+ * @license GPL-2.0+
+ * @author Thiemo Mättig
+ */
+class EntityIdSiteLinkFormatter implements EntityIdFormatter {
+
+ /**
+ * @var SiteLinkLookup
+ */
+ private $siteLinkLookup;
+
+ /**
+ * @var string
+ */
+ private $localSiteId;
+
+ /**
+ * @var LabelDescriptionLookup
+ */
+ private $labelDescriptionLookup;
+
+ /**
+ * @param SiteLinkLookup $siteLinkLookup
+ * @param string $localSiteId
+ * @param LabelDescriptionLookup $labelDescriptionLookup
+ */
+ public function __construct(
+ SiteLinkLookup $siteLinkLookup,
+ $localSiteId,
+ LabelDescriptionLookup $labelDescriptionLookup
+ ) {
+ $this->siteLinkLookup = $siteLinkLookup;
+ $this->localSiteId = $localSiteId;
+ $this->labelDescriptionLookup = $labelDescriptionLookup;
+ }
+
+ /**
+ * @see EntityIdFormatter::formatEntityId
+ *
+ * @param EntityId $entityId
+ *
+ * @return string Wikitext
+ */
+ public function formatEntityId( EntityId $entityId ) {
+ $term = null;
+
+ try {
+ $term = $this->labelDescriptionLookup->getLabel(
$entityId );
+ } catch ( LabelDescriptionLookupException $ex ) {
+ }
+
+ // TODO: Add language fallback indicator
+ $label = $term ? wfEscapeWikiText( $term->getText() ) : '';
+
+ if ( $entityId instanceof ItemId ) {
+ $pageName = $this->getPageName( $entityId );
+
+ if ( $pageName !== null ) {
+ $optionalLabel = $label === '' ? '' : '|' .
$label;
+
+ return '[[' . $pageName . $optionalLabel . ']]';
+ }
+ }
+
+ return $label === '' ? $entityId->getSerialization() : $label;
+ }
+
+ /**
+ * @param ItemId $itemId
+ *
+ * @return string|null
+ */
+ private function getPageName( ItemId $itemId ) {
+ // TODO: Bad, bad interface
+ $siteLinkData = $this->siteLinkLookup->getLinks(
+ [ $itemId->getNumericId() ],
+ [ $this->localSiteId ]
+ );
+
+ if ( count( $siteLinkData ) !== 1 ) {
+ return null;
+ }
+
+ return $siteLinkData[0][1];
+ }
+
+}
diff --git
a/extensions/Wikibase/lib/includes/Formatters/WikibaseValueFormatterBuilders.php
b/extensions/Wikibase/lib/includes/Formatters/WikibaseValueFormatterBuilders.php
index 47cec8e..47e02ce 100644
---
a/extensions/Wikibase/lib/includes/Formatters/WikibaseValueFormatterBuilders.php
+++
b/extensions/Wikibase/lib/includes/Formatters/WikibaseValueFormatterBuilders.php
@@ -16,7 +16,9 @@
use Wikibase\DataModel\Services\EntityId\EntityIdLabelFormatter;
use Wikibase\Formatters\MonolingualHtmlFormatter;
use Wikibase\Formatters\MonolingualTextFormatter;
+use Wikibase\Lib\Formatters\EntityIdSiteLinkFormatter;
use Wikibase\Lib\Store\EntityTitleLookup;
+use Wikibase\Lib\Store\SiteLinkLookup;
/**
* Low level factory for ValueFormatters for well known data types.
@@ -58,6 +60,16 @@
private $entityTitleLookup;
/**
+ * @var SiteLinkLookup|null
+ */
+ private $siteLinkLookup;
+
+ /**
+ * @var string|null
+ */
+ private $localSiteId;
+
+ /**
* Unit URIs that represent "unitless" or "one".
*
* @todo: make this configurable
@@ -74,20 +86,26 @@
* @param FormatterLabelDescriptionLookupFactory
$labelDescriptionLookupFactory
* @param LanguageNameLookup $languageNameLookup
* @param EntityIdParser $repoItemUriParser
- * @param EntityTitleLookup|null $entityTitleLookup
+ * @param EntityTitleLookup|null $entityTitleLookup Only when used on a
repo.
+ * @param SiteLinkLookup|null $siteLinkLookup Only when used on a
client.
+ * @param string|null $localSiteId Only when used on a client.
*/
public function __construct(
Language $defaultLanguage,
FormatterLabelDescriptionLookupFactory
$labelDescriptionLookupFactory,
LanguageNameLookup $languageNameLookup,
EntityIdParser $repoItemUriParser,
- EntityTitleLookup $entityTitleLookup = null
+ EntityTitleLookup $entityTitleLookup = null,
+ SiteLinkLookup $siteLinkLookup = null,
+ $localSiteId = null
) {
$this->defaultLanguage = $defaultLanguage;
$this->labelDescriptionLookupFactory =
$labelDescriptionLookupFactory;
$this->languageNameLookup = $languageNameLookup;
$this->repoItemUriParser = $repoItemUriParser;
$this->entityTitleLookup = $entityTitleLookup;
+ $this->siteLinkLookup = $siteLinkLookup;
+ $this->localSiteId = $localSiteId;
}
private function newPlainEntityIdFormatter( FormatterOptions $options )
{
@@ -163,6 +181,14 @@
$this->languageNameLookup
)
);
+ } elseif ( $format === SnakFormatter::FORMAT_WIKI &&
$this->siteLinkLookup && $this->localSiteId ) {
+ return new EntityIdValueFormatter(
+ new EntityIdSiteLinkFormatter(
+ $this->siteLinkLookup,
+ $this->localSiteId,
+
$this->labelDescriptionLookupFactory->getLabelDescriptionLookup( $options )
+ )
+ );
}
$plainFormatter = $this->newPlainEntityIdFormatter( $options );
diff --git
a/extensions/Wikibase/lib/tests/phpunit/Formatters/EntityIdSiteLinkFormatterTest.php
b/extensions/Wikibase/lib/tests/phpunit/Formatters/EntityIdSiteLinkFormatterTest.php
new file mode 100644
index 0000000..dd041fa
--- /dev/null
+++
b/extensions/Wikibase/lib/tests/phpunit/Formatters/EntityIdSiteLinkFormatterTest.php
@@ -0,0 +1,84 @@
+<?php
+
+namespace Wikibase\Lib\Tests\Formatters;
+
+use PHPUnit_Framework_TestCase;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
+use Wikibase\DataModel\SiteLink;
+use Wikibase\DataModel\Term\Term;
+use Wikibase\Lib\Formatters\EntityIdSiteLinkFormatter;
+use Wikibase\Lib\Store\SiteLinkLookup;
+
+/**
+ * @covers Wikibase\Lib\Formatters\EntityIdSiteLinkFormatter
+ *
+ * @group Wikibase
+ * @group WikibaseLib
+ *
+ * @license GPL-2.0+
+ * @author Thiemo Mättig
+ */
+class EntityIdSiteLinkFormatterTest extends PHPUnit_Framework_TestCase {
+
+ public function formatEntityIdProvider() {
+ return [
+ [
+ new SiteLink( 'enwiki', '<PAGE>' ),
+ new Term( 'en', '<LABEL>' ),
+ '[[<PAGE>|<LABEL>]]'
+ ],
+ [
+ new SiteLink( 'enwiki', '<PAGE>' ),
+ new Term( 'en', '' ),
+ '[[<PAGE>]]'
+ ],
+ [
+ new SiteLink( 'enwiki', '<PAGE>' ),
+ null,
+ '[[<PAGE>]]'
+ ],
+ [
+ null,
+ new Term( 'en', '<LABEL>' ),
+ '<LABEL>'
+ ],
+ [
+ null,
+ null,
+ 'Q1'
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider formatEntityIdProvider
+ */
+ public function testFormatEntityId( SiteLink $siteLink = null, Term
$label = null, $expected ) {
+ $id = new ItemId( 'Q1' );
+
+ $siteLinkLookup = $this->getMock( SiteLinkLookup::class );
+ $siteLinkLookup->expects( $this->any() )
+ ->method( 'getLinks' )
+ ->with( [ $id->getNumericId() ], [ 'enwiki' ], [] )
+ ->will( $this->returnValue( $siteLink
+ ? [ [ null, $siteLink->getPageName() ] ]
+ : null
+ ) );
+
+ $labelDescriptionLookup = $this->getMock(
LabelDescriptionLookup::class );
+ $labelDescriptionLookup->expects( $this->any() )
+ ->method( 'getLabel' )
+ ->with( $id )
+ ->will( $this->returnValue( $label ) );
+
+ $formatter = new EntityIdSiteLinkFormatter(
+ $siteLinkLookup,
+ 'enwiki',
+ $labelDescriptionLookup
+ );
+
+ $this->assertSame( $expected, $formatter->formatEntityId( $id )
);
+ }
+
+}
diff --git a/extensions/Wikibase/repo/i18n/bn.json
b/extensions/Wikibase/repo/i18n/bn.json
index c30c35f..928bd34 100644
--- a/extensions/Wikibase/repo/i18n/bn.json
+++ b/extensions/Wikibase/repo/i18n/bn.json
@@ -35,7 +35,7 @@
"wikibase-label-edit-placeholder-language-aware": "$1য় লেভেল লিখুন",
"wikibase-description-empty": "কোনো বিবরণ যোগ করা হয়নি",
"wikibase-description-edit-placeholder": "বিবরণ লিখুন",
- "wikibase-description-edit-placeholder-language-aware": "$1য় বিবরণ
লিখুন",
+ "wikibase-description-edit-placeholder-language-aware": "$1 ভাষায় একটি
বিবরণ লিখুন",
"wikibase-aliases-edit-placeholder": "কিছু উপনাম লিখুন",
"wikibase-aliases-edit-placeholder-language-aware": "$1 ভাষায় কিছু
উপনাম লিখুন",
"wikibase-diffview-reference": "তথ্যসূত্র",
@@ -82,6 +82,7 @@
"wikibase-statementview-rank-preferred": "পছন্দের ক্রম",
"wikibase-statementview-rank-tooltip-preferred": "বৈধ ও হালনাগাদকৃত
মান",
"wikibase-statementview-rank-normal": "সাধারন র্যাঙ্ক",
+ "wikibase-statementview-rank-tooltip-normal": "বৈধ মান, যদিও সম্ভবত
ঐতিহাসিক",
"wikibase-statementview-rank-deprecated": "অবচিত ক্রম",
"wikibase-statementview-references-counter":
"$1{{PLURAL:$2|0=|$3+$2$4}} {{PLURAL:$1|টি তথ্যসূত্র}}",
"wikibase-statementview-referencesheading-pendingcountertooltip":
"{{PLURAL:$1|একটি তথ্যসূত্র|$1টি তথ্যসূত্র}} এখনও সংরক্ষিত হয়নি",
diff --git a/extensions/Wikibase/repo/i18n/es.json
b/extensions/Wikibase/repo/i18n/es.json
index cc81d71..ae5b1ff 100644
--- a/extensions/Wikibase/repo/i18n/es.json
+++ b/extensions/Wikibase/repo/i18n/es.json
@@ -102,6 +102,7 @@
"wikibase-undo-badpage": "Revisión incorrecta: la revisión $2 no
pertenece a [[$1]].",
"wikibase-undo-firstrev": "No se puede deshacer la creación de la
página",
"wikibase-undo-nocontent": "No se puede cargar el contenido de la
revisión $2 de la página $1",
+ "wikibase-summary-generated": "Resumen (se anexará a un resumen
generado automáticamente):",
"wikibase-propertyedittool-counter-pending-tooltip": "{{PLURAL:$1|Un
valor aún no guardado|$1 valores aún no guardados}}",
"wikibase-disambiguation-title": "Desambiguación para \"$1\"",
"wb-special-newitem-new-item-notification": "Nuevo elemento $1 creado y
redirigido a la página correspondiente. Volver a $2.",
@@ -111,6 +112,7 @@
"wikibase-claimview-snak-tooltip": "Escribe un valor correspondiente a
la propiedad llamada \"$1\". Si la propiedad no tiene ningún valor asignado o
si éste no se conoce, puedes elegir un tipo de valor alternativo haciendo clic
en el icono previo a la casilla de entrada.",
"wikibase-claimview-snak-new-tooltip": "Después de especificar una
propiedad, puedes escribir un valor correspondiente. Si la propiedad no tiene
ningún valor asignado o si éste no se conoce, puedes elegir un tipo de valor
alternativo haciendo clic en el ícono previo a la casilla de entrada.",
"wikibase-statementview-rank-preferred": "Nivel preferido",
+ "wikibase-statementview-rank-tooltip-preferred": "Valor válido y
actualizado",
"wikibase-statementview-rank-normal": "Calificación normal",
"wikibase-statementview-rank-deprecated": "Nivel obsoleto",
"wikibase-statementview-references-counter":
"$1{{PLURAL:$2|0=|$3+$2$4}} {{PLURAL:$1|referencia|referencias}}",
@@ -135,6 +137,7 @@
"wikibase-validator-label-with-description-conflict": "El elemento $3
ya tiene la etiqueta \"$1\" asociada con el código de idioma $2, usando el
mismo texto de descripción.",
"wikibase-validator-label-no-entityid": "La etiqueta no debe ser un
identificador de entidad válido.",
"wikibase-validator-no-such-media": "El archivo \"$1\" no existe en
[https://commons.wikimedia.org/ Wikimedia Commons].",
+ "wikibase-validator-not-a-language": "«$1» no es un código de idioma
conocido.",
"wikibase-wikibaserepopage-not-itemid": "\"$1\" no es un identificador
de elemento válido.",
"wikibase-wikibaserepopage-invalid-langcode": "El código de idioma «$1»
es desconocido. Utiliza un código de idioma que el sistema reconozca, como
«es».",
"wikibase-wikibaserepopage-invalid-id": "El identificador \"$1\" es
desconocido para el sistema. Utiliza un identificador de entidad que sea
válido.",
@@ -181,7 +184,7 @@
"wikibase-newitem-fieldset": "Crear un elemento nuevo",
"wikibase-newitem-site": "Sitio de la primera página enlazada",
"wikibase-newitem-page": "Nombre de la primera página enlazada",
- "wikibase-newitem-no-external-page": "No se encontró la página
especificada en el sitio correspondiente.",
+ "wikibase-newitem-no-external-page": "No se encontró la página «$2» en
«$1».",
"wikibase-newitem-not-recognized-siteid": "No se reconoció el
identificador de sitio especificado.",
"wikibase-newitem-not-recognized-language": "El código de idioma
proporcionado no se reconoció.",
"wikibase-newentity-language": "Idioma:",
diff --git a/extensions/Wikibase/repo/i18n/et.json
b/extensions/Wikibase/repo/i18n/et.json
index 9880b70..7295f3a 100644
--- a/extensions/Wikibase/repo/i18n/et.json
+++ b/extensions/Wikibase/repo/i18n/et.json
@@ -149,7 +149,7 @@
"wikibase-newitem-fieldset": "Uue üksuse loomine",
"wikibase-newitem-site": "Esimese lingitud lehekülje võrgukoht",
"wikibase-newitem-page": "Esimese lingitud lehekülje pealkiri",
- "wikibase-newitem-no-external-page": "Vastavast võrgukohast ei leitud
määratud lehekülge.",
+ "wikibase-newitem-no-external-page": "Võrgukohast \"$1\" ei leitud
lehekülge \"$2\".",
"wikibase-newitem-not-recognized-siteid": "Ette antud
võrgukohaidentifikaatorit ei tuntud ära.",
"wikibase-newentity-language": "Keel:",
"wikibase-newentity-label": "Silt:",
diff --git a/extensions/Wikibase/repo/i18n/lb.json
b/extensions/Wikibase/repo/i18n/lb.json
index 069589d..cddd350 100644
--- a/extensions/Wikibase/repo/i18n/lb.json
+++ b/extensions/Wikibase/repo/i18n/lb.json
@@ -83,6 +83,7 @@
"wikibase-validator-label-conflict": "D'Eegeschaft $3 huet schonn
d'Etikett \"$1\" associéiert mam Sproochcode $2.",
"wikibase-validator-label-with-description-conflict": "D'Element $3
huet schonn d'Etikett \"$1\" associéiert mam Sproochecode $2, mam selwechten
Text fir d'Beschreiwung",
"wikibase-validator-no-such-media": "De Fichier \"$1\" gëtt et net op
[https://commons.wikimedia.org/ Wikimedia Commons].",
+ "wikibase-validator-not-a-language": "\"$1\" ass kee bekannte
Sproochecode",
"wikibase-wikibaserepopage-not-itemid": "\"$1\" ass keng valabel ID vun
engem Element.",
"wikibase-wikibaserepopage-invalid-langcode": "De Sproochcode \"$1\"
ass onbekannt. Benotzt w.e.g. e Sproochcode deen dem System bekannt ass, wéi z.
Bsp. \"en\".",
"wikibase-wikibaserepopage-invalid-id": "D'ID \"$1\" ass am System net
bekannt. Benotzt w.e.g. en valabel ID vun der Entitéit.",
@@ -121,7 +122,7 @@
"wikibase-newitem-fieldset": "En neit Element uleeën",
"wikibase-newitem-site": "Site vun der éischter verlinkter Säit",
"wikibase-newitem-page": "Numm vun der éischter verlinkter Säit",
- "wikibase-newitem-no-external-page": "Déi spezifizéiert Säit konnt op
dem korrespondéierte Site net fonnt ginn.",
+ "wikibase-newitem-no-external-page": "D'Säit \"$2\" konnt op \"$1\" net
fonnt ginn.",
"wikibase-newitem-not-recognized-siteid": "Den Identifiant fir de Site
deen Dir uginn hutt gouf net erkannt.",
"wikibase-newitem-not-recognized-language": "De Sproochcode deen Dir
uginn hutt gouf net erkannt.",
"wikibase-newentity-language": "Sprooch:",
diff --git a/extensions/Wikibase/repo/i18n/sv.json
b/extensions/Wikibase/repo/i18n/sv.json
index 4a2c6b7..2bf8964 100644
--- a/extensions/Wikibase/repo/i18n/sv.json
+++ b/extensions/Wikibase/repo/i18n/sv.json
@@ -166,7 +166,7 @@
"wikibase-newitem-fieldset": "Skapa ett nytt objekt",
"wikibase-newitem-site": "Webbplatsen till den första länkade sidan",
"wikibase-newitem-page": "Namnet på den första länkade sidan",
- "wikibase-newitem-no-external-page": "Den angivna sidan kunde inte
hittas på motsvarande webbplats.",
+ "wikibase-newitem-no-external-page": "En sida \"$2\" kunde inte hittas
på \"$1\".",
"wikibase-newitem-not-recognized-siteid": "Den angivna
webbplatsidentifieraren känns inte igen.",
"wikibase-newitem-not-recognized-language": "Den angivna språkkoden
kändes inte igen.",
"wikibase-newentity-language": "Språk:",
diff --git a/extensions/Wikibase/repo/includes/Api/EditEntity.php
b/extensions/Wikibase/repo/includes/Api/EditEntity.php
index c88e63c..9ea789d 100644
--- a/extensions/Wikibase/repo/includes/Api/EditEntity.php
+++ b/extensions/Wikibase/repo/includes/Api/EditEntity.php
@@ -263,7 +263,7 @@
*/
private function getSummary( array $params ) {
//TODO: Construct a nice and meaningful summary from the
changes that get applied!
- // Perhaps that could be based on the resulting diff?]
+ // Perhaps that could be based on the resulting diff?
$summary = $this->createSummary( $params );
if ( isset( $params['id'] ) xor ( isset( $params['site'] ) &&
isset( $params['title'] ) ) ) {
$summary->setAction( $params['clear'] === false ?
'update' : 'override' );
diff --git a/vendor/composer/autoload_classmap.php
b/vendor/composer/autoload_classmap.php
index 84dee93..ff80d7f 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -483,7 +483,7 @@
'Wikibase\\Client\\Tests\\DataAccess\\PropertyParserFunction\\PropertyParserFunctionIntegrationTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyParserFunctionIntegrationTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\PropertyParserFunction\\RunnerTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\PropertyParserFunction\\StatementGroupRendererFactoryTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php',
-
'Wikibase\\Client\\Tests\\DataAccess\\PropertyParserFunction\\StatementTransclusionInteractorTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/StatementTransclusionInteractorTest.php',
+
'Wikibase\\Client\\Tests\\DataAccess\\PropertyParserFunction\\StatementsParserFunctionIntegrationTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementsParserFunctionIntegrationTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\PropertyParserFunction\\VariantsAwareRendererTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsAwareRendererTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\EntityAccessorTest' =>
$baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/EntityAccessorTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\Scribunto_LuaWikibaseEntityLibraryTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibraryTest.php',
@@ -497,6 +497,7 @@
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\WikibaseLanguageIndependentLuaBindingsTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLanguageIndependentLuaBindingsTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\Scribunto\\WikibaseLuaEntityBindingsTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/WikibaseLuaEntityBindingsTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\SnaksFinderTest' => $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/SnaksFinderTest.php',
+ 'Wikibase\\Client\\Tests\\DataAccess\\StatementTransclusionInteractorTest'
=> $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/StatementTransclusionInteractorTest.php',
'Wikibase\\Client\\Tests\\DataAccess\\WikibaseDataAccessTestItemSetUpHelper' =>
$baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php',
'Wikibase\\Client\\Tests\\ForbiddenSerializerTest' => $baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/ForbiddenSerializerTest.php',
'Wikibase\\Client\\Tests\\Hooks\\BaseTemplateAfterPortletHandlerTest' =>
$baseDir .
'/extensions/Wikibase/client/tests/phpunit/includes/Hooks/BaseTemplateAfterPortalHandlerTest.php',
@@ -805,6 +806,7 @@
'Wikibase\\Lib\\EscapingValueFormatter' => $baseDir .
'/extensions/Wikibase/lib/includes/Formatters/EscapingValueFormatter.php',
'Wikibase\\Lib\\FieldPropertyInfoProvider' => $baseDir .
'/extensions/Wikibase/lib/includes/Store/FieldPropertyInfoProvider.php',
'Wikibase\\Lib\\FormatterLabelDescriptionLookupFactory' => $baseDir .
'/extensions/Wikibase/lib/includes/Formatters/FormatterLabelDescriptionLookupFactory.php',
+ 'Wikibase\\Lib\\Formatters\\EntityIdSiteLinkFormatter' => $baseDir .
'/extensions/Wikibase/lib/includes/Formatters/EntityIdSiteLinkFormatter.php',
'Wikibase\\Lib\\Formatters\\ErrorHandlingSnakFormatter' => $baseDir .
'/extensions/Wikibase/lib/includes/Formatters/ErrorHandlingSnakFormatter.php',
'Wikibase\\Lib\\Formatters\\HtmlExternalIdentifierFormatter' => $baseDir .
'/extensions/Wikibase/lib/includes/Formatters/HtmlExternalIdentifierFormatter.php',
'Wikibase\\Lib\\Formatters\\WikitextExternalIdentifierFormatter' =>
$baseDir .
'/extensions/Wikibase/lib/includes/Formatters/WikitextExternalIdentifierFormatter.php',
@@ -899,6 +901,7 @@
'Wikibase\\Lib\\Tests\\EntityTypeDefinitionsTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/EntityTypeDefinitionsTest.php',
'Wikibase\\Lib\\Tests\\EntityTypesTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/EntityTypesTest.php',
'Wikibase\\Lib\\Tests\\FieldPropertyInfoProviderTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/Store/FieldPropertyInfoProviderTest.php',
+ 'Wikibase\\Lib\\Tests\\Formatters\\EntityIdSiteLinkFormatterTest' =>
$baseDir .
'/extensions/Wikibase/lib/tests/phpunit/Formatters/EntityIdSiteLinkFormatterTest.php',
'Wikibase\\Lib\\Tests\\LanguageFallbackChainFactoryTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php',
'Wikibase\\Lib\\Tests\\LanguageFallbackChainTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainTest.php',
'Wikibase\\Lib\\Tests\\LanguageFallbackIndicatorTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackIndicatorTest.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index e12ac4f..5abf861 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1348,12 +1348,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "60cffa1069a20fe6949ad5028bfd286483c615e1"
+ "reference": "d68dc7fda3ca40fe8cbce43c8d17d122152a6bb0"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/60cffa1069a20fe6949ad5028bfd286483c615e1",
- "reference": "60cffa1069a20fe6949ad5028bfd286483c615e1",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/d68dc7fda3ca40fe8cbce43c8d17d122152a6bb0",
+ "reference": "d68dc7fda3ca40fe8cbce43c8d17d122152a6bb0",
"shasum": ""
},
"require": {
@@ -1386,7 +1386,7 @@
"jakub-onderka/php-parallel-lint": "0.9.2",
"mediawiki/mediawiki-codesniffer": "0.4.0|0.5.0"
},
- "time": "2016-10-22 20:49:56",
+ "time": "2016-10-24 09:53:24",
"type": "mediawiki-extension",
"installation-source": "dist",
"autoload": {
--
To view, visit https://gerrit.wikimedia.org/r/317477
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iba436999cae9e78b120c47371bd448eecc745d0a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits