WikidataBuilder has uploaded a new change for review.
https://gerrit.wikimedia.org/r/154454
Change subject: New Wikidata Build - 17/08/2014 10:00
......................................................................
New Wikidata Build - 17/08/2014 10:00
Change-Id: I85500a671822b8c27fa5c95deb04cdfb9fb832e0
---
M composer.lock
M extensions/PropertySuggester/README.md
M extensions/PropertySuggester/build/travis/script.sh
M extensions/PropertySuggester/i18n/en.json
M extensions/PropertySuggester/modules/ext.PropertySuggester.EntitySelector.js
M extensions/PropertySuggester/src/PropertySuggester/GetSuggestions.php
M extensions/PropertySuggester/src/PropertySuggester/SuggesterParams.php
M extensions/PropertySuggester/src/PropertySuggester/SuggesterParamsParser.php
M
extensions/PropertySuggester/src/PropertySuggester/Suggesters/SimpleSuggester.php
M
extensions/PropertySuggester/src/PropertySuggester/Suggesters/SuggesterEngine.php
M extensions/PropertySuggester/src/PropertySuggester/SuggestionGenerator.php
M extensions/PropertySuggester/tests/bootstrap.php
M
extensions/PropertySuggester/tests/phpunit/PropertySuggester/GetSuggestionsTest.php
M
extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggesterParamsParserTest.php
M
extensions/PropertySuggester/tests/phpunit/PropertySuggester/Suggesters/SimpleSuggesterTest.php
M
extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggestionGeneratorTest.php
M extensions/Wikibase/client/WikibaseClient.hooks.php
M
extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/SnaksFinder.php
A extensions/Wikibase/client/includes/hooks/ChangesPageWikibaseFilterHandler.php
M extensions/Wikibase/client/includes/hooks/SpecialWatchlistQueryHandler.php
M extensions/Wikibase/client/tests/phpunit/includes/ChangeHandlerTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageAwareRendererTest.php
A
extensions/Wikibase/client/tests/phpunit/includes/hooks/ChangesPageWikibaseFilterHandlerTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/hooks/SpecialWatchlistQueryHandlerTest.php
M extensions/Wikibase/lib/WikibaseLib.php
M extensions/Wikibase/lib/includes/parsers/DateTimeParser.php
M extensions/Wikibase/lib/includes/parsers/MonolingualTextParser.php
M extensions/Wikibase/lib/includes/parsers/MonthNameUnlocalizer.php
M extensions/Wikibase/lib/includes/store/GenericEntityInfoBuilder.php
M extensions/Wikibase/lib/includes/store/TermIndex.php
M extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilder.php
M extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilderFactory.php
M extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
M extensions/Wikibase/lib/resources/wikibase.css
M extensions/Wikibase/lib/tests/phpunit/MockRepository.php
M extensions/Wikibase/lib/tests/phpunit/MockRepositoryTest.php
M extensions/Wikibase/lib/tests/phpunit/parsers/MonolingualTextParserTest.php
M extensions/Wikibase/lib/tests/phpunit/parsers/MonthNameUnlocalizerTest.php
M extensions/Wikibase/repo/includes/EditEntity.php
M extensions/Wikibase/repo/includes/EntityView.php
M extensions/Wikibase/repo/includes/LinkedData/EntityDataRequestHandler.php
M extensions/Wikibase/repo/includes/PropertyView.php
D extensions/Wikibase/repo/includes/View/FingerprintView.php
M extensions/Wikibase/repo/includes/View/TermBoxView.php
M extensions/Wikibase/repo/includes/api/ApiErrorReporter.php
M extensions/Wikibase/repo/includes/store/sql/EntityPerPageBuilder.php
M extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php
M extensions/Wikibase/repo/includes/store/sql/PropertyInfoTableBuilder.php
M extensions/Wikibase/repo/includes/store/sql/SqlStore.php
M extensions/Wikibase/repo/includes/store/sql/TermSearchKeyBuilder.php
M extensions/Wikibase/repo/resources/wikibase.ui.entitysearch.js
M extensions/Wikibase/repo/tests/phpunit/includes/EntityViewTest.php
D extensions/Wikibase/repo/tests/phpunit/includes/View/FingerprintViewTest.php
M vendor/autoload.php
M vendor/composer/autoload_classmap.php
M vendor/composer/autoload_real.php
M vendor/composer/installed.json
57 files changed, 948 insertions(+), 598 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata
refs/changes/54/154454/1
diff --git a/composer.lock b/composer.lock
index 02ec9fb..9984410 100644
--- a/composer.lock
+++ b/composer.lock
@@ -723,16 +723,16 @@
},
{
"name": "propertysuggester/property-suggester",
- "version": "v1.0",
+ "version": "v1.1",
"source": {
"type": "git",
"url": "https://github.com/Wikidata-lib/PropertySuggester.git",
- "reference": "2fb712f58c368a1151b3e8aeb09876ffa1f66913"
+ "reference": "fe77e3d6db4582d2b4cefbe51a1f74e8838f79d1"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/Wikidata-lib/PropertySuggester/zipball/2fb712f58c368a1151b3e8aeb09876ffa1f66913",
- "reference": "2fb712f58c368a1151b3e8aeb09876ffa1f66913",
+ "url":
"https://api.github.com/repos/Wikidata-lib/PropertySuggester/zipball/fe77e3d6db4582d2b4cefbe51a1f74e8838f79d1",
+ "reference": "fe77e3d6db4582d2b4cefbe51a1f74e8838f79d1",
"shasum": ""
},
"require": {
@@ -766,7 +766,7 @@
"wikibase",
"wikidata"
],
- "time": "2014-06-23 17:01:20"
+ "time": "2014-07-25 01:45:14"
},
{
"name": "serialization/serialization",
@@ -1142,12 +1142,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "c2f07302fa28695afda71b1981987c6573b02afc"
+ "reference": "3fcea524b859ba391fec2e5856c7614d6f41fb92"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/c2f07302fa28695afda71b1981987c6573b02afc",
- "reference": "c2f07302fa28695afda71b1981987c6573b02afc",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3fcea524b859ba391fec2e5856c7614d6f41fb92",
+ "reference": "3fcea524b859ba391fec2e5856c7614d6f41fb92",
"shasum": ""
},
"require": {
@@ -1216,7 +1216,7 @@
"wikibaserepo",
"wikidata"
],
- "time": "2014-08-15 01:15:18"
+ "time": "2014-08-16 16:25:52"
}
],
"packages-dev": [
diff --git a/extensions/PropertySuggester/README.md
b/extensions/PropertySuggester/README.md
index f639bc3..9a3ae2a 100644
--- a/extensions/PropertySuggester/README.md
+++ b/extensions/PropertySuggester/README.md
@@ -17,12 +17,12 @@
### Composer
To add this package as a local, per-project dependency to your project, simply
add a
-dependency on `propertysuggester/propertysuggester` to your project's
`composer.json` file.
+dependency on `propertysuggester/property-suggester` to your project's
`composer.json` file.
Here is a minimal example of a `composer.json` file:
{
"require": {
- "propertysuggester/propertysuggester": "*"
+ "propertysuggester/property-suggester": "*"
}
}
@@ -34,5 +34,19 @@
* run ```composer dump-autoload``` in the extension folder (if installed
without composer)
* add ```require_once
"$IP/extensions/PropertySuggester/PropertySuggester.php";``` to your
localsettings
-* run ```maintenance/update.php``` to create the neccessary table
+* run ```maintenance/update.php``` to create the necessary table
* follow the readme of PropertySuggester-Python to generate and load
suggestion data
+
+### Configuration
+
+* $wgPropertySuggesterMinProbability - a float that sets a minimum threshold
for suggestions (default 0.05)
+* $wgPropertySuggesterDeprecatedIds - a list of ints that blacklist suggestions
+
+## Release notes
+
+### 1.1 (soon)
+* Suggest properties for qualifiers and references based on the property of
the mainsnak
+
+### 1.0 (2014-07-01)
+
+* Provide Property-Suggestions based on correlations to other properties in
the item
diff --git a/extensions/PropertySuggester/build/travis/script.sh
b/extensions/PropertySuggester/build/travis/script.sh
index 2f4f104..d487611 100644
--- a/extensions/PropertySuggester/build/travis/script.sh
+++ b/extensions/PropertySuggester/build/travis/script.sh
@@ -2,8 +2,8 @@
set -x
-# cd ../wiki/tests/phpunit
-# php phpunit.php -c ../../extensions/PropertySuggester/phpunit.xml.dist
--debug
+cd ../wiki/tests/phpunit
+php phpunit.php -c ../../extensions/PropertySuggester/phpunit.xml.dist
-cd ../wiki/extensions/PropertySuggester
-php vendor/bin/phpunit -c phpunit.xml.dist
+# cd ../wiki/extensions/PropertySuggester
+# php vendor/bin/phpunit -c phpunit.xml.dist
diff --git a/extensions/PropertySuggester/i18n/en.json
b/extensions/PropertySuggester/i18n/en.json
index 0bdc18c..8d0ea9e 100644
--- a/extensions/PropertySuggester/i18n/en.json
+++ b/extensions/PropertySuggester/i18n/en.json
@@ -2,7 +2,7 @@
"@metadata": {
"authors": []
},
- "propertysuggester-desc": "Shows suggested properties for items.",
+ "propertysuggester-desc": "Shows suggested properties for wikibase items.",
"propertysuggester": "Property Suggester",
"propertysuggester-intro": "This is the PropertySuggester."
}
diff --git
a/extensions/PropertySuggester/modules/ext.PropertySuggester.EntitySelector.js
b/extensions/PropertySuggester/modules/ext.PropertySuggester.EntitySelector.js
index dd5a2b2..09d72ad 100644
---
a/extensions/PropertySuggester/modules/ext.PropertySuggester.EntitySelector.js
+++
b/extensions/PropertySuggester/modules/ext.PropertySuggester.EntitySelector.js
@@ -10,6 +10,10 @@
var Item = $.wikibase.entityselector.Item;
+ /**
+ * This widget overrides the wikibase.entityselector and extends it
with functionality to
+ * suggest matching properties instead of just searching for them.
+ */
$.widget( 'wikibase.entityselector', $.wikibase.entityselector, {
_oldCreate: $.wikibase.entityselector.prototype._create,
@@ -17,50 +21,67 @@
_create: function() {
var self = this;
- self._oldCreate.apply(self, arguments);
+ self._oldCreate.apply( self, arguments );
var focusHandler = function( event ) {
- if ( self.__useSuggester() &&
self.element.val() === ''
- && !self.options.menu.element.is(
":visible" ) ) {
+ if( self._useSuggester() && self.element.val()
=== ''
+ && !self.options.menu.element.is(
":visible" ) ) {
self._minTermLength = 0;
self._cache = {}; // is done in the
entityselector on eachchange too
self.search( event );
- }
+ }
};
self.element.on( 'focus', focusHandler );
-
},
_oldGetData: $.wikibase.entityselector.prototype._getData,
+ /**
+ *
+ * @param {string} term
+ * @return {Object}
+ */
_getData: function( term ) {
var self = this;
- if ( !self.__useSuggester() ) {
+ if( !self._useSuggester() ) {
return self._oldGetData( term )
} else {
- return {
+ var data = {
action: 'wbsgetsuggestions',
search: term,
- entity: self.__getEntity().getId(),
+ context: this._getPropertyContext(),
format: 'json',
language: self.options.language,
type: self.options.type,
'continue': self._cache[term] &&
self._cache[term].nextSuggestionOffset
- ?
self._cache[term].nextSuggestionOffset: 0
+ ?
self._cache[term].nextSuggestionOffset : 0
};
+ if( data.context == 'item' ) {
+ data.entity = self._getEntity().getId();
+ } else {
+ data.properties = self._getPropertyId();
+ }
+ return data;
}
},
- __useSuggester: function() {
- var entity = this.__getEntity();
- return this.options.type === 'property' && entity &&
entity.getType() === 'item' && this.__isInNewStatementView();
+ /**
+ * @return {boolean}
+ */
+ _useSuggester: function() {
+ var entity = this._getEntity();
+ return this.options.type === 'property' && entity !==
null && entity.getType() === 'item';
},
- __getEntity: function() {
+ /**
+ * Get the entity from the surrounding entityview or return null
+ * @return {wikibase.Entity|null}
+ */
+ _getEntity: function() {
try {
var $entityView = this.element.closest(
':wikibase-entityview' );
- } catch (e) {
+ } catch( e ) {
return null;
}
var entity = $entityView.length > 0 ? $entityView.data(
'entityview' ).option( 'value' ) : null;
@@ -72,17 +93,74 @@
},
/**
- * only entityselectors in statements describing the item
should get suggestions.
- * this is hopefully exactly the case if the statement has no
value.
- * other entityselectors like source and quantifier should not
get suggestions since
- * they already have a statementview with a value.
+ * Returns the property id for the enclosing statementview or
null if no property is selected yet.
+ *
+ * @return {string|null}
*/
- __isInNewStatementView: function() {
- var $statementView = this.element.closest(
':wikibase-statementview' );
- var value = $statementView.length > 0 ?
$statementView.data( 'statementview' ).option( 'value' ) : null;
+ _getPropertyId: function() {
+ try {
+ var $statementView = this.element.closest(
':wikibase-statementview' );
+ } catch( e ) {
+ return null;
+ }
+ var statement = $statementView.length > 0 ?
$statementView.data( 'statementview' ).option( 'value' ) : null;
+ if( statement ) {
+ return statement.getMainSnak().getPropertyId();
+ } else {
+ return null;
+ }
+ },
+
+ /**
+ * Returns either 'item', 'qualifier', 'reference' or null
depending on the context of the entityselector.
+ * 'item' is returned in case that the selector is for a new
property in an item.
+ *
+ * @return {string}
+ */
+ _getPropertyContext: function() {
+ if( this._isInNewStatementView() ) {
+ return 'item';
+ } else if( this._isQualifier() ) {
+ return 'qualifier';
+ } else if( this._isReference() ) {
+ return 'reference'
+ } else {
+ return null;
+ }
+ },
+
+ /**
+ * @return {boolean}
+ */
+ _isQualifier: function() {
+ var $claimview = this.element.closest(
':wikibase-claimview, :wikibase-statementview' );
+ var claimview = $claimview.data( 'claimview' ) ||
$claimview.data( 'statementview' );
+ if( !claimview ) {
+ return false;
+ }
+ return this.element.closest( claimview.$qualifiers
).length > 0;
+ },
+
+ /**
+ * @return {boolean}
+ */
+ _isReference: function() {
+ var $referenceview = this.element.closest(
':wikibase-referenceview' );
+ return $referenceview.length > 0;
+ },
+
+ /**
+ * detect if this is a new statement view.
+ * @return {boolean}
+ */
+ _isInNewStatementView: function() {
+ var $statementView = this.element.closest(
':wikibase-statementview' );
+ var value = ( $statementView.length > 0 )
+ ? $statementView.data( 'statementview'
).option( 'value' )
+ : null;
return value === null;
}
- });
+ } );
$.extend( $.wikibase.entityselector, {
Item: Item
diff --git
a/extensions/PropertySuggester/src/PropertySuggester/GetSuggestions.php
b/extensions/PropertySuggester/src/PropertySuggester/GetSuggestions.php
index 243a86b..55f36c5 100644
--- a/extensions/PropertySuggester/src/PropertySuggester/GetSuggestions.php
+++ b/extensions/PropertySuggester/src/PropertySuggester/GetSuggestions.php
@@ -74,9 +74,9 @@
$suggestionGenerator = new SuggestionGenerator(
$this->entityLookup, $this->termIndex, $this->suggester );
if ( $params->entity !== null ) {
- $suggestions =
$suggestionGenerator->generateSuggestionsByItem( $params->entity,
$params->suggesterLimit, $params->minProbability );
+ $suggestions =
$suggestionGenerator->generateSuggestionsByItem( $params->entity,
$params->suggesterLimit, $params->minProbability, $params->context );
} else {
- $suggestions =
$suggestionGenerator->generateSuggestionsByPropertyList( $params->properties,
$params->suggesterLimit, $params->minProbability );
+ $suggestions =
$suggestionGenerator->generateSuggestionsByPropertyList( $params->properties,
$params->suggesterLimit, $params->minProbability, $params->context );
}
$suggestions = $suggestionGenerator->filterSuggestions(
$suggestions, $params->search, $params->language, $params->resultSize );
@@ -154,6 +154,10 @@
ApiBase::PARAM_TYPE =>
Utils::getLanguageCodes(),
ApiBase::PARAM_DFLT =>
$this->getContext()->getLanguage()->getCode(),
),
+ 'context' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_DFLT => 'item',
+ ),
'search' => array(
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '',
@@ -171,6 +175,7 @@
'size' => 'Specify number of suggestions to be
returned',
'language' => 'language for result',
'limit' => 'Maximal number of results',
+ 'context' => 'Either item, reference or qualifier',
'continue' => 'Offset where to continue a search'
);
}
@@ -194,7 +199,11 @@
'api.php?action=wbsgetsuggestions&entity=Q4&continue=10&limit=5'
=> 'Get suggestions for entity 4 from rank 10 to 15',
'api.php?action=wbsgetsuggestions&properties=P31|P21'
- => 'Get suggestions for the property combination P21
and P31'
+ => 'Get suggestions for the property combination P21
and P31',
+
'api.php?action=wbsgetsuggestions&properties=P21&context=qualifier'
+ => 'Get suggestions for the qualifier that are used
with P21',
+
'api.php?action=wbsgetsuggestions&properties=P21&context=reference'
+ => 'Get suggestions for the references that are used
with P21'
);
}
diff --git
a/extensions/PropertySuggester/src/PropertySuggester/SuggesterParams.php
b/extensions/PropertySuggester/src/PropertySuggester/SuggesterParams.php
index 18b4e9a..919d98d 100644
--- a/extensions/PropertySuggester/src/PropertySuggester/SuggesterParams.php
+++ b/extensions/PropertySuggester/src/PropertySuggester/SuggesterParams.php
@@ -49,6 +49,11 @@
public $continue;
/**
+ * @var string
+ */
+ public $context;
+
+ /**
* @var int
*/
public $resultSize;
diff --git
a/extensions/PropertySuggester/src/PropertySuggester/SuggesterParamsParser.php
b/extensions/PropertySuggester/src/PropertySuggester/SuggesterParamsParser.php
index 9dc8760..b1522e9 100644
---
a/extensions/PropertySuggester/src/PropertySuggester/SuggesterParamsParser.php
+++
b/extensions/PropertySuggester/src/PropertySuggester/SuggesterParamsParser.php
@@ -65,6 +65,7 @@
}
$result->language = $params['language'];
+ $result->context = $params['context'];
if ( $result->search ) {
// the results matching '$search' can be at the bottom
of the list
diff --git
a/extensions/PropertySuggester/src/PropertySuggester/Suggesters/SimpleSuggester.php
b/extensions/PropertySuggester/src/PropertySuggester/Suggesters/SimpleSuggester.php
index c1348e2..afbe9c1 100644
---
a/extensions/PropertySuggester/src/PropertySuggester/Suggesters/SimpleSuggester.php
+++
b/extensions/PropertySuggester/src/PropertySuggester/Suggesters/SimpleSuggester.php
@@ -47,10 +47,11 @@
* @param int[] $propertyIds
* @param int $limit
* @param float $minProbability
+ * @param string $context
* @throws InvalidArgumentException
* @return Suggestion[]
*/
- protected function getSuggestions( array $propertyIds, $limit,
$minProbability ) {
+ protected function getSuggestions( array $propertyIds, $limit,
$minProbability, $context ) {
$profiler = new ProfileSection( __METHOD__ );
if ( !is_int( $limit ) ) {
throw new InvalidArgumentException( '$limit must be
int!' );
@@ -64,7 +65,6 @@
$excludedIds = array_merge( $propertyIds,
$this->deprecatedPropertyIds );
$count = count( $propertyIds );
- $context = 'item'; // only 'item' is supported at the moment
$dbr = $this->lb->getConnection( DB_SLAVE );
$res = $dbr->select(
@@ -92,13 +92,14 @@
*
* @param PropertyId[] $propertyIds
* @param int $limit
- * @param float $minProbability
+ * @param float $minProbability
+ * @param string $context
* @return Suggestion[]
*/
- public function suggestByPropertyIds( array $propertyIds, $limit,
$minProbability ) {
+ public function suggestByPropertyIds( array $propertyIds, $limit,
$minProbability, $context ) {
$numericIds = array_map( array( $this,
'getNumericIdFromPropertyId' ), $propertyIds );
- return $this->getSuggestions( $numericIds, $limit,
$minProbability );
+ return $this->getSuggestions( $numericIds, $limit,
$minProbability, $context );
}
/**
@@ -106,13 +107,14 @@
*
* @param Item $item
* @param int $limit
- * @param float $minProbability
+ * @param float $minProbability
+ * @param string $context
* @return Suggestion[]
*/
- public function suggestByItem( Item $item, $limit, $minProbability ) {
+ public function suggestByItem( Item $item, $limit, $minProbability,
$context ) {
$claims = $item->getClaims();
$numericIds = array_unique( array_map( array( $this,
'getNumericIdFromClaim' ), $claims ) );
- return $this->getSuggestions( $numericIds, $limit,
$minProbability );
+ return $this->getSuggestions( $numericIds, $limit,
$minProbability, $context );
}
/**
diff --git
a/extensions/PropertySuggester/src/PropertySuggester/Suggesters/SuggesterEngine.php
b/extensions/PropertySuggester/src/PropertySuggester/Suggesters/SuggesterEngine.php
index 714c7c4..327890e 100644
---
a/extensions/PropertySuggester/src/PropertySuggester/Suggesters/SuggesterEngine.php
+++
b/extensions/PropertySuggester/src/PropertySuggester/Suggesters/SuggesterEngine.php
@@ -18,9 +18,10 @@
* @param PropertyId[] $propertyIds
* @param int $limit
* @param float $minProbability
+ * @param string $context
* @return Suggestion[]
*/
- public function suggestByPropertyIds( array $propertyIds, $limit,
$minProbability );
+ public function suggestByPropertyIds( array $propertyIds, $limit,
$minProbability, $context );
/**
* Returns suggested attributes
@@ -28,9 +29,10 @@
* @param Item $item
* @param int $limit
* @param float $minProbability
+ * @param string $context
* @return Suggestion[]
*/
- public function suggestByItem( Item $item, $limit, $minProbability );
+ public function suggestByItem( Item $item, $limit, $minProbability,
$context );
/**
* @param int[] $numericIds - blacklist used to filter suggestions
diff --git
a/extensions/PropertySuggester/src/PropertySuggester/SuggestionGenerator.php
b/extensions/PropertySuggester/src/PropertySuggester/SuggestionGenerator.php
index 04791c1..c3a413c 100644
--- a/extensions/PropertySuggester/src/PropertySuggester/SuggestionGenerator.php
+++ b/extensions/PropertySuggester/src/PropertySuggester/SuggestionGenerator.php
@@ -42,19 +42,21 @@
}
/**
- * @param string $item - An item id
+ * @param string $itemIdString - An item id
* @param int $limit
* @param float $minProbability
- * @throws InvalidArgumentException
+ * @param string $context
+ * @throws \InvalidArgumentException
* @return array
*/
- public function generateSuggestionsByItem( $item, $limit,
$minProbability ) {
- $id = new ItemId( $item );
+
+ public function generateSuggestionsByItem( $itemIdString, $limit,
$minProbability, $context ) {
+ $id = new ItemId( $itemIdString );
$item = $this->entityLookup->getEntity( $id );
if( $item == null ){
throw new InvalidArgumentException( 'Item ' . $id . '
could not be found' );
}
- $suggestions = $this->suggester->suggestByItem( $item, $limit,
$minProbability );
+ $suggestions = $this->suggester->suggestByItem( $item, $limit,
$minProbability, $context );
return $suggestions;
}
@@ -62,14 +64,16 @@
* @param string[] $propertyIdList - A list of property-id-strings
* @param int $limit
* @param float $minProbability
+ * @param string $context
* @return Suggestion[]
*/
- public function generateSuggestionsByPropertyList( array
$propertyIdList, $limit, $minProbability ) {
+ public function generateSuggestionsByPropertyList( array
$propertyIdList, $limit, $minProbability, $context ) {
$propertyIds = array();
foreach ( $propertyIdList as $stringId ) {
$propertyIds[] = new PropertyId( $stringId );
}
- $suggestions = $this->suggester->suggestByPropertyIds(
$propertyIds, $limit, $minProbability );
+
+ $suggestions = $this->suggester->suggestByPropertyIds(
$propertyIds, $limit, $minProbability, $context );
return $suggestions;
}
diff --git a/extensions/PropertySuggester/tests/bootstrap.php
b/extensions/PropertySuggester/tests/bootstrap.php
index f28925d..077594a 100644
--- a/extensions/PropertySuggester/tests/bootstrap.php
+++ b/extensions/PropertySuggester/tests/bootstrap.php
@@ -1,4 +1,3 @@
<?php
-require_once __DIR__ . "/evilMediaWikiBootstrap.php";
require_once __DIR__ . "/../PropertySuggester.php";
diff --git
a/extensions/PropertySuggester/tests/phpunit/PropertySuggester/GetSuggestionsTest.php
b/extensions/PropertySuggester/tests/phpunit/PropertySuggester/GetSuggestionsTest.php
index 3d16d05..6939756 100644
---
a/extensions/PropertySuggester/tests/phpunit/PropertySuggester/GetSuggestionsTest.php
+++
b/extensions/PropertySuggester/tests/phpunit/PropertySuggester/GetSuggestionsTest.php
@@ -92,7 +92,7 @@
$p56 = self::$idMap['%P56%'];
$p72 = self::$idMap['%P72%'];
- $params = array( 'action' => 'wbsgetsuggestions', 'properties'
=> $p56, 'search' => '*' );
+ $params = array( 'action' => 'wbsgetsuggestions', 'properties'
=> $p56, 'search' => '*', 'context' => 'item' );
$res = $this->doApiRequest( $params );
$result = $res[0];
@@ -106,8 +106,7 @@
public function testExecutionWithSearch() {
$p56 = self::$idMap['%P56%'];
- // TODO add terms to do a useful search!
- $params = array( 'action' => 'wbsgetsuggestions', 'properties'
=> $p56, 'search' => 'IdontExist', 'continue' => 0);
+ $params = array( 'action' => 'wbsgetsuggestions', 'properties'
=> $p56, 'search' => 'IdontExist', 'continue' => 0, 'context' => 'item');
$res = $this->doApiRequest( $params );
$result = $res[0];
diff --git
a/extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggesterParamsParserTest.php
b/extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggesterParamsParserTest.php
index 6021102..399ce83 100644
---
a/extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggesterParamsParserTest.php
+++
b/extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggesterParamsParserTest.php
@@ -22,7 +22,7 @@
protected $defaultSuggesterResultSize = 100;
protected $defaultMinProbability = 0.01;
protected $defaultParams = array( 'entity' => null, 'properties' => null,
'continue' => 10, 'limit' => 5,
-
'language' => 'en', 'search' => '' );
+
'language' => 'en', 'search' => '', 'context' => 'item' );
public function setUp() {
parent::setUp();
@@ -42,6 +42,7 @@
$this->assertEquals( 5+10, $params->suggesterLimit );
$this->assertEquals( $this->defaultMinProbability,
$params->minProbability );
$this->assertEquals( '', $params->search );
+ $this->assertEquals( 'item', $params->context );
}
public function testSuggesterWithSearchParameters() {
@@ -57,6 +58,7 @@
$this->assertEquals( $this->defaultSuggesterResultSize,
$params->suggesterLimit );
$this->assertEquals( 0, $params->minProbability );
$this->assertEquals( 'asd', $params->search );
+ $this->assertEquals( 'item', $params->context );
}
/**
diff --git
a/extensions/PropertySuggester/tests/phpunit/PropertySuggester/Suggesters/SimpleSuggesterTest.php
b/extensions/PropertySuggester/tests/phpunit/PropertySuggester/Suggesters/SimpleSuggesterTest.php
index 9a33803..4797451 100644
---
a/extensions/PropertySuggester/tests/phpunit/PropertySuggester/Suggesters/SimpleSuggesterTest.php
+++
b/extensions/PropertySuggester/tests/phpunit/PropertySuggester/Suggesters/SimpleSuggesterTest.php
@@ -57,7 +57,7 @@
public function testSuggestByPropertyIds() {
$ids = array( new PropertyId( 'p1' ) );
- $res = $this->suggester->suggestByPropertyIds( $ids, 100, 0.0 );
+ $res = $this->suggester->suggestByPropertyIds( $ids, 100, 0.0,
'item' );
$this->assertEquals( new PropertyId( 'p2' ),
$res[0]->getPropertyId() );
$this->assertEquals( 0.1, $res[0]->getProbability(), '', 0.0001
);
@@ -71,7 +71,7 @@
$statement->setGuid( 'claim0' );
$item->addClaim( $statement );
- $res = $this->suggester->suggestByItem( $item, 100, 0.0 );
+ $res = $this->suggester->suggestByItem( $item, 100, 0.0, 'item'
);
$this->assertEquals( new PropertyId( 'p2' ),
$res[0]->getPropertyId() );
$this->assertEquals( new PropertyId( 'p3' ),
$res[1]->getPropertyId() );
@@ -82,7 +82,7 @@
$this->suggester->setDeprecatedPropertyIds( array( 2 ) );
- $res = $this->suggester->suggestByPropertyIds( $ids, 100, 0.0 );
+ $res = $this->suggester->suggestByPropertyIds( $ids, 100, 0.0,
'item' );
$resultIds = array_map( function ( Suggestion $r ) { return
$r->getPropertyId()->getNumericId(); }, $res );
$this->assertNotContains( 2 , $resultIds );
@@ -90,21 +90,21 @@
}
public function testEmptyResult() {
- $this->assertEmpty( $this->suggester->suggestByPropertyIds(
array(), 10, 0.01 ) );
+ $this->assertEmpty( $this->suggester->suggestByPropertyIds(
array(), 10, 0.01, 'item' ) );
}
/**
* @expectedException InvalidArgumentException
*/
public function testInvalidLimit() {
- $this->suggester->suggestByPropertyIds( array(), '10', 0.01 );
+ $this->suggester->suggestByPropertyIds( array(), '10', 0.01,
'item' );
}
/**
* @expectedException InvalidArgumentException
*/
public function testInvalidMinProbability() {
- $this->suggester->suggestByPropertyIds( array(), 10, '0.01' );
+ $this->suggester->suggestByPropertyIds( array(), 10, '0.01',
'item' );
}
}
diff --git
a/extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggestionGeneratorTest.php
b/extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggestionGeneratorTest.php
index 289dbc5..4edf2f7 100644
---
a/extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggestionGeneratorTest.php
+++
b/extensions/PropertySuggester/tests/phpunit/PropertySuggester/SuggestionGeneratorTest.php
@@ -96,7 +96,7 @@
->with( $this->equalTo( $properties ) )
->will( $this->returnValue( array( 'foo' ) ) );
- $result1 =
$this->suggestionGenerator->generateSuggestionsByPropertyList( array( 'P12',
'p13', 'P14' ) , 100, 0.0 );
+ $result1 =
$this->suggestionGenerator->generateSuggestionsByPropertyList( array( 'P12',
'p13', 'P14' ) , 100, 0.0, 'item' );
$this->assertEquals( $result1, array( 'foo' ) );
}
@@ -119,7 +119,7 @@
->with( $this->equalTo( $item ) )
->will( $this->returnValue( array( 'foo' ) ) );
- $result3 =
$this->suggestionGenerator->generateSuggestionsByItem( 'Q42', 100, 0.0 );
+ $result3 =
$this->suggestionGenerator->generateSuggestionsByItem( 'Q42', 100, 0.0, 'item'
);
$this->assertEquals( $result3, array( 'foo' ) );
}
@@ -134,7 +134,7 @@
->with( $this->equalTo( $itemId ) )
->will( $this->returnValue( null ) );
- $this->suggestionGenerator->generateSuggestionsByItem( 'Q41',
100, 0.0 );
+ $this->suggestionGenerator->generateSuggestionsByItem( 'Q41',
100, 0.0, 'item' );
}
}
diff --git a/extensions/Wikibase/client/WikibaseClient.hooks.php
b/extensions/Wikibase/client/WikibaseClient.hooks.php
index fa7101d..e7a5075 100644
--- a/extensions/Wikibase/client/WikibaseClient.hooks.php
+++ b/extensions/Wikibase/client/WikibaseClient.hooks.php
@@ -30,6 +30,7 @@
use User;
use Wikibase\Client\Hooks\BaseTemplateAfterPortletHandler;
use Wikibase\Client\Hooks\BeforePageDisplayHandler;
+use Wikibase\Client\Hooks\ChangesPageWikibaseFilterHandler;
use Wikibase\Client\Hooks\InfoActionHookHandler;
use Wikibase\Client\Hooks\LanguageLinkBadgeDisplay;
use Wikibase\Client\Hooks\SpecialWatchlistQueryHandler;
@@ -317,7 +318,10 @@
array &$join_conds, array &$fields, $opts
) {
$db = wfGetDB( DB_SLAVE );
- $handler = new SpecialWatchlistQueryHandler(
$GLOBALS['wgUser'], $db );
+ $settings = WikibaseClient::getDefaultInstance()->getSettings();
+ $showExternalChanges = $settings->getSetting(
'showExternalRecentChanges' );
+
+ $handler = new SpecialWatchlistQueryHandler(
$GLOBALS['wgUser'], $db, $showExternalChanges );
$conds = $handler->addWikibaseConditions(
$GLOBALS['wgRequest'], $conds, $opts );
@@ -704,15 +708,41 @@
* @return bool
*/
public static function onSpecialRecentChangesFilters(
SpecialRecentChanges $special, array &$filters ) {
- $context = $special->getContext();
+ $hookHandler = new ChangesPageWikibaseFilterHandler(
+ $special->getContext(),
+
WikibaseClient::getDefaultInstance()->getSettings()->getSetting(
'showExternalRecentChanges' ),
+ 'hidewikidata',
+ 'rcshowwikidata',
+ 'wikibase-rc-hide-wikidata'
+ );
- if ( $context->getRequest()->getBool( 'enhanced',
$context->getUser()->getOption( 'usenewrc' ) ) === false ) {
- $showWikidata = $special->getUser()->getOption(
'rcshowwikidata' );
- $default = $showWikidata ? false : true;
- if ( $context->getUser()->getOption( 'usenewrc' ) === 0
) {
- $filters['hidewikidata'] = array( 'msg' =>
'wikibase-rc-hide-wikidata', 'default' => $default );
- }
- }
+ // @fixme remove wikidata-specific stuff!
+ $filters = $hookHandler->addFilterIfEnabled( $filters );
+
+ return true;
+ }
+
+ /**
+ * Modifies watchlist options to show a toggle for Wikibase changes
+ * @see
https://www.mediawiki.org/wiki/Manual:Hooks/SpecialWatchlistFilters
+ *
+ * @since 0.4
+ *
+ * @param SpecialWatchlist $special
+ * @param array $filters
+ *
+ * @return bool
+ */
+ public static function onSpecialWatchlistFilters( $special, &$filters )
{
+ $hookHandler = new ChangesPageWikibaseFilterHandler(
+ $special->getContext(),
+
WikibaseClient::getDefaultInstance()->getSettings()->getSetting(
'showExternalRecentChanges' ),
+ 'hideWikibase',
+ 'wlshowwikibase',
+ 'wikibase-rc-hide-wikidata'
+ );
+
+ $filters = $hookHandler->addFilterIfEnabled( $filters );
return true;
}
@@ -792,31 +822,6 @@
}
}
- return true;
- }
-
- /**
- * Modifies watchlist options to show a toggle for Wikibase changes
- * @see
https://www.mediawiki.org/wiki/Manual:Hooks/SpecialWatchlistFilters
- *
- * @since 0.4
- *
- * @param SpecialWatchlist $special
- * @param array $filters
- *
- * @return bool
- */
- public static function onSpecialWatchlistFilters( $special, &$filters )
{
- $user = $special->getContext()->getUser();
-
- if ( $special->getContext()->getRequest()->getBool( 'enhanced',
- $user->getOption( 'usenewrc' ) ) === false ) {
- // Allow toggling wikibase changes in case the enhanced
watchlist is disabled
- $filters['hideWikibase'] = array(
- 'msg' => 'wikibase-rc-hide-wikidata',
- 'default' => !$user->getBoolOption(
'wlshowwikibase' )
- );
- }
return true;
}
diff --git
a/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/SnaksFinder.php
b/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/SnaksFinder.php
index 28d5dbc..bf28fb5 100644
---
a/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/SnaksFinder.php
+++
b/extensions/Wikibase/client/includes/DataAccess/PropertyParserFunction/SnaksFinder.php
@@ -9,6 +9,7 @@
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\EntityIdParsingException;
use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\Snak\Snak;
use Wikibase\Lib\PropertyLabelNotResolvedException;
use Wikibase\Lib\Store\EntityLookup;
use Wikibase\PropertyLabelResolver;
@@ -16,7 +17,7 @@
/**
* Find Snaks for claims in an entity, with EntityId, based on property label
or property id.
*
- * @fixme see what code can be shared with Lua handling code.
+ * TODO: see what code can be shared with Lua handling code.
*
* @since 0.5
*
@@ -42,8 +43,9 @@
/**
* @param EntityId $entityId
* @param string $propertyLabel
+ * @param string $languageCode
*
- * @fixme use SnakList instead of array of Snaks
+ * TODO: use SnakList instead of array of Snaks
*
* @return Snak[]
*/
diff --git
a/extensions/Wikibase/client/includes/hooks/ChangesPageWikibaseFilterHandler.php
b/extensions/Wikibase/client/includes/hooks/ChangesPageWikibaseFilterHandler.php
new file mode 100644
index 0000000..8b8053b
--- /dev/null
+++
b/extensions/Wikibase/client/includes/hooks/ChangesPageWikibaseFilterHandler.php
@@ -0,0 +1,129 @@
+<?php
+
+namespace Wikibase\Client\Hooks;
+
+use ChangesListSpecialPage;
+use IContextSource;
+use User;
+
+/**
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ */
+class ChangesPageWikibaseFilterHandler {
+
+ /**
+ * @var IContextSource
+ */
+ private $context;
+
+ /**
+ * @var boolean
+ */
+ private $showExternalChanges;
+
+ /**
+ * @var string
+ */
+ private $filterName;
+
+ /**
+ * @var string
+ */
+ private $optionName;
+
+ /**
+ * @var string
+ */
+ private $toggleMessageKey;
+
+ /**
+ * @param IContextSource $context
+ * @param boolean $showExternalChanges
+ * @param string $filterName - name for Wikibase toggle in FormOptions
+ * @param string $optionName - user option name for showing Wikibase
edits by default
+ * @param string $toggleMessageKey
+ */
+ public function __construct(
+ IContextSource $context,
+ $showExternalChanges,
+ $filterName,
+ $optionName,
+ $toggleMessageKey
+ ) {
+ $this->context = $context;
+ $this->showExternalChanges = $showExternalChanges;
+ $this->filterName = $filterName;
+ $this->optionName = $optionName;
+ $this->toggleMessageKey = $toggleMessageKey;
+ }
+
+ /**
+ * @param array $filters
+ *
+ * @return array
+ */
+ public function addFilterIfEnabled( array $filters ) {
+ $user = $this->context->getUser();
+
+ if ( !$this->shouldAddFilter( $user ) ) {
+ return $filters;
+ }
+
+ $toggleDefault = $this->showWikibaseEditsByDefault( $user,
$this->optionName );
+ $filters = $this->addFilter( $filters, $toggleDefault );
+
+ return $filters;
+ }
+
+ /**
+ * @param User $user
+ *
+ * @return boolean
+ */
+ private function shouldAddFilter( User $user ) {
+ if ( $this->showExternalChanges &&
!$this->isEnhancedChangesEnabled( $user ) ) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param array $filters
+ * @param boolean $toggleDefault
+ *
+ * @return array
+ */
+ private function addFilter( array $filters, $toggleDefault ) {
+ $filters["{$this->filterName}"] = array(
+ 'msg' => $this->toggleMessageKey,
+ 'default' => $toggleDefault
+ );
+
+ return $filters;
+ }
+
+ /**
+ * @param User $user
+ *
+ * @return boolean
+ */
+ private function showWikibaseEditsByDefault( User $user ) {
+ return !$user->getOption( $this->optionName );
+ }
+
+ /**
+ * @return boolean
+ */
+ private function isEnhancedChangesEnabled( User $user ) {
+ $enhancedChangesUserOption = $user->getOption( 'usenewrc' );
+
+ $isEnabled = $this->context->getRequest()->getBool( 'enhanced',
$enhancedChangesUserOption );
+
+ return $isEnabled;
+ }
+
+}
diff --git
a/extensions/Wikibase/client/includes/hooks/SpecialWatchlistQueryHandler.php
b/extensions/Wikibase/client/includes/hooks/SpecialWatchlistQueryHandler.php
index 5084641..734f672 100644
--- a/extensions/Wikibase/client/includes/hooks/SpecialWatchlistQueryHandler.php
+++ b/extensions/Wikibase/client/includes/hooks/SpecialWatchlistQueryHandler.php
@@ -26,6 +26,11 @@
private $db;
/**
+ * @var boolean
+ */
+ private $showExternalChanges;
+
+ /**
* @var string
*/
private $rcTypeLogCondition;
@@ -33,10 +38,12 @@
/**
* @param User $user
* @param DatabaseBase $db
+ * @param boolean $showExternalChanges
*/
- public function __construct( User $user, DatabaseBase $db ) {
+ public function __construct( User $user, DatabaseBase $db,
$showExternalChanges ) {
$this->user = $user;
$this->db = $db;
+ $this->showExternalChanges = $showExternalChanges;
}
/**
@@ -49,17 +56,31 @@
public function addWikibaseConditions( WebRequest $request, array
$conds, $opts ) {
// do not include wikibase changes for activated enhanced
watchlist
// since we do not support that format yet
- if (
- $this->isEnhancedChangesEnabled( $request ) === true ||
- !$opts ||
- $opts->getValue( 'hideWikibase' ) === true
- ) {
+ if ( $this->shouldHideWikibaseChanges( $request, $opts ) ) {
$newConds = $this->makeHideWikibaseConds( $conds );
} else {
$newConds = $this->makeShowWikibaseConds( $conds );
}
return $newConds;
+ }
+
+ /**
+ * @param WebRequest $request
+ * @param FormOptions|null $opts
+ *
+ * @return boolean
+ */
+ private function shouldHideWikibaseChanges( WebRequest $request, $opts
) {
+ if ( !$this->showExternalChanges ||
$this->isEnhancedChangesEnabled( $request ) === true ) {
+ return true;
+ }
+
+ if ( !$opts || $opts->getValue( 'hideWikibase' ) === true ) {
+ return true;
+ }
+
+ return false;
}
/**
@@ -78,7 +99,7 @@
*
* @return array
*/
- private function makeShowWikibaseConds( array $conds ) {
+ private function makeShowWikibaseConds( array $conds ) {
$newConds = array();
foreach( $conds as $key => $cond ) {
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/ChangeHandlerTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/ChangeHandlerTest.php
index 1698a9e..8b601fa 100644
--- a/extensions/Wikibase/client/tests/phpunit/includes/ChangeHandlerTest.php
+++ b/extensions/Wikibase/client/tests/phpunit/includes/ChangeHandlerTest.php
@@ -2,6 +2,7 @@
namespace Wikibase\Test;
+use Diff\Differ\MapDiffer;
use Site;
use Title;
use Wikibase\Change;
@@ -127,10 +128,10 @@
}
/**
- * @param array $values
- * @param \Wikibase\EntityDiff $diff
+ * @param array $values
+ * @param EntityDiff|null $diff
*
- * @return \Wikibase\EntityChange
+ * @return EntityChange
*/
public static function makeChange( array $values, EntityDiff $diff =
null ) {
if ( !isset( $values['info'] ) ) {
@@ -171,7 +172,7 @@
}
public static function makeDiff( $type, $before, $after ) {
- $differ = new \Diff\MapDiffer( true );
+ $differ = new MapDiffer( true );
$diffOps = $differ->doDiff( $before, $after );
$diff = EntityDiff::newForType( $type, $diffOps );
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageAwareRendererTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageAwareRendererTest.php
index 991774e..a9c7774 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageAwareRendererTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageAwareRendererTest.php
@@ -27,6 +27,8 @@
/**
* @param SnaksFinder $snaksFinder
* @param string $languageCode
+ *
+ * @return LanguageAwareRenderer
*/
private function getRenderer( SnaksFinder $snaksFinder, $languageCode )
{
$targetLanguage = Language::factory( $languageCode );
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/hooks/ChangesPageWikibaseFilterHandlerTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/hooks/ChangesPageWikibaseFilterHandlerTest.php
new file mode 100644
index 0000000..99d0c12
--- /dev/null
+++
b/extensions/Wikibase/client/tests/phpunit/includes/hooks/ChangesPageWikibaseFilterHandlerTest.php
@@ -0,0 +1,120 @@
+<?php
+
+namespace Wikibase\Client\Tests\Hooks;
+
+use DerivativeContext;
+use FauxRequest;
+use FormOptions;
+use IContextSource;
+use RequestContext;
+use Wikibase\Client\Hooks\ChangesPageWikibaseFilterHandler;
+
+/**
+ * @covers Wikibase\Client\Hooks\ChangesPageWikibaseFilterHandler
+ *
+ * @group WikibaseClientHooks
+ * @group WikibaseClient
+ * @group Wikibase
+ */
+class ChangesPageWikibaseFilterHandlerTest extends \PHPUnit_Framework_TestCase
{
+
+ /**
+ * @dataProvider filterNotAddedWhenUsingEnhancedChangesProvider
+ */
+ public function testFilterNotAddedWhenUsingEnhancedChanges(
+ $enhancedChangesDefault,
+ $useEnhancedChanges
+ ) {
+ $context = $this->getContext( $enhancedChangesDefault,
$useEnhancedChanges, false );
+ $hookHandler = new ChangesPageWikibaseFilterHandler( $context,
true, 'foo', 'bar', 'foobar' );
+
+ $filters = array();
+ $filters = $hookHandler->addFilterIfEnabled( $filters );
+
+ $this->assertEquals( array(), $filters );
+ }
+
+ public function filterNotAddedWhenUsingEnhancedChangesProvider() {
+ return array(
+ array( true, true, 'enhanced changes default preference
and using' ),
+ array( false, true, 'enhanced changes not default but
using' )
+ );
+ }
+
+ public function testFilterAddedWhenNotUsingEnhancedChanges() {
+ $context = $this->getContext( false, false, true );
+ $hookHandler = new ChangesPageWikibaseFilterHandler( $context,
true, 'foo', 'bar', 'foobar' );
+
+ $filters = array();
+ $filters = $hookHandler->addFilterIfEnabled( $filters );
+
+ $expected = array(
+ 'foo' => array(
+ 'msg' => 'foobar',
+ 'default' => false
+ )
+ );
+
+ $this->assertEquals( $expected, $filters );
+ }
+
+ public function
testFilterAddedAndEnabledByDefault_WhenNotUsingEnhancedChanges() {
+ $context = $this->getContext( false, false, false );
+ $hookHandler = new ChangesPageWikibaseFilterHandler( $context,
true, 'foo', 'bar', 'foobar' );
+
+ $filters = array();
+ $filters = $hookHandler->addFilterIfEnabled( $filters );
+
+ $expected = array(
+ 'foo' => array(
+ 'msg' => 'foobar',
+ 'default' => true
+ )
+ );
+
+ $this->assertEquals( $expected, $filters );
+ }
+
+ public function testFilterNotAddedWhenExternalRecentChangesDisabled() {
+ $context = $this->getContext( false, false, false );
+ $hookHandler = new ChangesPageWikibaseFilterHandler( $context,
false, 'foo', 'bar', 'foobar' );
+
+ $filters = array();
+ $filters = $hookHandler->addFilterIfEnabled( $filters );
+
+ $this->assertEquals( array(), $filters );
+ }
+
+ private function getContext( $enhancedChangesPref, $useEnhanced,
$hideWikibaseEditsByDefault ) {
+ $context = new DerivativeContext( RequestContext::getMain() );
+ $context->setUser( $this->getUser( $enhancedChangesPref,
$hideWikibaseEditsByDefault ) );
+
+ $request = new FauxRequest( array( 'enhanced' => $useEnhanced )
);
+ $context->setRequest( $request );
+
+ return $context;
+ }
+
+ private function getUser( $enhancedChangesPref,
$hideWikibaseEditsByDefault ) {
+ $user = $this->getMockBuilder( 'User' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $user->expects( $this->any() )
+ ->method( 'getOption' )
+ ->will( $this->returnCallback( function( $optionName )
use(
+ $enhancedChangesPref,
+ $hideWikibaseEditsByDefault
+ ) {
+ if ( $optionName === 'usenewrc' ) {
+ return $enhancedChangesPref;
+ } else {
+ return
$hideWikibaseEditsByDefault;
+ }
+ }
+ ) );
+
+ return $user;
+ }
+
+}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/hooks/SpecialWatchlistQueryHandlerTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/hooks/SpecialWatchlistQueryHandlerTest.php
index 4e12df1..ea390a4 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/hooks/SpecialWatchlistQueryHandlerTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/hooks/SpecialWatchlistQueryHandlerTest.php
@@ -25,6 +25,7 @@
public function testAddWikibaseConditions(
array $expected,
array $conds,
+ $showExternalChanges,
$enhanced,
$hideWikibase,
$message
@@ -32,7 +33,7 @@
$user = $this->getUser( $enhanced );
$database = $this->getDatabase();
- $hookHandler = new SpecialWatchlistQueryHandler( $user,
$database );
+ $hookHandler = new SpecialWatchlistQueryHandler( $user,
$database, $showExternalChanges );
$opts = new FormOptions();
$opts->add( 'hideWikibase', $hideWikibase );
@@ -49,10 +50,11 @@
$expectedShowConds = array( "(rc_this_oldid=page_latest) OR
rc_type IN (3,5)" );
return array(
- array( $expectedHideConds, $conds, true, true,
'enhanced, hide wikibase opt' ),
- array( $expectedHideConds, $conds, true, false,
'enhanced, no hide wikibase opt' ),
- array( $expectedHideConds, $conds, false, true, 'not
enhanced, hide wikibase opt' ),
- array( $expectedShowConds, $conds, false, false, 'not
enhanced, show wikibase opt' )
+ array( $expectedHideConds, $conds, true, true, true,
'enhanced, hide wikibase opt' ),
+ array( $expectedHideConds, $conds, true, true, false,
'enhanced, no hide wikibase opt' ),
+ array( $expectedHideConds, $conds, true, false, true,
'not enhanced, hide wikibase opt' ),
+ array( $expectedShowConds, $conds, true, false, false,
'not enhanced, show wikibase opt' ),
+ array( $expectedHideConds, $conds, false, false, false,
'changes integration not enabled' )
);
}
diff --git a/extensions/Wikibase/lib/WikibaseLib.php
b/extensions/Wikibase/lib/WikibaseLib.php
index afe7ad9..e969d61 100644
--- a/extensions/Wikibase/lib/WikibaseLib.php
+++ b/extensions/Wikibase/lib/WikibaseLib.php
@@ -52,6 +52,22 @@
include_once( __DIR__ . '/../vendor/autoload.php' );
}
+// TODO: Needed for deserializing Snaks in DataModel 0.x. Remove with
DataModel 1.x!
+if( !array_key_exists( 'evilDataValueMap', $GLOBALS ) ) {
+ $GLOBALS['evilDataValueMap'] = array();
+}
+$GLOBALS['evilDataValueMap'] = array_merge(
+ $GLOBALS['evilDataValueMap'],
+ array(
+ 'globecoordinate' => 'DataValues\GlobeCoordinateValue',
+ 'monolingualtext' => 'DataValues\MonolingualTextValue',
+ 'multilingualtext' => 'DataValues\MultilingualTextValue',
+ 'quantity' => 'DataValues\QuantityValue',
+ 'time' => 'DataValues\TimeValue',
+ 'wikibase-entityid' =>
'Wikibase\DataModel\Entity\EntityIdValue',
+ )
+);
+
call_user_func( function() {
global $wgExtensionCredits, $wgJobClasses, $wgHooks,
$wgResourceModules, $wgMessagesDirs;
diff --git a/extensions/Wikibase/lib/includes/parsers/DateTimeParser.php
b/extensions/Wikibase/lib/includes/parsers/DateTimeParser.php
index bdcfb4d..faacb6a 100644
--- a/extensions/Wikibase/lib/includes/parsers/DateTimeParser.php
+++ b/extensions/Wikibase/lib/includes/parsers/DateTimeParser.php
@@ -37,7 +37,9 @@
public function __construct( EraParser $eraParser, ParserOptions
$options = null ) {
parent::__construct( $options );
- $this->monthUnlocalizer = new MonthNameUnlocalizer();
+
+ $languageCode = $options->getOption( ValueParser::OPT_LANG );
+ $this->monthUnlocalizer = new MonthNameUnlocalizer(
$languageCode );
$this->eraParser = $eraParser;
}
@@ -64,10 +66,7 @@
$value = $this->getValueWithFixedYearLengths(
$this->getValueWithFixedSeparators(
- $this->monthUnlocalizer->unlocalize(
- trim( $value ),
- $options->getOption(
ValueParser::OPT_LANG )
- )
+ $this->monthUnlocalizer->unlocalize(
trim( $value ) )
)
);
diff --git a/extensions/Wikibase/lib/includes/parsers/MonolingualTextParser.php
b/extensions/Wikibase/lib/includes/parsers/MonolingualTextParser.php
index 7f74188..22a1ab4 100644
--- a/extensions/Wikibase/lib/includes/parsers/MonolingualTextParser.php
+++ b/extensions/Wikibase/lib/includes/parsers/MonolingualTextParser.php
@@ -4,6 +4,7 @@
use DataValues\IllegalValueException;
use DataValues\MonolingualTextValue;
+use ValueParsers\ParseException;
use ValueParsers\StringValueParser;
/**
@@ -26,17 +27,21 @@
*
* @param string $value
*
- * @throws IllegalValueException if the "valuelang" option is missing
or empty
+ * @throws ParseException if the "valuelang" option is missing or empty
* @return MonolingualTextValue
*/
protected function stringParse( $value ) {
if ( !$this->getOptions()->hasOption( 'valuelang' ) ) {
- throw new IllegalValueException( 'Can not construct a
MonolingualTextValue without a language code.' );
+ throw new ParseException( 'Cannot construct a
MonolingualTextValue without a language code.' );
}
$lang = $this->getOptions()->getOption( 'valuelang' );
- return new MonolingualTextValue( trim( $lang ), trim( $value )
);
+ try {
+ return new MonolingualTextValue( trim( $lang ), trim(
$value ) );
+ } catch ( IllegalValueException $ex ) {
+ throw new ParseException( $ex->getMessage() );
+ }
}
}
diff --git a/extensions/Wikibase/lib/includes/parsers/MonthNameUnlocalizer.php
b/extensions/Wikibase/lib/includes/parsers/MonthNameUnlocalizer.php
index 6c0e216..962635b 100644
--- a/extensions/Wikibase/lib/includes/parsers/MonthNameUnlocalizer.php
+++ b/extensions/Wikibase/lib/includes/parsers/MonthNameUnlocalizer.php
@@ -11,30 +11,29 @@
*
* @licence GNU GPL v2+
* @author Adam Shorland
+ * @author Thiemo Mättig
*
* @todo move me to DataValues-time
*/
class MonthNameUnlocalizer {
+ const BASE_LANGUAGE_CODE = 'en';
+
/**
- * @see NumberUnlocalizer::unlocalizeNumber
- *
- * @param string $date Localized date string.
- * @param string $languageCode
- *
- * @return string
+ * @var string|null Language code of the source strings or null if it's
the base language.
*/
- public function unlocalize( $date, $languageCode ) {
- if ( $languageCode === 'en' ) {
- return $date;
+ private $languageCode = null;
+
+ private $baseLanguage = null;
+ private $language = null;
+
+ /**
+ * @param string $languageCode
+ */
+ public function __construct( $languageCode ) {
+ if ( $languageCode !== self::BASE_LANGUAGE_CODE ) {
+ $this->languageCode = $languageCode;
}
-
- $language = Language::factory( $languageCode );
- $en = Language::factory( 'en' );
-
- $date = $this->unlocalizeMonthName( $language, $en, $date );
-
- return $date;
}
/**
@@ -42,29 +41,14 @@
* Tries to avoid doing multiple replacements and returns the localized
original if in doubt.
* Takes full month names, genitive names and abbreviations into
account.
*
- * @param Language $from
- * @param Language $to
+ * @see NumberUnlocalizer::unlocalizeNumber
+ *
* @param string $date Localized date string.
*
- * @return string
+ * @return string Unlocalized date string.
*/
- private function unlocalizeMonthName( Language $from, Language $to,
$date ) {
- $replacements = array();
-
- for ( $i = 1; $i <= 12; $i++ ) {
- $replace = $to->getMonthName( $i );
-
- $replacements[$from->getMonthName( $i )] = $replace;
- $replacements[$from->getMonthNameGen( $i )] = $replace;
- $replacements[$from->getMonthAbbreviation( $i )] =
$replace;
- }
-
- // Order search strings from longest to shortest
- uksort( $replacements, function( $a, $b ) {
- return strlen( $b ) - strlen( $a );
- } );
-
- foreach ( $replacements as $search => $replace ) {
+ public function unlocalize( $date ) {
+ foreach ( $this->getReplacements() as $search => $replace ) {
$unlocalized = str_replace( $search, $replace, $date,
$count );
// Nothing happened, try the next.
@@ -77,8 +61,8 @@
break;
}
- // Do not mess with already unlocalized month names,
e.g. "Juli" should not become
- // "Julyi" when replacing "Jul" with "July". But
shortening "Julyus" to "July" is ok.
+ // Do not mess with already unlocalized month names,
e.g. "July" should not become
+ // "Julyy" when replacing "Jul" with "July". But
shortening "Julyus" to "July" is ok.
if ( strpos( $date, $replace ) !== false && strlen(
$replace ) >= strlen( $search ) ) {
break;
}
@@ -89,4 +73,47 @@
return $date;
}
+ private function getReplacements() {
+ $replacements = array();
+ $language = $this->getLanguage();
+
+ if ( $language !== null ) {
+ $baseLanguage = $this->getBaseLanguage();
+
+ for ( $i = 1; $i <= 12; $i++ ) {
+ $replace = $baseLanguage->getMonthName( $i );
+
+ $replacements[$language->getMonthName( $i )] =
$replace;
+ $replacements[$language->getMonthNameGen( $i )]
= $replace;
+ $replacements[$language->getMonthAbbreviation(
$i )] = $replace;
+ }
+
+ // Order search strings from longest to shortest
+ uksort( $replacements, function( $a, $b ) {
+ return strlen( $b ) - strlen( $a );
+ } );
+ }
+
+ return $replacements;
+ }
+
+ private function getBaseLanguage() {
+ if ( $this->baseLanguage === null ) {
+ $this->baseLanguage = Language::factory(
self::BASE_LANGUAGE_CODE );
+ }
+
+ return $this->baseLanguage;
+ }
+
+ /**
+ * @return Language|null
+ */
+ private function getLanguage() {
+ if ( $this->language === null && $this->languageCode !== null )
{
+ $this->language = Language::factory(
$this->languageCode );
+ }
+
+ return $this->language;
+ }
+
}
diff --git
a/extensions/Wikibase/lib/includes/store/GenericEntityInfoBuilder.php
b/extensions/Wikibase/lib/includes/store/GenericEntityInfoBuilder.php
index 76ad792..76d67cb 100644
--- a/extensions/Wikibase/lib/includes/store/GenericEntityInfoBuilder.php
+++ b/extensions/Wikibase/lib/includes/store/GenericEntityInfoBuilder.php
@@ -133,7 +133,6 @@
*/
private function applyRedirect( $idString, EntityId $targetId) {
$redirectedId = $this->parseId( $idString );
- $type = $redirectedId->getEntityType();
$targetKey = $targetId->getSerialization();
diff --git a/extensions/Wikibase/lib/includes/store/TermIndex.php
b/extensions/Wikibase/lib/includes/store/TermIndex.php
index 3b838c2..7f4ea0d 100644
--- a/extensions/Wikibase/lib/includes/store/TermIndex.php
+++ b/extensions/Wikibase/lib/includes/store/TermIndex.php
@@ -9,8 +9,6 @@
*
* @licence GNU GPL v2+
* @author Jeroen De Dauw < [email protected] >
- *
- * @todo: rename to TermIndex
*/
interface TermIndex extends TermCombinationMatchFinder {
diff --git
a/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilder.php
b/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilder.php
index 98ef85d..bfad64f 100644
--- a/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilder.php
+++ b/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilder.php
@@ -87,7 +87,7 @@
* @var array[] map of entity types to maps of id-strings to numeric
ids:
* type => id-string => id-int
*/
- private $numericIdsByType = null;
+ private $numericIdsByType = array();
/**
* Maps of id strings to page info records, grouped by entity type.
@@ -560,7 +560,6 @@
? 'epp_redirect_target'
: 'NULL AS epp_redirect_target'
);
-
$res = $dbw->select(
$this->entityPerPageTable,
diff --git
a/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilderFactory.php
b/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilderFactory.php
index c04fa7a..c052469 100644
--- a/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilderFactory.php
+++ b/extensions/Wikibase/lib/includes/store/sql/SqlEntityInfoBuilderFactory.php
@@ -6,7 +6,6 @@
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\Lib\Store\EntityInfoBuilder;
use Wikibase\Lib\Store\EntityInfoBuilderFactory;
-use Wikibase\Lib\Store\EntityRevisionLookup;
/**
* A factory for SqlEntityInfoBuilder instances.
@@ -21,9 +20,9 @@
class SqlEntityInfoBuilderFactory implements EntityInfoBuilderFactory {
/**
- * @var EntityRevisionLookup
+ * @var bool
*/
- private $entityRevisionLookup;
+ private $useRedirectTargetColumn;
/**
* @var bool
@@ -31,18 +30,18 @@
private $wiki;
/**
- * @param EntityRevisionLookup $entityRevisionLookup
+ * @param bool $useRedirectTargetColumn
* @param string|bool $wiki The wiki's database to connect to.
* Must be a value LBFactory understands. Defaults to false,
which is the local wiki.
*
* @throws InvalidArgumentException
*/
- public function __construct( EntityRevisionLookup
$entityRevisionLookup, $wiki = false ) {
+ public function __construct( $useRedirectTargetColumn = true, $wiki =
false ) {
if ( !is_string( $wiki ) && $wiki !== false ) {
throw new InvalidArgumentException( '$wiki must be a
string or false.' );
}
- $this->entityRevisionLookup = $entityRevisionLookup;
+ $this->useRedirectTargetColumn = $useRedirectTargetColumn;
$this->wiki = $wiki;
}
@@ -54,6 +53,7 @@
* @return EntityInfoBuilder
*/
public function newEntityInfoBuilder( array $ids ) {
- return new SqlEntityInfoBuilder( $ids,
$this->entityRevisionLookup, $this->wiki );
+ return new SqlEntityInfoBuilder( $ids,
$this->useRedirectTargetColumn, $this->wiki );
}
+
}
diff --git a/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
b/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
index 7f0bf78..7973bd3 100644
--- a/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
+++ b/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
@@ -76,7 +76,7 @@
}
/**
- * @see TermCache::saveTermsOfEntity
+ * @see TermIndex::saveTermsOfEntity
*
* @since 0.1
*
@@ -317,7 +317,7 @@
}
/**
- * @see TermCache::deleteTermsOfEntity
+ * @see TermIndex::deleteTermsOfEntity
*
* @since 0.5
*
@@ -349,7 +349,7 @@
/**
* Returns the terms stored for the given entity.
- * @see TermCache::getTermsOfEntity
+ * @see TermIndex::getTermsOfEntity
*
* @param EntityId $id
*
@@ -390,7 +390,7 @@
/**
* Returns the terms stored for the given entities.
*
- * @see TermCache::getTermsOfEntities
+ * @see TermIndex::getTermsOfEntities
*
* @param EntityId[] $ids
* @param string $entityType
@@ -475,7 +475,7 @@
}
/**
- * @see TermCache::termExists
+ * @see TermIndex::termExists
*
* @since 0.1
*
@@ -524,7 +524,7 @@
}
/**
- * @see TermCache::getEntityIdsForLabel
+ * @see TermIndex::getEntityIdsForLabel
*
* @since 0.1
*
@@ -585,7 +585,7 @@
}
/**
- * @see TermCache::getMatchingTerms
+ * @see TermIndex::getMatchingTerms
*
* @since 0.2
*
@@ -634,7 +634,7 @@
}
/**
- * @see TermCache::getMatchingIDs
+ * @see TermIndex::getMatchingIDs
*
* @since 0.4
*
@@ -866,7 +866,7 @@
}
/**
- * @see TermCache::clear
+ * @see TermIndex::clear
*
* @since 0.2
*
@@ -880,7 +880,7 @@
}
/**
- * @see TermCache::getMatchingTermCombination
+ * @see TermIndex::getMatchingTermCombination
*
* Note: the interface specifies capability for only a single join,
which in this implementation
* is enforced by the $joinCount var. The code itself however could
handle multiple joins.
diff --git a/extensions/Wikibase/lib/resources/wikibase.css
b/extensions/Wikibase/lib/resources/wikibase.css
index d02627f..f59382a 100644
--- a/extensions/Wikibase/lib/resources/wikibase.css
+++ b/extensions/Wikibase/lib/resources/wikibase.css
@@ -954,7 +954,7 @@
width: 100%;
}
-table.wb-sitelinks .wb-badge {
+.wb-badge {
/* SVG support using a transparent gradient to guarantee cross-browser
* compatibility (browsers able to understand gradient syntax support
also SVG).
*
http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
@@ -969,7 +969,7 @@
padding: 0 8px;
}
-table.wb-sitelinks .wb-badge-empty {
+.wb-badge-empty {
background-image: url(images/wb-badges-empty.png);
/* @embed */
background-image: -webkit-linear-gradient(transparent, transparent),
url(images/wb-badges-empty.svg);
diff --git a/extensions/Wikibase/lib/tests/phpunit/MockRepository.php
b/extensions/Wikibase/lib/tests/phpunit/MockRepository.php
index 1da87d5..74709d0 100644
--- a/extensions/Wikibase/lib/tests/phpunit/MockRepository.php
+++ b/extensions/Wikibase/lib/tests/phpunit/MockRepository.php
@@ -354,6 +354,8 @@
$rev->user = $user;
}
+ unset( $this->redirects[$key] );
+
$this->entities[$key][$revision] = $rev;
ksort( $this->entities[$key] );
@@ -368,6 +370,11 @@
*/
public function putRedirect( EntityRedirect $redirect ) {
$key = $redirect->getEntityId()->getSerialization();
+
+ if ( isset( $this->entities[$key] ) ) {
+ $this->removeEntity( $redirect->getEntityId() );
+ }
+
$this->redirects[$key] = $redirect;
}
@@ -379,15 +386,20 @@
* @return Entity
*/
public function removeEntity( EntityId $id ) {
- $oldEntity = $this->getEntity( $id );
+ try {
+ $oldEntity = $this->getEntity( $id );
- if ( $oldEntity && ( $oldEntity instanceof Item ) ) {
- // clean up old sitelinks
- $this->unregisterSiteLinks( $oldEntity );
+ if ( $oldEntity && ( $oldEntity instanceof Item ) ) {
+ // clean up old sitelinks
+ $this->unregisterSiteLinks( $oldEntity );
+ }
+ } catch ( StorageException $ex ) {
+ $oldEntity = null; // ignore
}
$key = $id->getPrefixedId();
unset( $this->entities[$key] );
+ unset( $this->redirects[$key] );
return $oldEntity;
}
diff --git a/extensions/Wikibase/lib/tests/phpunit/MockRepositoryTest.php
b/extensions/Wikibase/lib/tests/phpunit/MockRepositoryTest.php
index f080c4c..7328836 100644
--- a/extensions/Wikibase/lib/tests/phpunit/MockRepositoryTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/MockRepositoryTest.php
@@ -551,7 +551,13 @@
$this->setExpectedException( $error );
}
- $rev = $this->repo->saveEntity( $entity, '',
$GLOBALS['wgUser'], $flags, $baseRevId );
+ $rev = $this->repo->saveEntity( $entity, 'f00',
$GLOBALS['wgUser'], $flags, $baseRevId );
+
+ $logEntry = $this->repo->getLogEntry( $rev->getRevision() );
+ $this->assertNotNull( $logEntry );
+ $this->assertEquals( $rev->getRevision(), $logEntry['revision']
);
+ $this->assertEquals( $entity->getId()->getSerialization(),
$logEntry['entity'] );
+ $this->assertEquals( 'f00', $logEntry['summary'] );
$this->assertEquals( $entity->getLabels(),
$rev->getEntity()->getLabels() );
$this->assertEquals( $entity->getLabels(),
$this->repo->getEntity( $entity->getId() )->getLabels() );
@@ -559,7 +565,29 @@
// test we can't mess with entities in the repo
$entity->setLabel( 'en', 'STRANGE' );
$entity = $this->repo->getEntity( $entity->getId() );
+ $this->assertNotNull( $entity );
$this->assertNotEquals( 'STRANGE', $entity->getLabel( 'en' ) );
+ }
+
+ public function testSaveRedirect() {
+ $this->setupGetEntities();
+
+ $q10 = new ItemId( 'Q10' );
+ $q1 = new ItemId( 'Q1' );
+
+ $redirect = new EntityRedirect( $q10, $q1 );
+ $revId = $this->repo->saveRedirect( $redirect, 'redirected Q10
to Q1', $GLOBALS['wgUser'] );
+
+ $this->assertGreaterThan( 0, $revId );
+
+ $logEntry = $this->repo->getLogEntry( $revId );
+ $this->assertNotNull( $logEntry );
+ $this->assertEquals( $revId, $logEntry['revision'] );
+ $this->assertEquals(
$redirect->getEntityId()->getSerialization(), $logEntry['entity'] );
+ $this->assertEquals( 'redirected Q10 to Q1',
$logEntry['summary'] );
+
+ $this->setExpectedException(
'Wikibase\Lib\Store\UnresolvedRedirectException' );
+ $this->repo->getEntity( $q10 );
}
public function testGetLogEntry() {
@@ -619,6 +647,14 @@
$this->assertFalse( $this->repo->hasEntity( $item->getId() ) );
}
+ public function testDeleteRedirect( ) {
+ $redirect = new EntityRedirect( new ItemId( 'Q11' ), new
ItemId( 'Q1' ) );
+ $this->repo->putRedirect( $redirect );
+
+ $this->repo->deleteEntity( $redirect->getEntityId(), 'testing',
$GLOBALS['wgUser'] );
+ $this->assertNull( $this->repo->getEntity(
$redirect->getEntityId() ) );
+ }
+
public function testUpdateWatchlist() {
$user = User::newFromName( "WikiPageEntityStoreTestUser2" );
diff --git
a/extensions/Wikibase/lib/tests/phpunit/parsers/MonolingualTextParserTest.php
b/extensions/Wikibase/lib/tests/phpunit/parsers/MonolingualTextParserTest.php
index 151f65c..30d4310 100644
---
a/extensions/Wikibase/lib/tests/phpunit/parsers/MonolingualTextParserTest.php
+++
b/extensions/Wikibase/lib/tests/phpunit/parsers/MonolingualTextParserTest.php
@@ -43,7 +43,7 @@
}
/**
- * @expectedException \DataValues\IllegalValueException
+ * @expectedException \ValueParsers\ParseException
*/
public function testParse_missingLanguageOption() {
$parser = new MonolingualTextParser();
@@ -59,7 +59,7 @@
/**
* @dataProvider invalidLanguageCodeProvider
- * @expectedException \DataValues\IllegalValueException
+ * @expectedException \ValueParsers\ParseException
*/
public function testParse_invalidLanguageOption( $languageCode ) {
$options = new ParserOptions( array( 'valuelang' =>
$languageCode ) );
diff --git
a/extensions/Wikibase/lib/tests/phpunit/parsers/MonthNameUnlocalizerTest.php
b/extensions/Wikibase/lib/tests/phpunit/parsers/MonthNameUnlocalizerTest.php
index 058696a..9e6286d 100644
--- a/extensions/Wikibase/lib/tests/phpunit/parsers/MonthNameUnlocalizerTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/parsers/MonthNameUnlocalizerTest.php
@@ -102,8 +102,8 @@
* @param string $expected
*/
public function testUnlocalize( $date, $languageCode, $expected ) {
- $unlocalizer = new MonthNameUnlocalizer();
- $actual = $unlocalizer->unlocalize( $date, $languageCode );
+ $unlocalizer = new MonthNameUnlocalizer( $languageCode );
+ $actual = $unlocalizer->unlocalize( $date );
$this->assertEquals( $expected, $actual );
}
@@ -131,10 +131,9 @@
* @param string $expected
*/
public function testUnlocalize_withLanguageChains( $date, array
$languageCodes, $expected ) {
- $unlocalizer = new MonthNameUnlocalizer();
-
foreach ( $languageCodes as $languageCode ) {
- $date = $unlocalizer->unlocalize( $date, $languageCode
);
+ $unlocalizer = new MonthNameUnlocalizer( $languageCode
);
+ $date = $unlocalizer->unlocalize( $date );
}
$this->assertEquals( $expected, $date );
diff --git a/extensions/Wikibase/repo/includes/EditEntity.php
b/extensions/Wikibase/repo/includes/EditEntity.php
index 4e8c016..6e8f6ba 100644
--- a/extensions/Wikibase/repo/includes/EditEntity.php
+++ b/extensions/Wikibase/repo/includes/EditEntity.php
@@ -790,12 +790,7 @@
}
}
- /**
- * @var Entity $entity
- */
- $entity = $this->getNewEntity();
- $baseRev = $this->getBaseRevision();
- $base = $baseRev === null ? null : $baseRev->getEntity();
+ $this->getBaseRevision();
return $this->status;
}
diff --git a/extensions/Wikibase/repo/includes/EntityView.php
b/extensions/Wikibase/repo/includes/EntityView.php
index 14509a4..d048b95 100644
--- a/extensions/Wikibase/repo/includes/EntityView.php
+++ b/extensions/Wikibase/repo/includes/EntityView.php
@@ -12,7 +12,6 @@
use Wikibase\Lib\Serializers\SerializationOptions;
use Wikibase\Lib\SnakFormatter;
use Wikibase\Lib\Store\EntityInfoBuilderFactory;
-use Wikibase\Repo\View\FingerprintView;
use Wikibase\Repo\View\SectionEditLinkGenerator;
use Wikibase\Repo\View\SnakHtmlGenerator;
use Wikibase\Repo\View\TextInjector;
@@ -30,7 +29,6 @@
* @author H. Snater < mediawiki at snater.com >
* @author Daniel Werner
* @author Daniel Kinzler
- * @author Bene* < [email protected] >
*/
abstract class EntityView extends ContextSource {
@@ -232,7 +230,12 @@
$html = '';
- $html .= $this->getHtmlForFingerprint( $entity, $editable );
+ $html .= $this->getHtmlForLabel( $entity, $editable );
+ $html .= $this->getHtmlForDescription( $entity, $editable );
+
+ $html .= wfTemplate( 'wb-entity-header-separator' );
+
+ $html .= $this->getHtmlForAliases( $entity, $editable );
$html .= $this->getHtmlForToc();
$html .= $this->getHtmlForTermBox( $entityRevision, $editable );
$html .= $this->getHtmlForClaims( $entity, $editable );
@@ -242,19 +245,7 @@
}
/**
- * Builds and returns the HTML for the entity's fingerprint.
- *
- * @param Entity $entity
- * @param bool $editable
- * @return string
- */
- protected function getHtmlForFingerprint( Entity $entity, $editable =
true ) {
- $fingerprintView = new FingerprintView(
$this->sectionEditLinkGenerator, $this->getLanguage()->getCode() );
- return $fingerprintView->getHtml( $entity->getFingerprint(),
$entity->getId(), $editable );
- }
-
- /**
- * Builds and returns the HTML for the toc.
+ * Builds and returns the html for the toc.
*
* @return string
*/
@@ -395,6 +386,128 @@
}
/**
+ * Builds and returns the HTML representing a WikibaseEntity's label.
+ *
+ * @since 0.1
+ *
+ * @param Entity $entity the entity to render
+ * @param bool $editable whether editing is allowed (enabled edit links)
+ * @return string
+ */
+ public function getHtmlForLabel( Entity $entity, $editable = true ) {
+ wfProfileIn( __METHOD__ );
+
+ $languageCode = $this->getLanguage()->getCode();
+ $label = $entity->getLabel( $languageCode );
+ $entityId = $entity->getId();
+ $idString = 'new';
+ $supplement = '';
+
+ if ( $entityId !== null ) {
+ $idString = $entityId->getSerialization();
+ $supplement .= wfTemplate(
'wb-property-value-supplement', wfMessage( 'parentheses', $idString ) );
+ if ( $editable ) {
+ $supplement .= $this->getHtmlForEditSection(
'SetLabel', array( $idString, $languageCode ) );
+ }
+ }
+
+ $html = wfTemplate( 'wb-label',
+ $idString,
+ wfTemplate( 'wb-property',
+ $label === false ? 'wb-value-empty' : '',
+ htmlspecialchars( $label === false ? wfMessage(
'wikibase-label-empty' )->text() : $label ),
+ $supplement
+ )
+ );
+
+ wfProfileOut( __METHOD__ );
+ return $html;
+ }
+
+ /**
+ * Builds and returns the HTML representing a WikibaseEntity's
description.
+ *
+ * @since 0.1
+ *
+ * @param Entity $entity the entity to render
+ * @param bool $editable whether editing is allowed (enabled edit links)
+ * @return string
+ */
+ public function getHtmlForDescription( Entity $entity, $editable = true
) {
+ wfProfileIn( __METHOD__ );
+
+ $languageCode = $this->getLanguage()->getCode();
+ $description = $entity->getDescription( $languageCode );
+ $entityId = $entity->getId();
+ $editSection = '';
+
+ if ( $entityId !== null && $editable ) {
+ $idString = $entityId->getSerialization();
+ $editSection .= $this->getHtmlForEditSection(
'SetDescription', array( $idString, $languageCode ) );
+ }
+
+ $html = wfTemplate( 'wb-description',
+ wfTemplate( 'wb-property',
+ $description === false ? 'wb-value-empty' : '',
+ htmlspecialchars( $description === false ?
wfMessage( 'wikibase-description-empty' )->text() : $description ),
+ $editSection
+ )
+ );
+
+ wfProfileOut( __METHOD__ );
+ return $html;
+ }
+
+ /**
+ * Builds and returns the HTML representing a WikibaseEntity's aliases.
+ *
+ * @since 0.1
+ *
+ * @param Entity $entity the entity to render
+ * @param bool $editable whether editing is allowed (enabled edit links)
+ * @return string
+ */
+ public function getHtmlForAliases( Entity $entity, $editable = true ) {
+ wfProfileIn( __METHOD__ );
+
+ $languageCode = $this->getLanguage()->getCode();
+ $aliases = $entity->getAliases( $languageCode );
+ $entityId = $entity->getId();
+ $editSection = '';
+
+ if ( $entityId !== null && $editable ) {
+ $idString = $entityId->getSerialization();
+ $action = empty( $aliases ) ? 'add' : 'edit';
+ $editSection = $this->getHtmlForEditSection(
'SetAliases', array( $idString, $languageCode ), $action );
+ }
+
+ if ( empty( $aliases ) ) {
+ $html = wfTemplate( 'wb-aliases-wrapper',
+ 'wb-aliases-empty',
+ 'wb-value-empty',
+ wfMessage( 'wikibase-aliases-empty' )->text(),
+ $editSection
+ );
+ } else {
+ $aliasesHtml = '';
+ foreach ( $aliases as $alias ) {
+ $aliasesHtml .= wfTemplate( 'wb-alias',
htmlspecialchars( $alias ) );
+ }
+ $aliasList = wfTemplate( 'wb-aliases', $aliasesHtml );
+
+ $html = wfTemplate( 'wb-aliases-wrapper',
+ '',
+ '',
+ wfMessage( 'wikibase-aliases-label' )->text(),
+ $aliasList . $editSection
+ );
+ }
+
+ wfProfileOut( __METHOD__ );
+ return $html;
+ }
+
+ /**
* Returns the HTML for the heading of the claims section
*
* @since 0.5
diff --git
a/extensions/Wikibase/repo/includes/LinkedData/EntityDataRequestHandler.php
b/extensions/Wikibase/repo/includes/LinkedData/EntityDataRequestHandler.php
index a3812d9..e443d5f 100644
--- a/extensions/Wikibase/repo/includes/LinkedData/EntityDataRequestHandler.php
+++ b/extensions/Wikibase/repo/includes/LinkedData/EntityDataRequestHandler.php
@@ -7,11 +7,11 @@
use SquidUpdate;
use WebRequest;
use WebResponse;
-use Wikibase\BadRevisionException;
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\EntityIdParsingException;
use Wikibase\EntityRevision;
+use Wikibase\Lib\Store\BadRevisionException;
use Wikibase\Lib\Store\EntityRedirectResolvingDecorator;
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\EntityTitleLookup;
diff --git a/extensions/Wikibase/repo/includes/PropertyView.php
b/extensions/Wikibase/repo/includes/PropertyView.php
index 8ceb012..1060bed 100644
--- a/extensions/Wikibase/repo/includes/PropertyView.php
+++ b/extensions/Wikibase/repo/includes/PropertyView.php
@@ -39,7 +39,12 @@
$html = '';
- $html .= $this->getHtmlForFingerprint( $property, $editable );
+ $html .= $this->getHtmlForLabel( $property, $editable );
+ $html .= $this->getHtmlForDescription( $property, $editable );
+
+ $html .= wfTemplate( 'wb-entity-header-separator' );
+
+ $html .= $this->getHtmlForAliases( $property, $editable );
$html .= $this->getHtmlForToc();
$html .= $this->getHtmlForTermBox( $entityRevision, $editable );
diff --git a/extensions/Wikibase/repo/includes/View/FingerprintView.php
b/extensions/Wikibase/repo/includes/View/FingerprintView.php
deleted file mode 100644
index 446e002..0000000
--- a/extensions/Wikibase/repo/includes/View/FingerprintView.php
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-
-namespace Wikibase\Repo\View;
-
-use Message;
-use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Term\Fingerprint;
-use Wikibase\DataModel\Term\AliasGroupList;
-use Wikibase\DataModel\Term\TermList;
-
-/**
- * Generates HTML to display the fingerprint of an entity
- * in the user's current language.
- *
- * @since 0.5
- * @licence GNU GPL v2+
- *
- * @author Bene* < [email protected] >
- */
-class FingerprintView {
-
- /**
- * @var SectionEditLinkGenerator
- */
- private $sectionEditLinkGenerator;
-
- /**
- * @var string
- */
- private $languageCode;
-
- /**
- * @param SectionEditLinkGenerator $sectionEditLinkGenerator
- * @param string $languageCode
- */
- public function __construct( SectionEditLinkGenerator
$sectionEditLinkGenerator, $languageCode ) {
- $this->sectionEditLinkGenerator = $sectionEditLinkGenerator;
- $this->languageCode = $languageCode;
- }
-
- /**
- * Builds and returns the HTML representing a fingerprint.
- *
- * @since 0.5
- *
- * @param Fingerprint $fingerprint the fingerprint to render
- * @param EntityId|null $entityId the id of the fingerprint's entity
- * @param bool $editable whether editing is allowed (enabled edit links)
- * @return string
- */
- public function getHtml( Fingerprint $fingerprint, EntityId $entityId =
null, $editable = true ) {
- $labels = $fingerprint->getLabels();
- $descriptions = $fingerprint->getDescriptions();
- $aliasGroups = $fingerprint->getAliasGroups();
-
- $html = '';
-
- if ( $entityId !== null ) {
- $serializedId = $entityId->getSerialization();
- $html .= wfTemplate( 'wb-property-value-supplement',
wfMessage( 'parentheses', $serializedId ) );
- }
-
- $html .= $this->getHtmlForLabel( $labels, $entityId, $editable
);
- $html .= $this->getHtmlForDescription( $descriptions,
$entityId, $editable );
- $html .= wfTemplate( 'wb-entity-header-separator' );
- $html .= $this->getHtmlForAliases( $aliasGroups, $entityId,
$editable );
-
- return $html;
- }
-
- /**
- * Builds and returns the HTML for the edit section.
- *
- * @param Message $message
- * @param string $specialPageName
- * @param EntityId|null $entityId
- * @param bool $editable
- * @return string
- */
- private function getHtmlForEditSection( Message $message,
$specialPageName, EntityId $entityId = null, $editable = true ) {
- if ( $entityId !== null && $editable ) {
- return
$this->sectionEditLinkGenerator->getHtmlForEditSection(
- $specialPageName,
- array( $entityId->getSerialization(),
$this->languageCode ),
- $message
- );
- } else {
- return '';
- }
- }
-
- /**
- * Builds and returns the HTML representing a label.
- *
- * @param TermList $labels the list of labels to render
- * @param EntityId|null $entityId the id of the fingerprint's entity
- * @param bool $editable whether editing is allowed (enabled edit links)
- * @return string
- */
- private function getHtmlForLabel( TermList $labels, EntityId $entityId
= null, $editable = true ) {
- $labelExists = $labels->hasTermForLanguage( $this->languageCode
);
- $editSection = $this->getHtmlForEditSection( wfMessage(
'wikibase-edit' ), 'SetLabel', $entityId, $editable );
- $idString = $entityId === null ? 'new' :
$entityId->getSerialization();
-
- if ( $labelExists ) {
- return $this->getLabelWrapperHTML(
- $idString,
- $labels->getByLanguage( $this->languageCode
)->getText(),
- $editSection
- );
- } else {
- return $this->getLabelWrapperHTML(
- $idString,
- wfMessage( 'wikibase-label-empty' )->text(),
- $editSection
- );
- }
- }
-
- private function getLabelWrapperHTML( $idString, $content, $editSection
) {
- return wfTemplate( 'wb-label',
- $idString,
- wfTemplate( 'wb-property',
- '',
- htmlspecialchars( $content ),
- $editSection
- )
- );
- }
-
- /**
- * Builds and returns the HTML representing a description.
- *
- * @param TermList $descriptions the list of descriptions to render
- * @param EntityId|null $entityId the id of the fingerprint's entity
- * @param bool $editable whether editing is allowed (enabled edit links)
- * @return string
- */
- private function getHtmlForDescription( TermList $descriptions,
EntityId $entityId = null, $editable = true ) {
- $descriptionExists = $descriptions->hasTermForLanguage(
$this->languageCode );
- $editSection = $this->getHtmlForEditSection( wfMessage(
'wikibase-edit' ), 'SetDescription', $entityId, $editable );
-
- if ( $descriptionExists ) {
- return $this->getDescriptionWrapperHTML(
- $descriptions->getByLanguage(
$this->languageCode )->getText(),
- $editSection
- );
- } else {
- return $this->getDescriptionWrapperHTML(
- wfMessage( 'wikibase-label-empty' )->text(),
- $editSection
- );
- }
- }
-
- private function getDescriptionWrapperHTML( $content, $editSection ) {
- return wfTemplate( 'wb-description',
- wfTemplate( 'wb-property',
- 'wb-value-empty',
- htmlspecialchars( $content ),
- $editSection
- )
- );
- }
-
- /**
- * Builds and returns the HTML representing aliases.
- *
- * @param AliasGroupList $aliasGroups the list of alias groups to render
- * @param EntityId|null $entityId the id of the fingerprint's entity
- * @param bool $editable whether editing is allowed (enabled edit links)
- * @return string
- */
- private function getHtmlForAliases( AliasGroupList $aliasGroups,
EntityId $entityId = null, $editable = true ) {
- $aliasesExist = $aliasGroups->hasGroupForLanguage(
$this->languageCode );
- $message = wfMessage( 'wikibase-' . $aliasesExist ? 'edit' :
'add' );
- $editSection = $this->getHtmlForEditSection( $message,
'SetAliases', $entityId, $editable );
-
- if ( $aliasesExist ) {
- $aliasList = $this->getAliasListHTML(
$aliasGroups->getByLanguage( $this->languageCode )->getAliases() );
-
- return wfTemplate( 'wb-aliases-wrapper',
- '',
- '',
- wfMessage( 'wikibase-aliases-label' )->text(),
- $aliasList . $editSection
- );
- } else {
- return wfTemplate( 'wb-aliases-wrapper',
- 'wb-aliases-empty',
- 'wb-value-empty',
- wfMessage( 'wikibase-aliases-empty' )->text(),
- $editSection
- );
- }
- }
-
- private function getAliasListHTML( array $aliases ) {
- $aliasesHtml = '';
- foreach ( $aliases as $alias ) {
- $aliasesHtml .= wfTemplate( 'wb-alias',
htmlspecialchars( $alias ) );
- }
- return wfTemplate( 'wb-aliases', $aliasesHtml );
- }
-
-}
diff --git a/extensions/Wikibase/repo/includes/View/TermBoxView.php
b/extensions/Wikibase/repo/includes/View/TermBoxView.php
index 1f30162..bd3f1d4 100644
--- a/extensions/Wikibase/repo/includes/View/TermBoxView.php
+++ b/extensions/Wikibase/repo/includes/View/TermBoxView.php
@@ -4,6 +4,7 @@
use Language;
use Message;
+use SpecialPage;
use Title;
use Wikibase\DataModel\Entity\Entity;
use Wikibase\Utils;
diff --git a/extensions/Wikibase/repo/includes/api/ApiErrorReporter.php
b/extensions/Wikibase/repo/includes/api/ApiErrorReporter.php
index 6d2e0a1..bbace38 100644
--- a/extensions/Wikibase/repo/includes/api/ApiErrorReporter.php
+++ b/extensions/Wikibase/repo/includes/api/ApiErrorReporter.php
@@ -134,7 +134,7 @@
$this->addStatusToResult( $status, $extradata );
//XXX: when to prefer $statusCode over $errorCode?
- list( $statusCode, $description ) =
$this->apiModule->getErrorFromStatus( $status );
+ list( , $description ) = $this->apiModule->getErrorFromStatus(
$status );
$this->throwUsageException( $description, $errorCode,
$httpRespCode, $extradata );
diff --git
a/extensions/Wikibase/repo/includes/store/sql/EntityPerPageBuilder.php
b/extensions/Wikibase/repo/includes/store/sql/EntityPerPageBuilder.php
index 48a5ac5..2c9183f 100644
--- a/extensions/Wikibase/repo/includes/store/sql/EntityPerPageBuilder.php
+++ b/extensions/Wikibase/repo/includes/store/sql/EntityPerPageBuilder.php
@@ -247,7 +247,7 @@
$lb = wfGetLB(); //TODO: allow foreign DB, get from $this->table
while ( true ) {
- list( $host, $maxLag ) = $lb->getMaxLag();
+ list( , $maxLag ) = $lb->getMaxLag();
if ( $maxLag < 2 ) {
break;
}
diff --git
a/extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php
b/extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php
index 62d1bc4..faab184 100644
--- a/extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php
+++ b/extensions/Wikibase/repo/includes/store/sql/ItemsPerSiteBuilder.php
@@ -119,7 +119,7 @@
$lb = wfGetLB(); //TODO: allow foreign DB, get from $this->table
while ( true ) {
- list( $host, $maxLag ) = $lb->getMaxLag();
+ list( , $maxLag ) = $lb->getMaxLag();
if ( $maxLag < 2 ) {
break;
}
diff --git
a/extensions/Wikibase/repo/includes/store/sql/PropertyInfoTableBuilder.php
b/extensions/Wikibase/repo/includes/store/sql/PropertyInfoTableBuilder.php
index 092e9c8..d5825e7 100644
--- a/extensions/Wikibase/repo/includes/store/sql/PropertyInfoTableBuilder.php
+++ b/extensions/Wikibase/repo/includes/store/sql/PropertyInfoTableBuilder.php
@@ -234,7 +234,7 @@
$lb = wfGetLB(); //TODO: allow foreign DB, get from
$this->propertyInfoTable
while ( true ) {
- list( $host, $maxLag ) = $lb->getMaxLag();
+ list( , $maxLag ) = $lb->getMaxLag();
if ( $maxLag < 2 ) {
break;
}
diff --git a/extensions/Wikibase/repo/includes/store/sql/SqlStore.php
b/extensions/Wikibase/repo/includes/store/sql/SqlStore.php
index 8536947..41d4b77 100644
--- a/extensions/Wikibase/repo/includes/store/sql/SqlStore.php
+++ b/extensions/Wikibase/repo/includes/store/sql/SqlStore.php
@@ -10,7 +10,6 @@
use ObjectCache;
use Revision;
use Wikibase\Lib\Reporting\ObservableMessageReporter;
-use Wikibase\DataModel\Entity\BasicEntityIdParser;
use Wikibase\Lib\Store\CachingEntityRevisionLookup;
use Wikibase\Lib\Store\EntityContentDataCodec;
use Wikibase\Lib\Store\EntityInfoBuilderFactory;
@@ -18,13 +17,12 @@
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Lib\Store\EntityStore;
use Wikibase\Lib\Store\EntityStoreWatcher;
-use Wikibase\Lib\Store\RevisionBasedEntityLookup;
use Wikibase\Lib\Store\RedirectResolvingEntityLookup;
+use Wikibase\Lib\Store\RevisionBasedEntityLookup;
use Wikibase\Lib\Store\SiteLinkCache;
use Wikibase\Lib\Store\SiteLinkTable;
use Wikibase\Lib\Store\Sql\SqlEntityInfoBuilderFactory;
use Wikibase\Lib\Store\WikiPageEntityRevisionLookup;
-use Wikibase\Lib\Test\Store\RedirectResolvingEntityLookupTest;
use Wikibase\Repo\Store\DispatchingEntityStoreWatcher;
use Wikibase\Repo\Store\WikiPageEntityStore;
use Wikibase\Repo\WikibaseRepo;
@@ -606,7 +604,7 @@
* @return EntityInfoBuilderFactory
*/
protected function newEntityInfoBuilderFactory() {
- return new SqlEntityInfoBuilderFactory(
$this->getEntityRevisionLookup() );
+ return new SqlEntityInfoBuilderFactory(
$this->useRedirectTargetColumn );
}
/**
diff --git
a/extensions/Wikibase/repo/includes/store/sql/TermSearchKeyBuilder.php
b/extensions/Wikibase/repo/includes/store/sql/TermSearchKeyBuilder.php
index 8b98168..7ba2899 100644
--- a/extensions/Wikibase/repo/includes/store/sql/TermSearchKeyBuilder.php
+++ b/extensions/Wikibase/repo/includes/store/sql/TermSearchKeyBuilder.php
@@ -198,7 +198,7 @@
$lb = wfGetLB(); //TODO: allow foreign DB, get from $this->table
while ( true ) {
- list( $host, $maxLag ) = $lb->getMaxLag();
+ list( , $maxLag ) = $lb->getMaxLag();
if ( $maxLag < 2 ) {
break;
}
diff --git a/extensions/Wikibase/repo/resources/wikibase.ui.entitysearch.js
b/extensions/Wikibase/repo/resources/wikibase.ui.entitysearch.js
index 63cbb55..0950ef6 100644
--- a/extensions/Wikibase/repo/resources/wikibase.ui.entitysearch.js
+++ b/extensions/Wikibase/repo/resources/wikibase.ui.entitysearch.js
@@ -44,7 +44,7 @@
&& /^key/.test(
event.originalEvent.type )
&& !( item instanceof
$.ui.ooMenu.CustomItem )
) {
- location.href =
item.getEntityStub().url;
+ window.location.href =
item.getEntityStub().url;
}
} );
diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/EntityViewTest.php
b/extensions/Wikibase/repo/tests/phpunit/includes/EntityViewTest.php
index f275039..a3ef4d2 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/EntityViewTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/EntityViewTest.php
@@ -506,6 +506,54 @@
return $argLists;
}
+ public function testGetHtmlForLabel_editable() {
+ $entity = $this->makeEntity( $this->makeEntityId( 1 ) );
+ $entityView = $this->newEntityView( $entity->getType() );
+ $html = $entityView->getHtmlForLabel( $entity );
+
+ $this->assertRegExp( '@<a
href="[^"]*\bSpecial:SetLabel/\w1/en"[^>]*>\S+</a>@', $html );
+ }
+
+ public function testGetHtmlForLabel_notEditable() {
+ $entity = $this->makeEntity( $this->makeEntityId( 1 ) );
+ $entityView = $this->newEntityView( $entity->getType() );
+ $html = $entityView->getHtmlForLabel( $entity, false );
+
+ $this->assertNotContains( '<a ', $html );
+ }
+
+ public function testGetHtmlForDescription_editable() {
+ $entity = $this->makeEntity( $this->makeEntityId( 1 ) );
+ $entityView = $this->newEntityView( $entity->getType() );
+ $html = $entityView->getHtmlForDescription( $entity );
+
+ $this->assertRegExp( '@<a
href="[^"]*\bSpecial:SetDescription/\w1/en"[^>]*>\S+</a>@', $html );
+ }
+
+ public function testGetHtmlForDescription_notEditable() {
+ $entity = $this->makeEntity( $this->makeEntityId( 1 ) );
+ $entityView = $this->newEntityView( $entity->getType() );
+ $html = $entityView->getHtmlForDescription( $entity, false );
+
+ $this->assertNotContains( '<a ', $html );
+ }
+
+ public function testGetHtmlForAliases_editable() {
+ $entity = $this->makeEntity( $this->makeEntityId( 1 ) );
+ $entityView = $this->newEntityView( $entity->getType() );
+ $html = $entityView->getHtmlForAliases( $entity );
+
+ $this->assertRegExp( '@<a
href="[^"]*\bSpecial:SetAliases/\w1/en"[^>]*>\S+</a>@', $html );
+ }
+
+ public function testGetHtmlForAliases_notEditable() {
+ $entity = $this->makeEntity( $this->makeEntityId( 1 ) );
+ $entityView = $this->newEntityView( $entity->getType() );
+ $html = $entityView->getHtmlForAliases( $entity, false );
+
+ $this->assertNotContains( '<a ', $html );
+ }
+
/**
* @return Entity
*/
diff --git
a/extensions/Wikibase/repo/tests/phpunit/includes/View/FingerprintViewTest.php
b/extensions/Wikibase/repo/tests/phpunit/includes/View/FingerprintViewTest.php
deleted file mode 100644
index 44d93e3..0000000
---
a/extensions/Wikibase/repo/tests/phpunit/includes/View/FingerprintViewTest.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-namespace Wikibase\Test;
-
-use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Entity\ItemId;
-use Wikibase\DataModel\Term\AliasGroup;
-use Wikibase\DataModel\Term\Fingerprint;
-use Wikibase\DataModel\Term\Term;
-use Wikibase\Repo\View\FingerprintView;
-use Wikibase\Repo\View\SectionEditLinkGenerator;
-
-/**
- * @covers Wikibase\Repo\View\FingerprintView
- *
- * @group Wikibase
- * @group WikibaseRepo
- *
- * @licence GNU GPL v2+
- * @author Bene* < [email protected] >
- */
-class FingerprintViewTest extends \MediaWikiLangTestCase {
-
- public function provideTestGetHtml() {
- $cases = array();
-
- $fingerprint = Fingerprint::newEmpty();
-
- $cases['empty fingerprint'] = array(
- $fingerprint,
- new ItemId( 'Q42' ),
- 'en'
- );
-
- $fingerprint->setLabel( new Term( 'en', 'Foobar' ) );
- $fingerprint->setDescription( new Term( 'en', 'This is a foo
bar.' ) );
- $fingerprint->setAliasGroup( new AliasGroup( 'en', array(
'foo', 'bar' ) ) );
-
- $cases['empty fingerprint'] = array(
- $fingerprint,
- new ItemId( 'Q42' ),
- 'en'
- );
-
- $cases['other language'] = array(
- $fingerprint,
- new ItemId( 'Q42' ),
- 'de'
- );
-
- $cases['other item id'] = array(
- $fingerprint,
- new ItemId( 'Q12' ),
- 'en'
- );
-
- return $cases;
- }
-
- /**
- * @dataProvider provideTestGetHtml
- */
- public function testGetHtmlEditable( Fingerprint $fingerprint, EntityId
$entityId, $languageCode ) {
- $fingerprintView = new FingerprintView( new
SectionEditLinkGenerator(), $languageCode );
- $html = $fingerprintView->getHtml( $fingerprint, $entityId,
true );
- $serializedId = $entityId->getSerialization();
-
- $this->assertRegExp( '@<a href="[^"]*\bSpecial:SetLabel/' .
$serializedId . '/' . $languageCode . '"[^>]*>\S+</a>@', $html );
- $this->assertRegExp( '@<a href="[^"]*\bSpecial:SetDescription/'
. $serializedId . '/' . $languageCode . '"[^>]*>\S+</a>@', $html );
- $this->assertRegExp( '@<a href="[^"]*\bSpecial:SetAliases/' .
$serializedId . '/' . $languageCode . '"[^>]*>\S+</a>@', $html );
- }
-
- /**
- * @dataProvider provideTestGetHtml
- */
- public function testGetHtmlNotEditable( Fingerprint $fingerprint,
EntityId $entityId, $languageCode ) {
- $fingerprintView = new FingerprintView( new
SectionEditLinkGenerator(), $languageCode );
- $html = $fingerprintView->getHtml( $fingerprint, $entityId,
false );
-
- $this->assertNotContains( '<a ', $html );
- }
-
- public function testGetHtmlNoEntityId() {
- $fingerprintView = new FingerprintView( new
SectionEditLinkGenerator(), 'en' );
- $html = $fingerprintView->getHtml( Fingerprint::newEmpty(),
null, true );
-
- $this->assertNotContains( '<a ', $html );
- }
-
-}
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 9767eae..7778f75 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer' . '/autoload_real.php';
-return ComposerAutoloaderInit8d6b272f203b91572bb965fe69ceaba7::getLoader();
+return ComposerAutoloaderInitdb496e0b19da3b74a5e15ebba13d5a5c::getLoader();
diff --git a/vendor/composer/autoload_classmap.php
b/vendor/composer/autoload_classmap.php
index 2c01d92..ae3ffcf 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -303,6 +303,7 @@
'Wikibase\\Client\\ClientSiteLinkLookup' => $baseDir .
'/extensions/Wikibase/client/includes/ClientSiteLinkLookup.php',
'Wikibase\\Client\\Hooks\\BaseTemplateAfterPortletHandler' => $baseDir .
'/extensions/Wikibase/client/includes/hooks/BaseTemplateAfterPortletHandler.php',
'Wikibase\\Client\\Hooks\\BeforePageDisplayHandler' => $baseDir .
'/extensions/Wikibase/client/includes/hooks/BeforePageDisplayHandler.php',
+ 'Wikibase\\Client\\Hooks\\ChangesPageWikibaseFilterHandler' => $baseDir .
'/extensions/Wikibase/client/includes/hooks/ChangesPageWikibaseFilterHandler.php',
'Wikibase\\Client\\Hooks\\InfoActionHookHandler' => $baseDir .
'/extensions/Wikibase/client/includes/hooks/InfoActionHookHandler.php',
'Wikibase\\Client\\Hooks\\LanguageLinkBadgeDisplay' => $baseDir .
'/extensions/Wikibase/client/includes/hooks/LanguageLinkBadgeDisplay.php',
'Wikibase\\Client\\Hooks\\OtherProjectsSidebarGenerator' => $baseDir .
'/extensions/Wikibase/client/includes/hooks/OtherProjectsSidebarGenerator.php',
@@ -700,7 +701,6 @@
'Wikibase\\Repo\\Store\\WikiPageEntityStore' => $baseDir .
'/extensions/Wikibase/repo/includes/store/sql/WikiPageEntityStore.php',
'Wikibase\\Repo\\Tests\\DefaultRepoSettingsTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/DefaultRepoSettingsTest.php',
'Wikibase\\Repo\\ValueParserFactory' => $baseDir .
'/extensions/Wikibase/repo/includes/ValueParserFactory.php',
- 'Wikibase\\Repo\\View\\FingerprintView' => $baseDir .
'/extensions/Wikibase/repo/includes/View/FingerprintView.php',
'Wikibase\\Repo\\View\\SectionEditLinkGenerator' => $baseDir .
'/extensions/Wikibase/repo/includes/View/SectionEditLinkGenerator.php',
'Wikibase\\Repo\\View\\SiteLinksView' => $baseDir .
'/extensions/Wikibase/repo/includes/View/SiteLinksView.php',
'Wikibase\\Repo\\View\\SnakHtmlGenerator' => $baseDir .
'/extensions/Wikibase/repo/includes/View/SnakHtmlGenerator.php',
@@ -848,7 +848,6 @@
'Wikibase\\Test\\EntityViewPlaceholderExpanderTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/EntityViewPlaceholderExpanderTest.php',
'Wikibase\\Test\\EntityViewTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/EntityViewTest.php',
'Wikibase\\Test\\FingerprintChangeOpFactoryTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/FingerprintChangeOpFactoryTest.php',
- 'Wikibase\\Test\\FingerprintViewTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/View/FingerprintViewTest.php',
'Wikibase\\Test\\GenericExceptionLocalizerTest' => $baseDir .
'/extensions/Wikibase/lib/tests/phpunit/Localizer/GenericExceptionLocalizerTest.php',
'Wikibase\\Test\\HttpAcceptNegotiatorTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/LinkedData/HttpAcceptNegotiatorTest.php',
'Wikibase\\Test\\HttpAcceptParserTest' => $baseDir .
'/extensions/Wikibase/repo/tests/phpunit/includes/LinkedData/HttpAcceptParserTest.php',
diff --git a/vendor/composer/autoload_real.php
b/vendor/composer/autoload_real.php
index 6665fd8..550624e 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInit8d6b272f203b91572bb965fe69ceaba7
+class ComposerAutoloaderInitdb496e0b19da3b74a5e15ebba13d5a5c
{
private static $loader;
@@ -19,9 +19,9 @@
return self::$loader;
}
-
spl_autoload_register(array('ComposerAutoloaderInit8d6b272f203b91572bb965fe69ceaba7',
'loadClassLoader'), true, true);
+
spl_autoload_register(array('ComposerAutoloaderInitdb496e0b19da3b74a5e15ebba13d5a5c',
'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-
spl_autoload_unregister(array('ComposerAutoloaderInit8d6b272f203b91572bb965fe69ceaba7',
'loadClassLoader'));
+
spl_autoload_unregister(array('ComposerAutoloaderInitdb496e0b19da3b74a5e15ebba13d5a5c',
'loadClassLoader'));
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@
$includeFiles = require __DIR__ . '/autoload_files.php';
foreach ($includeFiles as $file) {
- composerRequire8d6b272f203b91572bb965fe69ceaba7($file);
+ composerRequiredb496e0b19da3b74a5e15ebba13d5a5c($file);
}
return $loader;
}
}
-function composerRequire8d6b272f203b91572bb965fe69ceaba7($file)
+function composerRequiredb496e0b19da3b74a5e15ebba13d5a5c($file)
{
require $file;
}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 168fd29..931c341 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -91,55 +91,6 @@
]
},
{
- "name": "propertysuggester/property-suggester",
- "version": "v1.0",
- "version_normalized": "1.0.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Wikidata-lib/PropertySuggester.git",
- "reference": "2fb712f58c368a1151b3e8aeb09876ffa1f66913"
- },
- "dist": {
- "type": "zip",
- "url":
"https://api.github.com/repos/Wikidata-lib/PropertySuggester/zipball/2fb712f58c368a1151b3e8aeb09876ffa1f66913",
- "reference": "2fb712f58c368a1151b3e8aeb09876ffa1f66913",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "3.7.*",
- "satooshi/php-coveralls": "dev-master"
- },
- "time": "2014-06-23 17:01:20",
- "type": "mediawiki-extension",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "PropertySuggester\\": "src/PropertySuggester/"
- },
- "files": [
-
- ],
- "classmap": [
- "PropertySuggesterHooks.php",
- "maintenance/UpdateTable.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "GPL-2.0+"
- ],
- "description": "Extension for Wikibase to provide usefull suggestions
for new properties",
- "homepage": "https://github.com/Wikidata-lib/PropertySuggester",
- "keywords": [
- "propertysuggester",
- "wikibase",
- "wikidata"
- ]
- },
- {
"name": "serialization/serialization",
"version": "3.2",
"version_normalized": "3.2.0.0",
@@ -1178,12 +1129,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "c2f07302fa28695afda71b1981987c6573b02afc"
+ "reference": "3fcea524b859ba391fec2e5856c7614d6f41fb92"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/c2f07302fa28695afda71b1981987c6573b02afc",
- "reference": "c2f07302fa28695afda71b1981987c6573b02afc",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3fcea524b859ba391fec2e5856c7614d6f41fb92",
+ "reference": "3fcea524b859ba391fec2e5856c7614d6f41fb92",
"shasum": ""
},
"require": {
@@ -1210,7 +1161,7 @@
"conflict": {
"mediawiki/mediawiki": "<1.23"
},
- "time": "2014-08-15 01:15:18",
+ "time": "2014-08-16 16:25:52",
"type": "mediawiki-extension",
"installation-source": "dist",
"autoload": {
@@ -1254,5 +1205,54 @@
"wikibaserepo",
"wikidata"
]
+ },
+ {
+ "name": "propertysuggester/property-suggester",
+ "version": "v1.1",
+ "version_normalized": "1.1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Wikidata-lib/PropertySuggester.git",
+ "reference": "fe77e3d6db4582d2b4cefbe51a1f74e8838f79d1"
+ },
+ "dist": {
+ "type": "zip",
+ "url":
"https://api.github.com/repos/Wikidata-lib/PropertySuggester/zipball/fe77e3d6db4582d2b4cefbe51a1f74e8838f79d1",
+ "reference": "fe77e3d6db4582d2b4cefbe51a1f74e8838f79d1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.*",
+ "satooshi/php-coveralls": "dev-master"
+ },
+ "time": "2014-07-25 01:45:14",
+ "type": "mediawiki-extension",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "PropertySuggester\\": "src/PropertySuggester/"
+ },
+ "files": [
+
+ ],
+ "classmap": [
+ "PropertySuggesterHooks.php",
+ "maintenance/UpdateTable.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0+"
+ ],
+ "description": "Extension for Wikibase to provide usefull suggestions
for new properties",
+ "homepage": "https://github.com/Wikidata-lib/PropertySuggester",
+ "keywords": [
+ "propertysuggester",
+ "wikibase",
+ "wikidata"
+ ]
}
]
--
To view, visit https://gerrit.wikimedia.org/r/154454
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I85500a671822b8c27fa5c95deb04cdfb9fb832e0
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