X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FLinker.php;h=48be3bfe7ad914db5fe4107090f967f7837ded5b;hb=e1aabf2f24aef20adc72db8a750704cbb33236c6;hp=403b10a1495433738c9a9e2ae02bc9905f67ca0f;hpb=059fdf444ebc254fe703d36c98397164b5dbd533;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Linker.php b/includes/Linker.php index 403b10a149..48be3bfe7a 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -892,10 +892,26 @@ class Linker { */ public static function userLink( $userId, $userName, $altUserName = false ) { $classes = 'mw-userlink'; + $page = null; if ( $userId == 0 ) { - $page = SpecialPage::getTitleFor( 'Contributions', $userName ); - if ( $altUserName === false ) { - $altUserName = IP::prettifyIP( $userName ); + $pos = strpos( $userName, '>' ); + if ( $pos !== false ) { + $iw = explode( ':', substr( $userName, 0, $pos ) ); + $firstIw = array_shift( $iw ); + $interwikiLookup = MediaWikiServices::getInstance()->getInterwikiLookup(); + if ( $interwikiLookup->isValidInterwiki( $firstIw ) ) { + $title = MWNamespace::getCanonicalName( NS_USER ) . ':' . substr( $userName, $pos + 1 ); + if ( $iw ) { + $title = join( ':', $iw ) . ':' . $title; + } + $page = Title::makeTitle( NS_MAIN, $title, '', $firstIw ); + } + $classes .= ' mw-extuserlink'; + } else { + $page = SpecialPage::getTitleFor( 'Contributions', $userName ); + if ( $altUserName === false ) { + $altUserName = IP::prettifyIP( $userName ); + } } $classes .= ' mw-anonuserlink'; // Separate link class for anons (T45179) } else { @@ -903,11 +919,12 @@ class Linker { } // Wrap the output with tags for directionality isolation - return self::link( - $page, - '' . htmlspecialchars( $altUserName !== false ? $altUserName : $userName ) . '', - [ 'class' => $classes ] - ); + $linkText = + '' . htmlspecialchars( $altUserName !== false ? $altUserName : $userName ) . ''; + + return $page + ? self::link( $page, $linkText, [ 'class' => $classes ] ) + : Html::rawElement( 'span', [ 'class' => $classes ], $linkText ); } /** @@ -931,6 +948,11 @@ class Linker { $blockable = !( $flags & self::TOOL_LINKS_NOBLOCK ); $addEmailLink = $flags & self::TOOL_LINKS_EMAIL && $userId; + if ( $userId == 0 && strpos( $userText, '>' ) !== false ) { + // No tools for an external user + return ''; + } + $items = []; if ( $talkable ) { $items[] = self::userTalkLink( $userId, $userText ); @@ -1170,12 +1192,12 @@ class Linker { $section = str_replace( '[[', '', $section ); $section = str_replace( ']]', '', $section ); - $section = Sanitizer::normalizeSectionNameWhitespace( $section ); # T24784 + $section = substr( Parser::guessSectionNameFromStrippedText( $section ), 1 ); if ( $local ) { - $sectionTitle = Title::newFromText( '#' . $section ); + $sectionTitle = Title::makeTitleSafe( NS_MAIN, '', $section ); } else { $sectionTitle = Title::makeTitleSafe( $title->getNamespace(), - $title->getDBkey(), Sanitizer::decodeCharReferences( $section ) ); + $title->getDBkey(), $section ); } if ( $sectionTitle ) { $link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' );