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