dépôts
/
lhc
/
web
/
wiklou.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
BotPasswords: Indicate when a password needs reset
[lhc/web/wiklou.git]
/
includes
/
Linker.php
diff --git
a/includes/Linker.php
b/includes/Linker.php
index
dccd99c
..
5fc5eb1
100644
(file)
--- a/
includes/Linker.php
+++ b/
includes/Linker.php
@@
-76,7
+76,7
@@
class Linker {
* @since 1.18 Method exists since 1.16 as non-static, made static in 1.18.
* @deprecated since 1.28, use MediaWiki\Linker\LinkRenderer instead
*
* @since 1.18 Method exists since 1.16 as non-static, made static in 1.18.
* @deprecated since 1.28, use MediaWiki\Linker\LinkRenderer instead
*
- * @param
Title $target Can currently only be a Title
, but this may
+ * @param
LinkTarget $target Can currently only be a LinkTarget
, but this may
* change to support Images, literal URLs, etc.
* @param string $html The HTML contents of the <a> element, i.e.,
* the link text. This is raw HTML and will not be escaped. If null,
* change to support Images, literal URLs, etc.
* @param string $html The HTML contents of the <a> element, i.e.,
* the link text. This is raw HTML and will not be escaped. If null,
@@
-107,8
+107,8
@@
class Linker {
public static function link(
$target, $html = null, $customAttribs = [], $query = [], $options = []
) {
public static function link(
$target, $html = null, $customAttribs = [], $query = [], $options = []
) {
- if ( !$target instanceof
Title
) {
- wfWarn( __METHOD__ . ': Requires $target to be a
Title
object.', 2 );
+ if ( !$target instanceof
LinkTarget
) {
+ wfWarn( __METHOD__ . ': Requires $target to be a
LinkTarget
object.', 2 );
return "<!-- ERROR -->$html";
}
return "<!-- ERROR -->$html";
}
@@
-892,9
+892,13
@@
class Linker {
*/
public static function userLink( $userId, $userName, $altUserName = false ) {
$classes = 'mw-userlink';
*/
public static function userLink( $userId, $userName, $altUserName = false ) {
$classes = 'mw-userlink';
+ $page = null;
if ( $userId == 0 ) {
if ( $userId == 0 ) {
- $page = SpecialPage::getTitleFor( 'Contributions', $userName );
- if ( $altUserName === false ) {
+ $page = ExternalUserNames::getUserLinkTitle( $userName );
+
+ if ( ExternalUserNames::isExternal( $userName ) ) {
+ $classes .= ' mw-extuserlink';
+ } elseif ( $altUserName === false ) {
$altUserName = IP::prettifyIP( $userName );
}
$classes .= ' mw-anonuserlink'; // Separate link class for anons (T45179)
$altUserName = IP::prettifyIP( $userName );
}
$classes .= ' mw-anonuserlink'; // Separate link class for anons (T45179)
@@
-903,11
+907,12
@@
class Linker {
}
// Wrap the output with <bdi> tags for directionality isolation
}
// Wrap the output with <bdi> tags for directionality isolation
- return self::link(
- $page,
- '<bdi>' . htmlspecialchars( $altUserName !== false ? $altUserName : $userName ) . '</bdi>',
- [ 'class' => $classes ]
- );
+ $linkText =
+ '<bdi>' . htmlspecialchars( $altUserName !== false ? $altUserName : $userName ) . '</bdi>';
+
+ return $page
+ ? self::link( $page, $linkText, [ 'class' => $classes ] )
+ : Html::rawElement( 'span', [ 'class' => $classes ], $linkText );
}
/**
}
/**
@@
-931,6
+936,11
@@
class Linker {
$blockable = !( $flags & self::TOOL_LINKS_NOBLOCK );
$addEmailLink = $flags & self::TOOL_LINKS_EMAIL && $userId;
$blockable = !( $flags & self::TOOL_LINKS_NOBLOCK );
$addEmailLink = $flags & self::TOOL_LINKS_EMAIL && $userId;
+ if ( $userId == 0 && ExternalUserNames::isExternal( $userText ) ) {
+ // No tools for an external user
+ return '';
+ }
+
$items = [];
if ( $talkable ) {
$items[] = self::userTalkLink( $userId, $userText );
$items = [];
if ( $talkable ) {
$items[] = self::userTalkLink( $userId, $userText );
@@
-1001,7
+1011,7
@@
class Linker {
/**
* @since 1.16.3
/**
* @since 1.16.3
- * @param int $userId
Userid
+ * @param int $userId
* @param string $userText User name in database.
* @return string HTML fragment with block link
*/
* @param string $userText User name in database.
* @return string HTML fragment with block link
*/
@@
-1015,7
+1025,7
@@
class Linker {
}
/**
}
/**
- * @param int $userId
Userid
+ * @param int $userId
* @param string $userText User name in database.
* @return string HTML fragment with e-mail user link
*/
* @param string $userText User name in database.
* @return string HTML fragment with e-mail user link
*/
@@
-1170,9
+1180,9
@@
class Linker {
$section = str_replace( '[[', '', $section );
$section = str_replace( ']]', '', $section );
$section = str_replace( '[[', '', $section );
$section = str_replace( ']]', '', $section );
- $section =
Sanitizer::normalizeSectionNameWhitespace( $section ); # T24784
+ $section =
substr( Parser::guessSectionNameFromStrippedText( $section ), 1 );
if ( $local ) {
if ( $local ) {
- $sectionTitle = Title::
newFromText( '#' .
$section );
+ $sectionTitle = Title::
makeTitleSafe( NS_MAIN, '',
$section );
} else {
$sectionTitle = Title::makeTitleSafe( $title->getNamespace(),
$title->getDBkey(), $section );
} else {
$sectionTitle = Title::makeTitleSafe( $title->getNamespace(),
$title->getDBkey(), $section );
@@
-1291,9
+1301,7
@@
class Linker {
if ( $target->getText() == '' && !$target->isExternal()
&& !$local && $title
) {
if ( $target->getText() == '' && !$target->isExternal()
&& !$local && $title
) {
- $newTarget = clone $title;
- $newTarget->setFragment( '#' . $target->getFragment() );
- $target = $newTarget;
+ $target = $title->createFragmentTarget( $target->getFragment() );
}
$thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
}
$thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
@@
-1321,7
+1329,7
@@
class Linker {
*
* @note This is only public for technical reasons. It's not intended for use outside Linker.
*
*
* @note This is only public for technical reasons. It's not intended for use outside Linker.
*
- * @param
Title $title
+ * @param
LinkTarget $linkTarget
* @param string $text
* @param string|null $wikiId Id of the wiki to link to (if not the local wiki),
* as used by WikiMap.
* @param string $text
* @param string|null $wikiId Id of the wiki to link to (if not the local wiki),
* as used by WikiMap.
@@
-1330,23
+1338,23
@@
class Linker {
* @return string HTML link
*/
public static function makeCommentLink(
* @return string HTML link
*/
public static function makeCommentLink(
-
Title $title
, $text, $wikiId = null, $options = []
+
LinkTarget $linkTarget
, $text, $wikiId = null, $options = []
) {
) {
- if ( $wikiId !== null && !$
title
->isExternal() ) {
+ if ( $wikiId !== null && !$
linkTarget
->isExternal() ) {
$link = self::makeExternalLink(
WikiMap::getForeignURL(
$wikiId,
$link = self::makeExternalLink(
WikiMap::getForeignURL(
$wikiId,
- $
title
->getNamespace() === 0
- ? $
title
->getDBkey()
- : MWNamespace::getCanonicalName( $
title
->getNamespace() ) . ':'
- . $
title
->getDBkey(),
- $
title
->getFragment()
+ $
linkTarget
->getNamespace() === 0
+ ? $
linkTarget
->getDBkey()
+ : MWNamespace::getCanonicalName( $
linkTarget
->getNamespace() ) . ':'
+ . $
linkTarget
->getDBkey(),
+ $
linkTarget
->getFragment()
),
$text,
/* escape = */ false // Already escaped
);
} else {
),
$text,
/* escape = */ false // Already escaped
);
} else {
- $link = self::link( $
title
, $text, [], [], $options );
+ $link = self::link( $
linkTarget
, $text, [], [], $options );
}
return $link;
}
return $link;
@@
-1575,7
+1583,12
@@
class Linker {
$title = wfMessage( 'toc' )->inLanguage( $lang )->escaped();
return '<div id="toc" class="toc">'
$title = wfMessage( 'toc' )->inLanguage( $lang )->escaped();
return '<div id="toc" class="toc">'
- . '<div class="toctitle"><h2>' . $title . "</h2></div>\n"
+ . Html::openElement( 'div', [
+ 'class' => 'toctitle',
+ 'lang' => $lang->getHtmlCode(),
+ 'dir' => $lang->getDir(),
+ ] )
+ . '<h2>' . $title . "</h2></div>\n"
. $toc
. "</ul>\n</div>\n";
}
. $toc
. "</ul>\n</div>\n";
}
@@
-1739,9
+1752,10
@@
class Linker {
$dbr = wfGetDB( DB_REPLICA );
// Up to the value of $wgShowRollbackEditCount revisions are counted
$dbr = wfGetDB( DB_REPLICA );
// Up to the value of $wgShowRollbackEditCount revisions are counted
+ $revQuery = Revision::getQueryInfo();
$res = $dbr->select(
$res = $dbr->select(
-
'revision'
,
- [ 'rev_user_text', 'rev_deleted' ],
+
$revQuery['tables']
,
+ [ 'rev_user_text'
=> $revQuery['fields']['rev_user_text']
, 'rev_deleted' ],
// $rev->getPage() returns null sometimes
[ 'rev_page' => $rev->getTitle()->getArticleID() ],
__METHOD__,
// $rev->getPage() returns null sometimes
[ 'rev_page' => $rev->getTitle()->getArticleID() ],
__METHOD__,
@@
-1749,7
+1763,8
@@
class Linker {
'USE INDEX' => [ 'revision' => 'page_timestamp' ],
'ORDER BY' => 'rev_timestamp DESC',
'LIMIT' => $wgShowRollbackEditCount + 1
'USE INDEX' => [ 'revision' => 'page_timestamp' ],
'ORDER BY' => 'rev_timestamp DESC',
'LIMIT' => $wgShowRollbackEditCount + 1
- ]
+ ],
+ $revQuery['joins']
);
$editCount = 0;
);
$editCount = 0;
@@
-1943,8
+1958,9
@@
class Linker {
*
* @since 1.16.3 $msgParams added in 1.27
* @param string $name Id of the element, minus prefixes.
*
* @since 1.16.3 $msgParams added in 1.27
* @param string $name Id of the element, minus prefixes.
- * @param string|null $options Null or the string 'withaccess' to add an access-
- * key hint
+ * @param string|array|null $options Null, string or array with some of the following options:
+ * - 'withaccess' to add an access-key hint
+ * - 'nonexisting' to add an accessibility hint that page does not exist
* @param array $msgParams Parameters to pass to the message
*
* @return string Contents of the title attribute (which you must HTML-
* @param array $msgParams Parameters to pass to the message
*
* @return string Contents of the title attribute (which you must HTML-
@@
-1964,7
+1980,12
@@
class Linker {
}
}
}
}
- if ( $options == 'withaccess' ) {
+ $options = (array)$options;
+
+ if ( in_array( 'nonexisting', $options ) ) {
+ $tooltip = wfMessage( 'red-link-title', $tooltip ?: '' )->text();
+ }
+ if ( in_array( 'withaccess', $options ) ) {
$accesskey = self::accesskey( $name );
if ( $accesskey !== false ) {
// Should be build the same as in jquery.accessKeyLabel.js
$accesskey = self::accesskey( $name );
if ( $accesskey !== false ) {
// Should be build the same as in jquery.accessKeyLabel.js
@@
-2099,20
+2120,28
@@
class Linker {
return Xml::tags( 'span', [ 'class' => 'mw-revdelundel-link' ], $htmlParentheses );
}
return Xml::tags( 'span', [ 'class' => 'mw-revdelundel-link' ], $htmlParentheses );
}
- /* Deprecated methods */
-
/**
* Returns the attributes for the tooltip and access key.
*
* @since 1.16.3. $msgParams introduced in 1.27
* @param string $name
* @param array $msgParams Params for constructing the message
/**
* Returns the attributes for the tooltip and access key.
*
* @since 1.16.3. $msgParams introduced in 1.27
* @param string $name
* @param array $msgParams Params for constructing the message
+ * @param string|array|null $options Options to be passed to titleAttrib.
+ *
+ * @see Linker::titleAttrib for what options could be passed to $options.
*
* @return array
*/
*
* @return array
*/
- public static function tooltipAndAccesskeyAttribs( $name, array $msgParams = [] ) {
+ public static function tooltipAndAccesskeyAttribs(
+ $name,
+ array $msgParams = [],
+ $options = null
+ ) {
+ $options = (array)$options;
+ $options[] = 'withaccess';
+
$attribs = [
$attribs = [
- 'title' => self::titleAttrib( $name,
'withaccess'
, $msgParams ),
+ 'title' => self::titleAttrib( $name,
$options
, $msgParams ),
'accesskey' => self::accesskey( $name )
];
if ( $attribs['title'] === false ) {
'accesskey' => self::accesskey( $name )
];
if ( $attribs['title'] === false ) {