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