aboutsummaryrefslogtreecommitdiffstats
path: root/includes/skins/components/SkinComponentTempUserBanner.php
blob: 3d3f26409b8585a0f23d2253ab2ff18055a79e4f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php

namespace MediaWiki\Skin;

use MediaWiki\Html\Html;
use MediaWiki\User\User;
use MessageLocalizer;

/**
 * @internal for use inside Skin and SkinTemplate classes only
 *
 * NOTE: This class is currently *not registered* via the SkinComponentRegistry
 * and cannot be called via Skin::getComponent.
 * Because of it's unsuitability for rendering via mustache templates
 * (it renders its own HTML and returns no data),
 * it is appended directly to skin data in Skin::getTemplateData.
 * @unstable
 */
class SkinComponentTempUserBanner implements SkinComponent {
	/** @var string */
	private $loginUrl;
	/** @var string */
	private $createAccountUrl;
	/** @var MessageLocalizer */
	private $localizer;
	/** @var bool */
	private $isTempUser;
	/** @var string */
	private $username;
	/** @var string */
	private $userpageUrl;

	/**
	 * @param string|array $returnto
	 * @param MessageLocalizer $localizer
	 * @param User $user
	 */
	public function __construct( $returnto, $localizer, $user ) {
		$this->loginUrl = SkinComponentUtils::makeSpecialUrl( 'Userlogin', $returnto );
		$this->createAccountUrl = SkinComponentUtils::makeSpecialUrl( 'CreateAccount', $returnto );
		$this->localizer = $localizer;
		$this->isTempUser = $user->isTemp();
		$this->username = $user->getName(); // getUser
		$this->userpageUrl = $user->getUserPage()->getFullURL();
	}

	private function createLoginLink(): string {
		return Html::element( 'a',
		[
			'href' => $this->loginUrl,
			'id' => 'pt-login',
			'title' => $this->localizer->msg( 'tooltip-pt-login' )->text(),
			'class' => 'cdx-button cdx-button--fake-button cdx-button--fake-button--enabled'
		],
		$this->localizer->msg( 'pt-login' )->text() );
	}

	private function createAccountLink(): string {
		return Html::element( 'a',
			[
				'href' => $this->createAccountUrl,
				'id' => 'pt-createaccount',
				'title' => $this->localizer->msg( 'tooltip-pt-createaccount' )->text(),
				'class' => 'cdx-button cdx-button--fake-button cdx-button--fake-button--enabled'
			],
			$this->localizer->msg( 'pt-createaccount' )->text()
		);
	}

	private function renderBannerHTML(): string {
		return Html::rawElement( 'div', [ 'class' => 'mw-temp-user-banner' ],
			Html::rawElement( 'p', [],
				$this->localizer->msg( 'temp-user-banner-description' )->escaped() .
				$this->localizer->msg( 'colon-separator' )->escaped() .
				Html::element( 'span', [ 'class' => 'mw-temp-user-banner-username' ], $this->username )
			) .
			HTML::rawElement( 'div', [ 'class' => 'mw-temp-user-banner-tooltip' ],
				HTML::rawElement( 'button', [
					'id' => 'mw-temp-user-banner-tooltip-button',
					'class' => 'mw-temp-user-banner-tooltip-summary cdx-button '
						. 'cdx-button--icon-only cdx-button--weight-quiet',
					'aria-label' => $this->localizer->msg( 'temp-user-banner-tooltip-label' )
					],
					HTML::element( 'span', [ 'class' => 'mw-temp-user-banner-tooltip-icon ' ] )
				)

			) .
			HTML::rawElement( 'div', [ 'class' => 'mw-temp-user-banner-buttons' ],
				$this->createLoginLink() .
				$this->createAccountLink()
			)
		);
	}

	/**
	 * @inheritDoc
	 */
	public function getTemplateData(): array {
		return [
			'html' => ( $this->isTempUser ) ? $this->renderBannerHTML() : ''
		];
	}
}