Jens Ohlig has uploaded a new change for review.
https://gerrit.wikimedia.org/r/101201
Change subject: Implementation of snakformatted property table in Lua
......................................................................
Implementation of snakformatted property table in Lua
Change-Id: I6db8dfcc999f05630ee9a82a67dfabc6f1693b06
---
M client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
M client/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementation.php
M client/includes/scribunto/mw.wikibase.lua
M
client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementationTest.php
4 files changed, 100 insertions(+), 7 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/01/101201/1
diff --git a/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
b/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
index b95df46..37d6105 100644
--- a/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
+++ b/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
@@ -1,7 +1,10 @@
<?php
+use ValueFormatters\FormatterOptions;
use ValueParsers\ParseException;
use Wikibase\Client\WikibaseClient;
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\Lib\SnakFormatter;
/**
* Registers and defines functions to access Wikibase through the Scribunto
extension
@@ -28,10 +31,12 @@
// See Scribunto_LuaLanguageLibrary::getContLangCode().
global $wgContLang;
$language = $wgContLang;
+ $formatterOptions = new FormatterOptions( array( "language" =>
$language ) );
$this->wbLibrary = new
Scribunto_LuaWikibaseLibraryImplementation(
WikibaseClient::getDefaultInstance()->getEntityIdParser(), // EntityIdParser
WikibaseClient::getDefaultInstance()->getStore()->getEntityLookup(), //
EntityLookup
WikibaseClient::getDefaultInstance()->getEntityIdFormatter(), //
EntityIdFormatter
+
WikibaseClient::getDefaultInstance()->getSnakFormatterFactory()->getSnakFormatter(
SnakFormatter::FORMAT_WIKI, $formatterOptions ), // SnakFormatter
WikibaseClient::getDefaultInstance()->getStore()->getSiteLinkTable(), //
SiteLinkLookup
$language, // language
WikibaseClient::getDefaultInstance()->getSettings()->getSetting( 'siteGlobalID'
) // siteId
@@ -48,7 +53,8 @@
$lib = array(
'getEntity' => array( $this, 'getEntity' ),
'getEntityId' => array( $this, 'getEntityId' ),
- 'getGlobalSiteId' => array( $this, 'getGlobalSiteId' )
+ 'getGlobalSiteId' => array( $this, 'getGlobalSiteId' ),
+ 'renderForEntityId' => array( $this,
'renderForEntityId' )
);
$this->getEngine()->registerInterface( dirname( __FILE__ ) .
'/mw.wikibase.lua', $lib, array() );
}
@@ -92,6 +98,15 @@
}
/**
+ * Wrapper for renderForEntityId in
Scribunto_LuaWikibaseLibraryImplementation
+ *
+ * @since 0.5
+ *
+ */
+ public function renderForEntityId( $entityId, $propertyId ) {
+ return $this->wbLibrary->renderForEntityId( $entityId,
$propertyId );
+ }
+ /**
* Wrapper for getGlobalSiteId in
Scribunto_LuaWikibaseLibraryImplementation
*
* @since 0.5
diff --git
a/client/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementation.php
b/client/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementation.php
index 302619e..cf87a2b 100644
--- a/client/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementation.php
+++ b/client/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementation.php
@@ -2,6 +2,9 @@
use Wikibase\Item;
use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\Claims;
+use Wikibase\Entity;
+use Wikibase\Snak;
use Wikibase\EntityLookup;
use Wikibase\SiteLinkLookup;
use Wikibase\Lib\Serializers\SerializationOptions;
@@ -10,7 +13,8 @@
use Wikibase\Lib\EntityIdParser;
use Wikibase\LanguageFallbackChainFactory;
use Wikibase\Utils;
-use \Language;
+use Wikibase\Lib\SnakFormatter;
+
/**
* Actual implementations of the functions to access Wikibase through the
Scribunto extension
@@ -40,6 +44,8 @@
/* @var mixed */
protected $siteId;
+ /* @var SnakFormatter */
+ protected $snaksFormatter;
/**
* @param EntityIdParser $entityIdParser
@@ -47,6 +53,7 @@
public function __construct( EntityIdParser $entityIdParser,
EntityLookup
$entityLookup,
EntityIdFormatter $entityIdFormatter,
+ SnakFormatter
$snakFormatter,
SiteLinkLookup
$siteLinkTable,
Language
$language,
$siteId ) {
@@ -56,6 +63,7 @@
$this->siteLinkTable = $siteLinkTable;
$this->language = $language;
$this->siteId = $siteId;
+ $this->snaksFormatter = $snakFormatter;
}
@@ -136,6 +144,73 @@
}
/**
+ * Returns such Claims from $entity that have a main Snak for the
property that
+ * is specified by $propertyLabel.
+ *
+ * @param Entity $entity The Entity from which to get the clams
+ * @param string $propertyId A prefixed property ID.
+ *
+ * @return Claims The claims for the given property.
+ */
+ private function getClaimsForProperty( Entity $entity, $propertyId ) {
+ $allClaims = new Claims( $entity->getClaims() );
+
+ $claims = $allClaims->getClaimsForProperty( $propertyId );
+
+ return $claims;
+ }
+
+ /**
+ * @param Snak[] $snaks
+ *
+ * @return string - wikitext format
+ */
+ private function formatSnakList( $snaks ) {
+ $formattedValues = $this->formatSnaks( $snaks );
+ return $this->language->commaList( $formattedValues );
+ }
+
+ private function formatSnaks( $snaks ) {
+ $strings = array();
+
+ foreach ( $snaks as $snak ) {
+ $strings[] = $this->snaksFormatter->formatSnak( $snak );
+ }
+
+ return $strings;
+ }
+
+ /**
+ * @param EntityId $entityId
+ * @param string $propertyLabel
+ *
+ * @return Status a status object wrapping a wikitext string
+ */
+ public function renderForEntityId( $entityId, $propertyId ) {
+ $prefixedEntityId = trim( $entityId );
+ $entityId = $this->entityIdParser->parse( $prefixedEntityId );
+ $prefixedPropertyId = trim( $propertyId );
+ $propertyId = $this->entityIdParser->parse( $prefixedPropertyId
);
+ $entity = $this->entityLookup->getEntity( $entityId );
+
+ if ( !$entity ) {
+ wfProfileOut( __METHOD__ );
+ return Status::newGood( '' );
+ }
+
+ $claims = $this->getClaimsForProperty( $entity, $propertyId );
+
+ if ( $claims->isEmpty() ) {
+ wfProfileOut( __METHOD__ );
+ return Status::newGood( '' );
+ }
+
+ $snakList = $claims->getMainSnaks();
+ $text = $this->formatSnakList( $snakList, $propertyId );
+ return array( $text );
+ }
+
+ /**
* Get global site ID (e.g. "enwiki")
* This is basically a helper function.
* I can see this becoming part of mw.site in the Scribunto extension.
diff --git a/client/includes/scribunto/mw.wikibase.lua
b/client/includes/scribunto/mw.wikibase.lua
index 1bdc845..0496341 100644
--- a/client/includes/scribunto/mw.wikibase.lua
+++ b/client/includes/scribunto/mw.wikibase.lua
@@ -91,7 +91,9 @@
properties = p
p = {}
for i,v in pairs( properties ) do
- p[v] = { ["label"] = wikibase.label( v ) }
+ formattedProperty = php.renderForEntityId( php.getEntityId( tostring(
mw.title.getCurrentTitle().prefixedText ) ), v )
+ p[v] = { ["value"] = tostring( formattedProperty ), ["label"] =
wikibase.label( v ) }
+ -- ["label"] = wikibase.label( v ),
end
return p
end
diff --git
a/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementationTest.php
b/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementationTest.php
index 996e260..2127fe6 100644
---
a/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementationTest.php
+++
b/client/tests/phpunit/includes/scribunto/Scribunto_LuaWikibaseLibraryImplementationTest.php
@@ -3,11 +3,10 @@
namespace Wikibase\Test;
use Scribunto_LuaWikibaseLibraryImplementation;
+use ValueFormatters\FormatterOptions;
use Wikibase\Client\WikibaseClient;
use \Language;
-use \Site;
-use \Wikibase\DirectSqlStore;
-use \MediaWikiSite;
+use Wikibase\Lib\SnakFormatter;
/**
* @covers Wikibase\Scribunto_LuaWikibaseLibraryImplementation
@@ -26,13 +25,15 @@
public function getWikibaseLibraryImplementation() {
$entityLookup = new MockRepository();
$language = new Language( "en" );
- $siteLinkLookup = $siteLinkLookup = $this->getMockBuilder(
'\Wikibase\SiteLinkTable' )
+ $siteLinkLookup = $this->getMockBuilder(
'\Wikibase\SiteLinkTable' )
->disableOriginalConstructor()
->getMock();
+ $formatterOptions = new FormatterOptions();
return new Scribunto_LuaWikibaseLibraryImplementation(
WikibaseClient::getDefaultInstance()->getEntityIdParser(), // EntityIdParser
$entityLookup,
WikibaseClient::getDefaultInstance()->getEntityIdFormatter(), //
EntityIdFormatter
+
WikibaseClient::getDefaultInstance()->getSnakFormatterFactory()->getSnakFormatter(
SnakFormatter::FORMAT_WIKI, $formatterOptions ),
$siteLinkLookup, // SiteLinkLookup
$language, // language
"enwiki" // siteId
--
To view, visit https://gerrit.wikimedia.org/r/101201
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6db8dfcc999f05630ee9a82a67dfabc6f1693b06
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Jens Ohlig <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits