.
*
* @file
* @ingroup Skins
*/
declare( strict_types=1 );
namespace MediaWiki\Skins\Citizen\Partials;
use MediaWiki\MediaWikiServices;
use Skin;
/**
* Header partial of Skin Citizen
* Generates the following partials:
* - User Menu
* - Search
*/
final class Header extends Partial {
/**
* Decorate search box template data
*
* @param array $searchBoxData original data-search-box
* @return array
*/
public function decorateSearchBoxData( $searchBoxData ): array {
return $searchBoxData += [
'msg-citizen-search-toggle-shortcut' => '[/]',
'html-random-href' => Skin::makeSpecialUrl( 'Randompage' ),
];
}
/**
* Get the user info template data for user menu
*
* TODO: Consider dropping Menu.mustache since the DOM doesn't make much sense
*
* @param array $userPageData data-portlets.data-user-page
* @return array
*/
public function getUserInfoData( $userPageData ): array {
$isRegistered = $this->user->isRegistered();
$html = $this->getUserPageHTML( $isRegistered, $userPageData );
if ( $isRegistered ) {
$html .= $this->getUserGroupsHTML();
$html .= $this->getUserContributionsHTML();
}
return [
'id' => 'p-user-info',
'html-items' => $html,
];
}
/**
* Get the user page HTML
*
* @param bool $isRegistered
* @param array $userPageData data-portlets.data-user-page
* @return string
*/
private function getUserPageHTML( $isRegistered, $userPageData ): ?string {
if ( $isRegistered ) {
$realname = $this->user->getRealName();
if ( !empty( $realname ) ) {
$username = $this->user->getName();
$innerHtml = <<$realname
$username
HTML;
// Dirty but it works
$html = str_replace(
">" . $username . "<",
">" . $innerHtml . "<",
$userPageData['html-items']
);
} else {
$html = $userPageData['html-items'];
}
} else {
// There must be a cleaner way to do this
$msg = $this->skin->msg( 'notloggedin' )->text();
$tooltip = $this->skin->msg( 'tooltip-pt-anonuserpage' )->text();
$html = <<
$msg
HTML;
}
return $html;
}
/**
* Get the user groups HTML
*
* @return string|null
*/
private function getUserGroupsHTML(): ?string {
// This does not return implicit groups
$groups = MediaWikiServices::getInstance()->getUserGroupManager()->getUserGroups( $this->user );
if ( empty( $groups ) ) {
return null;
}
$html = '';
$msgName = 'group-%s-member';
// There must be a cleaner way
foreach ( $groups as $group ) {
$id = sprintf( $msgName, $group );
$msg = $this->skin->msg( $id )->text();
$title = $this->title->newFromText(
$msg,
NS_PROJECT
);
if ( $msg ) {
// Member names are in lowercase
$msg = ucfirst( $msg );
}
if ( $title ) {
$href = $title->getLinkURL();
$html .= <<< HTML
$msg
HTML;
}
}
$html = sprintf( '', $html );
return $html;
}
/**
* Get the user contributions HTML
*
* @return string|null
*/
private function getUserContributionsHTML(): ?string {
// Return user edits
$edits = MediaWikiServices::getInstance()->getUserEditTracker()->getUserEditCount( $this->user );
if ( empty( $edits ) ) {
return null;
}
$editsText = $this->skin->msg( 'usereditcount' )
->numParams( sprintf( '%s', number_format( $edits, 0 ) ) );
// There must be a cleaner way
$html = '' . $editsText . '';
return $html;
}
}