WikidataBuilder has uploaded a new change for review. https://gerrit.wikimedia.org/r/154393
Change subject: New Wikidata Build - 16/08/2014 10:00 ...................................................................... New Wikidata Build - 16/08/2014 10:00 Change-Id: Ic91e1c83baffb7f261ad77b131f57d6c511b6f8d --- 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/tests/phpunit/parsers/MonolingualTextParserTest.php M extensions/Wikibase/lib/tests/phpunit/parsers/MonthNameUnlocalizerTest.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/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 52 files changed, 891 insertions(+), 584 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata refs/changes/93/154393/1 diff --git a/composer.lock b/composer.lock index 02ec9fb..d7a41e1 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": "3ed131f4e4f24800f51fd635eacc67bbcb8b2e23" }, "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/3ed131f4e4f24800f51fd635eacc67bbcb8b2e23", + "reference": "3ed131f4e4f24800f51fd635eacc67bbcb8b2e23", "shasum": "" }, "require": { @@ -1216,7 +1216,7 @@ "wikibaserepo", "wikidata" ], - "time": "2014-08-15 01:15:18" + "time": "2014-08-15 23:04:34" } ], "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 < aude.w...@gmail.com > + */ +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 < jeroended...@gmail.com > - * - * @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/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/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* < benestar.wikime...@gmail.com > */ 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* < benestar.wikime...@gmail.com > - */ -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/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* < benestar.wikime...@gmail.com > - */ -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..e536588 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer' . '/autoload_real.php'; -return ComposerAutoloaderInit8d6b272f203b91572bb965fe69ceaba7::getLoader(); +return ComposerAutoloaderInit12174d1429cc42b68eef815f96b7eaa7::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..e7d51ff 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 ComposerAutoloaderInit12174d1429cc42b68eef815f96b7eaa7 { private static $loader; @@ -19,9 +19,9 @@ return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit8d6b272f203b91572bb965fe69ceaba7', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit12174d1429cc42b68eef815f96b7eaa7', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit8d6b272f203b91572bb965fe69ceaba7', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit12174d1429cc42b68eef815f96b7eaa7', '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); + composerRequire12174d1429cc42b68eef815f96b7eaa7($file); } return $loader; } } -function composerRequire8d6b272f203b91572bb965fe69ceaba7($file) +function composerRequire12174d1429cc42b68eef815f96b7eaa7($file) { require $file; } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 168fd29..240da6b 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": "3ed131f4e4f24800f51fd635eacc67bbcb8b2e23" }, "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/3ed131f4e4f24800f51fd635eacc67bbcb8b2e23", + "reference": "3ed131f4e4f24800f51fd635eacc67bbcb8b2e23", "shasum": "" }, "require": { @@ -1210,7 +1161,7 @@ "conflict": { "mediawiki/mediawiki": "<1.23" }, - "time": "2014-08-15 01:15:18", + "time": "2014-08-15 23:04:34", "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/154393 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic91e1c83baffb7f261ad77b131f57d6c511b6f8d Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikidata Gerrit-Branch: master Gerrit-Owner: WikidataBuilder <wikidata-servi...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits