Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
Hooks
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
20
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
2
 onParserTestGlobals
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 onParserFirstCallInit
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace MediaWiki\Extension\ParserFunctions;
4
5use Config;
6use LinkCache;
7use MediaWiki\HookContainer\HookContainer;
8use MediaWiki\Languages\LanguageConverterFactory;
9use MediaWiki\Languages\LanguageFactory;
10use MediaWiki\Languages\LanguageNameUtils;
11use MediaWiki\SpecialPage\SpecialPageFactory;
12use Parser;
13use RepoGroup;
14
15class Hooks implements
16    \MediaWiki\Hook\ParserFirstCallInitHook,
17    \MediaWiki\Hook\ParserTestGlobalsHook
18{
19
20    /** @var Config */
21    private $config;
22
23    /** @var ParserFunctions */
24    private $parserFunctions;
25
26    /**
27     * @param Config $config
28     * @param HookContainer $hookContainer
29     * @param LanguageConverterFactory $languageConverterFactory
30     * @param LanguageFactory $languageFactory
31     * @param LanguageNameUtils $languageNameUtils
32     * @param LinkCache $linkCache
33     * @param RepoGroup $repoGroup
34     * @param SpecialPageFactory $specialPageFactory
35     */
36    public function __construct(
37        Config $config,
38        HookContainer $hookContainer,
39        LanguageConverterFactory $languageConverterFactory,
40        LanguageFactory $languageFactory,
41        LanguageNameUtils $languageNameUtils,
42        LinkCache $linkCache,
43        RepoGroup $repoGroup,
44        SpecialPageFactory $specialPageFactory
45    ) {
46        $this->config = $config;
47        $this->parserFunctions = new ParserFunctions(
48            $config,
49            $hookContainer,
50            $languageConverterFactory,
51            $languageFactory,
52            $languageNameUtils,
53            $linkCache,
54            $repoGroup,
55            $specialPageFactory
56        );
57    }
58
59    /**
60     * Enables string functions during parser tests.
61     *
62     * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserTestGlobals
63     *
64     * @param array &$globals
65     */
66    public function onParserTestGlobals( &$globals ) {
67        $globals['wgPFEnableStringFunctions'] = true;
68    }
69
70    /**
71     * Registers our parser functions with a fresh parser.
72     *
73     * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserFirstCallInit
74     *
75     * @param Parser $parser
76     */
77    public function onParserFirstCallInit( $parser ) {
78        // These functions accept DOM-style arguments
79        $parser->setFunctionHook( 'if', [ $this->parserFunctions, 'if' ], Parser::SFH_OBJECT_ARGS );
80        $parser->setFunctionHook( 'ifeq', [ $this->parserFunctions, 'ifeq' ], Parser::SFH_OBJECT_ARGS );
81        $parser->setFunctionHook( 'switch', [ $this->parserFunctions, 'switch' ], Parser::SFH_OBJECT_ARGS );
82        $parser->setFunctionHook( 'ifexist', [ $this->parserFunctions, 'ifexist' ], Parser::SFH_OBJECT_ARGS );
83        $parser->setFunctionHook( 'ifexpr', [ $this->parserFunctions, 'ifexpr' ], Parser::SFH_OBJECT_ARGS );
84        $parser->setFunctionHook( 'iferror', [ $this->parserFunctions, 'iferror' ], Parser::SFH_OBJECT_ARGS );
85        $parser->setFunctionHook( 'time', [ $this->parserFunctions, 'time' ], Parser::SFH_OBJECT_ARGS );
86        $parser->setFunctionHook( 'timel', [ $this->parserFunctions, 'localTime' ], Parser::SFH_OBJECT_ARGS );
87
88        $parser->setFunctionHook( 'expr', [ $this->parserFunctions, 'expr' ] );
89        $parser->setFunctionHook( 'rel2abs', [ $this->parserFunctions, 'rel2abs' ] );
90        $parser->setFunctionHook( 'titleparts', [ $this->parserFunctions, 'titleparts' ] );
91
92        // String Functions: enable if configured
93        if ( $this->config->get( 'PFEnableStringFunctions' ) ) {
94            $parser->setFunctionHook( 'len', [ $this->parserFunctions, 'runLen' ] );
95            $parser->setFunctionHook( 'pos', [ $this->parserFunctions, 'runPos' ] );
96            $parser->setFunctionHook( 'rpos', [ $this->parserFunctions, 'runRPos' ] );
97            $parser->setFunctionHook( 'sub', [ $this->parserFunctions, 'runSub' ] );
98            $parser->setFunctionHook( 'count', [ $this->parserFunctions, 'runCount' ] );
99            $parser->setFunctionHook( 'replace', [ $this->parserFunctions, 'runReplace' ] );
100            $parser->setFunctionHook( 'explode', [ $this->parserFunctions, 'runExplode' ] );
101            $parser->setFunctionHook( 'urldecode', [ $this->parserFunctions, 'runUrlDecode' ] );
102        }
103    }
104}