55 $this->hookRunner =
new HookRunner( $hookContainer );
56 $this->tempUserConfig = $tempUserConfig;
57 $this->specialPageFactory = $specialPageFactory;
58 $this->linkRenderer = $linkRenderer;
59 $this->tempUserDetailsLookup = $tempUserDetailsLookup;
60 $this->userIdentityLookup = $userIdentityLookup;
81 ?
string $altUserName =
null,
82 array $attributes = []
84 $outputPage = $context->getOutput();
85 $outputPage->addModuleStyles( [
86 'mediawiki.interface.helpers.styles',
87 'mediawiki.interface.helpers.linker.styles'
90 $userName = $targetUser->
getName();
93 $html = $this->userLinkCache->getWithSetCallback(
94 $this->userLinkCache->makeKey(
98 implode(
' ', $attributes )
100 fn () => $this->renderExternalUserLink(
108 $html = $this->userLinkCache->getWithSetCallback(
109 $this->userLinkCache->makeKey(
112 implode(
' ', $attributes )
114 fn () => $this->renderUserLink(
124 $this->hookRunner->onUserLinkRendererUserLinkPostRender( $targetUser, $context, $html, $prefix, $postfix );
125 return $prefix . $html . $postfix;
138 private function renderExternalUserLink(
139 UserIdentity $targetUser,
141 ?
string $altUserName =
null,
142 array $attributes = []
144 $userName = $targetUser->getName();
145 $params = $this->getUserLinkParameters( $targetUser, $messageLocalizer );
146 $attributes += $params[
'extraAttr' ];
147 $classes = $params[
'classes' ];
148 $postfix = $params[
'postfix' ];
150 $link = $this->linkRenderer->makeExternalLink(
151 WikiMap::getForeignURL(
152 $targetUser->getWikiId(),
153 'User:' . strtr( $userName,
' ',
'_' )
156 Html::element(
'bdi', [], $altUserName ?? $userName ) . $postfix
158 Title::makeTitle(
NS_USER, $userName ),
160 $attributes + [
'class' => $classes ]
177 private function renderUserLink(
178 UserIdentity $targetUser,
180 ?
string $altUserName =
null,
181 array $attributes = []
183 $userName = $targetUser->
getName();
185 $params = $this->getUserLinkParameters( $targetUser, $messageLocalizer );
186 $attributes +=
$params[
'extraAttr' ];
187 $classes =
$params[
'classes' ];
188 $postfix =
$params[
'postfix' ];
190 if ( $this->tempUserConfig->isTempName( $userName ) ) {
191 $pageName = $this->specialPageFactory->getLocalNameFor(
'Contributions', $userName );
192 $page =
new TitleValue(
NS_SPECIAL, $pageName );
193 } elseif ( !$targetUser->isRegistered() ) {
194 $page = ExternalUserNames::getUserLinkTitle( $userName );
196 if ( ExternalUserNames::isExternal( $userName ) ) {
197 $classes[] =
'mw-extuserlink';
198 } elseif ( $altUserName ===
null ) {
199 $altUserName = IPUtils::prettifyIP( $userName );
201 $classes[] =
'mw-anonuserlink';
203 $page = TitleValue::tryNew(
NS_USER, strtr( $userName,
' ',
'_' ) );
208 '<bdi>' . htmlspecialchars( $altUserName ?? $userName ) .
'</bdi>'
211 if ( isset( $attributes[
'class'] ) ) {
212 $classes[] = $attributes[
'class'];
215 $attributes[
'class'] = $classes;
217 if ( $page !==
null ) {
218 return $this->linkRenderer->makeLink( $page,
new HtmlArmor( $linkText ), $attributes );
221 return Html::rawElement(
'span', $attributes, $linkText );
229 private function getUserLinkParameters(
230 UserIdentity $targetUser,
234 $classes = [
'mw-userlink' ];
235 $userName = $targetUser->getName();
239 if ( $this->tempUserConfig->isTempName( $userName ) ) {
240 $classes[] =
'mw-tempuserlink';
241 $attributes[
'data-mw-target'] = $userName;
243 if ( $this->isFromExternalWiki( $targetUser->getWikiId() ) ) {
248 $localIdentity = $this->userIdentityLookup->getUserIdentityByName(
253 $localIdentity = $targetUser;
256 if ( $localIdentity instanceof UserIdentity ) {
257 $isExpired = $this->tempUserDetailsLookup->isExpired(
265 $classes[] =
'mw-tempuserlink-expired';
267 $description = $messageLocalizer->
msg(
268 'tempuser-expired-link-tooltip'
271 $postfix = Html::element(
274 'role' =>
'presentation',
275 'class' =>
'cdx-tooltip mw-tempuserlink-expired--tooltip',
280 $attributes[
'aria-description'] = $description;
284 $attributes[
'title'] =
null;
288 'classes' => $classes,
289 'extraAttr' => $attributes,
290 'postfix' => $postfix
305 return !WikiMap::isCurrentWikiDbDomain( $wikiId );