Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 2
CRAP
80.95% covered (warning)
80.95%
17 / 21
CirrusConfigInterwikiResolver
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 2
7.34
80.95% covered (warning)
80.95%
17 / 21
 accepts
0.00% covered (danger)
0.00%
0 / 1
3.07
80.00% covered (warning)
80.00%
4 / 5
 loadMatrix
0.00% covered (danger)
0.00%
0 / 1
4.11
81.25% covered (warning)
81.25%
13 / 16
<?php
namespace CirrusSearch;
/**
 * InterwikiResolver suited for custom cirrus config:
 * - wgCirrusSearchLanguageToWikiMap: a map of language code to wiki db prefixes
 * - wgCirrusSearchInterwikiSources: a map of cross project interwiki prefixes to wikiId
 * - wgCirrusSearchWikiToNameMap: a map of language interwiki prefixes to wikiId
 */
class CirrusConfigInterwikiResolver extends BaseInterwikiResolver {
    /**
     * @param SearchConfig $config
     * @return bool true if this resolver can run with the specified config
     */
    public static function accepts( SearchConfig $config ) {
        if ( !empty( $config->get( 'CirrusSearchInterwikiSources' ) ) ) {
            return true;
        }
        if ( !empty( $config->get( 'CirrusSearchWikiToNameMap' ) ) ) {
            return true;
        }
        return false;
    }
    protected function loadMatrix() {
        $sisterProjects = $this->config->get( 'CirrusSearchInterwikiSources' );
        if ( $sisterProjects === null ) {
            $sisterProjects = [];
        }
        $languageMap = $this->config->get( 'CirrusSearchLanguageToWikiMap' );
        if ( $languageMap === null ) {
            $languageMap = [];
        }
        $crossLanguage = $this->config->get( 'CirrusSearchWikiToNameMap' );
        if ( $crossLanguage === null ) {
            $crossLanguage = [];
        }
        $crossLanguage = array_filter( $crossLanguage, function ( $entry ) {
            return $entry !== $this->config->getWikiId();
        } );
        $prefixesByWiki = array_flip( $sisterProjects ) + array_flip( $crossLanguage );
        return [
            'sister_projects' => $sisterProjects,
            'language_map' => $languageMap,
            'cross_language' => $crossLanguage,
            'prefixes_by_wiki' => $prefixesByWiki,
        ];
    }
}