DCausse has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/383815 )

Change subject: Add a way to override interwiki prefixes
......................................................................

Add a way to override interwiki prefixes

Duplicates some specific overrides done in WikimediaMaintenance::DumpInterwiki
to map 's' to 'src' on svwiki.
Sadly I found no easy to unify these configurations.

Bug: T177913
Change-Id: I85e3190ae04b6e1db6075ef72e993f4266c02956
---
M CirrusSearch.php
M docs/settings.txt
M includes/SiteMatrixInterwikiResolver.php
M tests/unit/InterwikiResolverTest.php
4 files changed, 74 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CirrusSearch 
refs/changes/15/383815/1

diff --git a/CirrusSearch.php b/CirrusSearch.php
index 66b0f62..6541958 100644
--- a/CirrusSearch.php
+++ b/CirrusSearch.php
@@ -1034,6 +1034,25 @@
 $wgCirrusSearchCrossProjectSearchBlackList = [];
 
 /**
+ * List of interwiki prefixes to override.
+ * This is only useful when used with SiteMatrix.
+ * In some cases a specific may want to override
+ * the convention used in SiteMatrix.
+ * e.g. on WMF infrastructure this is used to override
+ * the interwiki prefix 's' to 'src' on the swedish wikipedia.
+ *
+ * NOTE: overrides are applied before reading
+ * $wgCirrusSearchCrossProjectSearchBlackList and
+ * $wgCirrusSearchCrossProjectProfiles
+ *
+ * Example :
+ * $wgCirrusSearchInterwikiPrefixOverrides = [
+ *     's' => 'src',
+ * ];
+ */
+$wgCirrusSearchInterwikiPrefixOverrides = [];
+
+/**
  * Override various profiles to use for interwiki searching.
  * Example:
  * $wgCirrusSearchCrossProjectProfiles = [
diff --git a/docs/settings.txt b/docs/settings.txt
index 465a6ea..ad6494f 100644
--- a/docs/settings.txt
+++ b/docs/settings.txt
@@ -1210,6 +1210,27 @@
 In WMF context this would remove wikinews and wikiversity from the list of
 crossproject displayed in the sidebar
 
+; $wgCirrusSearchInterwikiPrefixOverrides
+
+Default:
+    $wgCirrusSearchInterwikiPrefixOverrides = [];
+
+List of interwiki prefixes to override. This is only useful when used with
+SiteMatrix. In some cases a specific wiki may want to override the convention 
used
+by SiteMatrix. E.g. on WMF infrastructure this is used to override the
+interwiki prefix 's' to 'src' on swedish wikipedia.
+
+NOTE: overrides are applied before reading 
$wgCirrusSearchCrossProjectSearchBlackList
+and $wgCirrusSearchCrossProjectProfiles.
+
+Example:
+    $wgCirrusSearchInterwikiPrefixOverrides = [
+        's' => 'src',
+    ]
+
+
+; $wgCirrusSearchCrossProjectProfiles
+
 Default:
     $wgCirrusSearchCrossProjectProfiles = [];
 
diff --git a/includes/SiteMatrixInterwikiResolver.php 
b/includes/SiteMatrixInterwikiResolver.php
index bb6ca37..185dce3 100644
--- a/includes/SiteMatrixInterwikiResolver.php
+++ b/includes/SiteMatrixInterwikiResolver.php
@@ -76,6 +76,7 @@
                        $wikiDBname = $this->config->get( 'DBname' );
                        list( , $myLang ) = $wgConf->siteFromDB( $wikiDBname );
                        $siteConf = $this->config->get( 'SiteMatrixSites' );
+                       $prefixOverrides = $this->config->get( 
'wgCirrusSearchInterwikiPrefixOverrides' );
                        $sisterProjects = [];
                        $crossLanguage = [];
                        $prefixesByWiki = [];
@@ -89,7 +90,7 @@
                        foreach ( $matrix->getSites() as $site ) {
                                if ( $matrix->getDBName( $myLang, $site ) === 
$wikiDBname ) {
                                        $myProject = $site;
-                                       continue;
+                                       break;
                                }
                        }
 
@@ -114,6 +115,10 @@
                                $dbName = $matrix->getDBName( $myLang, $site );
                                $prefix = $siteConf[$site]['prefix'];
 
+                               if ( isset( $prefixOverrides[$prefix] ) ) {
+                                       $prefix = $prefixOverrides[$prefix];
+                               }
+
                                if ( !in_array( $prefix, $this->config->get( 
'CirrusSearchCrossProjectSearchBlackList' ) ) ) {
                                        $sisterProjects[$prefix] = $dbName;
                                }
diff --git a/tests/unit/InterwikiResolverTest.php 
b/tests/unit/InterwikiResolverTest.php
index df728b0..5ab09f0 100644
--- a/tests/unit/InterwikiResolverTest.php
+++ b/tests/unit/InterwikiResolverTest.php
@@ -59,13 +59,16 @@
         * @param string $what method to test
         * @param mixed $arg arg to $what
         * @param mixed $expected expected result of $what($arg)
+        * @param string[]|null $blacklist
+        * @param string[]|null $overrides
         */
-       public function testSiteMatrixResolver( $wiki, $what, $arg, $expected, 
$blacklist = [] ) {
+       public function testSiteMatrixResolver( $wiki, $what, $arg, $expected,
+                       $blacklist = [], $overrides = [] ) {
                if ( !class_exists( \SiteMatrix::class ) ) {
                        $this->markTestSkipped( 'SiteMatrix not available.' );
                }
 
-               $resolver = $this->getSiteMatrixInterwikiResolver( $wiki, 
$blacklist );
+               $resolver = $this->getSiteMatrixInterwikiResolver( $wiki, 
$blacklist, $overrides );
                switch ( $what ) {
                case 'sisters':
                        asort( $expected );
@@ -109,15 +112,31 @@
                                        'voy' => 'enwikivoyage'
                                ]
                        ],
-                       'enwiki sisters with blacklist' => [
+                       'enwiki sisters with overrides' => [
                                'enwiki',
                                'sisters', null,
                                [
                                        'wikt' => 'enwiktionary',
-                                       's' => 'enwikisource',
+                                       'b' => 'enwikibooks',
+                                       'n' => 'enwikinews',
+                                       'q' => 'enwikiquote',
+                                       'src' => 'enwikisource',
+                                       'v' => 'enwikiversity',
                                        'voy' => 'enwikivoyage'
                                ],
-                               [ 'n', 'b', 'q', 'v' ]
+                               [],
+                               [ 's' => 'src' ]
+                       ],
+                       'enwiki sisters with blacklist and overrides' => [
+                               'enwiki',
+                               'sisters', null,
+                               [
+                                       'wikt' => 'enwiktionary',
+                                       'src' => 'enwikisource',
+                                       'voy' => 'enwikivoyage'
+                               ],
+                               [ 'n', 'books', 'q', 'v' ],
+                               [ 's' => 'src', 'b' => 'books' ]
 
                        ],
                        'enwikibook sisters' => [
@@ -226,7 +245,7 @@
                $client->expects( $this->any() )
                        ->method( 'runMulti' )
                        ->will( $this->returnValue( json_decode( $apiResponse, 
true ) ) );
-               $resolver = $this->getSiteMatrixInterwikiResolver( 'enwiki', [ 
'b' ], $client );
+               $resolver = $this->getSiteMatrixInterwikiResolver( 'enwiki', [ 
'b' ], [], $client );
                $configs = $resolver->getSisterProjectConfigs();
                $this->assertEquals( array_keys( $configs ), array_keys( 
$resolver->getSisterProjectPrefixes() ) );
                $this->assertEquals( $configs['q']->getWikiId(), 'enwikiquote' 
);
@@ -266,7 +285,8 @@
                return $resolver;
        }
 
-       private function getSiteMatrixInterwikiResolver( $wikiId, array 
$blacklist, \MultiHttpClient $client = null ) {
+       private function getSiteMatrixInterwikiResolver( $wikiId, array 
$blacklist,
+               array $overrides, \MultiHttpClient $client = null ) {
                $conf = new \SiteConfiguration;
                $conf->settings = include __DIR__ . 
'/resources/wmf/SiteMatrix_SiteConf_IS.php';
                $conf->suffixes = include __DIR__ . 
'/resources/wmf/suffixes.php';
@@ -301,6 +321,7 @@
                        'wgCirrusSearchLanguageToWikiMap' => [],
                        'wgCirrusSearchWikiToNameMap' => [],
                        'wgCirrusSearchCrossProjectSearchBlackList' => 
$blacklist,
+                       'wgCirrusSearchInterwikiPrefixOverrides' => $overrides,
                ];
                $this->setMwGlobals( $myGlobals );
                $myGlobals['_wikiID'] = $wikiId;

-- 
To view, visit https://gerrit.wikimedia.org/r/383815
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I85e3190ae04b6e1db6075ef72e993f4266c02956
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CirrusSearch
Gerrit-Branch: master
Gerrit-Owner: DCausse <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to