Page MenuHomeWickedGov Phorge

CitizenComponentUserInfo.php
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

CitizenComponentUserInfo.php

<?php
declare( strict_types=1 );
namespace MediaWiki\Skins\Citizen\Components;
use MediaWiki\Html\Html;
use MediaWiki\Language\Language;
use MediaWiki\Title\MalformedTitleException;
use MediaWiki\Title\Title;
use MediaWiki\User\User;
use MediaWiki\User\UserGroupManager;
use MessageLocalizer;
/**
* CitizenComponentUserInfo component
*/
class CitizenComponentUserInfo implements CitizenComponent {
public function __construct(
private readonly UserGroupManager $userGroupManager,
private readonly Language $lang,
private readonly MessageLocalizer $localizer,
private readonly Title $title,
private readonly User $user,
private readonly array $userPageData,
) {
}
/**
* Get the user edit count
*/
private function getUserEditCount(): ?array {
$edits = $this->user->getEditCount();
if ( $edits === null ) {
return null;
}
return [
'value' => number_format( $edits, 0 ),
'label' => $this->localizer->msg( 'citizen-user-info-edits-label' )->text()
];
}
/**
* Get the user registration date
*/
private function getUserRegistration(): ?array {
$timestamp = $this->user->getRegistration();
if ( $timestamp === false || $timestamp === null ) {
return null;
}
// Since this is not accessible by anon, we can use user language
$date = $this->lang->userDate( $timestamp, $this->user );
$html = Html::element(
'time',
[
'class' => 'citizen-user-regdate',
'datetime' => wfTimestamp( TS_ISO_8601, $timestamp )
],
$date
);
return [
'value' => $html,
'label' => $this->localizer->msg( 'citizen-user-info-joined-label' )->text()
];
}
/**
* Build the template data for the user groups
*/
private function getUserGroups(): ?array {
$groups = $this->userGroupManager->getUserGroups( $this->user );
if ( !$groups ) {
return null;
}
$listItems = [];
$msgKey = 'group-%s-member';
foreach ( $groups as $group ) {
$id = sprintf( $msgKey, $group );
$text = $this->localizer->msg( $id )->text();
try {
$title = $this->title->newFromTextThrow( $text, NS_PROJECT );
} catch ( MalformedTitleException $e ) {
// ignore
}
if ( !$text || !$title ) {
continue;
}
$link = new CitizenComponentLink(
$title->getLinkURL(),
ucfirst( $text )
);
$listItem = new CitizenComponentMenuListItem( $link, 'citizen-userInfo-usergroup', $id );
$listItems[] = $listItem->getTemplateData();
}
return [
'array-list-items' => $listItems
];
}
/**
* Build the template data for the user page menu
*/
private function getUserPage(): array {
$user = $this->user;
$userPageData = $this->userPageData;
$htmlItems = $userPageData['html-items'];
$realname = htmlspecialchars( $user->getRealName(), ENT_QUOTES );
if ( $realname !== '' ) {
$username = htmlspecialchars( $user->getName(), ENT_QUOTES );
$innerHtml = <<<HTML
<span id="pt-userpage-realname">$realname</span>
<span id="pt-userpage-username">$username</span>
HTML;
// Dirty but it works
$htmlItems = str_replace(
">" . $username . "<",
">" . $innerHtml . "<",
$userPageData['html-items']
);
}
$menu = new CitizenComponentMenu( [
'id' => 'citizen-user-menu-userpage',
'class' => null,
'label' => null,
'html-items' => $htmlItems
] );
return $menu->getTemplateData();
}
public function getTemplateData(): array {
$localizer = $this->localizer;
$user = $this->user;
$data = [];
if ( $user->isRegistered() ) {
$data = [
'data-user-page' => $this->getUserPage(),
'data-user-stats' => [
'array-stats-items' => [
$this->getUserEditCount(),
$this->getUserRegistration()
]
]
];
if ( $user->isTemp() ) {
$data['text'] = $localizer->msg( 'citizen-user-info-text-temp' );
} else {
$data['data-user-groups'] = $this->getUserGroups();
}
} else {
$data = [
'title' => $localizer->msg( 'notloggedin' ),
'text' => $localizer->msg( 'citizen-user-info-text-anon' )
];
}
return $data;
}
}

File Metadata

Mime Type
text/x-php
Expires
Aug 19 2026, 19:04 (6 w, 4 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
20/e3/c06e29093caecc1b7cee747d7bb4
Default Alt Text
CitizenComponentUserInfo.php (3 KB)

Event Timeline