jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/343093 )
Change subject: Use repo-specific base concept URI to build concepturi in wbsearchentities results ...................................................................... Use repo-specific base concept URI to build concepturi in wbsearchentities results Bug: T154590 Change-Id: I964be139970f6accb8dd002cbc56e054b2750e3c --- M repo/Wikibase.php M repo/includes/Api/SearchEntities.php M repo/includes/WikibaseRepo.php M repo/tests/phpunit/includes/Api/SearchEntitiesTest.php M repo/tests/phpunit/includes/WikibaseRepoTest.php 5 files changed, 62 insertions(+), 13 deletions(-) Approvals: Daniel Kinzler: Looks good to me, approved jenkins-bot: Verified diff --git a/repo/Wikibase.php b/repo/Wikibase.php index 5236193..75473dc 100644 --- a/repo/Wikibase.php +++ b/repo/Wikibase.php @@ -228,7 +228,7 @@ $repo->getPropertyDataTypeLookup(), $repo->getTermsLanguages(), $repo->getEnabledEntityTypes(), - $repo->getSettings()->getSetting( 'conceptBaseUri' ) + $repo->getConceptBaseUris() ); }, ]; diff --git a/repo/includes/Api/SearchEntities.php b/repo/includes/Api/SearchEntities.php index cf07fe4..eb2d20d 100644 --- a/repo/includes/Api/SearchEntities.php +++ b/repo/includes/Api/SearchEntities.php @@ -4,6 +4,8 @@ use ApiBase; use ApiMain; +use LogicException; +use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup; use Wikibase\Lib\ContentLanguages; @@ -43,9 +45,9 @@ private $entityTypes; /** - * @var string + * @var string[] */ - private $conceptBaseUri; + private $conceptBaseUris; /** * @param ApiMain $mainModule @@ -55,7 +57,7 @@ * @param PropertyDataTypeLookup $propertyDataTypeLookup * @param ContentLanguages $termLanguages * @param string[] $entityTypes - * @param string $conceptBaseUri + * @param string[] $conceptBaseUris Associative array mapping repository names to base URIs of concept URIs * * @see ApiBase::__construct */ @@ -67,7 +69,7 @@ PropertyDataTypeLookup $propertyDataTypeLookup, ContentLanguages $termLanguages, array $entityTypes, - $conceptBaseUri + array $conceptBaseUris ) { parent::__construct( $mainModule, $moduleName, '' ); @@ -76,7 +78,7 @@ $this->propertyDataTypeLookup = $propertyDataTypeLookup; $this->termsLanguages = $termLanguages; $this->entityTypes = $entityTypes; - $this->conceptBaseUri = $conceptBaseUri; + $this->conceptBaseUris = $conceptBaseUris; } /** @@ -120,7 +122,7 @@ $entry = array( 'repository' => $entityId->getRepositoryName(), 'id' => $entityId->getSerialization(), - 'concepturi' => $this->conceptBaseUri . $entityId->getSerialization(), + 'concepturi' => $this->getConceptUri( $entityId ), 'url' => $title->getFullURL(), 'title' => $title->getPrefixedText(), 'pageid' => $title->getArticleID() @@ -169,6 +171,31 @@ } /** + * @param EntityId $entityId + * + * @return string + */ + private function getConceptUri( EntityId $entityId ) { + $baseUri = $this->getConceptBaseUri( $entityId ); + return $baseUri . $entityId->getLocalPart(); + } + + /** + * @param EntityId $entityId + * + * @throws LogicException when there is no base URI for the repository $entityId belongs to + * + * @return string + */ + private function getConceptBaseUri( EntityId $entityId ) { + if ( !isset( $this->conceptBaseUris[$entityId->getRepositoryName()] ) ) { + throw new LogicException( 'No base URI for for concept URI for repository: ' . $entityId->getRepositoryName() ); + } + + return $this->conceptBaseUris[$entityId->getRepositoryName()]; + } + + /** * @see ApiBase::execute() */ public function execute() { diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php index 3b2e065..50708f1 100644 --- a/repo/includes/WikibaseRepo.php +++ b/repo/includes/WikibaseRepo.php @@ -1916,4 +1916,11 @@ return $this->repositoryDefinitions->getEntityTypeToRepositoryMapping(); } + /** + * @return string[] Associative array mapping repository names to base URIs of concept URIs. + */ + public function getConceptBaseUris() { + return $this->repositoryDefinitions->getConceptBaseUris(); + } + } diff --git a/repo/tests/phpunit/includes/Api/SearchEntitiesTest.php b/repo/tests/phpunit/includes/Api/SearchEntitiesTest.php index 4d66ef9..5265299 100644 --- a/repo/tests/phpunit/includes/Api/SearchEntitiesTest.php +++ b/repo/tests/phpunit/includes/Api/SearchEntitiesTest.php @@ -146,7 +146,7 @@ $this->getMockPropertyDataTypeLookup(), $this->getContentLanguages(), [ 'item', 'property' ], - 'concept:' + [ '' => 'http://acme.test/concept/', 'foreign' => 'http://foreign.wiki/concept/' ] ); $module->execute(); @@ -212,7 +212,7 @@ $q111Result = array( 'repository' => '', 'id' => 'Q111', - 'concepturi' => 'concept:Q111', + 'concepturi' => 'http://acme.test/concept/Q111', 'url' => 'http://fullTitleUrl', 'title' => 'Prefixed:Title', 'pageid' => 42, @@ -228,7 +228,7 @@ $q222Result = array( 'repository' => '', 'id' => 'Q222', - 'concepturi' => 'concept:Q222', + 'concepturi' => 'http://acme.test/concept/Q222', 'url' => 'http://fullTitleUrl', 'title' => 'Prefixed:Title', 'pageid' => 42, @@ -245,7 +245,7 @@ $q333Result = array( 'repository' => '', 'id' => 'Q333', - 'concepturi' => 'concept:Q333', + 'concepturi' => 'http://acme.test/concept/Q333', 'url' => 'http://fullTitleUrl', 'title' => 'Prefixed:Title', 'pageid' => 42, @@ -261,7 +261,7 @@ $foreignItemResult = [ 'repository' => 'foreign', 'id' => 'foreign:Q333', - 'concepturi' => 'concept:foreign:Q333', + 'concepturi' => 'http://foreign.wiki/concept/Q333', 'url' => 'http://fullTitleUrl', 'title' => 'Prefixed:Title', 'pageid' => 42, @@ -276,7 +276,7 @@ $propertyResult = [ 'repository' => '', 'id' => 'P123', - 'concepturi' => 'concept:P123', + 'concepturi' => 'http://acme.test/concept/P123', 'url' => 'http://fullTitleUrl', 'title' => 'Prefixed:Title', 'pageid' => 42, diff --git a/repo/tests/phpunit/includes/WikibaseRepoTest.php b/repo/tests/phpunit/includes/WikibaseRepoTest.php index a750227..a498ac3 100644 --- a/repo/tests/phpunit/includes/WikibaseRepoTest.php +++ b/repo/tests/phpunit/includes/WikibaseRepoTest.php @@ -726,4 +726,19 @@ ); } + public function testGetConceptBaseUris() { + $wikibaseRepo = $this->getWikibaseRepoWithCustomRepositoryDefinitions( array_merge( + $this->getRepositoryDefinition( '', [ 'base-uri' => 'http://acme.test/concept/' ] ), + $this->getRepositoryDefinition( 'other', [ 'base-uri' => 'http://other.wiki/concept/', 'entity-types' => [ 'foo' ] ] ) + ) ); + + $this->assertEquals( + [ + '' => 'http://acme.test/concept/', + 'other' => 'http://other.wiki/concept/', + ], + $wikibaseRepo->getConceptBaseUris() + ); + } + } -- To view, visit https://gerrit.wikimedia.org/r/343093 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I964be139970f6accb8dd002cbc56e054b2750e3c Gerrit-PatchSet: 3 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: WMDE-leszek <leszek.mani...@wikimedia.de> Gerrit-Reviewer: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Aleksey Bekh-Ivanov (WMDE) <aleksey.bekh-iva...@wikimedia.de> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: WMDE-leszek <leszek.mani...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits