Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
PrefixSearchExtractNamespace
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
3 / 3
6
100.00% covered (success)
100.00%
1 / 1
 create
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onPrefixSearchExtractNamespace
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace CirrusSearch;
4
5use MediaWiki\Config\Config;
6use MediaWiki\MainConfigNames;
7use MediaWiki\Search\Hook\PrefixSearchExtractNamespaceHook;
8
9class PrefixSearchExtractNamespace implements PrefixSearchExtractNamespaceHook {
10    private NamespaceMatcher $namespaceMatcher;
11
12    /**
13     * @param Config $mainConfig
14     * @param NamespaceMatcher $namespaceMatcher
15     * @return PrefixSearchExtractNamespaceHook
16     */
17    public static function create(
18        Config $mainConfig,
19        NamespaceMatcher $namespaceMatcher,
20    ) {
21        if ( $mainConfig->get( MainConfigNames::SearchType ) !== CirrusSearch::NAME ) {
22            return new class() implements PrefixSearchExtractNamespaceHook {
23                /**
24                 * @inheritDoc
25                 */
26                public function onPrefixSearchExtractNamespace( &$namespaces, &$search ) {
27                    return false;
28                }
29            };
30        }
31        return new self( $namespaceMatcher );
32    }
33
34    public function __construct( NamespaceMatcher $namespaceMatcher ) {
35        $this->namespaceMatcher = $namespaceMatcher;
36    }
37
38    /**
39     * @inheritDoc
40     */
41    public function onPrefixSearchExtractNamespace( &$namespaces, &$search ) {
42        $colon = strpos( $search, ':' );
43        if ( $colon === false ) {
44            return false;
45        }
46        $namespaceName = substr( $search, 0, $colon );
47        $ns = $this->namespaceMatcher->identifyNamespace( $namespaceName );
48        if ( $ns !== null ) {
49            $namespaces = [ $ns ];
50            $search = substr( $search, $colon + 1 );
51        }
52
53        return false;
54    }
55}