Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
83.33% covered (warning)
83.33%
10 / 12
85.71% covered (warning)
85.71%
6 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
SpecialPageHtmlFragment
83.33% covered (warning)
83.33%
10 / 12
85.71% covered (warning)
85.71%
6 / 7
9.37
0.00% covered (danger)
0.00%
0 / 1
 __construct
66.67% covered (warning)
66.67%
4 / 6
0.00% covered (danger)
0.00%
0 / 1
3.33
 getPageTitle
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getContext
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getOutput
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getUser
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getLanguage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 msg
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace FileImporter\Html;
4
5use Language;
6use MediaWiki\Context\IContextSource;
7use MediaWiki\Context\MutableContext;
8use MediaWiki\Message\Message;
9use MediaWiki\Output\OutputPage;
10use MediaWiki\SpecialPage\SpecialPage;
11use MediaWiki\Title\Title;
12use MediaWiki\User\User;
13use MessageLocalizer;
14
15/**
16 * Common framework for classes providing HTML fragments (similar to
17 * {@see https://developer.mozilla.org/de/docs/Web/API/Document/createDocumentFragment}) that are
18 * meant to be shown on a special page. Implementations should have a `getHtml` method with as many
19 * arguments as needed.
20 *
21 * @license GPL-2.0-or-later
22 * @author Thiemo Kreuz
23 */
24abstract class SpecialPageHtmlFragment implements MessageLocalizer {
25
26    private SpecialPage $specialPage;
27
28    /**
29     * Implementations should not have a constructor, but provide whatever is needed as arguments to
30     * their `getHtml` method.
31     *
32     * @param SpecialPage|self $specialPage
33     */
34    final public function __construct( $specialPage ) {
35        if ( $specialPage instanceof self ) {
36            $specialPage = $specialPage->specialPage;
37        } elseif ( !( $specialPage instanceof SpecialPage ) ) {
38            throw new \InvalidArgumentException(
39                '$specialPage must be a SpecialPage or SpecialPageHtmlFragment' );
40        }
41
42        $this->specialPage = $specialPage;
43    }
44
45    protected function getPageTitle(): Title {
46        return $this->specialPage->getPageTitle();
47    }
48
49    /**
50     * @return IContextSource|MutableContext
51     */
52    protected function getContext() {
53        return $this->specialPage->getContext();
54    }
55
56    protected function getOutput(): OutputPage {
57        return $this->getContext()->getOutput();
58    }
59
60    protected function getUser(): User {
61        return $this->getContext()->getUser();
62    }
63
64    /**
65     * @return Language
66     */
67    protected function getLanguage() {
68        return $this->getContext()->getLanguage();
69    }
70
71    /**
72     * @see MessageLocalizer::msg
73     *
74     * @param string|string[]|\MessageSpecifier $key
75     * @param mixed ...$params Any number of message parameters
76     */
77    public function msg( $key, ...$params ): Message {
78        return $this->getContext()->msg( $key, ...$params );
79    }
80
81}