Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
n/a
0 / 0
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2/**
3 * Services for CirrusSearch extensions
4 */
5
6use CirrusSearch\CachedSparqlClient;
7use CirrusSearch\CirrusConfigNames;
8use CirrusSearch\CirrusSearch;
9use CirrusSearch\CirrusSearchHookRunner;
10use CirrusSearch\Connection;
11use CirrusSearch\EventBusWeightedTagSerializer;
12use CirrusSearch\EventBusWeightedTagsUpdater;
13use CirrusSearch\InterwikiResolver;
14use CirrusSearch\InterwikiResolverFactory;
15use CirrusSearch\NamespaceMatcher;
16use CirrusSearch\Profile\SearchProfileServiceFactory;
17use CirrusSearch\Query\DeepcatFeature;
18use CirrusSearch\SearchConfig;
19use CirrusSearch\SecondTry\SecondTrySearchFactory;
20use CirrusSearch\Updater;
21use CirrusSearch\WeightedTagsUpdater;
22use MediaWiki\MediaWikiServices;
23use MediaWiki\Registration\ExtensionRegistry;
24use MediaWiki\Sparql\SparqlClient;
25
26// PHP unit does not understand code coverage for this file
27// as the @covers annotation cannot cover a specific file.
28// This is fully tested in ServiceWiringTest.php
29// @codeCoverageIgnoreStart
30
31return [
32    CirrusSearch::SERVICE => static function ( MediaWikiServices $services ): CirrusSearch {
33        return new CirrusSearch();
34    },
35
36    // SPARQL client for deep category search
37    CachedSparqlClient::SERVICE => static function ( MediaWikiServices $services ): CachedSparqlClient {
38        $config = $services->getMainConfig();
39        $endpoint = $config->get( CirrusConfigNames::CategoryEndpoint );
40        $client = new SparqlClient( $endpoint, $services->getHttpRequestFactory() );
41        $client->setTimeout( DeepcatFeature::TIMEOUT );
42        $client->setClientOptions( [
43            'userAgent' => DeepcatFeature::USER_AGENT,
44        ] );
45        return new CachedSparqlClient(
46            $client,
47            $services->getMainWANObjectCache(),
48            $config->get( CirrusConfigNames::CategoriesClientCacheTTL ),
49            $endpoint
50        );
51    },
52    InterwikiResolver::SERVICE => static function ( MediaWikiServices $services ): InterwikiResolver {
53        $config = $services->getConfigFactory()
54            ->makeConfig( CirrusSearch::NAME );
55        $client = $services->getHttpRequestFactory()->createMultiClient( [
56            'connTimeout' => $config->get( CirrusConfigNames::InterwikiHTTPConnectTimeout ),
57            'reqTimeout' => $config->get( CirrusConfigNames::InterwikiHTTPTimeout )
58        ] );
59        return InterwikiResolverFactory::build(
60        /** @phan-suppress-next-line PhanTypeMismatchArgumentSuperType $config is actually a SearchConfig */
61            $config,
62            $services->getMainWANObjectCache(),
63            $services->getInterwikiLookup(),
64            $services->getExtensionRegistry(),
65            $client
66        );
67    },
68    SearchProfileServiceFactory::SERVICE_NAME => static function ( MediaWikiServices $services ): SearchProfileServiceFactory {
69        $config = $services->getConfigFactory()
70            ->makeConfig( CirrusSearch::NAME );
71        return new SearchProfileServiceFactory( $services->getService( InterwikiResolver::SERVICE ),
72        /** @phan-suppress-next-line PhanTypeMismatchArgumentSuperType $config is actually a SearchConfig */
73            $config,
74            $services->getLocalServerObjectCache(),
75            new CirrusSearchHookRunner( $services->getHookContainer() ),
76            $services->getUserOptionsLookup(),
77            ExtensionRegistry::getInstance()
78        );
79    },
80    WeightedTagsUpdater::SERVICE => static function ( MediaWikiServices $services ): WeightedTagsUpdater {
81        /**
82         * @var SearchConfig $searchConfig
83         */
84        $searchConfig = $services->getConfigFactory()->makeConfig( CirrusSearch::NAME );
85
86        if ( $searchConfig->get( CirrusConfigNames::EnableEventBusWeightedTags ) ) {
87            $eventBusFactory = $services->getService( 'EventBus.EventBusFactory' );
88
89            $weightedTagSerializer = new EventBusWeightedTagSerializer(
90                $services->get( 'EventBus.EventSerializer' ),
91                $services->get( 'EventBus.PageEntitySerializer' ),
92            );
93            $wikiPageFactory = $services->getWikiPageFactory();
94
95            return new EventBusWeightedTagsUpdater( $eventBusFactory, $weightedTagSerializer, $wikiPageFactory );
96        }
97
98        /** @phan-suppress-next-line PhanTypeMismatchArgumentSuperType $config is actually a SearchConfig */
99        return new Updater( new Connection( $searchConfig ) );
100    },
101    SecondTrySearchFactory::SERVICE => static function ( MediaWikiServices $services ): SecondTrySearchFactory {
102        return new SecondTrySearchFactory( $services->getLanguageConverterFactory() );
103    },
104    NamespaceMatcher::SERVICE => static function ( MediaWikiServices $services ): NamespaceMatcher {
105        $searchConfig = $services->getConfigFactory()->makeConfig( CirrusSearch::NAME );
106        return NamespaceMatcher::create(
107            $services->getContentLanguage(),
108            $services->get( SecondTrySearchFactory::SERVICE ),
109            /** @phan-suppress-next-line PhanTypeMismatchArgumentSuperType $config is actually a SearchConfig */
110            $searchConfig
111        );
112    },
113];
114
115// @codeCoverageIgnoreEnd