Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Hooks
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 4
72
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 onParserFirstCallInit
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 onParserAfterParse
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 onRegistration
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2/**
3 *
4 * @license MIT
5 * @file
6 *
7 * @author Yuri Astrakhan
8 */
9
10namespace Kartographer;
11
12use Kartographer\Tag\LegacyMapFrame;
13use Kartographer\Tag\LegacyMapLink;
14use Kartographer\Tag\LegacyTagHandler;
15use MediaWiki\Config\Config;
16use MediaWiki\Hook\ParserAfterParseHook;
17use MediaWiki\Hook\ParserFirstCallInitHook;
18use MediaWiki\Languages\LanguageNameUtils;
19use MediaWiki\Title\TitleFormatter;
20use Parser;
21use StripState;
22
23/**
24 * @license MIT
25 */
26class Hooks implements
27    ParserFirstCallInitHook,
28    ParserAfterParseHook
29{
30    private LegacyMapLink $legacyMapLink;
31    private LegacyMapFrame $legacyMapFrame;
32
33    public function __construct(
34        Config $config,
35        LanguageNameUtils $languageCodeValidator,
36        TitleFormatter $titleFormatter
37    ) {
38        $this->legacyMapLink = new LegacyMapLink(
39            $config,
40            $languageCodeValidator
41        );
42        $this->legacyMapFrame = new LegacyMapFrame(
43            $config,
44            $languageCodeValidator,
45            $titleFormatter
46        );
47    }
48
49    /**
50     * ParserFirstCallInit hook handler
51     * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserFirstCallInit
52     * @param Parser $parser
53     */
54    public function onParserFirstCallInit( $parser ) {
55        $parser->setHook( LegacyMapLink::TAG, [ $this->legacyMapLink, 'handle' ] );
56        $parser->setHook( LegacyMapFrame::TAG, [ $this->legacyMapFrame, 'handle' ] );
57    }
58
59    /**
60     * ParserAfterParse hook handler
61     * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserAfterParse
62     * @param Parser $parser
63     * @param string &$text Text being parsed
64     * @param StripState $stripState StripState used
65     */
66    public function onParserAfterParse( $parser, &$text, $stripState ) {
67        $output = $parser->getOutput();
68        $state = State::getState( $output );
69
70        if ( $state ) {
71            $options = $parser->getOptions();
72            $isPreview = $options->getIsPreview() || $options->getIsSectionPreview();
73            $tracker = new ParserFunctionTracker( $parser );
74            LegacyTagHandler::finalParseStep( $state, $output, $isPreview, $tracker );
75        }
76    }
77
78    /**
79     * Sets $wgKartographerMapServer in integration test/CI setup
80     * This is needed by parserTests that define articles containing Kartographer content - parsing them when
81     * inserting them in the test DB requires $wgKartographerMapServer to be defined early.
82     */
83    public static function onRegistration() {
84        global $wgKartographerMapServer;
85        if ( defined( 'MW_PHPUNIT_TEST' ) || defined( 'MW_QUIBBLE_CI' ) ) {
86            $wgKartographerMapServer = 'https://maps.wikimedia.org';
87        }
88    }
89}