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

Reply via email to