Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
SkinComponentTempUserBanner
0.00% covered (danger)
0.00%
0 / 46
0.00% covered (danger)
0.00%
0 / 5
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 createLoginLink
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 createAccountLink
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 renderBannerHTML
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
2
 getTemplateData
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace MediaWiki\Skin\Components;
4
5use MediaWiki\Html\Html;
6use MediaWiki\User\User;
7use MessageLocalizer;
8
9/**
10 * @internal for use inside Skin and SkinTemplate classes only
11 *
12 * NOTE: This class is currently *not registered* via the SkinComponentRegistry
13 * and cannot be called via Skin::getComponent.
14 * Because of it's unsuitability for rendering via mustache templates
15 * (it renders its own HTML and returns no data),
16 * it is appended directly to skin data in Skin::getTemplateData.
17 * @unstable
18 */
19class SkinComponentTempUserBanner implements SkinComponent {
20    /** @var string */
21    private $loginUrl;
22    /** @var string */
23    private $createAccountUrl;
24    /** @var MessageLocalizer */
25    private $localizer;
26    /** @var bool */
27    private $isTempUser;
28    /** @var string */
29    private $username;
30
31    /**
32     * @param string|array $returnto
33     * @param MessageLocalizer $localizer
34     * @param User $user
35     */
36    public function __construct( $returnto, $localizer, $user ) {
37        $this->loginUrl = SkinComponentUtils::makeSpecialUrl( 'Userlogin', $returnto );
38        $this->createAccountUrl = SkinComponentUtils::makeSpecialUrl( 'CreateAccount', $returnto );
39        $this->localizer = $localizer;
40        $this->isTempUser = $user->isTemp();
41        $this->username = $user->getName(); // getUser
42    }
43
44    private function createLoginLink(): string {
45        return Html::element( 'a',
46        [
47            'href' => $this->loginUrl,
48            'id' => 'pt-login',
49            'title' => $this->localizer->msg( 'tooltip-pt-login' )->text(),
50            'class' => 'cdx-button cdx-button--fake-button cdx-button--fake-button--enabled'
51        ],
52        $this->localizer->msg( 'pt-login' )->text() );
53    }
54
55    private function createAccountLink(): string {
56        return Html::element( 'a',
57            [
58                'href' => $this->createAccountUrl,
59                'id' => 'pt-createaccount',
60                'title' => $this->localizer->msg( 'tooltip-pt-createaccount' )->text(),
61                'class' => 'cdx-button cdx-button--fake-button cdx-button--fake-button--enabled'
62            ],
63            $this->localizer->msg( 'pt-createaccount' )->text()
64        );
65    }
66
67    private function renderBannerHTML(): string {
68        return Html::rawElement( 'div', [ 'class' => 'mw-temp-user-banner' ],
69            Html::rawElement( 'p', [],
70                $this->localizer->msg( 'temp-user-banner-description' )->escaped() .
71                $this->localizer->msg( 'colon-separator' )->escaped() .
72                Html::element( 'span', [ 'class' => 'mw-temp-user-banner-username' ], $this->username )
73            ) .
74            Html::rawElement( 'div', [ 'class' => 'mw-temp-user-banner-tooltip' ],
75                Html::rawElement( 'button', [
76                    'id' => 'mw-temp-user-banner-tooltip-button',
77                    'class' => 'mw-temp-user-banner-tooltip-summary cdx-button '
78                        . 'cdx-button--icon-only cdx-button--weight-quiet',
79                    'aria-label' => $this->localizer->msg( 'temp-user-banner-tooltip-label' )->text()
80                    ],
81                    Html::element( 'span', [ 'class' => 'mw-temp-user-banner-tooltip-icon ' ] )
82                )
83
84            ) .
85            Html::rawElement( 'div', [ 'class' => 'mw-temp-user-banner-buttons' ],
86                $this->createLoginLink() .
87                $this->createAccountLink()
88            )
89        );
90    }
91
92    /**
93     * @inheritDoc
94     */
95    public function getTemplateData(): array {
96        return [
97            'html' => ( $this->isTempUser ) ? $this->renderBannerHTML() : ''
98        ];
99    }
100}
101
102/** @deprecated class alias since 1.46 */
103class_alias( SkinComponentTempUserBanner::class, 'MediaWiki\\Skin\\SkinComponentTempUserBanner' );