Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
ParserOutputSearchDataExtractor
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
4 / 4
7
100.00% covered (success)
100.00%
1 / 1
 getCategories
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 getExternalLinks
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getOutgoingLinks
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 getTemplates
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace MediaWiki\Search;
4
5use MediaWiki\Parser\ParserOutput;
6use MediaWiki\Parser\ParserOutputLinkTypes;
7use MediaWiki\Title\Title;
8
9/**
10 * Extracts data from ParserOutput for indexing in the search engine.
11 *
12 * @license GPL-2.0-or-later
13 * @since 1.28
14 */
15class ParserOutputSearchDataExtractor {
16
17    /**
18     * Get a list of categories, as an array with title text strings.
19     *
20     * @param ParserOutput $parserOutput
21     * @return string[]
22     */
23    public function getCategories( ParserOutput $parserOutput ) {
24        $categories = [];
25
26        foreach (
27            $parserOutput->getLinkList( ParserOutputLinkTypes::CATEGORY )
28            as [ 'link' => $link ]
29        ) {
30            $categories[] = $link->getText();
31        }
32
33        return $categories;
34    }
35
36    /**
37     * Get a list of external links from ParserOutput, as an array of strings.
38     *
39     * @param ParserOutput $parserOutput
40     * @return string[]
41     */
42    public function getExternalLinks( ParserOutput $parserOutput ) {
43        return array_keys( $parserOutput->getExternalLinks() );
44    }
45
46    /**
47     * Get a list of outgoing wiki links (including interwiki links), as
48     * an array of prefixed title strings.
49     *
50     * @param ParserOutput $parserOutput
51     * @return string[]
52     */
53    public function getOutgoingLinks( ParserOutput $parserOutput ) {
54        $outgoingLinks = [];
55
56        foreach (
57            $parserOutput->getLinkList( ParserOutputLinkTypes::LOCAL )
58            as [ 'link' => $link ]
59        ) {
60            // XXX should use a TitleFormatter
61            // XXX why is this a DBkey when all of the others are text?
62            $outgoingLinks[] =
63                Title::newFromLinkTarget( $link )->getPrefixedDBkey();
64        }
65
66        return $outgoingLinks;
67    }
68
69    /**
70     * Get a list of templates used in the ParserOutput content, as prefixed title strings
71     *
72     * @param ParserOutput $parserOutput
73     * @return string[]
74     */
75    public function getTemplates( ParserOutput $parserOutput ) {
76        $templates = [];
77
78        foreach (
79            $parserOutput->getLinkList( ParserOutputLinkTypes::TEMPLATE )
80            as [ 'link' => $link ]
81        ) {
82            // XXX should use a TitleFormatter
83            $templates[] =
84                Title::newFromLinkTarget( $link )->getPrefixedText();
85        }
86
87        return $templates;
88    }
89
90}